mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-05-03 17:33:31 -04:00
Merge branch 'master' into production
This commit is contained in:
commit
a4c12a32a4
24 changed files with 411 additions and 322 deletions
Binary file not shown.
Before ![]() (image error) Size: 18 KiB After ![]() (image error) Size: 4.2 KiB ![]() ![]() |
|
@ -132,7 +132,7 @@ window.serializeForIOS = serializeForIOS = (obj, depth=3) ->
|
||||||
clone = {}
|
clone = {}
|
||||||
keysHandled = 0
|
keysHandled = 0
|
||||||
for own key, value of obj
|
for own key, value of obj
|
||||||
continue if ++keysHandled > 20
|
continue if ++keysHandled > 50
|
||||||
if not value
|
if not value
|
||||||
clone[key] = value
|
clone[key] = value
|
||||||
else if value is window or value.firstElementChild or value.preventDefault
|
else if value is window or value.firstElementChild or value.preventDefault
|
||||||
|
|
|
@ -10,6 +10,7 @@ module.exports = class CountdownScreen extends CocoClass
|
||||||
options ?= {}
|
options ?= {}
|
||||||
@camera = options.camera
|
@camera = options.camera
|
||||||
@layer = options.layer
|
@layer = options.layer
|
||||||
|
@showsCountdown = options.showsCountdown
|
||||||
console.error @toString(), 'needs a camera.' unless @camera
|
console.error @toString(), 'needs a camera.' unless @camera
|
||||||
console.error @toString(), 'needs a layer.' unless @layer
|
console.error @toString(), 'needs a layer.' unless @layer
|
||||||
@build()
|
@build()
|
||||||
|
@ -44,14 +45,17 @@ module.exports = class CountdownScreen extends CocoClass
|
||||||
|
|
||||||
show: ->
|
show: ->
|
||||||
return if @showing
|
return if @showing
|
||||||
@showing = true
|
|
||||||
@dimLayer.alpha = 0
|
|
||||||
createjs.Tween.removeTweens @dimLayer
|
createjs.Tween.removeTweens @dimLayer
|
||||||
createjs.Tween.get(@dimLayer).to({alpha: 1}, 500)
|
if @showsCountdown
|
||||||
@secondsRemaining = 3
|
@dimLayer.alpha = 0
|
||||||
@countdownInterval = setInterval @decrementCountdown, 1000
|
@showing = true
|
||||||
@updateText()
|
createjs.Tween.get(@dimLayer).to({alpha: 1}, 500)
|
||||||
@layer.addChild @dimLayer
|
@secondsRemaining = 3
|
||||||
|
@countdownInterval = setInterval @decrementCountdown, 1000
|
||||||
|
@updateText()
|
||||||
|
@layer.addChild @dimLayer
|
||||||
|
else
|
||||||
|
@endCountdown()
|
||||||
|
|
||||||
hide: ->
|
hide: ->
|
||||||
return unless @showing
|
return unless @showing
|
||||||
|
|
|
@ -114,7 +114,7 @@ module.exports = Surface = class Surface extends CocoClass
|
||||||
@screenLayer.addChild new Letterbox canvasWidth: canvasWidth, canvasHeight: canvasHeight
|
@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
|
@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
|
@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.
|
@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
|
@waitingScreen = new WaitingScreen camera: @camera, layer: @screenLayer
|
||||||
|
|
|
@ -323,6 +323,7 @@ module.exports.thangNames = thangNames =
|
||||||
'Letholdus'
|
'Letholdus'
|
||||||
]
|
]
|
||||||
'Potion Master': [
|
'Potion Master': [
|
||||||
|
'Omar'
|
||||||
'Snake'
|
'Snake'
|
||||||
'Amaranth'
|
'Amaranth'
|
||||||
'Zander'
|
'Zander'
|
||||||
|
@ -379,3 +380,12 @@ module.exports.thangNames = thangNames =
|
||||||
'Helena'
|
'Helena'
|
||||||
'Philips'
|
'Philips'
|
||||||
]
|
]
|
||||||
|
'Ninja': [
|
||||||
|
'Amara'
|
||||||
|
]
|
||||||
|
'Sorcerer': [
|
||||||
|
'Pender'
|
||||||
|
]
|
||||||
|
'Samurai': [
|
||||||
|
'Hattori'
|
||||||
|
]
|
||||||
|
|
|
@ -17,6 +17,7 @@ REAL_TIME_BUFFER_MAX = 3 * PROGRESS_UPDATE_INTERVAL
|
||||||
REAL_TIME_BUFFERED_WAIT_INTERVAL = 0.5 * PROGRESS_UPDATE_INTERVAL
|
REAL_TIME_BUFFERED_WAIT_INTERVAL = 0.5 * PROGRESS_UPDATE_INTERVAL
|
||||||
REAL_TIME_COUNTDOWN_DELAY = 3000 # match CountdownScreen
|
REAL_TIME_COUNTDOWN_DELAY = 3000 # match CountdownScreen
|
||||||
ITEM_ORIGINAL = '53e12043b82921000051cdf9'
|
ITEM_ORIGINAL = '53e12043b82921000051cdf9'
|
||||||
|
COUNTDOWN_LEVELS = ['sky-span', 'dueling-grounds', 'cavern-survival'] # TODO: determine flag usage dynamically
|
||||||
|
|
||||||
module.exports = class World
|
module.exports = class World
|
||||||
@className: 'World'
|
@className: 'World'
|
||||||
|
@ -104,7 +105,10 @@ module.exports = class World
|
||||||
@realTimeSpeedFactor = 3
|
@realTimeSpeedFactor = 3
|
||||||
else
|
else
|
||||||
@realTimeSpeedFactor = 1
|
@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()
|
t1 = now()
|
||||||
@t0 ?= t1
|
@t0 ?= t1
|
||||||
@worldLoadStartTime ?= t1
|
@worldLoadStartTime ?= t1
|
||||||
|
@ -199,6 +203,7 @@ module.exports = class World
|
||||||
|
|
||||||
loadFromLevel: (level, willSimulate=true) ->
|
loadFromLevel: (level, willSimulate=true) ->
|
||||||
@levelID = level.slug
|
@levelID = level.slug
|
||||||
|
@showsCountdown = @levelID in COUNTDOWN_LEVELS
|
||||||
@levelComponents = level.levelComponents
|
@levelComponents = level.levelComponents
|
||||||
@thangTypes = level.thangTypes
|
@thangTypes = level.thangTypes
|
||||||
@loadScriptsFromLevel level
|
@loadScriptsFromLevel level
|
||||||
|
|
|
@ -241,7 +241,7 @@
|
||||||
infinite_loop_comment_out: "Comment Out My Code"
|
infinite_loop_comment_out: "Comment Out My Code"
|
||||||
tip_toggle_play: "Toggle play/paused with Ctrl+P."
|
tip_toggle_play: "Toggle play/paused with Ctrl+P."
|
||||||
tip_scrub_shortcut: "Ctrl+[ and Ctrl+] rewind and fast-forward."
|
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_open_source: "CodeCombat is 100% open source!"
|
||||||
tip_beta_launch: "CodeCombat launched its beta in October, 2013."
|
tip_beta_launch: "CodeCombat launched its beta in October, 2013."
|
||||||
tip_think_solution: "Think of the solution, not the problem."
|
tip_think_solution: "Think of the solution, not the problem."
|
||||||
|
|
|
@ -48,25 +48,25 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
||||||
play:
|
play:
|
||||||
play_as: "Jouer comme " # Ladder page
|
play_as: "Jouer comme " # Ladder page
|
||||||
spectate: "Spectateur" # Ladder page
|
spectate: "Spectateur" # Ladder page
|
||||||
# players: "players" # Hover over a level on /play
|
players: "joueurs" # Hover over a level on /play
|
||||||
# hours_played: "hours played" # Hover over a level on /play
|
hours_played: "heures jouées" # Hover over a level on /play
|
||||||
# items: "Items" # Tooltip on item shop button from /play
|
items: "Objets" # Tooltip on item shop button from /play
|
||||||
# heroes: "Heroes" # Tooltip on hero shop button from /play
|
heroes: "Héros" # Tooltip on hero shop button from /play
|
||||||
# achievements: "Achievements" # Tooltip on achievement list button from /play
|
achievements: "Succès" # Tooltip on achievement list button from /play
|
||||||
# account: "Account" # Tooltip on account button from /play
|
account: "Compte" # Tooltip on account button from /play
|
||||||
# settings: "Settings" # Tooltip on settings button from /play
|
settings: "Réglages" # Tooltip on settings button from /play
|
||||||
# next: "Next" # Go from choose hero to choose inventory before playing a level
|
next: "Suivant" # Go from choose hero to choose inventory before playing a level
|
||||||
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
|
change_hero: "Changer le Héro" # Go back from choose inventory to choose hero
|
||||||
# choose_inventory: "Equip Items"
|
choose_inventory: "Équiper des objets"
|
||||||
# older_campaigns: "Older Campaigns"
|
older_campaigns: "Anciennes Campagnes"
|
||||||
# anonymous: "Anonymous Player"
|
anonymous: "Joueur anonyme"
|
||||||
level_difficulty: "Difficulté: "
|
level_difficulty: "Difficulté: "
|
||||||
campaign_beginner: "Campagne du Débutant"
|
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.
|
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_prefix: "Vous pouvez passer à n'importe quel niveau ci-dessous, ou discuter des niveaux sur "
|
||||||
adventurer_forum: "le forum de l'Aventurier"
|
adventurer_forum: "le forum de l'Aventurier"
|
||||||
adventurer_suffix: "."
|
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_old_beginner_description: "... dans laquelle vous apprendrez la magie de la programmation."
|
||||||
campaign_dev: "Niveaux aléatoires plus difficiles"
|
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."
|
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_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: "Niveaux créés par les joueurs"
|
||||||
campaign_player_created_description: "... Dans laquelle vous serez confrontés à la créativité des votres.<a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
campaign_player_created_description: "... Dans laquelle vous serez confrontés à la créativité des votres.<a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
# campaign_classic_algorithms: "Classic Algorithms"
|
campaign_classic_algorithms: "Algorithmes classiques"
|
||||||
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
|
campaign_classic_algorithms_description: "... dans lesquels vous apprendrez les algorithmes les plus populaires dans l'informatique."
|
||||||
|
|
||||||
login:
|
login:
|
||||||
sign_up: "Créer un compte"
|
sign_up: "Créer un compte"
|
||||||
|
@ -99,14 +99,14 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
||||||
recover:
|
recover:
|
||||||
recover_account_title: "Récupérer son compte"
|
recover_account_title: "Récupérer son compte"
|
||||||
send_password: "Envoyer le mot de passe de récupération"
|
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:
|
items:
|
||||||
# armor: "Armor"
|
armor: "Armure"
|
||||||
# hands: "Hands"
|
hands: "Mains"
|
||||||
# accessories: "Accessories"
|
accessories: "Accessoires"
|
||||||
# minions: "Minions"
|
minions: "Sbires"
|
||||||
# misc: "Misc"
|
misc: "Divers"
|
||||||
|
|
||||||
common:
|
common:
|
||||||
loading: "Chargement..."
|
loading: "Chargement..."
|
||||||
|
@ -176,11 +176,11 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
||||||
done: "Fait"
|
done: "Fait"
|
||||||
home: "Accueil"
|
home: "Accueil"
|
||||||
skip: "Passer"
|
skip: "Passer"
|
||||||
# game_menu: "Game Menu"
|
game_menu: "Menu du jeu"
|
||||||
guide: "Guide"
|
guide: "Guide"
|
||||||
restart: "Relancer"
|
restart: "Relancer"
|
||||||
goals: "Objectifs"
|
goals: "Objectifs"
|
||||||
# goal: "Goal"
|
goal: "Objectif"
|
||||||
success: "Succès"
|
success: "Succès"
|
||||||
incomplete: "Imcoplet"
|
incomplete: "Imcoplet"
|
||||||
timed_out: "Plus de temps"
|
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: "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_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_rate_the_level: "Notez ce niveau: " # Only in old-style levels.
|
||||||
# victory_return_to_ladder: "Return to Ladder"
|
victory_return_to_ladder: "Retourner à l'échelle"
|
||||||
# victory_play_continue: "Continue"
|
victory_play_continue: "Continuer"
|
||||||
# victory_play_skip: "Skip Ahead"
|
victory_play_skip: "Passer"
|
||||||
victory_play_next_level: "Jouer au prochain niveau"
|
victory_play_next_level: "Jouer au prochain niveau"
|
||||||
# victory_play_more_practice: "More Practice"
|
victory_play_more_practice: "Plus de pratique"
|
||||||
# victory_play_too_easy: "Too Easy"
|
victory_play_too_easy: "Trop Facile"
|
||||||
# victory_play_just_right: "Just Right"
|
victory_play_just_right: "Juste"
|
||||||
# victory_play_too_hard: "Too Hard"
|
victory_play_too_hard: "Trop Dur"
|
||||||
# victory_saving_progress: "Saving Progress"
|
victory_saving_progress: "Sauvegarder la progression"
|
||||||
victory_go_home: "Retourner à l'accueil" # Only in old-style levels.
|
victory_go_home: "Retourner à l'accueil" # Only in old-style levels.
|
||||||
victory_review: "Dites-nous en plus!" # Only in old-style levels.
|
victory_review: "Dites-nous en plus!" # Only in old-style levels.
|
||||||
victory_hour_of_code_done: "Déjà fini ?"
|
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_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_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_cast: "Sort jeté" # Temporary, if tome_cast_button_ran isn't translated.
|
||||||
# tome_cast_button_run: "Run"
|
tome_cast_button_run: "Exécuter"
|
||||||
# tome_cast_button_running: "Running"
|
tome_cast_button_running: "En cours d'exécution"
|
||||||
# tome_cast_button_ran: "Ran"
|
tome_cast_button_ran: "Exécuté"
|
||||||
tome_submit_button: "Envoyer"
|
tome_submit_button: "Envoyer"
|
||||||
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
|
tome_reload_method: "Recharger le code original pour cette méthode" # Title text for individual method reload button.
|
||||||
# tome_select_method: "Select a Method"
|
tome_select_method: "Selectionner une méthode"
|
||||||
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
|
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_select_a_thang: "Sélectionnez une unité pour"
|
||||||
tome_available_spells: "Sorts diponibles"
|
tome_available_spells: "Sorts diponibles"
|
||||||
tome_your_skills: "Vos compétences"
|
tome_your_skills: "Vos compétences"
|
||||||
hud_continue: "Continuer (appuie sur shift ou espace)"
|
hud_continue: "Continuer (appuie sur shift ou espace)"
|
||||||
# code_saved: "Code Saved"
|
code_saved: "Code Sauvergardé"
|
||||||
skip_tutorial: "Passer (esc)"
|
skip_tutorial: "Passer (esc)"
|
||||||
keyboard_shortcuts: "Raccourcis Clavier"
|
keyboard_shortcuts: "Raccourcis Clavier"
|
||||||
loading_ready: "Pret!"
|
loading_ready: "Pret!"
|
||||||
# loading_start: "Start Level"
|
loading_start: "Démarrer le niveau"
|
||||||
time_current: "Maintenant:"
|
time_current: "Maintenant:"
|
||||||
time_total: "Max:"
|
time_total: "Max:"
|
||||||
time_goto: "Allez a:"
|
time_goto: "Allez a:"
|
||||||
infinite_loop_try_again: "Reessayer"
|
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"
|
infinite_loop_comment_out: "Supprimez les commentaire de mon code"
|
||||||
tip_toggle_play: "Jouer/Pause avec Ctrl+P."
|
tip_toggle_play: "Jouer/Pause avec Ctrl+P."
|
||||||
# tip_scrub_shortcut: "Ctrl+[ and Ctrl+] rewind and fast-forward."
|
tip_scrub_shortcut: "Ctrl+[ and Ctrl+] rembobinage et avance rapide."
|
||||||
# tip_guide_exists: "Click the guide at the top of the page for useful info."
|
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_open_source: "CodeCombat est 100% open source!"
|
||||||
tip_beta_launch: "La beta de CodeCombat a été lancée en Octobre 2013"
|
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_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_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_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_baby_coders: "Dans le futur, même les bébés seront des archimages."
|
||||||
# tip_morale_improves: "Loading will continue until morale improves."
|
tip_morale_improves: "Le chargement se poursuivra jusqu'à ce que la morale s'améliore."
|
||||||
# tip_all_species: "We believe in equal opportunities to learn programming for all species."
|
tip_all_species: "Nous croyons en l'égalité des chances d'apprendre la programmation pour toutes les espèces."
|
||||||
# tip_reticulating: "Reticulating spines."
|
# tip_reticulating: "Reticulating spines."
|
||||||
# tip_harry: "Yer a Wizard, "
|
# tip_harry: "Yer a Wizard, "
|
||||||
# tip_great_responsibility: "With great coding skill comes great debug responsibility."
|
tip_great_responsibility: "Avec de grandes compétences en programmation vient une grande responsabilité de débogage."
|
||||||
# tip_munchkin: "If you don't eat your vegetables, a munchkin will come after you while you're asleep."
|
tip_munchkin: "Si vous ne mangez pas vos légumes, un munchkin viendra après vous pendant que vous dormirez."
|
||||||
# tip_binary: "There are only 10 types of people in the world: those who understand binary, and those who don't."
|
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: "A programmer must have the deepest commitment, the most serious mind. ~ Yoda"
|
tip_commitment_yoda: "L'engagement le plus profond, l'esprit le plus grave un programmeur doit avoir. ~ Yoda"
|
||||||
# tip_no_try: "Do. Or do not. There is no try. - Yoda"
|
tip_no_try: "Faire. Ou ne pas faire. Il n'y a pas d'essai. - Yoda"
|
||||||
# tip_patience: "Patience you must have, young Padawan. - Yoda"
|
tip_patience: "Patience tu dois avoir, jeune Padawan. - Yoda"
|
||||||
# tip_documented_bug: "A documented bug is not a bug; it is a feature."
|
tip_documented_bug: "Un bug documenté n'est pas un bug; c'est une caractéristique"
|
||||||
# tip_impossible: "It always seems impossible until it's done. - Nelson Mandela"
|
tip_impossible: "Cela semble toujours impossible jusqu'à ce que l'on y arrive. - Nelson Mandela"
|
||||||
# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds"
|
tip_talk_is_cheap: "Discuter est facile. Montrez-moi le code. - Linus Torvalds"
|
||||||
# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay"
|
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: How many programmers does it take to change a light bulb? A: None, it's a hardware problem."
|
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_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_premature_optimization: "L'optimisation prématurée est la racine de tous les maux. - Donald Knuth"
|
||||||
# tip_brute_force: "When in doubt, use brute force. - Ken Thompson"
|
tip_brute_force: "En cas de doute, utiliser la force brute. - Ken Thompson"
|
||||||
customize_wizard: "Personnaliser le magicien"
|
customize_wizard: "Personnaliser le magicien"
|
||||||
|
|
||||||
game_menu:
|
game_menu:
|
||||||
inventory_tab: "Inventaire"
|
inventory_tab: "Inventaire"
|
||||||
# choose_hero_tab: "Restart Level"
|
choose_hero_tab: "Redémmarrer le niveau"
|
||||||
# save_load_tab: "Save/Load"
|
save_load_tab: "Sauvegarder/Charger"
|
||||||
# options_tab: "Options"
|
# options_tab: "Options"
|
||||||
# guide_tab: "Guide"
|
# guide_tab: "Guide"
|
||||||
multiplayer_tab: "Multijoueur"
|
multiplayer_tab: "Multijoueur"
|
||||||
# auth_tab: "Sign Up"
|
auth_tab: "S'inscrire"
|
||||||
# inventory_caption: "Equip your hero"
|
inventory_caption: "Équipez votre héro"
|
||||||
# choose_hero_caption: "Choose hero, language"
|
choose_hero_caption: "Choisissez votre héro, langage"
|
||||||
# save_load_caption: "... and view history"
|
save_load_caption: "... et voir l'historique"
|
||||||
# options_caption: "Configure settings"
|
options_caption: "Configurer les réglages"
|
||||||
# guide_caption: "Docs and tips"
|
guide_caption: "Docs and conseils"
|
||||||
# multiplayer_caption: "Play with friends!"
|
multiplayer_caption: "Jouer avec des amis!"
|
||||||
# auth_caption: "Save your progress."
|
auth_caption: "Sauvegarder votre progression."
|
||||||
|
|
||||||
# inventory:
|
inventory:
|
||||||
# choose_inventory: "Equip Items"
|
choose_inventory: "Équiper des Objets"
|
||||||
|
|
||||||
# choose_hero:
|
choose_hero:
|
||||||
# choose_hero: "Choose Your Hero"
|
choose_hero: "Choisissez votre Héro"
|
||||||
# programming_language: "Programming Language"
|
programming_language: "Langage de programmation"
|
||||||
# programming_language_description: "Which programming language do you want to use?"
|
programming_language_description: "Quel langage de programmation voullez-vous utiliser?"
|
||||||
# python_blurb: "Simple yet powerful, great for beginners and experts."
|
python_blurb: "Simple mais puissant, idéal pour les débutants et les experts."
|
||||||
# javascript_blurb: "The language of the web. (Not the same as Java.)"
|
javascript_blurb: "Le langage du web. (Pas le même que Java.)"
|
||||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
coffeescript_blurb: "Une syntaxe Javascript plus agréable."
|
||||||
# clojure_blurb: "A modern Lisp."
|
clojure_blurb: "Un Lisp moderne."
|
||||||
# lua_blurb: "Game scripting language."
|
lua_blurb: "Langage de script de jeu."
|
||||||
# io_blurb: "Simple but obscure."
|
io_blurb: "Simple mais obscure."
|
||||||
# status: "Status"
|
# status: "Status"
|
||||||
# weapons: "Weapons"
|
weapons: "Arme"
|
||||||
# attack: "Damage" # Can also translate as "Attack"
|
attack: "Dégât" # Can also translate as "Attack"
|
||||||
# health: "Health"
|
health: "Santé"
|
||||||
# speed: "Speed"
|
speed: "Vitesse"
|
||||||
# skills: "Skills"
|
skills: "Compétences"
|
||||||
|
|
||||||
# save_load:
|
save_load:
|
||||||
# granularity_saved_games: "Saved"
|
granularity_saved_games: "Sauvegardé"
|
||||||
# granularity_change_history: "History"
|
granularity_change_history: "Historique"
|
||||||
|
|
||||||
options:
|
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"
|
# volume_label: "Volume"
|
||||||
# music_label: "Music"
|
music_label: "Musique"
|
||||||
# music_description: "Turn background music on/off."
|
music_description: "Arrêter/Reprendre la musique de fond."
|
||||||
# autorun_label: "Autorun"
|
autorun_label: "Auto-exécution"
|
||||||
# autorun_description: "Control automatic code execution."
|
autorun_description: "Controler l'exécution automatique du code."
|
||||||
editor_config: "Config de l'éditeur"
|
editor_config: "Config de l'éditeur"
|
||||||
editor_config_title: "Configuration de l'éditeur"
|
editor_config_title: "Configuration de l'éditeur"
|
||||||
editor_config_level_language_label: "Langage pour le niveau"
|
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_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_default_language_description: "Choississez le langage de programmation que vous souhaitez dons les nouveaux niveaux"
|
||||||
editor_config_keybindings_label: "Raccourcis clavier"
|
editor_config_keybindings_label: "Raccourcis clavier"
|
||||||
editor_config_keybindings_default: "Par défault (Ace)"
|
editor_config_keybindings_default: "Par défault (Ace)"
|
||||||
editor_config_keybindings_description: "Ajouter de nouveaux raccourcis connus depuis l'éditeur commun."
|
editor_config_keybindings_description: "Ajouter de nouveaux raccourcis connus depuis l'éditeur commun."
|
||||||
# editor_config_livecompletion_label: "Live Autocompletion"
|
editor_config_livecompletion_label: "Saisie semi-automatique en direct"
|
||||||
# editor_config_livecompletion_description: "Displays autocomplete suggestions while typing."
|
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_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_invisibles_description: "Permet d'afficher les caractères comme les espaces et les tabulations."
|
||||||
editor_config_indentguides_label: "Montrer les indentations"
|
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_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_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."
|
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_title: "Bloggueurs/Presse"
|
||||||
# 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_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: "press packet"
|
press_paragraph_1_link: "paquet de presse"
|
||||||
# press_paragraph_1_suffix: ". All logos and images may be used without contacting us directly."
|
press_paragraph_1_suffix: ". Tous les logos et images peuvent être utilisées sans nous contacter directement."
|
||||||
# team: "Team"
|
team: "Équipe"
|
||||||
# george_title: "CEO"
|
george_title: "PDG"
|
||||||
# george_blurb: "Businesser"
|
george_blurb: "Homme d'affaires"
|
||||||
# scott_title: "Programmer"
|
scott_title: "Programmeur"
|
||||||
# scott_blurb: "Reasonable One"
|
scott_blurb: "Raisonable"
|
||||||
# nick_title: "Programmer"
|
nick_title: "Programmeur"
|
||||||
# nick_blurb: "Motivation Guru"
|
nick_blurb: "Gourou de Motivation"
|
||||||
# michael_title: "Programmer"
|
michael_title: "Programmeur"
|
||||||
# michael_blurb: "Sys Admin"
|
michael_blurb: "Sys Admin"
|
||||||
# matt_title: "Programmer"
|
matt_title: "Programmeur"
|
||||||
# matt_blurb: "Bicyclist"
|
matt_blurb: "Bicycliste"
|
||||||
|
|
||||||
versions:
|
versions:
|
||||||
save_version_title: "Enregistrer une nouvelle version"
|
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: "Nouveau mot de passe"
|
||||||
new_password_verify: "Vérifier"
|
new_password_verify: "Vérifier"
|
||||||
email_subscriptions: "Abonnements"
|
email_subscriptions: "Abonnements"
|
||||||
# email_subscriptions_none: "No Email Subscriptions."
|
email_subscriptions_none: "Aucun email d'abonnement."
|
||||||
email_announcements: "Annonces"
|
email_announcements: "Annonces"
|
||||||
email_announcements_description: "Recevoir des mails sur les dernières actualités et sur le développement de CodeCombat."
|
email_announcements_description: "Recevoir des mails sur les dernières actualités et sur le développement de CodeCombat."
|
||||||
email_notifications: "Notifications"
|
email_notifications: "Notifications"
|
||||||
email_notifications_summary: "Commandes pour personaliser les notifications automatiques d'email liées à votre activité sur CodeCombat."
|
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: "Toutes Notifications"
|
||||||
email_any_notes_description: "Désactivez pour ne plus recevoir de notifications par e-mail."
|
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: "Offres d'emploi"
|
||||||
email_recruit_notes_description: "Si vous jouez vraiment bien, nous pouvons vous contacter pour vous proposer un (meilleur) 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"
|
contributor_emails: "Emails des contributeurs"
|
||||||
|
@ -410,7 +410,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
||||||
error_saving: "Problème d'enregistrement"
|
error_saving: "Problème d'enregistrement"
|
||||||
saved: "Changements sauvegardés"
|
saved: "Changements sauvegardés"
|
||||||
password_mismatch: "Le mot de passe ne correspond pas."
|
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: "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_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."
|
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"
|
enter: "Entrer"
|
||||||
escape: "Echap"
|
escape: "Echap"
|
||||||
# shift: "Shift"
|
# shift: "Shift"
|
||||||
# cast_spell: "Cast current spell."
|
cast_spell: "Jeter le sort actuel."
|
||||||
# run_real_time: "Run in real time."
|
run_real_time: "Exécuter en temps réel."
|
||||||
# continue_script: "Continue past current script."
|
continue_script: "Continuer le script passé courant."
|
||||||
# skip_scripts: "Skip past all skippable scripts."
|
# 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."
|
# scrub_playback: "Scrub back and forward through time."
|
||||||
# single_scrub_playback: "Scrub back and forward through time by a single frame."
|
# single_scrub_playback: "Scrub back and forward through time by a single frame."
|
||||||
# scrub_execution: "Scrub through current spell execution."
|
# scrub_execution: "Scrub through current spell execution."
|
||||||
# toggle_debug: "Toggle debug display."
|
# toggle_debug: "Toggle debug display."
|
||||||
# toggle_grid: "Toggle grid overlay."
|
# toggle_grid: "Toggle grid overlay"
|
||||||
# toggle_pathfinding: "Toggle pathfinding overlay."
|
# toggle_pathfinding: "Toggle pathfinding overlay."
|
||||||
# beautify: "Beautify your code by standardizing its formatting."
|
beautify: "Embellissez votre code en normalisant sa mise en forme."
|
||||||
# maximize_editor: "Maximize/minimize code editor."
|
maximize_editor: "Maximiser/minimiser l'éditeur de code."
|
||||||
# move_wizard: "Move your Wizard around the level."
|
move_wizard: "Déplacer votre Magicien à travers le niveau."
|
||||||
|
|
||||||
community:
|
community:
|
||||||
main_title: "Communauté CodeCombat"
|
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!"
|
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: "Use the CodeCombat"
|
level_editor_prefix: "Utiliser le 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!"
|
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: "We call units within the game 'thangs'. Use the"
|
thang_editor_prefix: "Nous appelons les unités dans le jeu 'thangs'. Utilisez le"
|
||||||
# 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."
|
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_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."
|
# article_editor_suffix: "and help CodeCombat players get the most out of their playtime."
|
||||||
# find_us: "Find us on these sites"
|
find_us: "Trouvez nous sur ces sites"
|
||||||
# social_blog: "Read the CodeCombat blog on Sett"
|
social_blog: "Lire le blog CodeCombat sur Sett"
|
||||||
# social_discource: "Join the discussion on our Discourse forum"
|
social_discource: "Participez à la discussion sur notre forum Discourse"
|
||||||
# social_facebook: "Like CodeCombat on Facebook"
|
social_facebook: "Aimer CodeCombat sur Facebook"
|
||||||
# social_twitter: "Follow CodeCombat on Twitter"
|
social_twitter: "Suivre CodeCombat sur Twitter"
|
||||||
# social_gplus: "Join CodeCombat on Google+"
|
social_gplus: "Rejoindre CodeCombat sur Google+"
|
||||||
# social_hipchat: "Chat with us in the public CodeCombat HipChat room"
|
social_hipchat: "Chattez avec nous dans la salle HipChat publique CodeCombat"
|
||||||
# contribute_to_the_project: "Contribute to the project"
|
contribute_to_the_project: "Contribuer au project"
|
||||||
|
|
||||||
classes:
|
classes:
|
||||||
archmage_title: "Archimage"
|
archmage_title: "Archimage"
|
||||||
|
@ -477,16 +477,16 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
||||||
article_title: "Éditeur d'article"
|
article_title: "Éditeur d'article"
|
||||||
thang_title: "Éditeur Thang"
|
thang_title: "Éditeur Thang"
|
||||||
level_title: "Éditeur de niveau"
|
level_title: "Éditeur de niveau"
|
||||||
# achievement_title: "Achievement Editor"
|
achievement_title: "Éditeur de succès"
|
||||||
back: "Retour"
|
back: "Retour"
|
||||||
revert: "Annuler"
|
revert: "Annuler"
|
||||||
revert_models: "Annuler les modèles"
|
revert_models: "Annuler les modèles"
|
||||||
# pick_a_terrain: "Pick A Terrain"
|
pick_a_terrain: "Choisir un terrain"
|
||||||
small: "Petit"
|
small: "Petit"
|
||||||
# grassy: "Grassy"
|
grassy: "Herbeux"
|
||||||
fork_title: "Fork une nouvelle version"
|
fork_title: "Fork une nouvelle version"
|
||||||
fork_creating: "Créer un Fork..."
|
fork_creating: "Créer un Fork..."
|
||||||
# generate_terrain: "Generate Terrain"
|
generate_terrain: "Générer le terrain"
|
||||||
more: "Plus"
|
more: "Plus"
|
||||||
wiki: "Wiki"
|
wiki: "Wiki"
|
||||||
live_chat: "Chat en live"
|
live_chat: "Chat en live"
|
||||||
|
@ -503,7 +503,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
||||||
level_tab_thangs_add: "ajouter des Thangs"
|
level_tab_thangs_add: "ajouter des Thangs"
|
||||||
delete: "Supprimer"
|
delete: "Supprimer"
|
||||||
duplicate: "Dupliquer"
|
duplicate: "Dupliquer"
|
||||||
# rotate: "Rotate"
|
rotate: "Pivoter"
|
||||||
level_settings_title: "Paramètres"
|
level_settings_title: "Paramètres"
|
||||||
level_component_tab_title: "Composants actuels"
|
level_component_tab_title: "Composants actuels"
|
||||||
level_component_btn_new: "Créer un nouveau composant"
|
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_article_title_login: "Connectez vous pour créer un nouvel article"
|
||||||
# new_thang_title_login: "Log In to Create a New Thang Type"
|
# 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_level_title_login: "Connectez vous pour créer un nouveau niveau"
|
||||||
# new_achievement_title: "Create a New Achievement"
|
new_achievement_title: "Créer un nouveau succès"
|
||||||
# new_achievement_title_login: "Log In to Create a New Achievement"
|
new_achievement_title_login: "Connectez vous pour créer un nouveau succès"
|
||||||
article_search_title: "Rechercher dans les articles"
|
article_search_title: "Rechercher dans les articles"
|
||||||
thang_search_title: "Rechercher dans les types Thang"
|
thang_search_title: "Rechercher dans les types Thang"
|
||||||
level_search_title: "Rechercher dans les niveaux"
|
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é."
|
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_misc: "Key achievement off of miscellanea"
|
||||||
# achievement_query_goals: "Key achievement off of level goals"
|
# achievement_query_goals: "Key achievement off of level goals"
|
||||||
# level_completion: "Level Completion"
|
# 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"
|
introduction_desc_signature: "- Nick, George, Scott, Michael, Jeremy et Matt"
|
||||||
alert_account_message_intro: "Et tiens!"
|
alert_account_message_intro: "Et tiens!"
|
||||||
alert_account_message: "Pour souscrire aux e-mails, vous devez être connecté"
|
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."
|
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"
|
class_attributes: "Attributs de classe"
|
||||||
archmage_attribute_1_pref: "Connaissance en "
|
archmage_attribute_1_pref: "Connaissance en "
|
||||||
|
@ -567,7 +567,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
||||||
join_url_hipchat: "conversation publique HipChat"
|
join_url_hipchat: "conversation publique HipChat"
|
||||||
more_about_archmage: "En apprendre plus sur devenir un puissant archimage"
|
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."
|
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_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_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."
|
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."
|
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"
|
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."
|
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_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 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_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_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_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"
|
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!"
|
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"
|
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."
|
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_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: " has built. If you enjoy explaining programming concepts, then this class is for you."
|
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_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_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."
|
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,7 +600,7 @@ 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à!"
|
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"
|
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."
|
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_introduction_pref: "Si nous avons appris quelque chose du "
|
||||||
diplomat_launch_url: "lancement en octobre"
|
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_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."
|
||||||
|
@ -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_pre: "Pas de match classé pour l'équipe "
|
||||||
no_ranked_matches_post: "! Affronte d'autres compétiteurs et reviens ici pour classer ta partie."
|
no_ranked_matches_post: "! Affronte d'autres compétiteurs et reviens ici pour classer ta partie."
|
||||||
choose_opponent: "Choisir un Adversaire"
|
choose_opponent: "Choisir un Adversaire"
|
||||||
# select_your_language: "Select your language!"
|
select_your_language: "Selectionnez votre langage!"
|
||||||
tutorial_play: "Jouer au Tutoriel"
|
tutorial_play: "Jouer au Tutoriel"
|
||||||
tutorial_recommended: "Recommendé si tu n'as jamais joué avant"
|
tutorial_recommended: "Recommendé si tu n'as jamais joué avant"
|
||||||
tutorial_skip: "Passer le Tutoriel"
|
tutorial_skip: "Passer le Tutoriel"
|
||||||
tutorial_not_sure: "Pas sûr de ce qu'il se passe?"
|
tutorial_not_sure: "Pas sûr de ce qu'il se passe?"
|
||||||
tutorial_play_first: "Jouer au Tutoriel d'abord."
|
tutorial_play_first: "Jouer au Tutoriel d'abord."
|
||||||
simple_ai: "IA simple"
|
simple_ai: "IA simple"
|
||||||
warmup: "Préchauffe"
|
warmup: "Échauffement"
|
||||||
# friends_playing: "Friends Playing"
|
friends_playing: "Amis en train de jouer"
|
||||||
log_in_for_friends: "Connectez vous pour jouer avec vos amis!"
|
log_in_for_friends: "Connectez vous pour jouer avec vos amis!"
|
||||||
social_connect_blurb: "Connectez vous pour jouer contre 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 !"
|
fight: "Combattez !"
|
||||||
watch_victory: "Regardez votre victoire"
|
watch_victory: "Regardez votre victoire"
|
||||||
# defeat_the: "Defeat the"
|
defeat_the: "Vaincre le"
|
||||||
tournament_ends: "Fin du tournoi"
|
tournament_ends: "Fin du tournoi"
|
||||||
# tournament_ended: "Tournament ended"
|
tournament_ended: "Tournoi terminé"
|
||||||
tournament_rules: "Règles du tournoi"
|
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: "É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: "Win bids, construct paths, outwit opponents, grab gems, and upgrade your career in our Criss-Cross tournament! Check out the details"
|
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"
|
tournament_blurb_blog: "Sur notre blog"
|
||||||
rules: "Règles"
|
rules: "Règles"
|
||||||
winners: "Gagnants"
|
winners: "Gagnants"
|
||||||
|
|
||||||
# user:
|
# user:
|
||||||
# stats: "Stats"
|
# stats: "Stats"
|
||||||
# singleplayer_title: "Singleplayer Levels"
|
singleplayer_title: "Niveaux solo"
|
||||||
# multiplayer_title: "Multiplayer Levels"
|
multiplayer_title: "Niveaux multijoueurs"
|
||||||
# achievements_title: "Achievements"
|
achievements_title: "Succès"
|
||||||
# last_played: "Last Played"
|
last_played: "Dernièrement joué"
|
||||||
# status: "Status"
|
# status: "Status"
|
||||||
# status_completed: "Completed"
|
status_completed: "Terminé"
|
||||||
# status_unfinished: "Unfinished"
|
status_unfinished: "Non terminé"
|
||||||
# no_singleplayer: "No Singleplayer games played yet."
|
no_singleplayer: "Aucunes parties solo encore jouées."
|
||||||
# no_multiplayer: "No Multiplayer games played yet."
|
no_multiplayer: "Aucunes parties multijoueurs encore jouées."
|
||||||
# no_achievements: "No Achievements earned yet."
|
no_achievements: "Aucuns succès encore remportés."
|
||||||
# favorite_prefix: "Favorite language is "
|
favorite_prefix: "Langage favori : "
|
||||||
# favorite_postfix: "."
|
# favorite_postfix: "."
|
||||||
|
|
||||||
# achievements:
|
achievements:
|
||||||
# last_earned: "Last Earned"
|
last_earned: "Dernièrement gagné"
|
||||||
# amount_achieved: "Amount"
|
amount_achieved: "Quantité"
|
||||||
# achievement: "Achievement"
|
achievement: "Succès"
|
||||||
# category_contributor: "Contributor"
|
category_contributor: "Contributeur"
|
||||||
# category_miscellaneous: "Miscellaneous"
|
category_miscellaneous: "Divers"
|
||||||
# category_levels: "Levels"
|
category_levels: "Niveaux"
|
||||||
# category_undefined: "Uncategorized"
|
category_undefined: "Non classé"
|
||||||
# current_xp_prefix: ""
|
# current_xp_prefix: ""
|
||||||
# current_xp_postfix: " in total"
|
current_xp_postfix: " au total"
|
||||||
# new_xp_prefix: ""
|
# new_xp_prefix: ""
|
||||||
# new_xp_postfix: " earned"
|
new_xp_postfix: " gagné"
|
||||||
# left_xp_prefix: ""
|
# left_xp_prefix: ""
|
||||||
# left_xp_infix: " until level "
|
left_xp_infix: " jusqu'au niveau "
|
||||||
# left_xp_postfix: ""
|
# left_xp_postfix: ""
|
||||||
|
|
||||||
# account:
|
# account:
|
||||||
# recently_played: "Recently Played"
|
recently_played: "Joué récemment"
|
||||||
# no_recent_games: "No games played during the past two weeks."
|
no_recent_games: "Aucuns jeux joués au cours des deux dernières semaines."
|
||||||
|
|
||||||
loading_error:
|
loading_error:
|
||||||
could_not_load: "Erreur de chargement du serveur"
|
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_friends: "G+ Friends"
|
||||||
# gplus_friend_sessions: "G+ Friend Sessions"
|
# gplus_friend_sessions: "G+ Friend Sessions"
|
||||||
leaderboard: "Classement"
|
leaderboard: "Classement"
|
||||||
# user_schema: "User Schema"
|
user_schema: "Schéma d'utilisateur"
|
||||||
# user_profile: "User Profile"
|
user_profile: "Profile d'utilisateur"
|
||||||
patches: "Patchs"
|
patches: "Patchs"
|
||||||
# patched_model: "Source Document"
|
patched_model: "Document Source"
|
||||||
# model: "Model"
|
# model: "Model"
|
||||||
system: "Système"
|
system: "Système"
|
||||||
systems: "Systèmes"
|
systems: "Systèmes"
|
||||||
|
@ -750,8 +750,8 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
||||||
components: "Composants"
|
components: "Composants"
|
||||||
# thang: "Thang"
|
# thang: "Thang"
|
||||||
# thangs: "Thangs"
|
# thangs: "Thangs"
|
||||||
# level_session: "Your Session"
|
level_session: "Votre Session"
|
||||||
# opponent_session: "Opponent Session"
|
opponent_session: "Session de l'adversaire"
|
||||||
article: "Article"
|
article: "Article"
|
||||||
user_names: "Nom d'utilisateur"
|
user_names: "Nom d'utilisateur"
|
||||||
# thang_names: "Thang Names"
|
# thang_names: "Thang Names"
|
||||||
|
@ -760,7 +760,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
||||||
source_document: "Document Source"
|
source_document: "Document Source"
|
||||||
document: "Document"
|
document: "Document"
|
||||||
# sprite_sheet: "Sprite Sheet"
|
# sprite_sheet: "Sprite Sheet"
|
||||||
# employers: "Employers"
|
employers: "Employés"
|
||||||
candidates: "Candidats"
|
candidates: "Candidats"
|
||||||
# candidate_sessions: "Candidate Sessions"
|
# candidate_sessions: "Candidate Sessions"
|
||||||
# user_remark: "User Remark"
|
# user_remark: "User Remark"
|
||||||
|
@ -769,10 +769,10 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
||||||
items: "Objets"
|
items: "Objets"
|
||||||
heroes: "Héros"
|
heroes: "Héros"
|
||||||
wizard: "Magicien"
|
wizard: "Magicien"
|
||||||
# achievement: "Achievement"
|
achievement: "Succès"
|
||||||
# clas: "CLAs"
|
# clas: "CLAs"
|
||||||
# play_counts: "Play Counts"
|
# play_counts: "Play Counts"
|
||||||
# feedback: "Feedback"
|
feedback: "Réaction"
|
||||||
|
|
||||||
delta:
|
delta:
|
||||||
added: "Ajouté"
|
added: "Ajouté"
|
||||||
|
@ -788,8 +788,8 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
||||||
|
|
||||||
multiplayer:
|
multiplayer:
|
||||||
multiplayer_title: "Préférences multijoueurs" # We'll be changing this around significantly soon. Until then, it's not important to translate.
|
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: "Activer le multijoueur"
|
||||||
# multiplayer_toggle_description: "Allow others to join your game."
|
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_link_description: "Partage ce lien pour que tes amis viennent jouer avec toi."
|
||||||
multiplayer_hint_label: "Astuce:"
|
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."
|
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"
|
rank: "Rang"
|
||||||
prizes: "Prix"
|
prizes: "Prix"
|
||||||
total_value: "Valeur totale"
|
total_value: "Valeur totale"
|
||||||
# in_cash: "in cash"
|
in_cash: "en espèces"
|
||||||
# custom_wizard: "Custom CodeCombat Wizard"
|
custom_wizard: "Magicien CodeCombat personnalisé"
|
||||||
# custom_avatar: "Custom CodeCombat avatar"
|
custom_avatar: "Avatar CodeCombat personnalisé"
|
||||||
# heap: "for six months of \"Startup\" access"
|
# heap: "for six months of \"Startup\" access"
|
||||||
credits: "Crédits"
|
credits: "Crédits"
|
||||||
# one_month_coupon: "coupon: choose either Rails or HTML"
|
# one_month_coupon: "coupon: choose either Rails or HTML"
|
||||||
|
@ -886,7 +886,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
||||||
clothes: "Vêtements"
|
clothes: "Vêtements"
|
||||||
trim: "Tailleur"
|
trim: "Tailleur"
|
||||||
cloud: "Nuage"
|
cloud: "Nuage"
|
||||||
team: "Equipe"
|
team: "Équipe"
|
||||||
spell: "Sort"
|
spell: "Sort"
|
||||||
boots: "Bottes"
|
boots: "Bottes"
|
||||||
hue: "Teinte"
|
hue: "Teinte"
|
||||||
|
@ -1039,7 +1039,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
||||||
candidate_top_skills: "Talents/Aptitudes"
|
candidate_top_skills: "Talents/Aptitudes"
|
||||||
candidate_years_experience: "Années d'expérience"
|
candidate_years_experience: "Années d'expérience"
|
||||||
candidate_last_updated: "Dernière mise à jour"
|
candidate_last_updated: "Dernière mise à jour"
|
||||||
# candidate_who: "Who"
|
candidate_who: "Qui"
|
||||||
# featured_developers: "Featured Developers"
|
# featured_developers: "Featured Developers"
|
||||||
other_developers: "Autres développeurs"
|
other_developers: "Autres développeurs"
|
||||||
# inactive_developers: "Inactive Developers"
|
# 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: "Espionage" # Really not important to translate /admin controls.
|
||||||
av_espionage_placeholder: "Email ou nom d'utilisateur"
|
av_espionage_placeholder: "Email ou nom d'utilisateur"
|
||||||
av_usersearch: "Recherche d'utilisateurs"
|
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_usersearch_search: "Recherche"
|
||||||
av_title: "Vues d'administrateurs"
|
av_title: "Vues d'administrateurs"
|
||||||
av_entities_sub_title: "Entités"
|
av_entities_sub_title: "Entités"
|
||||||
|
|
|
@ -294,7 +294,11 @@ module.exports = class ThangType extends CocoModel
|
||||||
itemComponentRef = _.find(
|
itemComponentRef = _.find(
|
||||||
@get('components') or [],
|
@get('components') or [],
|
||||||
(compRef) -> compRef.original is LevelComponent.ItemID)
|
(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: ->
|
getFrontFacingStats: ->
|
||||||
components = @get('components') or []
|
components = @get('components') or []
|
||||||
|
@ -341,3 +345,10 @@ module.exports = class ThangType extends CocoModel
|
||||||
display = display.join ', '
|
display = display.join ', '
|
||||||
display = display.replace /9001m?/, 'Infinity'
|
display = display.replace /9001m?/, 'Infinity'
|
||||||
name: name, display: display
|
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
|
||||||
|
|
|
@ -88,3 +88,13 @@ module.exports = class User extends CocoModel
|
||||||
@branchingGroup = 'choice-explicit' if me.isAdmin()
|
@branchingGroup = 'choice-explicit' if me.isAdmin()
|
||||||
application.tracker.identify branchingGroup: @branchingGroup
|
application.tracker.identify branchingGroup: @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
|
||||||
|
|
|
@ -105,7 +105,7 @@ _.extend ThangTypeSchema.properties,
|
||||||
shapes: c.object {title: 'Shapes', additionalProperties: ShapeObjectSchema}
|
shapes: c.object {title: 'Shapes', additionalProperties: ShapeObjectSchema}
|
||||||
containers: c.object {title: 'Containers', additionalProperties: ContainerObjectSchema}
|
containers: c.object {title: 'Containers', additionalProperties: ContainerObjectSchema}
|
||||||
animations: c.object {title: 'Animations', additionalProperties: RawAnimationObjectSchema}
|
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
|
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.'}
|
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.'}
|
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.'}
|
||||||
|
|
|
@ -8,6 +8,7 @@ module.exports =
|
||||||
replacedNoteChain: {type: 'array'}
|
replacedNoteChain: {type: 'array'}
|
||||||
thang: {type: 'object'}
|
thang: {type: 'object'}
|
||||||
killer: {type: 'object'}
|
killer: {type: 'object'}
|
||||||
|
killerHealth: {type: ['number', 'undefined']}
|
||||||
|
|
||||||
'world:thang-touched-goal': c.object {required: ['actor', 'touched']},
|
'world:thang-touched-goal': c.object {required: ['actor', 'touched']},
|
||||||
replacedNoteChain: {type: 'array'}
|
replacedNoteChain: {type: 'array'}
|
||||||
|
|
|
@ -14,6 +14,11 @@ $selectedAreaHeight: 150px
|
||||||
$stashMargin: 20px
|
$stashMargin: 20px
|
||||||
$stashWidth: $totalWidth - $equippedWidth - $stashMargin
|
$stashWidth: $totalWidth - $equippedWidth - $stashMargin
|
||||||
|
|
||||||
|
.ui-effects-transfer
|
||||||
|
outline: 2px solid #28f
|
||||||
|
@include box-shadow(0 0 10px #28f)
|
||||||
|
z-index: 9001
|
||||||
|
|
||||||
#inventory-view
|
#inventory-view
|
||||||
position: relative
|
position: relative
|
||||||
height: $inventoryHeight
|
height: $inventoryHeight
|
||||||
|
@ -200,6 +205,11 @@ $stashWidth: $totalWidth - $equippedWidth - $stashMargin
|
||||||
padding: 4px
|
padding: 4px
|
||||||
background-color: white
|
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
|
.list-group-item
|
||||||
padding: 4px 0
|
padding: 4px 0
|
||||||
@include transition(0.5s ease)
|
@include transition(0.5s ease)
|
||||||
|
@ -244,6 +254,18 @@ $stashWidth: $totalWidth - $equippedWidth - $stashMargin
|
||||||
.item-info:after
|
.item-info:after
|
||||||
content: ' (locked)'
|
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
|
.item-view
|
||||||
cursor: pointer
|
cursor: pointer
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,11 @@
|
||||||
background-image: url(/images/level/hud_right_wing.png)
|
background-image: url(/images/level/hud_right_wing.png)
|
||||||
background-position: left
|
background-position: left
|
||||||
|
|
||||||
|
&.hide-hud-properties .center
|
||||||
|
.thang-props, .thang-actions
|
||||||
|
visibility: hidden
|
||||||
|
position: absolute
|
||||||
|
|
||||||
.center
|
.center
|
||||||
width: 560px
|
width: 560px
|
||||||
height: 120px
|
height: 120px
|
||||||
|
|
|
@ -55,5 +55,5 @@
|
||||||
h4#locked-description
|
h4#locked-description
|
||||||
ul.list-group
|
ul.list-group
|
||||||
for item in lockedItems
|
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")
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#tip-wrapper
|
#tip-wrapper
|
||||||
strong.tip(data-i18n='play_level.tip_toggle_play') Toggle play/paused with Ctrl+P.
|
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_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_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_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.
|
strong.tip(data-i18n='play_level.tip_think_solution') Think of the solution, not the problem.
|
||||||
|
|
|
@ -48,15 +48,24 @@ module.exports = class InventoryView extends CocoView
|
||||||
context.equipped = _.values(@equipment)
|
context.equipped = _.values(@equipment)
|
||||||
context.items = @items.models
|
context.items = @items.models
|
||||||
|
|
||||||
context.unlockedItems = []
|
|
||||||
context.lockedItems = []
|
|
||||||
for item in @items.models
|
for item in @items.models
|
||||||
item.classes = item.getAllowedSlots()
|
item.classes = item.getAllowedSlots()
|
||||||
item.classes.push 'equipped' if item.get('original') in context.equipped
|
item.classes.push 'equipped' if item.get('original') in context.equipped
|
||||||
locked = @allowedItems and not (item.get('original') in @allowedItems)
|
locked = @allowedItems and not (item.get('original') in @allowedItems)
|
||||||
item.classes.push 'locked' if locked
|
item.classes.push 'locked' if locked and item.get('slug') isnt 'simple-boots'
|
||||||
(if locked then context.lockedItems else context.unlockedItems).push item
|
for heroClass in item.getAllowedHeroClasses()
|
||||||
@items.models.sort (a, b) -> ('locked' in a.classes) - ('locked' in b.classes)
|
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.slots = @slots
|
||||||
context.equipment = _.clone @equipment
|
context.equipment = _.clone @equipment
|
||||||
|
@ -184,6 +193,7 @@ module.exports = class InventoryView extends CocoView
|
||||||
@onSelectionChanged()
|
@onSelectionChanged()
|
||||||
slot = @getSelectedSlot()
|
slot = @getSelectedSlot()
|
||||||
slot = @$el.find('.item-slot:not(.disabled):first') if not slot.length
|
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)
|
@unequipItemFromSlot(slot)
|
||||||
@equipSelectedItemToSlot(slot)
|
@equipSelectedItemToSlot(slot)
|
||||||
@onSelectionChanged()
|
@onSelectionChanged()
|
||||||
|
@ -261,9 +271,9 @@ module.exports = class InventoryView extends CocoView
|
||||||
@hideSelectedSlotItem()
|
@hideSelectedSlotItem()
|
||||||
else
|
else
|
||||||
unlockedCount = @$el.find('#available-equipment .list-group-item:not(.locked)').show().length
|
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('#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('#available-equipment .list-group-item.equipped').hide()
|
||||||
|
|
||||||
@$el.find('.item-slot').removeClass('disabled')
|
@$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.
|
# This is temporary, until we have a more general way of awarding items and configuring needed/locked items per level.
|
||||||
gear =
|
gear =
|
||||||
'simple-boots': '53e237bf53457600003e3f05'
|
'simple-boots': '53e237bf53457600003e3f05'
|
||||||
'longsword': '53e218d853457600003e3ebe'
|
'simple-sword': '53e218d853457600003e3ebe'
|
||||||
'leather-tunic': '53e22eac53457600003e3efc'
|
'leather-tunic': '53e22eac53457600003e3efc'
|
||||||
'leather-boots': '53e2384453457600003e3f07'
|
'leather-boots': '53e2384453457600003e3f07'
|
||||||
'programmaticon-i': '53e4108204c00d4607a89f78'
|
'programmaticon-i': '53e4108204c00d4607a89f78'
|
||||||
'crude-glasses': '53e238df53457600003e3f0b'
|
'crude-wooden-glasses': '53e238df53457600003e3f0b'
|
||||||
'builders-hammer': '53f4e6e3d822c23505b74f42'
|
'builders-hammer': '53f4e6e3d822c23505b74f42'
|
||||||
gearByLevel =
|
gearByLevel =
|
||||||
'dungeons-of-kithgard': {feet: 'simple-boots'}
|
'dungeons-of-kithgard': {feet: 'simple-boots'}
|
||||||
'gems-in-the-deep': {feet: 'simple-boots'}
|
'gems-in-the-deep': {feet: 'simple-boots'}
|
||||||
'forgetful-gemsmith': {feet: 'simple-boots'}
|
'forgetful-gemsmith': {feet: 'simple-boots'}
|
||||||
'shadow-guard': {feet: 'simple-boots'}
|
'shadow-guard': {feet: 'simple-boots'}
|
||||||
'true-names': {feet: 'simple-boots', 'right-hand': 'longsword'}
|
'true-names': {feet: 'simple-boots', 'right-hand': 'simple-sword'}
|
||||||
'the-raised-sword': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic'}
|
'the-raised-sword': {feet: 'simple-boots', 'right-hand': 'simple-sword', torso: 'leather-tunic'}
|
||||||
'the-first-kithmaze': {feet: 'simple-boots', 'programming-book': 'programmaticon-i'}
|
'the-first-kithmaze': {feet: 'simple-boots', 'programming-book': 'programmaticon-i'}
|
||||||
'the-second-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'}
|
'new-sight': {'right-hand': 'simple-sword', 'programming-book': 'programmaticon-i'}
|
||||||
'lowly-kithmen': {feet: 'simple-boots', 'right-hand': 'longsword', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'}
|
'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': 'longsword', torso: 'leather-tunic', eyes: 'crude-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': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-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'}
|
'kithgard-gates': {feet: 'simple-boots', 'right-hand': 'builders-hammer', torso: 'leather-tunic'}
|
||||||
'defense-of-plainswood': {feet: 'simple-boots', 'right-hand': 'builders-hammer'}
|
'defense-of-plainswood': {feet: 'simple-boots', 'right-hand': 'builders-hammer'}
|
||||||
'winding-trail': {feet: 'leather-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'}
|
'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-glasses'}
|
'a-fiery-trap': {feet: 'leather-boots', 'right-hand': 'builders-hammer', eyes: 'crude-wooden-glasses'}
|
||||||
return unless necessaryGear = gearByLevel[@options.levelID]
|
return unless necessaryGear = gearByLevel[@options.levelID]
|
||||||
if @inserted
|
if @inserted
|
||||||
if @supermodel.finished()
|
if @supermodel.finished()
|
||||||
|
@ -363,7 +373,7 @@ module.exports = class InventoryView extends CocoView
|
||||||
inWorldMap = $('#world-map-view').length
|
inWorldMap = $('#world-map-view').length
|
||||||
for slot, item of necessaryGear
|
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 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]}']"
|
availableSlotSelector = "#available-equipment li[data-item-id='#{gear[item]}']"
|
||||||
@highlightElement availableSlotSelector, delay: 500, sides: ['right'], rotation: Math.PI / 2
|
@highlightElement availableSlotSelector, delay: 500, sides: ['right'], rotation: Math.PI / 2
|
||||||
@$el.find(availableSlotSelector).addClass 'should-equip'
|
@$el.find(availableSlotSelector).addClass 'should-equip'
|
||||||
|
@ -386,6 +396,7 @@ module.exports = class InventoryView extends CocoView
|
||||||
onHeroSelectionUpdated: (e) ->
|
onHeroSelectionUpdated: (e) ->
|
||||||
@selectedHero = e.hero
|
@selectedHero = e.hero
|
||||||
@loadHero()
|
@loadHero()
|
||||||
|
@$el.removeClass('Warrior Ranger Wizard').addClass(@selectedHero.get('heroClass'))
|
||||||
|
|
||||||
loadHero: ->
|
loadHero: ->
|
||||||
return unless @supermodel.finished() and @selectedHero and not @$el.hasClass 'secret'
|
return unless @supermodel.finished() and @selectedHero and not @$el.hasClass 'secret'
|
||||||
|
|
|
@ -351,7 +351,8 @@ module.exports = class CocoView extends Backbone.View
|
||||||
animatePointer: =>
|
animatePointer: =>
|
||||||
$pointer = @getPointer()
|
$pointer = @getPointer()
|
||||||
$pointer.css transition: 'all 0.6s ease-out', transform: "rotate(#{@pointerRotation}rad) translate(-3px, #{@pointerRadialDistance-50}px)"
|
$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
|
setTimeout (=> $pointer.css transition: 'all 0.4s ease-in', transform: "rotate(#{@pointerRotation}rad) translate(-3px, #{@pointerRadialDistance}px)"), 800
|
||||||
|
|
||||||
endHighlight: ->
|
endHighlight: ->
|
||||||
|
|
|
@ -617,8 +617,8 @@ dungeon = [
|
||||||
id: 'gems-in-the-deep'
|
id: 'gems-in-the-deep'
|
||||||
original: '54173c90844506ae0195a0b4'
|
original: '54173c90844506ae0195a0b4'
|
||||||
description: 'Quickly collect the gems; you will need them.'
|
description: 'Quickly collect the gems; you will need them.'
|
||||||
x: 32
|
x: 29
|
||||||
y: 15.5
|
y: 12
|
||||||
nextLevels:
|
nextLevels:
|
||||||
more_practice: 'forgetful-gemsmith'
|
more_practice: 'forgetful-gemsmith'
|
||||||
continue: 'shadow-guard'
|
continue: 'shadow-guard'
|
||||||
|
@ -631,8 +631,8 @@ dungeon = [
|
||||||
id: 'forgetful-gemsmith'
|
id: 'forgetful-gemsmith'
|
||||||
original: '544a98f62d002f0000fe331a'
|
original: '544a98f62d002f0000fe331a'
|
||||||
description: 'Grab even more gems as you practice moving.'
|
description: 'Grab even more gems as you practice moving.'
|
||||||
x: 35.49
|
x: 38
|
||||||
y: 24.61
|
y: 12
|
||||||
nextLevels:
|
nextLevels:
|
||||||
continue: 'shadow-guard'
|
continue: 'shadow-guard'
|
||||||
practice: true
|
practice: true
|
||||||
|
@ -644,25 +644,38 @@ dungeon = [
|
||||||
id: 'shadow-guard'
|
id: 'shadow-guard'
|
||||||
original: '54174347844506ae0195a0b8'
|
original: '54174347844506ae0195a0b8'
|
||||||
description: 'Evade the Kithgard minion.'
|
description: 'Evade the Kithgard minion.'
|
||||||
x: 54
|
x: 50
|
||||||
y: 9
|
y: 11
|
||||||
nextLevels:
|
nextLevels:
|
||||||
more_practice: 'munchkin-dodger'
|
more_practice: 'kounter-kithwise'
|
||||||
continue: 'true-names'
|
continue: 'true-names'
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name: 'Munchkin Dodger'
|
name: 'Kounter Kithwise'
|
||||||
type: 'hero'
|
type: 'hero'
|
||||||
difficulty: 1
|
difficulty: 1
|
||||||
id: 'munchkin-dodger'
|
id: 'kounter-kithwise'
|
||||||
original: '541875da4c16460000ab990f'
|
original: '54527a6257e83800009730c7'
|
||||||
description: 'Practice your evasion skills with more guards.'
|
description: 'Practice your evasion skills with more guards.'
|
||||||
x: 61.19
|
x: 58
|
||||||
y: 13.80
|
y: 10
|
||||||
|
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: 67
|
||||||
|
y: 10
|
||||||
nextLevels:
|
nextLevels:
|
||||||
continue: 'true-names'
|
continue: 'true-names'
|
||||||
practice: true
|
practice: true
|
||||||
disabled: true
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name: 'True Names'
|
name: 'True Names'
|
||||||
|
@ -674,22 +687,21 @@ dungeon = [
|
||||||
x: 74
|
x: 74
|
||||||
y: 12
|
y: 12
|
||||||
nextLevels:
|
nextLevels:
|
||||||
more_practice: 'munchkin-slayer'
|
more_practice: 'favorable-odds'
|
||||||
continue: 'the-raised-sword'
|
continue: 'the-raised-sword'
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name: 'Munchkin Slayer'
|
name: 'Favorable Odds'
|
||||||
type: 'hero'
|
type: 'hero'
|
||||||
difficulty: 1
|
difficulty: 1
|
||||||
id: 'munchkin-slayer'
|
id: 'favorable-odds'
|
||||||
original: '5418aec24c16460000ab9aa6'
|
original: '5452972f57e83800009730de'
|
||||||
description: 'Test out your battle skills by defeating more munchkins.'
|
description: 'Test out your battle skills by defeating more munchkins.'
|
||||||
x: 80.85
|
x: 80.85
|
||||||
y: 11.85
|
y: 16
|
||||||
nextLevels:
|
nextLevels:
|
||||||
continue: 'the-raised-sword'
|
continue: 'the-raised-sword'
|
||||||
practice: true
|
practice: true
|
||||||
disabled: true
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name: 'The Raised Sword'
|
name: 'The Raised Sword'
|
||||||
|
@ -709,27 +721,26 @@ dungeon = [
|
||||||
difficulty: 1
|
difficulty: 1
|
||||||
id: 'the-first-kithmaze'
|
id: 'the-first-kithmaze'
|
||||||
original: '5418b9d64c16460000ab9ab4'
|
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
|
x: 70
|
||||||
y: 28
|
y: 28
|
||||||
nextLevels:
|
nextLevels:
|
||||||
more_practice: 'the-one-point-fifth-kithmaze'
|
more_practice: 'descending-further'
|
||||||
continue: 'the-second-kithmaze'
|
continue: 'the-second-kithmaze'
|
||||||
skip_ahead: 'new-sight'
|
skip_ahead: 'new-sight'
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name: 'The One-Point-Fifth Kithmaze'
|
name: 'Descending Further'
|
||||||
type: 'hero'
|
type: 'hero'
|
||||||
difficulty: 1
|
difficulty: 1
|
||||||
id: 'the-one-point-fifth-kithmaze'
|
id: 'descending-further'
|
||||||
original: '5418cf256bae62f707c7e1c3'
|
original: '5452a84d57e83800009730e4'
|
||||||
description: 'Another day, another maze.'
|
description: 'Another day, another maze.'
|
||||||
x: 78.47
|
x: 78
|
||||||
y: 34.38
|
y: 29
|
||||||
nextLevels:
|
nextLevels:
|
||||||
continue: 'the-second-kithmaze'
|
continue: 'the-second-kithmaze'
|
||||||
practice: true
|
practice: true
|
||||||
disabled: true
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name: 'The Second Kithmaze'
|
name: 'The Second Kithmaze'
|
||||||
|
@ -738,25 +749,10 @@ dungeon = [
|
||||||
id: 'the-second-kithmaze'
|
id: 'the-second-kithmaze'
|
||||||
original: '5418cf256bae62f707c7e1c3'
|
original: '5418cf256bae62f707c7e1c3'
|
||||||
description: 'Many have tried, few have found their way through this maze.'
|
description: 'Many have tried, few have found their way through this maze.'
|
||||||
x: 55.54
|
x: 59
|
||||||
y: 26.96
|
y: 25
|
||||||
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:
|
nextLevels:
|
||||||
continue: 'new-sight'
|
continue: 'new-sight'
|
||||||
practice: true
|
|
||||||
disabled: true
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name: 'New Sight'
|
name: 'New Sight'
|
||||||
|
@ -765,10 +761,35 @@ dungeon = [
|
||||||
id: 'new-sight'
|
id: 'new-sight'
|
||||||
original: '5418d40f4c16460000ab9ac2'
|
original: '5418d40f4c16460000ab9ac2'
|
||||||
description: 'A true name can only be seen with the correct lenses.'
|
description: 'A true name can only be seen with the correct lenses.'
|
||||||
x: 67
|
x: 60
|
||||||
y: 41
|
y: 34
|
||||||
|
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: 75
|
||||||
|
y: 46
|
||||||
|
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: 86
|
||||||
|
y: 43
|
||||||
nextLevels:
|
nextLevels:
|
||||||
continue: 'lowly-kithmen'
|
continue: 'lowly-kithmen'
|
||||||
|
skip_ahead: 'closing-the-distance'
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name: 'Lowly Kithmen'
|
name: 'Lowly Kithmen'
|
||||||
|
@ -776,28 +797,13 @@ dungeon = [
|
||||||
difficulty: 1
|
difficulty: 1
|
||||||
id: 'lowly-kithmen'
|
id: 'lowly-kithmen'
|
||||||
original: '541b24511ccc8eaae19f3c1f'
|
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
|
x: 68
|
||||||
y: 48
|
y: 42
|
||||||
nextLevels:
|
nextLevels:
|
||||||
more_practice: 'still-pretty-low-kithmen'
|
|
||||||
continue: 'closing-the-distance'
|
continue: 'closing-the-distance'
|
||||||
skip_ahead: 'the-final-kithmaze'
|
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'
|
name: 'Closing the Distance'
|
||||||
type: 'hero'
|
type: 'hero'
|
||||||
|
@ -805,25 +811,24 @@ dungeon = [
|
||||||
id: 'closing-the-distance'
|
id: 'closing-the-distance'
|
||||||
original: '541b288e1ccc8eaae19f3c25'
|
original: '541b288e1ccc8eaae19f3c25'
|
||||||
description: 'Kithmen are not the only ones to stand in your way.'
|
description: 'Kithmen are not the only ones to stand in your way.'
|
||||||
x: 76
|
x: 95
|
||||||
y: 60
|
y: 58
|
||||||
nextLevels:
|
nextLevels:
|
||||||
more_practice: 'assassinating-more-kithmen'
|
more_practice: 'tactical-strike'
|
||||||
continue: 'the-final-kithmaze'
|
continue: 'the-final-kithmaze'
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name: 'Assassinating More Kithmen'
|
name: 'Tactical Strike'
|
||||||
type: 'hero'
|
type: 'hero'
|
||||||
difficulty: 1
|
difficulty: 1
|
||||||
id: 'assassinating-more-kithmen'
|
id: 'tactical-strike'
|
||||||
original: '541b434e1ccc8eaae19f3c33'
|
original: '5452cfa706a59e000067e4f5'
|
||||||
description: 'They\'re, uh, coming right for us?'
|
description: 'They\'re, uh, coming right for us! Sneak up behind them.'
|
||||||
x: 80.34
|
x: 93
|
||||||
y: 55.60
|
y: 47
|
||||||
nextLevels:
|
nextLevels:
|
||||||
continue: 'the-final-kithmaze'
|
continue: 'the-final-kithmaze'
|
||||||
practice: true
|
practice: true
|
||||||
disabled: true
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name: 'The Final Kithmaze'
|
name: 'The Final Kithmaze'
|
||||||
|
@ -835,22 +840,21 @@ dungeon = [
|
||||||
x: 82
|
x: 82
|
||||||
y: 70
|
y: 70
|
||||||
nextLevels:
|
nextLevels:
|
||||||
more_practice: 'okay-one-more-kithmaze'
|
more_practice: 'the-gauntlet'
|
||||||
continue: 'kithgard-gates'
|
continue: 'kithgard-gates'
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name: 'Okay, One More Kithmaze'
|
name: 'The Gauntlet'
|
||||||
type: 'hero'
|
type: 'hero'
|
||||||
difficulty: 1
|
difficulty: 1
|
||||||
id: 'okay-one-more-kithmaze'
|
id: 'the-gauntlet'
|
||||||
original: '541c9a30c6362edfb0f34479'
|
original: '5452d8b906a59e000067e4fa'
|
||||||
description: 'But you really gotta get outside after this, okay?'
|
description: 'Rush for the stairs, battling foes at every turn.'
|
||||||
x: 76.94
|
x: 89
|
||||||
y: 74.22
|
y: 64
|
||||||
nextLevels:
|
nextLevels:
|
||||||
continue: 'kithgard-gates'
|
continue: 'kithgard-gates'
|
||||||
practice: true
|
practice: true
|
||||||
disabled: true
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name: 'Kithgard Gates'
|
name: 'Kithgard Gates'
|
||||||
|
|
|
@ -60,7 +60,8 @@ module.exports = class LevelGoalsView extends CocoView
|
||||||
# This should really get refactored, along with GoalManager, so that goals have a standard
|
# 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.
|
# representation of how many are done, how many are needed, what that means, etc.
|
||||||
li = $('<li></li>').addClass("status-#{state.status}").text(text)
|
li = $('<li></li>').addClass("status-#{state.status}").text(text)
|
||||||
li.prepend($('<i></i>').addClass('glyphicon').addClass(iconClass) if iconClass = stateIconMap[state.status])
|
iconClass = stateIconMap[state.status]
|
||||||
|
li.prepend($('<i></i>').addClass("glyphicon #{iconClass or ''}")) # If empty, insert a .glyphicon to take up space
|
||||||
list.append(li)
|
list.append(li)
|
||||||
goals.push goal
|
goals.push goal
|
||||||
if not firstRun and state.status is 'success' and @previousGoalStatus[goal.id] isnt 'success'
|
if not firstRun and state.status is 'success' and @previousGoalStatus[goal.id] isnt 'success'
|
||||||
|
|
|
@ -30,6 +30,9 @@ module.exports = class LevelHUDView extends CocoView
|
||||||
afterRender: ->
|
afterRender: ->
|
||||||
super()
|
super()
|
||||||
@$el.addClass 'no-selection'
|
@$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) ->
|
onClick: (e) ->
|
||||||
Backbone.Mediator.publish 'tome:focus-editor', {} unless $(e.target).parents('.thang-props').length
|
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')
|
$('.thang-elem', @$el).removeClass('secret')
|
||||||
$('.dialogue-area', @$el).addClass('secret')
|
$('.dialogue-area', @$el).addClass('secret')
|
||||||
$('.thang-actions', @$el).toggleClass 'secret', not @showingActions
|
$('.thang-actions', @$el).toggleClass 'secret', not @showingActions
|
||||||
|
@$el.find('.thang-canvas-wrapper').addClass('secret') if @hidesHUD
|
||||||
|
|
||||||
update: ->
|
update: ->
|
||||||
return unless @thang and not @speaker
|
return unless @thang and not @speaker
|
||||||
|
|
|
@ -588,7 +588,6 @@ module.exports = class SpellView extends CocoView
|
||||||
io: '//'
|
io: '//'
|
||||||
commentStart = commentStarts[@spell.language] or '//'
|
commentStart = commentStarts[@spell.language] or '//'
|
||||||
@_singleLineCommentRegexp ?= new RegExp "[ \t]*#{commentStart}[^\"'\n]*", 'g'
|
@_singleLineCommentRegexp ?= new RegExp "[ \t]*#{commentStart}[^\"'\n]*", 'g'
|
||||||
console.log 'got', @_singleLineCommentRegexp, 'from', "[ \t]*#{commentStart}[^\"']*", 'comment start is', commentStart, 'acuse lang is', @spell.language
|
|
||||||
@_singleLineCommentRegexp
|
@_singleLineCommentRegexp
|
||||||
|
|
||||||
preload: ->
|
preload: ->
|
||||||
|
|
|
@ -46,9 +46,9 @@ module.exports = class Handler
|
||||||
omissions = ['original'].concat(deltasLib.DOC_SKIP_PATHS)
|
omissions = ['original'].concat(deltasLib.DOC_SKIP_PATHS)
|
||||||
delta = differ.diff(_.omit(document.toObject(), omissions), _.omit(req.body, omissions))
|
delta = differ.diff(_.omit(document.toObject(), omissions), _.omit(req.body, omissions))
|
||||||
flattened = deltasLib.flattenDelta(delta)
|
flattened = deltasLib.flattenDelta(delta)
|
||||||
_.all(flattened, (delta) ->
|
_.all flattened, (delta) ->
|
||||||
# sometimes coverage gets moved around... allow other changes to happen to i18nCoverage
|
# 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()
|
formatEntity: (req, document) -> document?.toObject()
|
||||||
getEditableProperties: (req, document) ->
|
getEditableProperties: (req, document) ->
|
||||||
|
|
|
@ -60,9 +60,10 @@ ThangTypeHandler = class ThangTypeHandler extends Handler
|
||||||
query = slug: {$exists: true}
|
query = slug: {$exists: true}
|
||||||
if req.query.view is 'items'
|
if req.query.view is 'items'
|
||||||
query.kind = 'Item'
|
query.kind = 'Item'
|
||||||
|
query.gems = {$exists: true} # Items without gems don't show up anywhere
|
||||||
else if req.query.view is 'heroes'
|
else if req.query.view is 'heroes'
|
||||||
#query.kind = 'Hero' # TODO: when all the heroes are tagged, just use this
|
#query.kind = 'Hero' # TODO: when ChooseHeroView is refactored, just use this
|
||||||
query.original = {$in: _.values heroes} # TODO: when all the heroes are tagged, don't do this
|
query.original = {$in: _.values heroes} # TODO: when ChooseHeroView is refactored, don't do this
|
||||||
else if req.query.view is 'i18n-coverage'
|
else if req.query.view is 'i18n-coverage'
|
||||||
query.i18nCoverage = {$exists: true}
|
query.i18nCoverage = {$exists: true}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue