Merge branch 'master' into feature/webgl

This commit is contained in:
Scott Erickson 2014-09-28 10:38:19 -07:00
commit 8adbd87401
95 changed files with 716 additions and 618 deletions
app
bower.jsonpackage.json
server
test/app/views/game-menu

View file

@ -74,8 +74,9 @@ module.exports = class CocoRouter extends Backbone.Router
'multiplayer': go('MultiplayerView')
'play': go('play/MainPlayView') # This will become 'play-old' or something.
'play-hero': go('play/WorldMapView') # This will become 'play' when it is done.
'play-old': go('play/MainPlayView') # This used to be 'play'.
'play': go('play/WorldMapView')
'play-hero': go('play/WorldMapView') # Legacy URL for /play; leave up until start of 2015, I guess.
'play/ladder/:levelID': go('play/ladder/LadderView')
'play/ladder': go('play/ladder/MainLadderView')
'play/level/:levelID': go('play/level/PlayLevelView')

Binary file not shown.

After

(image error) Size: 7.5 KiB

Binary file not shown.

After

(image error) Size: 217 KiB

View file

@ -146,10 +146,8 @@ module.exports = Surface = class Surface extends CocoClass
setWorld: (@world) ->
@worldLoaded = true
lastFrame = Math.min(@getCurrentFrame(), @world.frames.length - 1)
@world.getFrame(lastFrame).restoreState() unless @options.choosing
@spriteBoss.world = @world
@restoreWorldState() unless @options.choosing
@showLevel()
@updateState true if @loaded
@onFrameChanged()

View file

@ -98,6 +98,10 @@ module.exports = class World
continueLaterFn = =>
@loadFrames(loadedCallback, errorCallback, loadProgressCallback, preloadedCallback, skipDeferredLoading, loadUntilFrame) unless @destroyed
if @realTime and not @countdownFinished
if @levelID in ['the-first-kithmaze', 'the-second-kithmaze', 'the-final-kithmaze']
@realTimeSpeedFactor = 3
else
@realTimeSpeedFactor = 1
return setTimeout @finishCountdown(continueLaterFn), REAL_TIME_COUNTDOWN_DELAY
t1 = now()
@t0 ?= t1
@ -136,18 +140,18 @@ module.exports = class World
shouldDelayRealTimeSimulation: (t) ->
return false unless @realTime
timeSinceStart = t - @worldLoadStartTime
timeSinceStart = (t - @worldLoadStartTime) * @realTimeSpeedFactor
timeLoaded = @frames.length * @dt * 1000
timeBuffered = timeLoaded - timeSinceStart
timeBuffered > REAL_TIME_BUFFER_MAX
timeBuffered > REAL_TIME_BUFFER_MAX * @realTimeSpeedFactor
shouldUpdateRealTimePlayback: (t) ->
return false unless @realTime
return false if @frames.length * @dt is @lastRealTimeUpdate
timeLoaded = @frames.length * @dt * 1000
timeSinceStart = t - @worldLoadStartTime
timeSinceStart = (t - @worldLoadStartTime) * @realTimeSpeedFactor
remainingBuffer = @lastRealTimeUpdate * 1000 - timeSinceStart
remainingBuffer < REAL_TIME_BUFFER_MIN
remainingBuffer < REAL_TIME_BUFFER_MIN * @realTimeSpeedFactor
shouldContinueLoading: (t1, loadProgressCallback, skipDeferredLoading, continueLaterFn) ->
t2 = now()
@ -192,6 +196,7 @@ module.exports = class World
@flagHistory.push flagEvent
loadFromLevel: (level, willSimulate=true) ->
@levelID = level.slug
@levelComponents = level.levelComponents
@thangTypes = level.thangTypes
@loadSystemsFromLevel level

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
adventurer_forum: "منتدى المغامر"
adventurer_suffix: "."
campaign_beginner: "حملة المبتدئين"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... فيها تتعلم سحر البرمجة."
campaign_dev: "مستويات أصعب عشوائية"
campaign_dev_description: "... فيها تتعلم واجهة بينما تفعل شيئا أصعب قليلا."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "български език", englishDescri
# adventurer_forum: "the Adventurer forum"
# adventurer_suffix: "."
# campaign_beginner: "Beginner Campaign"
# campaign_old_beginner: "Old Beginner Campaign"
# campaign_beginner_description: "... in which you learn the wizardry of programming."
# campaign_dev: "Random Harder Levels"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "български език", englishDescri
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "български език", englishDescri
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -90,8 +90,8 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
creating: "Creant Compte..."
sign_up: "Registrar-se"
log_in: "Iniciar sessió amb la teva contrasenya"
# social_signup: "Or, you can sign up through Facebook or G+:"
# required: "You need to log in before you can go that way."
social_signup: "O, pots iniciar sesió desde Facebook o G+:"
required: "Neccesites iniciar sesió abans ."
home:
slogan: "Aprén a programar tot Jugant"
@ -117,6 +117,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
adventurer_forum: "El fòrum de l'aventurer"
adventurer_suffix: "."
campaign_beginner: "Campanya del principiant"
campaign_old_beginner: "Antiga campanya del principiant"
campaign_beginner_description: "... on aprens la bruixeria de la programació."
campaign_dev: "Nivells difícils aleatoris"
campaign_dev_description: "... on aprens a interactuar amb la interfície tot fent coses un pèl més difícils."
@ -133,12 +134,14 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
hours_played: "hores de joc"
items: "Objectes"
heroes: "Herois"
achievements: "Assoliments"
achievements: "Triomfs"
account: "Conta"
settings: "Configuració"
next: "Següent"
previous: "Anterior"
choose_inventory: "Equipar objectes"
older_campaigns: "Campanyes antigues"
anonymous: "Jugador anònim"
items:
armor: "Armadura"
@ -158,7 +161,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
forum_page: "el nostre fòrum"
forum_suffix: " sinó"
send: "Enviar comentari"
# contact_candidate: "Contact Candidate"
contact_candidate: "Contactar amb el candidat"
# recruitment_reminder: "Use this form to reach out to candidates you are interested in interviewing. Remember that CodeCombat charges 15% of first-year salary. The fee is due upon hiring the employee and is refundable for 90 days if the employee does not remain employed. Part time, remote, and contract employees are free, as are interns."
diplomat_suggestion:
@ -177,13 +180,13 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
group: "Grup"
clothes: "Roba"
# trim: "Trim"
# cloud: "Cloud"
cloud: "Nuvol"
team: "Equip"
# spell: "Spell"
boots: "Botes"
# hue: "Hue"
# saturation: "Saturation"
# lightness: "Lightness"
saturation: "Saturació"
lightness: "Brillantor"
account_settings:
title: "Configuració de la compta"
@ -194,7 +197,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
upload_picture: "Carrega una foto"
wizard_tab: "Bruixot"
password_tab: "Contrasenya"
# emails_tab: "Emails"
emails_tab: "Missatges"
admin: "Administrador"
wizard_color: "Color de la roba"
new_password: "Contrasenya nova"
@ -205,7 +208,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# email_announcements_description: "Get emails on the latest news and developments at CodeCombat."
email_notifications: "Notificacions"
# email_notifications_summary: "Controls for personalized, automatic email notifications related to your CodeCombat activity."
# email_any_notes: "Any Notifications"
email_any_notes: "Cap notificació"
# email_any_notes_description: "Disable to stop all activity notification emails."
email_news: "Noticies"
email_recruit_notes: "Oportunitats de feina"
@ -214,8 +217,8 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# contribute_prefix: "We're looking for people to join our party! Check out the "
# contribute_page: "contribute page"
# contribute_suffix: " to find out more."
# email_toggle: "Toggle All"
# error_saving: "Error Saving"
email_toggle: "Activa-ho tot"
error_saving: "Error en desar"
saved: "Canvis desats"
password_mismatch: "Les contrasenyes no coincideixen."
password_repeat: "Siusplau, repetiu la contrasenya."
@ -228,9 +231,9 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
account_profile:
settings: "Configuració"
edit_profile: "Modifica el perfil"
# done_editing: "Done Editing"
done_editing: "Acaba l'edició"
# profile_for_prefix: "Profile for "
# profile_for_suffix: ""
profile_for_suffix: ""
# featured: "Featured"
# not_featured: "Not Featured"
looking_for: "Buscant:"
@ -277,8 +280,8 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# basics_looking_for_contracting: "Contracting"
# basics_looking_for_internship: "Internship"
# basics_looking_for_help: "What kind of developer position do you want?"
# name_header: "Fill in your name"
# name_anonymous: "Anonymous Developer"
name_header: "Omplir amb el teu nom"
name_anonymous: "Desenvolupador anònim"
# name_help: "Name you want employers to see, like 'Nick Winter'."
# short_description_header: "Write a short description of yourself"
# short_description_blurb: "Add a tagline to help an employer quickly learn more about you."
@ -307,17 +310,17 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# education_header: "Recount your academic ordeals"
# education_blurb: "List your academic ordeals."
education_school: "Escola"
# education_school_help: "Name of your school."
education_school_help: "Nom de la teva escola."
# education_degree: "Degree"
# education_degree_help: "What was your degree and field of study?"
# education_duration: "Dates"
# education_duration_help: "When?"
education_duration_help: "Quan?"
# education_description: "Description"
# education_description_help: "Highlight anything about this educational experience. (140 chars; optional)"
# our_notes: "CodeCombat's Notes"
# remarks: "Remarks"
projects: "Projectes"
# projects_header: "Add 3 projects"
projects_header: "Afegeix 3 projectes"
# projects_header_2: "Projects (Top 3)"
# projects_blurb: "Highlight your projects to amaze employers."
project_name: "Nom del projecte"
@ -326,7 +329,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# project_description_help: "Briefly describe the project."
project_picture: "Imatge"
# project_picture_help: "Upload a 230x115px or larger image showing off the project."
# project_link: "Link"
project_link: "Enllaç"
# project_link_help: "Link to the project."
# player_code: "Player Code"
@ -339,16 +342,16 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# filter_visa_yes: "US Authorized"
# filter_visa_no: "Not Authorized"
# filter_education_top: "Top School"
# filter_education_other: "Other"
# filter_role_web_developer: "Web Developer"
filter_education_other: "Altres"
filter_role_web_developer: "Desenvolupador web"
# filter_role_software_developer: "Software Developer"
# filter_role_mobile_developer: "Mobile Developer"
# filter_experience: "Experience"
filter_experience: "Experiencia"
# filter_experience_senior: "Senior"
# filter_experience_junior: "Junior"
# filter_experience_recent_grad: "Recent Grad"
# filter_experience_student: "College Student"
# filter_results: "results"
filter_results: "resultats"
# start_hiring: "Start hiring."
# reasons: "Three reasons you should hire through us:"
# everyone_looking: "Everyone here is looking for their next opportunity."
@ -358,7 +361,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# pass_screen: "They will pass your technical screen."
# pass_screen_blurb: "Review each candidate's code before reaching out. One employer found that 5x as many of our devs passed their technical screen than hiring from Hacker News."
# make_hiring_easier: "Make my hiring easier, please."
# what: "What is CodeCombat?"
what: "Que és CodeCombat?"
# what_blurb: "CodeCombat is a multiplayer browser programming game. Players write code to control their forces in battle against other developers. Our players have experience with all major tech stacks."
# cost: "How much do we charge?"
# cost_blurb: "We charge 15% of first year's salary and offer a 100% money back guarantee for 90 days. We don't charge for candidates who are already actively being interviewed at your company."
@ -371,13 +374,13 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# candidate_last_updated: "Last Updated"
# candidate_who: "Who"
# featured_developers: "Featured Developers"
# other_developers: "Other Developers"
other_developers: "Altres desenvolupadors"
# inactive_developers: "Inactive Developers"
play_level:
done: "Fet"
customize_wizard: "Personalitza el teu bruixot"
# home: "Home"
home: "Inici"
# skip: "Skip"
game_menu: "Menu de joc"
guide: "Guia"
@ -385,9 +388,9 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
goals: "Objectius"
goal: "Objectiu"
success: "Exit!"
# incomplete: "Incomplete"
# timed_out: "Ran out of time"
# failing: "Failing"
incomplete: "Incomplet"
timed_out: "S'ha acabat el temps"
failing: "Fallant"
# action_timeline: "Action Timeline"
# click_to_select: "Click on a unit to select it."
# reload_title: "Reload All Code?"
@ -401,14 +404,14 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# victory_return_to_ladder: "Return to Ladder"
victory_play_next_level: "Jugar el següent nivell"
victory_play_continue: "Continuar"
# victory_go_home: "Go Home"
# victory_review: "Tell us more!"
victory_go_home: "Tornar a l'inici"
victory_review: "Diguens més!"
# victory_hour_of_code_done: "Are You Done?"
# victory_hour_of_code_done_yes: "Yes, I'm finished with my Hour of Code™!"
guide_title: "Guia"
# tome_minion_spells: "Your Minions' Spells"
# tome_read_only_spells: "Read-Only Spells"
# tome_other_units: "Other Units"
tome_other_units: "Altres unitats"
# tome_cast_button_castable: "Cast Spell" # Temporary, if tome_cast_button_run isn't translated.
# tome_cast_button_casting: "Casting" # Temporary, if tome_cast_button_running isn't translated.
# tome_cast_button_cast: "Spell Cast" # Temporary, if tome_cast_button_ran isn't translated.
@ -416,14 +419,16 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
tome_select_method: "Selecciona un mètode"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"
# hud_continue: "Continue (shift+space)"
hud_continue: "Continuar (shift+espai)"
# spell_saved: "Spell Saved"
# skip_tutorial: "Skip (esc)"
# keyboard_shortcuts: "Key Shortcuts"
keyboard_shortcuts: "Dreceres del teclat"
# loading_ready: "Ready!"
loading_start: "Comença el nivell"
# tip_insert_positions: "Shift+Click a point on the map to insert it into the spell editor."
@ -432,8 +437,8 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# tip_guide_exists: "Click the guide at the top of the page for useful info."
# tip_open_source: "CodeCombat is 100% open source!"
# tip_beta_launch: "CodeCombat launched its beta in October, 2013."
# tip_js_beginning: "JavaScript is just the beginning."
# tip_think_solution: "Think of the solution, not the problem."
tip_js_beginning: "JavaScript és només."
tip_think_solution: "Pensa en la solució,no en el problema."
# tip_theory_practice: "In theory, there is no difference between theory and practice. But in practice, there is. - Yogi Berra"
# tip_error_free: "There are two ways to write error-free programs; only the third one works. - Alan Perlis"
# tip_debugging_program: "If debugging is the process of removing bugs, then programming must be the process of putting them in. - Edsger W. Dijkstra"
@ -457,15 +462,15 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# tip_hofstadters_law: "Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law."
# tip_premature_optimization: "Premature optimization is the root of all evil. - Donald Knuth"
# tip_brute_force: "When in doubt, use brute force. - Ken Thompson"
# time_current: "Now:"
# time_total: "Max:"
# time_goto: "Go to:"
time_current: "Ara:"
time_total: "Maxim:"
time_goto: "Ves a:"
infinite_loop_try_again: "Tornar a intentar"
infinite_loop_reset_level: "Reiniciar nivell"
# infinite_loop_comment_out: "Comment Out My Code"
game_menu:
# inventory_tab: "Inventory"
inventory_tab: "Inventari"
choose_hero_tab: "Recomençar nivell"
save_load_tab: "Desa/Carrega"
options_tab: "Opcions"
@ -475,7 +480,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# choose_hero_caption: "Choose hero, language"
# save_load_caption: "... and view history"
options_caption: "Edita la configuració"
# guide_caption: "Docs and tips"
guide_caption: "Documents i pistes"
multiplayer_caption: "Juga amb amics!"
inventory:
@ -484,7 +489,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
choose_hero:
choose_hero: "Escull el teu heroi"
programming_language: "Llenguatge de programació"
# programming_language_description: "Which programming language do you want to use?"
programming_language_description: "Quin llenguatge de programació vols utilitzar?"
status: "Estat"
weapons: "Armes"
health: "Salut"
@ -505,7 +510,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# editor_config_title: "Editor Configuration"
# editor_config_level_language_label: "Language for This Level"
# editor_config_level_language_description: "Define the programming language for this particular level."
# editor_config_default_language_label: "Default Programming Language"
editor_config_default_language_label: "Llenguatge de programació per defecte"
# editor_config_default_language_description: "Define the programming language you want to code in when starting new levels."
# editor_config_keybindings_label: "Key Bindings"
# editor_config_keybindings_default: "Default (Ace)"
@ -523,7 +528,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# temp: "Temp"
multiplayer:
# multiplayer_title: "Multiplayer Settings"
multiplayer_title: "Configuració multijugador"
multiplayer_toggle: "Activar multijugador"
# multiplayer_toggle_description: "Allow others to join your game."
# multiplayer_link_description: "Give this link to anyone to have them join you."
@ -572,7 +577,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# clas: "CLAs"
community:
# main_title: "CodeCombat Community"
main_title: "Comunitat CodeCombat"
# introduction: "Check out the ways you can get involved below and decide what sounds the most fun. We look forward to working with you!"
# level_editor_prefix: "Use the CodeCombat"
# level_editor_suffix: "to create and edit levels. Users have created levels for their classes, friends, hackathons, students, and siblings. If create a new level sounds intimidating you can start by forking one of ours!"
@ -587,14 +592,14 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
social_twitter: "Segueix CodeCombat al Twitter"
# social_gplus: "Join CodeCombat on Google+"
# social_hipchat: "Chat with us in the public CodeCombat HipChat room"
# contribute_to_the_project: "Contribute to the project"
contribute_to_the_project: "Contribueix al projecte"
editor:
# main_title: "CodeCombat Editors"
# article_title: "Article Editor"
# thang_title: "Thang Editor"
level_title: "Editor de nivells"
# achievement_title: "Achievement Editor"
achievement_title: "Editor de triomfs"
# back: "Back"
# revert: "Revert"
# revert_models: "Revert Models"
@ -606,7 +611,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# generate_terrain: "Generate Terrain"
more: "Més"
wiki: "Wiki"
# live_chat: "Live Chat"
live_chat: "Xat en directe"
# level_some_options: "Some Options?"
# level_tab_thangs: "Thangs"
# level_tab_scripts: "Scripts"
@ -620,7 +625,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# level_tab_thangs_add: "Add Thangs"
delete: "Esborrar"
duplicate: "Duplicar"
# level_settings_title: "Settings"
level_settings_title: "Configuració"
# level_component_tab_title: "Current Components"
# level_component_btn_new: "Create New Component"
# level_systems_tab_title: "Current Systems"
@ -632,17 +637,17 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# level_component_config_schema: "Config Schema"
# level_component_settings: "Settings"
# level_system_edit_title: "Edit System"
# create_system_title: "Create New System"
create_system_title: "Crea un nou sistema"
# new_component_title: "Create New Component"
# new_component_field_system: "System"
# new_article_title: "Create a New Article"
new_component_field_system: "Sistema"
new_article_title: "Crea un article nou"
# new_thang_title: "Create a New Thang Type"
# new_level_title: "Create a New Level"
# new_article_title_login: "Log In to Create a New Article"
new_level_title: "Crea un nou nivell"
new_article_title_login: "Inicia sessió per a crear un article nou"
# new_thang_title_login: "Log In to Create a New Thang Type"
# new_level_title_login: "Log In to Create a New Level"
# new_achievement_title: "Create a New Achievement"
# new_achievement_title_login: "Log In to Create a New Achievement"
new_level_title_login: "Inicia sessió per a crear un nou nivell"
new_achievement_title: "Crea un nou triomf"
new_achievement_title_login: "Inicia sessió per a crear un nou triomf"
# article_search_title: "Search Articles Here"
# thang_search_title: "Search Thang Types Here"
# level_search_title: "Search Levels Here"
@ -660,15 +665,15 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
general:
# and: "and"
name: "Nom"
# date: "Date"
# body: "Body"
date: "Data"
body: "Cos"
version: "Versió"
# commit_msg: "Commit Message"
# version_history: "Version History"
# version_history_for: "Version History for: "
result: "Resultat"
results: "Resultats"
# description: "Description"
description: "Descripció"
# or: "or"
# subject: "Subject"
# email: "Email"
@ -689,7 +694,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
player: "Jugador"
about:
# why_codecombat: "Why CodeCombat?"
why_codecombat: "Perquè CodeCombat?"
# why_paragraph_1: "If you want to learn to program, you don't need lessons. You need to write a lot of code and have a great time doing it."
# why_paragraph_2_prefix: "That's what programming is about. It's gotta be fun. Not fun like"
# why_paragraph_2_italic: "yay a badge"
@ -752,9 +757,9 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# art_description_prefix: "All common content is available under the"
# cc_license_url: "Creative Commons Attribution 4.0 International License"
# art_description_suffix: "Common content is anything made generally available by CodeCombat for the purpose of creating Levels. This includes:"
# art_music: "Music"
# art_sound: "Sound"
# art_artwork: "Artwork"
art_music: "Musica"
art_sound: "So"
art_artwork: "Art"
# art_sprites: "Sprites"
# art_other: "Any and all other non-code creative works that are made available when creating Levels."
# art_access: "Currently there is no universal, easy system for fetching these assets. In general, fetch them from the URLs as used by the site, contact us for assistance, or help us in extending the site to make these assets more easily accessible."
@ -762,12 +767,12 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# use_list_1: "If used in a movie or another game, include codecombat.com in the credits."
# use_list_2: "If used on a website, include a link near the usage, for example underneath an image, or in a general attributions page where you might also mention other Creative Commons works and open source software being used on the site. Something that's already clearly referencing CodeCombat, such as a blog post mentioning CodeCombat, does not need some separate attribution."
# art_paragraph_2: "If the content being used is created not by CodeCombat but instead by a user of codecombat.com, attribute them instead, and follow attribution directions provided in that resource's description if there are any."
# rights_title: "Rights Reserved"
rights_title: "Drets reservats"
# rights_desc: "All rights are reserved for Levels themselves. This includes"
# rights_scripts: "Scripts"
# rights_unit: "Unit configuration"
# rights_description: "Description"
# rights_writings: "Writings"
rights_scripts: "Scripts"
rights_unit: "Configuració de la unitat"
rights_description: "Descripció"
rights_writings: "Escrits"
# rights_media: "Media (sounds, music) and any other creative content made specifically for that Level and not made generally available when creating Levels."
# rights_clarification: "To clarify, anything that is made available in the Level Editor for the purpose of making levels is under CC, whereas the content created with the Level Editor or uploaded in the course of creation of Levels is not."
# nutshell_title: "In a Nutshell"
@ -776,7 +781,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# contribute:
# page_title: "Contributing"
# character_classes_title: "Character Classes"
character_classes_title: "Classes de personatges"
# introduction_desc_intro: "We have high hopes for CodeCombat."
# introduction_desc_pref: "We want to be where programmers of all stripes come to learn and play together, introduce others to the wonderful world of coding, and reflect the best parts of the community. We can't and don't want to do that alone; what makes projects like GitHub, Stack Overflow and Linux great are the people who use them and build on them. To that end, "
# introduction_desc_github_url: "CodeCombat is totally open source"
@ -788,10 +793,10 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# 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_introduction: "One of the best parts about building games is they synthesize so many different things. Graphics, sound, real-time networking, social networking, and of course many of the more common aspects of programming, from low-level database management, and server administration to user facing design and interface building. There's a lot to do, and if you're an experienced programmer with a hankering to really dive into the nitty-gritty of CodeCombat, this class might be for you. We would love to have your help building the best programming game ever."
# class_attributes: "Class Attributes"
# archmage_attribute_1_pref: "Knowledge in "
archmage_attribute_1_pref: "Coneixement en "
# archmage_attribute_1_suf: ", or a desire to learn. Most of our code is in this language. If you're a fan of Ruby or Python, you'll feel right at home. It's JavaScript, but with a nicer syntax."
# archmage_attribute_2: "Some experience in programming and personal initiative. We'll help you get oriented, but we can't spend much time training you."
# how_to_join: "How To Join"
how_to_join: "Com unir-se"
# join_desc_1: "Anyone can help out! Just check out our "
# join_desc_2: "to get started, and check the box below to mark yourself as a brave Archmage and get the latest news by email. Want to chat about what to do or how to get more deeply involved? "
# join_desc_3: ", or find us in our "
@ -867,7 +872,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
adventurer_title: "Aventurer"
adventurer_title_description: "(Provador de nivells)"
scribe_title: "Escriba"
# scribe_title_description: "(Article Editor)"
scribe_title_description: "(Editor d'articles)"
diplomat_title: "Diplomàtic"
diplomat_title_description: "(Traductor)"
# ambassador_title: "Ambassador"
@ -927,24 +932,24 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
rules: "Normes"
winners: "Guanyadors"
# ladder_prizes:
# title: "Tournament Prizes"
ladder_prizes:
title: "Premis del torneig"
# blurb_1: "These prizes will be awarded according to"
# blurb_2: "the tournament rules"
blurb_2: "Les normes del torneig"
# blurb_3: "to the top human and ogre players."
# blurb_4: "Two teams means double the prizes!"
# blurb_5: "(There will be two first place winners, two second-place winners, etc.)"
# rank: "Rank"
# prizes: "Prizes"
# total_value: "Total Value"
rank: "Rang"
prizes: "Premis"
total_value: "Valor total"
# in_cash: "in cash"
# custom_wizard: "Custom CodeCombat Wizard"
# custom_avatar: "Custom CodeCombat avatar"
# heap: "for six months of \"Startup\" access"
# credits: "credits"
credits: "credits"
# one_month_coupon: "coupon: choose either Rails or HTML"
# one_month_discount: "discount, 30% off: choose either Rails or HTML"
# license: "license"
license: "llicencia"
# oreilly: "ebook of your choice"
loading_error:
@ -961,7 +966,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
unknown: "Error desconegut."
resources:
# sessions: "Sessions"
sessions: "Sessions"
# your_sessions: "Your Sessions"
level: "Nivell"
# social_network_apis: "Social Network APIs"
@ -976,24 +981,24 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# patches: "Patches"
# patched_model: "Source Document"
# model: "Model"
# system: "System"
# systems: "Systems"
system: "Sistema"
systems: "Sistemes"
# component: "Component"
# components: "Components"
# thang: "Thang"
# thangs: "Thangs"
# level_session: "Your Session"
level_session: "La teva sessió"
# opponent_session: "Opponent Session"
# article: "Article"
# user_names: "User Names"
user_names: "Noms d'usuaris"
# thang_names: "Thang Names"
# files: "Files"
files: "Archius"
# top_simulators: "Top Simulators"
# source_document: "Source Document"
# document: "Document"
document: "Documents"
# sprite_sheet: "Sprite Sheet"
# employers: "Employers"
# candidates: "Candidates"
candidates: "Candidats"
# candidate_sessions: "Candidate Sessions"
# user_remark: "User Remark"
# user_remarks: "User Remarks"
@ -1001,7 +1006,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
items: "Objectes"
heroes: "Herois"
wizard: "Bruixot"
# achievement: "Achievement"
achievement: "Triomf"
# clas: "CLAs"
# play_counts: "Play Counts"
# feedback: "Feedback"
@ -1013,38 +1018,38 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
# moved_index: "Moved Index"
# text_diff: "Text Diff"
# merge_conflict_with: "MERGE CONFLICT WITH"
# no_changes: "No Changes"
no_changes: "Sense canvis"
user:
# stats: "Stats"
stats: "Estadístiques"
singleplayer_title: "Nivell d'un sol jugador"
multiplayer_title: "Nivells multijugador"
# achievements_title: "Achievements"
achievements_title: "Triomfs"
last_played: "Ultim jugat"
status: "Estat"
status_completed: "Complet"
status_unfinished: "Inacabat"
no_singleplayer: "Encara no s'han jugat nivells individuals."
# no_multiplayer: "No Multiplayer games played yet."
# no_achievements: "No Achievements earned yet."
no_multiplayer: "Encara no s'han jugat nivells multijugador."
no_achievements: "No has aconseguit cap triomf encara."
# favorite_prefix: "Favorite language is "
# favorite_postfix: "."
favorite_postfix: "."
achievements:
# last_earned: "Last Earned"
# amount_achieved: "Amount"
# achievement: "Achievement"
# category_contributor: "Contributor"
# category_miscellaneous: "Miscellaneous"
last_earned: "Últim aconseguit"
amount_achieved: "Cantitat"
achievement: "Triomf"
category_contributor: "Contribuidor"
category_miscellaneous: "Miscel·lània"
category_levels: "Nivells"
# category_undefined: "Uncategorized"
# current_xp_prefix: ""
category_undefined: "Sense categoria"
current_xp_prefix: ""
current_xp_postfix: " en total"
# new_xp_prefix: ""
new_xp_prefix: ""
new_xp_postfix: " guanyat"
# left_xp_prefix: ""
# left_xp_infix: " until level "
# left_xp_postfix: ""
left_xp_prefix: ""
left_xp_infix: " fins el nivell "
left_xp_postfix: ""
account:
recently_played: "Ultimanent jugat"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
adventurer_forum: "fóru Dobrodruhů"
adventurer_suffix: "."
campaign_beginner: "Začátečnická úroveň"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "...ve které se naučíte kouzla programování."
campaign_dev: "Náhodné težší úrovně"
campaign_dev_description: "...ve kterých se dozvíte více o prostředí při plnění těžších úkolů."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Zvolte Kouzlo"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Zvolte někoho pro "
tome_available_spells: "Dostupná kouzla"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
adventurer_forum: "Eventyrer-forummet"
adventurer_suffix: "."
campaign_beginner: "Begynderkampagne"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... hvor du lærer programmeringens kunst."
campaign_dev: "Tilfældige Sværere Niveauer"
campaign_dev_description: "... hvor du lærer grænsefladen imens du udfører lidt sværere opgaver."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Vælg en trylleformular"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Vælg nogen til at "
tome_available_spells: "Tilgængelige trylleformularer"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
adventurer_forum: "im Abenteurerforum"
adventurer_suffix: "."
campaign_beginner: "Anfängerkampagne"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... in der Du die Zauberei der Programmierung lernst."
campaign_dev: "Beliebiges schwierigeres Level"
campaign_dev_description: "... in welchem Du die Bedienung erlernst, indem Du etwas schwierigeres machst."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
# next: "Next"
# previous: "Previous"
choose_inventory: "Gegenstände ausrüsten"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
items:
armor: "Rüstung"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Wähle einen Zauber"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Wähle jemanden aus, um "
tome_available_spells: "Verfügbare Zauber"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Deutsch (Schweiz)", englishDescription: "Ge
adventurer_forum: "Abentürer-Forum"
adventurer_suffix: "."
campaign_beginner: "Afängerkampagne"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... i dere du d Zauberkunst vom Programmiere lernsch."
campaign_dev: "Zuefälligi schwierigeri Level"
campaign_dev_description: "... i dene du s Interface kenne lernsch, während du öppis chli Schwierigers machsch."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Deutsch (Schweiz)", englishDescription: "Ge
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Deutsch (Schweiz)", englishDescription: "Ge
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Wähl en Zauberspruch us"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Wähl öpper us für"
tome_available_spells: "Verfüegbari Zaubersprüch"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
adventurer_forum: "im Abenteurerforum"
adventurer_suffix: "."
campaign_beginner: "Anfängerkampagne"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... in der Du die Zauberei der Programmierung lernst."
campaign_dev: "Beliebiges schwierigeres Level"
campaign_dev_description: "... in welchem Du die Bedienung erlernst, indem Du etwas schwierigeres machst."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
# next: "Next"
# previous: "Previous"
choose_inventory: "Gegenstände ausrüsten"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
items:
armor: "Rüstung"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Wähle einen Zauber"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Wähle jemanden aus, um "
tome_available_spells: "Verfügbare Zauber"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Ελληνικά", englishDescription: "Gre
adventurer_forum: "Φόρουμ του \"Τυχοδιώκτη\""
# adventurer_suffix: "."
campaign_beginner: "Εκστρατεία για Αρχάριους"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... στο οποίο μπορείτε να μάθετε τη μαγεία του προγραμματισμού"
campaign_dev: "Τυχαία δυσκολότερα επίπεδα"
campaign_dev_description: "... στο οποίο μπορείτε να μάθετε το περιβάλλον, ενώ κάνετε κάτι λίγο πιο δύσκολο."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Ελληνικά", englishDescription: "Gre
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Ελληνικά", englishDescription: "Gre
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English
# adventurer_forum: "the Adventurer forum"
# adventurer_suffix: "."
# campaign_beginner: "Beginner Campaign"
# campaign_old_beginner: "Old Beginner Campaign"
# campaign_beginner_description: "... in which you learn the wizardry of programming."
# campaign_dev: "Random Harder Levels"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
# adventurer_forum: "the Adventurer forum"
# adventurer_suffix: "."
# campaign_beginner: "Beginner Campaign"
# campaign_old_beginner: "Old Beginner Campaign"
# campaign_beginner_description: "... in which you learn the wizardry of programming."
# campaign_dev: "Random Harder Levels"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
# adventurer_forum: "the Adventurer forum"
# adventurer_suffix: "."
# campaign_beginner: "Beginner Campaign"
# campaign_old_beginner: "Old Beginner Campaign"
# campaign_beginner_description: "... in which you learn the wizardry of programming."
# campaign_dev: "Random Harder Levels"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -95,7 +95,7 @@
home:
slogan: "Learn to Code by Playing a Game"
no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!"
no_ie: "CodeCombat does not run in Internet Explorer 8 or older. Sorry!"
no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!"
play: "Play" # The big play button that just starts playing a level
old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!"
@ -117,6 +117,7 @@
adventurer_forum: "the Adventurer forum"
adventurer_suffix: "."
campaign_beginner: "Beginner Campaign"
campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... in which you learn the wizardry of programming."
campaign_dev: "Random Harder Levels"
campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@
next: "Next"
previous: "Previous"
choose_inventory: "Equip Items"
older_campaigns: "Older Campaigns"
anonymous: "Anonymous Player"
items:
armor: "Armor"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip
adventurer_forum: "el foro del aventurero"
adventurer_suffix: "."
campaign_beginner: "Campaña para principiantes"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... en la que aprendes la hechicería de la programación."
campaign_dev: "Niveles aleatorios más difíciles"
campaign_dev_description: "... en los que aprendes sobre la interfaz mientras haces algo un poco más difícil."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip
next: "Próximo"
previous: "Previo"
choose_inventory: "Equipar objetos"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
items:
armor: "Armadura"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Selecciona un Hechizo"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Selecciona Alguien para "
tome_available_spells: "Hechizos Disponibles"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
adventurer_forum: "el foro del aventurero "
adventurer_suffix: "sobre ello."
campaign_beginner: "Campaña de Principiante"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... en la que aprenderás la magia de la programación."
campaign_dev: "Niveles aleatorios más dificiles"
campaign_dev_description: "... en los que aprenderás sobre la interfaz mientras haces algo más difícil."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Selecciona un Hechizo"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Selecciona a alguien para "
tome_available_spells: "Hechizos disponibles"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
adventurer_forum: "انجمن ماجراجو ها"
adventurer_suffix: "."
campaign_beginner: "کمپین تازه کارها"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: ".که شما در آن می توانید جادوگری به وسیله برنامه نویسی را یادبگیرید..."
campaign_dev: "مراحل سخت تصادفی"
campaign_dev_description: "... جایی که میتونید طراحی ظاهر رو یاد بگیرید درحالی که فعالیت سخت تری انجام میدید"
@ -139,6 +140,8 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
# adventurer_forum: "the Adventurer forum"
# adventurer_suffix: "."
# campaign_beginner: "Beginner Campaign"
# campaign_old_beginner: "Old Beginner Campaign"
# campaign_beginner_description: "... in which you learn the wizardry of programming."
# campaign_dev: "Random Harder Levels"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
adventurer_forum: "le forum de l'Aventurier"
adventurer_suffix: "."
campaign_beginner: "Campagne du Débutant"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... dans laquelle vous apprendrez la magie de la programmation."
campaign_dev: "Niveaux aléatoires plus difficiles"
campaign_dev_description: "... dans lesquels vous apprendrez à utiliser l'interface en faisant quelque chose d'un petit peu plus dur."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Choisissez un sort"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Sélectionnez une unité pour"
tome_available_spells: "Sorts diponibles"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
adventurer_forum: "פורום ההרפתקנים"
adventurer_suffix: "."
campaign_beginner: "מסע המתחילים"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "...שבו תלמד את קסם התכנות."
campaign_dev: "שלבים אקראים קשים יותר"
campaign_dev_description: "...שבהם תלמד על הממשק בזמן שתעשה משהו קצת קשה יותר."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
# adventurer_forum: "the Adventurer forum"
# adventurer_suffix: "."
# campaign_beginner: "Beginner Campaign"
# campaign_old_beginner: "Old Beginner Campaign"
# campaign_beginner_description: "... in which you learn the wizardry of programming."
# campaign_dev: "Random Harder Levels"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
adventurer_forum: "a Kalandozók Fórumán"
adventurer_suffix: "."
campaign_beginner: "Kezdő Kampány"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... amelyben megtanulhatod a programozás varázslatait."
campaign_dev: "Véletlenszerű Nehezebb Pályák"
campaign_dev_description: "... amelyekben kicsit nehezebb dolgokkal nézhetsz szembe."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Válassz egy varázslatot"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Válassz ki valakit "
tome_available_spells: "Elérhető varázslatok"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
# adventurer_forum: "the Adventurer forum"
# adventurer_suffix: "."
# campaign_beginner: "Beginner Campaign"
# campaign_old_beginner: "Old Beginner Campaign"
# campaign_beginner_description: "... in which you learn the wizardry of programming."
# campaign_dev: "Random Harder Levels"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
adventurer_forum: "forum degli Avventurieri"
adventurer_suffix: "."
campaign_beginner: "Campagne per principianti"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... nelle quali imparerai i trucchi della programmazione."
campaign_dev: "Livelli difficili casuali"
campaign_dev_description: "... nei quali imparerai a usare l'interfaccia facendo qualcosa di un po' più difficile."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Seleziona un incantesimo"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Seleziona qualcuno per "
tome_available_spells: "Incantesimi disponibili"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
adventurer_forum: "冒険者の掲示板"
# adventurer_suffix: "."
campaign_beginner: "初心者のキャンペーン"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "プログラミングの魔法を学びましょう"
campaign_dev: "いろんな難しいレベル"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "呪文を選択"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "誰かを選択: "
tome_available_spells: "利用できる呪文"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
adventurer_forum: "모험가들의 포럼"
adventurer_suffix: "."
campaign_beginner: "초보자 캠페인"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... 이곳에서 당신은 프로그래밍의 마법을 배우게 될 것입니다."
campaign_dev: "상급 레벨 랜덤 선택"
campaign_dev_description: "... 이곳에서 당신은 조금 더 어려운 레벨에 도전할때 필요한 조작 방법을 배울 것입니다."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "마법을 선택 하세요"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "누군가를 선택하세요. "
tome_available_spells: "사용 가능한 마법"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# adventurer_forum: "the Adventurer forum"
# adventurer_suffix: "."
# campaign_beginner: "Beginner Campaign"
# campaign_old_beginner: "Old Beginner Campaign"
# campaign_beginner_description: "... in which you learn the wizardry of programming."
# campaign_dev: "Random Harder Levels"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
# adventurer_forum: "the Adventurer forum"
# adventurer_suffix: "."
# campaign_beginner: "Beginner Campaign"
# campaign_old_beginner: "Old Beginner Campaign"
# campaign_beginner_description: "... in which you learn the wizardry of programming."
# campaign_dev: "Random Harder Levels"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
adventurer_forum: "Adventurer forumet"
adventurer_suffix: "."
campaign_beginner: "Begynner Felttog"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... hvor du lærer trolldommen bak programmering."
campaign_dev: "Tilfeldig Vanskeligere Nivåer"
campaign_dev_description: "... hvor du lærer grensesnittet mens du stadig gjør mer vanskeligere utfordringer."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Velg et Trylleformular"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Velg Noe for å "
tome_available_spells: "Tilgjenglige Trylleformularer"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
adventurer_forum: "het Avonturiersforum"
adventurer_suffix: "."
campaign_beginner: "Beginnercampagne"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... waarin je de toverkunst van het programmeren leert."
campaign_dev: "Willekeurige moeilijkere levels"
campaign_dev_description: "... waarin je de interface leert kennen terwijl je wat moeilijkers doet."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Selecteer een Spreuk"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Selecteer Iemand voor "
tome_available_spells: "Beschikbare spreuken"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
adventurer_forum: "het Avonturiersforum"
adventurer_suffix: "."
campaign_beginner: "Beginnercampagne"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... waarin je de toverkunst van het programmeren leert."
campaign_dev: "Willekeurige moeilijkere levels"
campaign_dev_description: "... waarin je de interface leert kennen terwijl je wat moeilijkers doet."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Selecteer een Spreuk"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Selecteer Iemand voor "
tome_available_spells: "Beschikbare spreuken"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No
# adventurer_forum: "the Adventurer forum"
# adventurer_suffix: "."
# campaign_beginner: "Beginner Campaign"
# campaign_old_beginner: "Old Beginner Campaign"
# campaign_beginner_description: "... in which you learn the wizardry of programming."
# campaign_dev: "Random Harder Levels"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr
adventurer_forum: "Eventyrerforumet"
adventurer_suffix: "."
campaign_beginner: "Nybegynner brett"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... hvor du lærer trolldommen bak programmering."
campaign_dev: "Vanskeligere brett (tilfeldige)"
campaign_dev_description: "... hvor du lærer hvordan du bruker skjermbildene mens du stadig løser mer vanskelige utfordringer."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Velg et trylleformular"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Velg noe for å "
tome_available_spells: "Tilgjenglige trylleformularer"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish
adventurer_forum: "forum Podróżników"
adventurer_suffix: "."
campaign_beginner: "Kampania dla początkujących"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... w której nauczysz się magii programowania"
campaign_dev: "Losowe trudniejsze poziomy"
campaign_dev_description: "... w których nauczysz się interfejsu robiąc coś trudniejszego."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Wybierz czar"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Wybierz kogoś do "
tome_available_spells: "Dostępne czary"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "português do Brasil", englishDescription:
adventurer_forum: "Fórum do Aventureiro"
adventurer_suffix: "."
campaign_beginner: "Campanha Iniciante"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... na qual você aprenderá a magia da programação."
campaign_dev: "Fases Difíceis Aleatórias"
campaign_dev_description: "... nas quais você aprenderá a interface enquanto faz algo um pouco mais difícil."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "português do Brasil", englishDescription:
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "português do Brasil", englishDescription:
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Selecione um Feitiço"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Selecione alguém para "
tome_available_spells: "Feitiços Disponíveis"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
adventurer_forum: "fórum do Aventureiro"
adventurer_suffix: "."
campaign_beginner: "Campanha para Iniciantes"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... onde aprendes a magia da programação."
campaign_dev: "Níveis mais Difíceis Aleatórios"
campaign_dev_description: "... onde aprendes a interface enquanto fazes coisas um bocadinho mais difíceis."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
next: "Seguinte"
previous: "Anterior"
choose_inventory: "Equipar Itens"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
items:
armor: "Armadura"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
tome_cast_button_running: "A Correr"
tome_cast_button_ran: "Corrido"
tome_submit_button: "Submeter"
tome_select_spell: "Seleciona um Feitiço"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Seleciona Alguém para "
tome_available_spells: "Feitiços Disponíveis"
tome_your_skills: "As Tuas Habilidades"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
adventurer_forum: "forumul Aventurierului"
adventurer_suffix: "."
campaign_beginner: "Campanie pentru Începători"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... în care se învață tainele programării."
campaign_dev: "Nivele aleatoare mai grele"
campaign_dev_description: "... în care se învață interfața, cu o dificultate puțin mai mare."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Alege o vrajă"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Alege pe cineva pentru "
tome_available_spells: "Vrăjile disponibile"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
adventurer_forum: "форуме Искателей приключений"
adventurer_suffix: "."
campaign_beginner: "Кампания для новичков"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... в которой вы познакомитесь с магией программирования."
campaign_dev: "Случайные уровни потруднее"
campaign_dev_description: "... в которых вы изучите интерфейс и научитесь делать кое-что посложнее."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Выбрать заклинание"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Выбрать кого-нибудь для "
tome_available_spells: "Доступные заклинания"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
adventurer_forum: "fóre pre dobrodruhov"
adventurer_suffix: "."
campaign_beginner: "Ťaženie pre začiatočníkov"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... v ktorom sa naučíš mágiu programovania."
campaign_dev: "Náhodné ťažšie úrovne"
campaign_dev_description: "... v ktorych sa naučíš používať rozhranie a čeliť väčším výzvam."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
# adventurer_forum: "the Adventurer forum"
# adventurer_suffix: "."
# campaign_beginner: "Beginner Campaign"
# campaign_old_beginner: "Old Beginner Campaign"
# campaign_beginner_description: "... in which you learn the wizardry of programming."
# campaign_dev: "Random Harder Levels"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
adventurer_forum: "форуму Авантуриста"
adventurer_suffix: "."
campaign_beginner: "Почетничка кампања"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... у којој учиш магију програмирања."
campaign_dev: "Насумични тежи нивои"
campaign_dev_description: "... у којима учиш о интерфејсу док радиш нешто теже."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Изабери чин"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Изабери неког за "
tome_available_spells: "Доступне чини"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
adventurer_forum: "Äventyrarforumet"
adventurer_suffix: "."
campaign_beginner: "Nybörjarkampanj"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... i vilken du lär dig programmerandets magi."
campaign_dev: "Slumpad svårare nivå"
campaign_dev_description: "... där du lär dig att hantera gränssnittet medan du gör något lite svårare."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Välj en förmåga"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Välj någon för "
tome_available_spells: "Tillgängliga förmågor"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
# adventurer_forum: "the Adventurer forum"
# adventurer_suffix: "."
# campaign_beginner: "Beginner Campaign"
# campaign_old_beginner: "Old Beginner Campaign"
# campaign_beginner_description: "... in which you learn the wizardry of programming."
# campaign_dev: "Random Harder Levels"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
adventurer_forum: "Maceracı forumunda"
adventurer_suffix: " tartışabilirsiniz."
campaign_beginner: "Acemi Seferi"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "Programlama büyüsünü öğrenmek için..."
campaign_dev: "Rastgele Daha Zor Seviyeler"
campaign_dev_description: "Biraz daha zor işlerle uğraşırken arayüzü öğrenmek için..."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Bir Büyü Seç"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Birini seç..."
tome_available_spells: "Kullanılabilir Büyüler"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "українська мова", englishDesc
adventurer_forum: "форумі Шукачів пригод"
adventurer_suffix: "."
campaign_beginner: "Кампанія для початківців"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "... у якій ви навчитеся магії програмування."
campaign_dev: "Випадкові складніші рівні"
campaign_dev_description: "... в яких ви вивчите інтерфейс, одночасно роблячи щось складніше."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "українська мова", englishDesc
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "українська мова", englishDesc
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "Оберіть закляття"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "Оберіть когось для "
tome_available_spells: "Доступні закляття"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
# adventurer_forum: "the Adventurer forum"
# adventurer_suffix: "."
# campaign_beginner: "Beginner Campaign"
# campaign_old_beginner: "Old Beginner Campaign"
# campaign_beginner_description: "... in which you learn the wizardry of programming."
# campaign_dev: "Random Harder Levels"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
adventurer_forum: "diễn đàn Adventurer"
# adventurer_suffix: "."
campaign_beginner: "Bắt đầu chiến dịch"
# campaign_old_beginner: "Old Beginner Campaign"
# campaign_beginner_description: "... in which you learn the wizardry of programming."
campaign_dev: "Các cấp độ khó hơn ngẫu nhiên"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
adventurer_forum: "冒险者论坛"
adventurer_suffix: ""
campaign_beginner: "新手作战"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "……在这里你可以学习到编程技巧。"
campaign_dev: "随机困难关卡"
campaign_dev_description: "……在这里你可以学到做一些复杂功能的接口。"
@ -139,6 +140,8 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "选择一个法术"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "选择人物来 "
tome_available_spells: "可用的法术"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese
adventurer_forum: "冒險家論壇"
adventurer_suffix: "."
campaign_beginner: "新手指南"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "...在這裡可以學到編程技巧。"
campaign_dev: "隨機關卡"
campaign_dev_description: "...在這裡你可以學到做一些較複雜的程式技巧。"
@ -139,6 +140,8 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "選擇一個法術"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "選擇一個人物來施放"
tome_available_spells: "可用的法術"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
# adventurer_forum: "the Adventurer forum"
# adventurer_suffix: "."
# campaign_beginner: "Beginner Campaign"
# campaign_old_beginner: "Old Beginner Campaign"
# campaign_beginner_description: "... in which you learn the wizardry of programming."
# campaign_dev: "Random Harder Levels"
# campaign_dev_description: "... in which you learn the interface while doing something a little harder."
@ -139,6 +140,8 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
# tome_select_spell: "Select a Spell"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
# tome_select_a_thang: "Select Someone for "
# tome_available_spells: "Available Spells"
# tome_your_skills: "Your Skills"

View file

@ -117,6 +117,7 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
adventurer_forum: "冒險者論壇"
adventurer_suffix: ""
campaign_beginner: "新手打仗"
# campaign_old_beginner: "Old Beginner Campaign"
campaign_beginner_description: "……徠箇裏爾學得到編程手法。"
campaign_dev: "照摸難關"
campaign_dev_description: "……徠箇搭爾學得到做一許囉唆功能個接口。"
@ -139,6 +140,8 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
# next: "Next"
# previous: "Previous"
# choose_inventory: "Equip Items"
# older_campaigns: "Older Campaigns"
# anonymous: "Anonymous Player"
# items:
# armor: "Armor"
@ -416,7 +419,9 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
# tome_cast_button_running: "Running"
# tome_cast_button_ran: "Ran"
# tome_submit_button: "Submit"
tome_select_spell: "揀一個法術"
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
# tome_select_method: "Select a Method"
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methdos).
tome_select_a_thang: "揀人來 "
tome_available_spells: "好用個法術"
# tome_your_skills: "Your Skills"

View file

@ -64,3 +64,15 @@ module.exports = class User extends CocoModel
level: ->
User.levelFromExp(@get('points'))
gems: ->
gemsEarned = @get('earned')?.gems ? 0
purchased = @get('purchased') ? {}
gemsPurchased = purchased.gems ? 0
sum = (arr) -> arr?.reduce((a, b) -> a + b) ? 0
gemsSpent = sum(purchased.heroes) + sum(purchased.items) + sum(purchased.levels)
gemsEarned + gemsPurchased - gemsSpent
earnedHero: (heroOriginal) -> heroOriginal in (me.get('earned')?.heroes ? [])
earnedItem: (itemOriginal) -> itemOriginal in (me.get('earned')?.items ? [])
earnedLevel: (levelOriginal) -> levelOriginal in (me.get('earned')?.levels ? [])

View file

@ -45,7 +45,7 @@ _.extend AchievementSchema.properties,
query:
#type:'object'
$ref: '#/definitions/mongoFindQuery'
worth: c.float
worth: c.float()
collection: {type: 'string'}
description: c.shortString()
userField: c.shortString()
@ -61,7 +61,7 @@ _.extend AchievementSchema.properties,
description: 'For repeatables only. Denotes the field a repeatable achievement needs for its calculations'
recalculable:
type: 'boolean'
description: 'Needs to be set to true before it is elligible for recalculation.'
description: 'Needs to be set to true before it is eligible for recalculation.'
function:
type: 'object'
description: 'Function that gives total experience for X amount achieved'
@ -82,6 +82,8 @@ _.extend AchievementSchema.properties,
format: 'i18n'
props: ['name', 'description']
description: 'Help translate this achievement'
rewards: c.RewardSchema 'awarded by this achievement'
_.extend AchievementSchema, # Let's have these on the bottom
# TODO We really need some required properties in my opinion but this makes creating new achievements impossible as it is now

View file

@ -5,7 +5,7 @@ module.exports =
type: 'object'
default:
previouslyAchievedAmount: 0
properties:
user: c.objectId
links:
@ -30,4 +30,5 @@ module.exports =
achievedAmount: type: 'number'
earnedPoints: type: 'number'
previouslyAchievedAmount: {type: 'number'}
earnedRewards: c.RewardSchema 'awarded by this achievement to this user'
notified: type: 'boolean'

View file

@ -23,8 +23,8 @@ LevelSessionSchema = c.object
title: 'Session'
description: 'A single session for a given level.'
default:
codeLanguage: 'javascript'
submittedCodeLanguage: 'javascript'
codeLanguage: 'python'
submittedCodeLanguage: 'python'
playtime: 0
_.extend LevelSessionSchema.properties,

View file

@ -17,6 +17,8 @@ UserSchema = c.object
simulatedBy: 0
simulatedFor: 0
jobProfile: {}
earned: {heroes: [], items: [], levels: [], gems: 0}
purchased: {heroes: [], items: [], levels: [], gems: 0}
c.extendNamedProperties UserSchema # let's have the name be the first property
@ -106,8 +108,8 @@ _.extend UserSchema.properties,
wizard: c.object {},
colorConfig: c.object {additionalProperties: c.colorConfig()}
aceConfig: c.object { default: { language: 'javascript', keyBindings: 'default', invisibles: false, indentGuides: false, behaviors: false, liveCompletion: true }},
language: {type: 'string', 'enum': ['javascript', 'coffeescript', 'python', 'clojure', 'lua', 'io']}
aceConfig: c.object { default: { language: 'python', keyBindings: 'default', invisibles: false, indentGuides: false, behaviors: false, liveCompletion: true }},
language: {type: 'string', 'enum': ['python', 'javascript', 'coffeescript', 'clojure', 'lua', 'io']}
keyBindings: {type: 'string', 'enum': ['default', 'vim', 'emacs']}
invisibles: {type: 'boolean' }
indentGuides: {type: 'boolean' }
@ -265,6 +267,8 @@ _.extend UserSchema.properties,
thangTypeTranslationPatches: c.int()
thangTypeMiscPatches: c.int()
earned: c.RewardSchema 'earned by achievements'
purchased: c.RewardSchema 'purchased with gems'
c.extendBasicProperties UserSchema, 'user'

View file

@ -18,6 +18,7 @@ me.pct = (ext) -> combine({type: 'number', maximum: 1.0, minimum: 0.0}, ext)
me.date = (ext) -> combine({type: ['object', 'string'], format: 'date-time'}, ext)
# should just be string (Mongo ID), but sometimes mongoose turns them into objects representing those, so we are lenient
me.objectId = (ext) -> schema = combine({type: ['object', 'string']}, ext)
me.stringID = (ext) -> schema = combine({type: 'string', minLength: 24, maxLength: 24}, ext)
me.url = (ext) -> combine({type: 'string', format: 'url', pattern: urlPattern}, ext)
me.int = (ext) -> combine {type: 'integer'}, ext
me.float = (ext) -> combine {type: 'number'}, ext
@ -171,7 +172,7 @@ me.FunctionArgumentSchema = me.object {
description: 'Examples by code language.',
additionalProperties: me.shortString(description: 'Example value for the argument.')
format: 'code-languages-object'
default: {javascript: ''}
default: {javascript: '', python: ''}
}
me.shortString(title: 'Example', description: 'Example value for the argument.')
]
@ -183,7 +184,7 @@ me.FunctionArgumentSchema = me.object {
description: 'Example argument descriptions by code language.',
additionalProperties: {type: 'string', description: 'Description of the argument.', maxLength: 1000}
format: 'code-languages-object'
default: {javascript: ''}
default: {javascript: '', python: ''}
}
{title: 'Description', type: 'string', description: 'Description of the argument.', maxLength: 1000}
]
@ -209,3 +210,16 @@ me.HeroConfigSchema = me.object {description: 'Which hero the player is using, e
description: 'The inventory of the hero: slots to item ThangTypes.'
additionalProperties: me.objectId(description: 'An item ThangType.')
thangType: me.objectId(links: [{rel: 'db', href: '/db/thang.type/{($)}/version'}], title: 'Thang Type', description: 'The ThangType of the hero.', format: 'thang-type')
me.RewardSchema = (descriptionFragment='earned by achievements') ->
type: 'object'
additionalProperties: false
description: "Rewards #{descriptionFragment}."
properties:
heroes: me.array {uniqueItems: true, description: "Heroes #{descriptionFragment}."},
me.stringID(links: [{rel: 'db', href: '/db/thang.type/{($)}/version'}], title: 'Hero ThangType', description: 'A reference to the earned hero ThangType.', format: 'thang-type')
items: me.array {uniqueItems: true, description: "Items #{descriptionFragment}."},
me.stringID(links: [{rel: 'db', href: '/db/thang.type/{($)}/version'}], title: 'Item ThangType', description: 'A reference to the earned item ThangType.', format: 'thang-type')
levels: me.array {uniqueItems: true, description: "Levels #{descriptionFragment}."},
me.stringID(links: [{rel: 'db', href: '/db/level/{($)}/version'}], title: 'Level', description: 'A reference to the earned Level.', format: 'latest-version-original-reference')
gems: me.int {description: "Gems #{descriptionFragment}."}

View file

@ -314,3 +314,27 @@ kbd
background-color: #333
border-radius: 3px
@include box-shadow(inset 0 -1px 0 rgba(0, 0, 0, .25))
.gem
display: inline-block
background: transparent url(/images/common/gem.png) no-repeat center
background-size: contain
width: 80px
height: 80px
margin: 0px 2px
&.gem-20
width: 20px
height: 20px
&.gem-25
width: 25px
height: 25px
&.gem-40
width: 40px
height: 40px
&.gem-60
width: 60px
height: 60px

View file

@ -196,7 +196,7 @@ a.disabled
.navbar-toggle
display: none
@media only screen and (max-width: 800px)
@media only screen and (max-width: 768px)
#top-nav
display: inline
button.navbar-toggle

View file

@ -15,6 +15,7 @@
display: block
margin: 0 auto
@include transition(box-shadow .50s ease-in-out)
border-radius: 11px
text-shadow: 2px 2px 5px black
@ -62,176 +63,12 @@
&.inverted
filter: invert(100%)
-webkit-filter: invert(100%)
.code-languages
margin: 10px 0 30px 0
&:hover
.code-language
opacity: 0.6
.code-language.selected-language:not(:hover)
opacity: 0.8
h2, h3
text-shadow: none
.code-wizard
opacity: 0.5
.language-play-count
text-transform: lowercase
position: absolute
left: 0
top: 0
.code-language
cursor: pointer
text-align: center
position: relative
opacity: 0.6
&:hover
opacity: 1
h2, h3
text-shadow: 0px 0px 5px white
.code-wizard
display: block
opacity: 1
&.selected-language
opacity: 1
h2, h3
text-shadow: 0px 0px 5px white
.code-wizard
display: block
.code-wizard
position: absolute
background: transparent url(/images/pages/home/wizard.png) no-repeat
background-size: contain
width: 111px
height: 97px
display: none
.code-language-beta
background: transparent url(/images/pages/home/language_beta_sticker.png) no-repeat
background-size: contain
width: 100px
height: 32px
position: absolute
right: 20px
top: -7px
.primary-code-languages
#javascript
background: transparent url(/images/pages/home/language_js.png) no-repeat
padding-right: 150px
.language-play-count
right: -100px
.code-wizard
left: 120px
#python
background: transparent url(/images/pages/home/language_python.png) no-repeat
padding-left: 150px
.language-play-count
left: 125px
.code-wizard
right: 120px
.code-language
width: 498px
height: 153px
padding: 30px
margin: 0px 0 0 -6px
.code-wizard
top: -65px
h2
margin: 15px 0 5px
p
overflow: hidden
height: 40px
.secondary-code-languages
margin-left: -10px
.col-md-3
padding: 0px
.language-play-count
left: 15px
top: -15px
.code-language
background: transparent url(/images/pages/home/language_background_small.png) no-repeat
width: 250px
height: 80px
margin: 20px 0 20px 0
padding: 20px 20px 20px 70px
.code-wizard
top: -51px
left: 89px
height: 63px
.code-language-logo
position: absolute
left: 15px
top: 17px
width: 50px
height: 50px
.code-language-beta
right: -15px
top: -16px
height: 24px
h3
margin: 0
padding: 0
p
white-space: nowrap
text-overflow: ellipsis
overflow: hidden
#coffeescript .code-language-logo
background: transparent url(/images/common/code_languages/coffeescript_small.png) no-repeat center
#clojure .code-language-logo
background: transparent url(/images/common/code_languages/clojure_small.png) no-repeat center
#lua .code-language-logo
background: transparent url(/images/common/code_languages/lua_small.png) no-repeat center
#io .code-language-logo
background: transparent url(/images/common/code_languages/io_small.png) no-repeat center
#mobile-trailer-wrapper
display: none
@media only screen and (max-width: 800px)
@media only screen and (max-width: 768px)
#home-view
#site-slogan
font-size: 30px
margin-bottom: 30px
.code-languages
.col-sm-6, .col-sm-3
margin-top: 30px
.code-language
margin: 0px auto
.game-mode-wrapper
width: 100%
img
@ -244,9 +81,6 @@
font-size: 50px
font-family: Bangers
@include transition(color .10s linear)
.code-language-logo
right: 0px
top: 5px
h1
text-align: center

View file

@ -52,9 +52,16 @@ $gameControlMargin: 30px
border: 2px groove white
@include transition(margin-bottom 0.5s ease)
&.disabled
&.disabled, &.locked
background-image: url(/images/pages/game-menu/lock.png)
background-size: 75%
background-repeat: no-repeat
background-position: 50% 50%
opacity: 0.7
a
cursor: default
&.next
width: 2 * $levelDotWidth
height: 2 * $levelDotHeight
@ -151,7 +158,7 @@ $gameControlMargin: 30px
bottom: 1%
z-index: 3
button.btn
.btn
&:not(:first-child)
margin-left: $gameControlMargin
width: $gameControlSize
@ -180,3 +187,32 @@ $gameControlMargin: 30px
.tooltip
font-size: 24px
.old-levels
position: absolute
bottom: 1%
left: 1%
z-index: 3
a
font-size: 24px
color: #eee
text-decoration: underline
&:hover
color: white
text-shadow: 1px 1px 0px black
.user-status
position: absolute
bottom: 1%
left: 50%
width: 400px
margin-left: -200px
text-align: center
font-size: 24px
color: white
text-shadow: 1px 1px 0px black
button
margin-left: 10px

View file

@ -1,6 +1,5 @@
@import "bootstrap/variables"
@import "bootstrap/mixins"
@import "base"
#employers-wrapper
background-color: #B4B4B4
@ -51,5 +50,3 @@
#login-button
margin-left: 40%
width: 20%

View file

@ -14,10 +14,6 @@ body
img(src="/images/pages/base/logo.png", title="CodeCombat - Learn how to code by playing a game", alt="CodeCombat")
ul(class='navbar-link-text').nav.navbar-nav.navbar-collapse.collapse
li.play
a.header-font(href='/play', data-i18n="nav.play") Levels
li
a.header-font(href='/community', data-i18n="nav.community") Community
if me.get('anonymous') === false
li.dropdown
button.btn.btn-primary.navbuttontext.header-font.dropdown-toggle(href="#", data-toggle="dropdown")
@ -68,12 +64,14 @@ body
.content
p.footer-link-text
if pathname == "/" || (me.get('permissions', true)).indexOf('employer') != -1
a(href='/employers', title='Home', tabindex=-1, data-i18n="nav.employers") Employers
a(href='/employers', tabindex=-1, data-i18n="nav.employers") Employers
else
a(href='/', title='Home', tabindex=-1, data-i18n="nav.home") Home
a(href='/contribute', title='Contribute', tabindex=-1, data-i18n="nav.contribute") Contribute
a(href='/legal', title='Legal', tabindex=-1, data-i18n="nav.legal") Legal
a(href='/about', title='About', tabindex=-1, data-i18n="nav.about") About
a(href='/', tabindex=-1, data-i18n="nav.home") Home
a(href='/play/ladder', tabindex=-1, data-i18n="home.multiplayer") Multiplayer
a(href='/community', tabindex=-1, data-i18n="nav.community") Community
a(href='/contribute', tabindex=-1, data-i18n="nav.contribute") Contribute
a(href='/legal', tabindex=-1, data-i18n="nav.legal") Legal
a(href='/about', tabindex=-1, data-i18n="nav.about") About
a(title='Contact', tabindex=-1, data-toggle="coco-modal", data-target="modal/ContactModal", data-i18n="nav.contact") Contact
a(href='http://blog.codecombat.com/', data-i18n="nav.blog") Blog
a(href='http://discourse.codecombat.com/', data-i18n="nav.forum") Forum

View file

@ -2,23 +2,25 @@
.carousel-indicator-container
ol.carousel-indicators
for hero, index in heroes
- var info = heroInfo[hero.get('slug')]
li(data-hero-id=hero.get('original'), title=hero.get('name'), data-slide-to=index, data-target="#hero-carousel", class="hero-indicator" + (info.status == "Locked" ? " locked" : ""))
li(data-hero-id=hero.get('original'), title=hero.get('name'), data-slide-to=index, data-target="#hero-carousel", class="hero-indicator" + (hero.locked ? " locked" : ""))
.hero-avatar
if info.status == "Locked"
if hero.locked
img.lock-indicator(src="/images/pages/game-menu/lock.png")
.carousel-inner
for hero in heroes
- var info = heroInfo[hero.get('slug')]
div(class="item hero-item" + (info.status == "Locked" ? " locked" : ""), data-hero-id=hero.get('original'))
div(class="item hero-item" + (hero.locked ? " locked" : ""), data-hero-id=hero.get('original'))
canvas.hero-canvas
.hero-stats
h2= info.fullName
p
span(data-i18n="choose_hero.status") Status
span.spr :
| #{info.status}
if hero.locked
| #{info.status}
else
| Available
p
span(data-i18n="choose_hero.weapons") Weapons
span.spr :

View file

@ -4,86 +4,8 @@ block content
h1#site-slogan(data-i18n="home.slogan") Learn to Code by Playing a Game
.code-languages
.primary-code-languages.row
.col-sm-6
.code-language#javascript(data-code-language='javascript')
.code-wizard
h2 JavaScript
p(data-i18n="home.javascript_blurb") The language of the web. Great for writing websites, web apps, HTML5 games, and servers.
- var playCount = codeLanguageCountMap.javascript
if playCount
div.language-play-count
span.spr= playCount
span(data-i18n="resources.sessions") sessions
.col-sm-6
.code-language.beta#python(data-code-language='python')
.code-wizard
.code-language-beta
h2 Python
p(data-i18n="home.python_blurb") Simple yet powerful, Python is a great general purpose programming language.
- var playCount = codeLanguageCountMap.python
if playCount
div.language-play-count
span.spr= playCount
span(data-i18n="resources.sessions") sessions
.secondary-code-languages.row
.col-sm-3
.code-language.beta#coffeescript(data-code-language='coffeescript')
.code-language-logo
.code-wizard
.code-language-beta
h3 CoffeeScript
p(data-i18n="home.coffeescript_blurb") Nicer JavaScript syntax.
- var playCount = codeLanguageCountMap.coffeescript
if playCount
div.language-play-count
span.spr= playCount
span(data-i18n="resources.sessions") sessions
.col-sm-3
.code-language.beta#clojure(data-code-language='clojure')
.code-language-logo
.code-wizard
.code-language-beta
h3 Clojure
p(data-i18n="home.clojure_blurb") A modern Lisp.
- var playCount = codeLanguageCountMap.clojure
if playCount
div.language-play-count
span.spr= playCount
span(data-i18n="resources.sessions") sessions
.col-sm-3
.code-language.beta#lua(data-code-language='lua')
.code-language-logo
.code-wizard
.code-language-beta
h3 Lua
p(data-i18n="home.lua_blurb") Game scripting language.
- var playCount = codeLanguageCountMap.lua
if playCount
div.language-play-count
span.spr= playCount
span(data-i18n="resources.sessions") sessions
.col-sm-3
.code-language.beta#io(data-code-language='io', title="Careful: Io is still quite buggy")
.code-language-logo
.code-wizard
.code-language-beta
h3 Io
p(data-i18n="home.io_blurb") Simple but obscure.
- var playCount = codeLanguageCountMap.io
if playCount
div.language-play-count
span.spr= playCount
span(data-i18n="resources.sessions") sessions
.alert.alert-danger.lt-ie10
strong(data-i18n="home.no_ie") CodeCombat does not run in Internet Explorer 9 or older. Sorry!
.alert.alert-danger.lt-ie9
strong(data-i18n="home.no_ie") CodeCombat does not run in Internet Explorer 8 or older. Sorry!
if isMobile
.alert.alert-danger.mobile
@ -94,26 +16,11 @@ block content
br
span(data-i18n="home.old_browser_suffix") You can try anyway, but it probably won't work.
a#beginner-campaign(href="/play/level/rescue-mission")
a#beginner-campaign(href="/play")
div.game-mode-wrapper
if isEnglish
img(src="/images/pages/home/campaign.jpg").img-rounded
else
img(src="/images/pages/home/campaign_notext.jpg").img-rounded
h3(data-i18n="home.campaign") Campaign
h4(data-i18n="home.for_beginners") For Beginners
img(src="/images/pages/home/play_img.png").img-rounded
h3(data-i18n="home.campaign") Campaign
h4(data-i18n="home.for_beginners") For Beginners
.play-text(data-i18n="home.play") Play
.code-language-logo
a#multiplayer(href="/play/ladder")
div.game-mode-wrapper
if isEnglish
img(src="/images/pages/home/multiplayer.jpg").img-rounded
else
img(src="/images/pages/home/multiplayer_notext.jpg").img-rounded
h3(data-i18n="home.multiplayer") Multiplayer
h4(data-i18n="home.for_developers") For Developers
.play-text(data-i18n="home.play") Play
.code-language-logo
.clearfix

View file

@ -6,12 +6,12 @@
each level in campaign.levels
- var next = !seenNext && levelStatusMap[level.id] != "complete";
- seenNext = seenNext || next;
div(style="left: #{level.x}%; bottom: #{level.y}%; background-color: #{campaign.color}", class="level" + (next ? " next" : "") + (level.disabled ? " disabled" : "") + " " + levelStatusMap[level.id] || "", data-level-id=level.id, title=level.name)
div(style="left: #{level.x}%; bottom: #{level.y}%; background-color: #{campaign.color}", class="level" + (next ? " next" : "") + (level.disabled ? " disabled" : "") + (level.locked ? " locked" : "") + " " + levelStatusMap[level.id] || "", data-level-id=level.id, title=level.name)
a(href=level.type == 'hero' ? '#' : level.disabled ? "/play" : "/play/#{level.levelPath || 'level'}/#{level.id}", disabled=level.disabled, data-level-id=level.id, data-level-path=level.levelPath || 'level', data-level-name=level.name)
div(style="left: #{level.x}%; bottom: #{level.y}%", class="level-shadow" + (next ? " next" : "") + " " + levelStatusMap[level.id] || "")
.level-info-container(data-level-id=level.id, data-level-path=level.levelPath || 'level', data-level-name=level.name)
div(class="level-info " + (levelStatusMap[level.id] || ""))
h3= level.name + (level.disabled ? " (Coming soon!)" : "")
h3= level.name + (level.disabled ? " (Coming soon!)" : (level.locked ? " (Locked)" : ""))
.level-description= level.description
span(data-i18n="play.level_difficulty") Difficulty:
each i in Array(level.difficulty)
@ -30,7 +30,27 @@
.game-controls.header-font
if me.isAdmin()
button.btn.items(data-toggle='coco-modal', data-target='play/modal/PlayItemsModal', data-i18n="[title]play.items")
button.btn.heroes(data-toggle='coco-modal', data-target='play/modal/PlayHeroesModal', data-i18n="[title]play.heroes")
button.btn.achievements(data-toggle='coco-modal', data-target='play/modal/PlayAchievementsModal', data-i18n="[title]play.achievements")
button.btn.account(data-toggle='coco-modal', data-target='play/modal/PlayAccountModal', data-i18n="[title]play.account")
button.btn.settings(data-toggle='coco-modal', data-target='play/modal/PlaySettingsModal', data-i18n="[title]play.settings")
button.btn.heroes(data-toggle='coco-modal', data-target='play/modal/PlayHeroesModal', data-i18n="[title]play.heroes")
button.btn.achievements(data-toggle='coco-modal', data-target='play/modal/PlayAchievementsModal', data-i18n="[title]play.achievements")
if me.isAdmin()
button.btn.account(data-toggle='coco-modal', data-target='play/modal/PlayAccountModal', data-i18n="[title]play.account")
button.btn.settings(data-toggle='coco-modal', data-target='play/modal/PlaySettingsModal', data-i18n="[title]play.settings")
else if me.get('anonymous')
button.btn.settings(data-toggle='coco-modal', data-target='modal/AuthModal', data-i18n="[title]play.settings")
else
a.btn.achievements(href="/user/#{me.getSlugOrID()}/stats", data-i18n="[title]play.achievements")
a.btn.account(href="/user/#{me.getSlugOrID()}", data-i18n="[title]play.account")
a.btn.settings(href='/account', data-i18n="[title]play.settings")
.old-levels
a(href="/play-old", data-i18n="play.older_campaigns").header-font Older Campaigns
.user-status.header-font
span.gem.gem-20
span.spr= me.gems()
if me.get('anonymous')
span.spr(data-i18n="play.anonymous_player") Anonymous Player
button.btn.btn-default.btn-flat.btn-sm(data-toggle='coco-modal', data-target='modal/AuthModal', data-i18n="login.log_in")
else
span.spr= me.get('name')
button#logout-button.btn.btn-default.btn-flat.btn-sm(data-i18n="login.log_out") Log Out

View file

@ -258,7 +258,7 @@ class JavaScriptTreema extends CodeTreema
class InternationalizationNode extends TreemaNode.nodeMap.object
findLanguageName: (languageCode) ->
# to get around mongoose emtpy object bug, there's a prop in the object which needs to be ignored
# to get around mongoose empty object bug, there's a prop in the object which needs to be ignored
return '' if languageCode is '-'
locale[languageCode]?.nativeDescription or "#{languageCode} Not Found"
@ -360,11 +360,14 @@ class LatestVersionReferenceNode extends TreemaNode
return 'Unknown' unless @settings.supermodel?
m = CocoModel.getReferencedModel(@getData(), @workingSchema)
data = @getData()
m = @settings.supermodel.getModelByOriginalAndMajorVersion(m.constructor, data.original, data.majorVersion)
if _.isString data # LatestVersionOriginalReferenceNode just uses original
m = @settings.supermodel.getModelByOriginal(m.constructor, data)
else
m = @settings.supermodel.getModelByOriginalAndMajorVersion(m.constructor, data.original, data.majorVersion)
if @instance and not m
m = @instance
@settings.supermodel.registerModel(m)
return 'Unknown' unless m
return 'Unknown - ' + (data.original ? data) unless m
return @modelToString(m)
saveChanges: ->
@ -409,6 +412,15 @@ class LatestVersionReferenceNode extends TreemaNode
selected = @getSelectedResultEl()
return not selected.length
class LatestVersionOriginalReferenceNode extends LatestVersionReferenceNode
# Just for saving the original, not the major version.
saveChanges: ->
selected = @getSelectedResultEl()
return unless selected.length
fullValue = selected.data('value')
@data = fullValue.attributes.original
@instance = fullValue
class LevelComponentReferenceNode extends LatestVersionReferenceNode
# HACK: this list of properties is needed by the thang components edit view and config views.
# need a better way to specify this, or keep the search models from bleeding into those
@ -436,6 +448,7 @@ module.exports.setup = ->
TreemaNode.setNodeSubclass('javascript', JavaScriptTreema)
TreemaNode.setNodeSubclass('image-file', ImageFileTreema)
TreemaNode.setNodeSubclass('latest-version-reference', LatestVersionReferenceNode)
TreemaNode.setNodeSubclass('latest-version-original-reference', LatestVersionOriginalReferenceNode)
TreemaNode.setNodeSubclass('component-reference', LevelComponentReferenceNode)
TreemaNode.setNodeSubclass('i18n', InternationalizationNode)
TreemaNode.setNodeSubclass('sound-file', SoundFileTreema)

View file

@ -10,12 +10,7 @@ module.exports = class HomeView extends RootView
template: template
events:
'click .code-language': 'onCodeLanguageSelected'
constructor: ->
super(arguments...)
ThangType.loadUniversalWizard()
@getCodeLanguageCounts()
'click #beginner-campaign': 'onClickBeginnerCampaign'
getRenderData: ->
c = super()
@ -28,61 +23,9 @@ module.exports = class HomeView extends RootView
console.warn 'no more jquery browser version...'
c.isEnglish = (me.get('preferredLanguage') or 'en').startsWith 'en'
c.languageName = me.get('preferredLanguage')
c.codeLanguage = (me.get('aceConfig') ? {}).language or 'javascript'
c.codeLanguageCountMap = @codeLanguageCountMap
c
afterRender: ->
super()
@$el.find('.modal').on 'shown.bs.modal', ->
$('input:visible:first', @).focus()
# Try to find latest level and set 'Play' link to go to that level
lastLevel = me.get('lastLevel')
lastLevel ?= localStorage?['lastLevel'] # Temp, until it's migrated to user property
if lastLevel
playLink = @$el.find('#beginner-campaign')
if playLink[0]?
href = playLink.attr('href').split('/')
href[href.length-1] = lastLevel if href.length isnt 0
href = href.join('/')
playLink.attr('href', href)
codeLanguage = (me.get('aceConfig') ? {}).language or 'javascript'
@$el.find(".code-language[data-code-language=#{codeLanguage}]").addClass 'selected-language'
@updateLanguageLogos codeLanguage
updateLanguageLogos: (codeLanguage) ->
@$el.find('.game-mode-wrapper .code-language-logo').css('background-image', "url(/images/common/code_languages/#{codeLanguage}_small.png)")
onCodeLanguageSelected: (e) ->
target = $(e.target).closest('.code-language')
codeLanguage = target.data('code-language')
@$el.find('.code-language').removeClass 'selected-language'
target.addClass 'selected-language'
aceConfig = me.get('aceConfig') ? {}
return if (aceConfig.language or 'javascript') is codeLanguage
aceConfig.language = codeLanguage
me.set 'aceConfig', aceConfig
me.save() # me.patch() doesn't work if aceConfig previously existed and we switched just once
firstButton = @$el.find('#beginner-campaign .game-mode-wrapper').delay(500).addClass('hovered', 500).delay(500).removeClass('hovered', 500)
lastButton = @$el.find('#multiplayer .game-mode-wrapper').delay(1000).addClass('hovered', 500).delay(500).removeClass('hovered', 500)
$('#page-container').animate {scrollTop: firstButton.offset().top - 100, easing: 'easeInOutCubic'}, 500
@updateLanguageLogos codeLanguage
getCodeLanguageCounts: ->
@codeLanguageCountMap = {}
success = (codeLanguageCounts) =>
return if @destroyed
for codeLanguage in codeLanguageCounts
@codeLanguageCountMap[codeLanguage._id] = codeLanguage.sessions
@codeLanguageCountMap.javascript += @codeLanguageCountMap[null]
@render() if @supermodel.finished()
codeLanguageCountsRequest = @supermodel.addRequestResource 'play_counts', {
url: '/db/level.session/-/code_language_counts'
method: 'POST'
success: success
}, 0
codeLanguageCountsRequest.load()
onClickBeginnerCampaign: (e) ->
e.preventDefault()
e.stopImmediatePropagation()
window.open '/play', '_blank'

View file

@ -15,8 +15,6 @@ module.exports = class AchievementPopup extends CocoView
@popup ?= true
@className += ' popup' if @popup
super options
console.debug 'Created an AchievementPopup', @$el
@render()
calculateData: ->
@ -62,7 +60,6 @@ module.exports = class AchievementPopup extends CocoView
c
render: ->
console.debug 'render achievement popup'
super()
@container.prepend @$el
if @popup

View file

@ -23,7 +23,7 @@ module.exports = class LevelSessionCodeView extends CocoView
c.levelSpells = @organizeCode()
c.sessionLink = "/play/level/" + (@level.get('slug') or @level.id) + "?team=" + (@session.get('team') || 'humans') + "&session=" + @session.id
c
afterRender: ->
super()
editors = []
@ -34,9 +34,9 @@ module.exports = class LevelSessionCodeView extends CocoView
editor.setReadOnly true
editors.push editor
aceSession = editor.getSession()
aceSession.setMode 'ace/mode/javascript'
aceSession.setMode 'ace/mode/javascript' # TODO: they're not all JS
@editors = editors
organizeCode: ->
team = @session.get('team') or 'humans'
teamSpells = @session.get('teamSpells')[team] or []
@ -50,8 +50,8 @@ module.exports = class LevelSessionCodeView extends CocoView
name: spell
height: height
}
filteredSpells
filteredSpells
destroy: ->
for editor in @editors
@editors
@editors

View file

@ -35,7 +35,7 @@ module.exports = class ComponentsDocumentationView extends CocoView
c = super()
c.components = @componentDocs.models
c.marked = marked
c.codeLanguage = me.get('aceConfig')?.language ? 'javascript'
c.codeLanguage = me.get('aceConfig')?.language ? 'python'
c
onToggleAllCode: (e) ->

View file

@ -35,7 +35,7 @@ module.exports = class SystemsDocumentationView extends CocoView
c = super()
c.systems = @systemDocs.models
c.marked = marked
c.codeLanguage = me.get('aceConfig')?.language ? 'javascript'
c.codeLanguage = me.get('aceConfig')?.language ? 'python'
c
onToggleAllCode: (e) ->

View file

@ -5,6 +5,7 @@ AchievementPopup = require 'views/achievements/AchievementPopup'
ConfirmModal = require 'views/modal/ConfirmModal'
errors = require 'lib/errors'
app = require 'application'
nodes = require 'views/editor/level/treema_nodes'
module.exports = class AchievementEditView extends RootView
id: 'editor-achievement-edit-view'
@ -36,8 +37,13 @@ module.exports = class AchievementEditView extends RootView
readOnly: me.get('anonymous')
callbacks:
change: @pushChangesToPreview
nodeClasses:
'thang-type': nodes.ThangTypeNode
'item-thang-type': nodes.ItemThangTypeNode
supermodel: @supermodel
@treema = @$el.find('#achievement-treema').treema(options)
@treema.build()
@treema.childrenTreemas.rewards?.open(3)
@pushChangesToPreview()
getRenderData: (context={}) ->

View file

@ -36,6 +36,7 @@ module.exports = class ChooseHeroView extends CocoView
getRenderData: (context={}) ->
context = super(context)
context.heroes = @heroes.models
hero.locked = temporaryHeroInfo[hero.get('slug')].status is 'Locked' and not me.earnedHero hero.get('original') for hero in context.heroes
context.level = @options.level
context.codeLanguages = [
{id: 'python', name: 'Python'}
@ -76,7 +77,7 @@ module.exports = class ChooseHeroView extends CocoView
size = 100 - (50 / 3) * distance
$(@).css width: size, height: size, top: -(100 - size) / 2
heroInfo = temporaryHeroInfo[hero.get('slug')]
locked = heroInfo.status is 'Locked'
locked = heroInfo.status is 'Locked' and not me.earnedHero ThangType.heroes[hero.get('slug')]
hero = @loadHero hero, heroIndex
@preloadHero heroIndex + 1
@preloadHero heroIndex - 1

View file

@ -311,7 +311,7 @@ module.exports = class InventoryView extends CocoView
'the-final-kithmaze': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'}
'kithgard-gates': {feet: 'simple-boots', 'right-hand': 'builders-hammer', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'}
'defence-of-plainswood': {feet: 'simple-boots', 'right-hand': 'builders-hammer', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'}
necessaryGear = gearByLevel[@options.levelID]
return unless necessaryGear = gearByLevel[@options.levelID]
for slot, item of necessaryGear ? {}
@equipment[slot] ?= gear[item]
@ -321,6 +321,8 @@ module.exports = class InventoryView extends CocoView
for slot, item of items
@allowedItems.push gear[item] unless gear[item] in @allowedItems
break if level is @options.levelID
for item in me.get('earned')?.items ? [] when not (item in @allowedItems)
@allowedItems.push item
onHeroSelectionUpdated: (e) ->
@selectedHero = e.hero

View file

@ -43,6 +43,7 @@ module.exports = class AuthModal extends ModalView
afterInsert: ->
super()
_.delay application.router.renderLoginButtons, 500
_.delay (=> $('input:visible:first', @$el).focus()), 500
onSignupInstead: (e) ->
@mode = 'signup'

View file

@ -54,11 +54,6 @@ module.exports = class MainPlayView extends RootView
context.levelPlayCountMap = @levelPlayCountMap
context
afterRender: ->
super()
@$el.find('.modal').on 'shown.bs.modal', ->
$('input:visible:first', @).focus()
tutorials = [
{
@ -327,7 +322,7 @@ playerCreated = [
]
campaigns = [
{id: 'beginner', name: 'Beginner Campaign', description: '... in which you learn the wizardry of programming.', levels: tutorials}
{id: 'old_beginner', name: 'Old Beginner Campaign', description: '... in which you learn the wizardry of programming.', levels: tutorials}
{id: 'multiplayer', name: 'Multiplayer Arenas', description: '... in which you code head-to-head against other players.', levels: arenas}
{id: 'dev', name: 'Random Harder Levels', description: '... in which you learn the interface while doing something a little harder.', levels: experienced}
{id: 'classic' ,name: 'Classic Algorithms', description: '... in which you learn the most popular algorithms in Computer Science.', levels: classicAlgorithms}

View file

@ -33,9 +33,13 @@ module.exports = class WorldMapView extends RootView
@listenToOnce @sessions, 'sync', @onSessionsLoaded
@getLevelPlayCounts()
$(window).on 'resize', @onWindowResize
@playAmbientSound()
destroy: ->
$(window).off 'resize', @onWindowResize
if ambientSound = @ambientSound
# Doesn't seem to work; stops immediately.
createjs.Tween.get(ambientSound).to({volume: 0.0}, 1500).call -> ambientSound.stop()
super()
getLevelPlayCounts: ->
@ -61,9 +65,11 @@ module.exports = class WorldMapView extends RootView
context = super(context)
context.campaigns = campaigns
for campaign in context.campaigns
for level in campaign.levels
for level, index in campaign.levels
level.x ?= 10 + 80 * Math.random()
level.y ?= 10 + 80 * Math.random()
#level.locked = index > 0 and not me.earnedLevel level.original
level.locked = false # Not working yet, but time for sleep.
context.levelStatusMap = @levelStatusMap
context.levelPlayCountMap = @levelPlayCountMap
context.isIPadApp = application.isIPadApp
@ -73,7 +79,7 @@ module.exports = class WorldMapView extends RootView
super()
@onWindowResize()
unless application.isIPadApp
_.defer => @$el.find('.game-controls button').tooltip() # Have to defer or i18n doesn't take effect.
_.defer => @$el.find('.game-controls .btn').tooltip() # Have to defer or i18n doesn't take effect.
@$el.find('.level').tooltip()
onSessionsLoaded: (e) ->
@ -92,7 +98,7 @@ module.exports = class WorldMapView extends RootView
e.preventDefault()
e.stopPropagation()
@$levelInfo?.hide()
return if $(e.target).attr('disabled')
return if $(e.target).attr('disabled') or $(e.target).parent().hasClass 'locked'
if application.isIPadApp
levelID = $(e.target).parents('.level').data('level-id')
@$levelInfo = @$el.find(".level-info-container[data-level-id=#{levelID}]").show()
@ -156,6 +162,19 @@ module.exports = class WorldMapView extends RootView
resultingMarginY = (pageHeight - resultingHeight) / 2
@$el.find('.map').css(width: resultingWidth, height: resultingHeight, 'margin-left': resultingMarginX, 'margin-top': resultingMarginY)
playAmbientSound: ->
return if @ambientSound
terrain = 'Grass'
return unless file = {Dungeon: 'ambient-map-dungeon', Grass: 'ambient-map-grass'}[terrain]
src = "/file/interface/#{file}#{AudioPlayer.ext}"
unless AudioPlayer.getStatus(src)?.loaded
AudioPlayer.preloadSound src
Backbone.Mediator.subscribeOnce 'audio-player:loaded', @playAmbientSound, @
return
@ambientSound = createjs.Sound.play src, loop: -1, volume: 0.1
createjs.Tween.get(@ambientSound).to({volume: 1.0}, 1000)
tutorials = [
{
name: 'Rescue Mission'
@ -498,6 +517,7 @@ hero = [
type: 'hero'
difficulty: 1
id: 'dungeons-of-kithgard'
original: '528110f30268d018e3000001'
description: 'Grab the gem, but touch nothing else. Start here.'
x: 17.23
y: 36.94
@ -507,6 +527,7 @@ hero = [
type: 'hero'
difficulty: 1
id: 'gems-in-the-deep'
original: '54173c90844506ae0195a0b4'
description: 'Quickly collect the gems; you will need them.'
x: 22.6
y: 35.1
@ -516,6 +537,7 @@ hero = [
type: 'hero'
difficulty: 1
id: 'shadow-guard'
original: '54174347844506ae0195a0b8'
description: 'Evade the Kithgard minion.'
x: 27.74
y: 35.17
@ -525,6 +547,7 @@ hero = [
type: 'hero'
difficulty: 1
id: 'true-names'
original: '541875da4c16460000ab990f'
description: 'Learn an enemy\'s true name to defeat it.'
x: 32.7
y: 36.7
@ -534,6 +557,7 @@ hero = [
type: 'hero'
difficulty: 1
id: 'the-raised-sword'
original: '5418aec24c16460000ab9aa6'
description: 'Learn to equip yourself for combat.'
x: 36.6
y: 39.5
@ -543,6 +567,7 @@ hero = [
type: 'hero'
difficulty: 1
id: 'the-first-kithmaze'
original: '5418b9d64c16460000ab9ab4'
description: 'The builders of Kith constructed many mazes to confuse travelers.'
x: 38.4
y: 43.5
@ -552,6 +577,7 @@ hero = [
type: 'hero'
difficulty: 1
id: 'the-second-kithmaze'
original: '5418cf256bae62f707c7e1c3'
description: 'Many have tried, few have found their way through this maze.'
x: 38.9
y: 48.1
@ -561,6 +587,7 @@ hero = [
type: 'hero'
difficulty: 1
id: 'new-sight'
original: '5418d40f4c16460000ab9ac2'
description: 'A true name can only be seen with the correct lenses.'
x: 39.3
y: 53.1
@ -570,6 +597,7 @@ hero = [
type: 'hero'
difficulty: 1
id: 'lowly-kithmen'
original: '541b24511ccc8eaae19f3c1f'
description: 'Use your glasses to seek out and attack the Kithmen.'
x: 39.4
y: 57.7
@ -579,6 +607,7 @@ hero = [
type: 'hero'
difficulty: 1
id: 'a-bolt-in-the-dark'
original: '541b288e1ccc8eaae19f3c25'
description: 'Kithmen are not the only ones to stand in your way.'
x: 40.0
y: 63.2
@ -588,6 +617,7 @@ hero = [
type: 'hero'
difficulty: 1
id: 'the-final-kithmaze'
original: '541b434e1ccc8eaae19f3c33'
description: 'To escape you must find your way through an Elder Kithman\'s maze.'
x: 42.67
y: 67.98
@ -597,18 +627,22 @@ hero = [
type: 'hero'
difficulty: 1
id: 'kithgard-gates'
original: '541c9a30c6362edfb0f34479'
description: 'Escape the Kithgard dungeons and don\'t let the guardians get you.'
x: 47.38
y: 70.55
disabled: true
}
{
name: 'Defence of Plainswood'
type: 'hero'
difficulty: 1
id: 'defence-of-plainswood'
original: '541b67f71ccc8eaae19f3c62'
description: 'Protect the peasants from the pursuing ogres.'
x: 52.66
y: 69.66
disabled: true
}
#{
# name: ''

View file

@ -89,9 +89,9 @@ module.exports = class LadderPlayModal extends ModalView
ctx.otherTeamID = @otherTeam
ctx.tutorialLevelExists = @tutorialLevelExists
ctx.languages = [
{id: 'python', name: 'Python'}
{id: 'javascript', name: 'JavaScript'}
{id: 'coffeescript', name: 'CoffeeScript'}
{id: 'python', name: 'Python (Experimental)'}
{id: 'clojure', name: 'Clojure (Experimental)'}
{id: 'lua', name: 'Lua (Experimental)'}
{id: 'io', name: 'Io (Experimental)'}

View file

@ -54,11 +54,6 @@ module.exports = class LadderHomeView extends RootView
context.campaigns = campaigns
context
afterRender: ->
super()
@$el.find('.modal').on 'shown.bs.modal', ->
$('input:visible:first', @).focus()
arenas = [
{

View file

@ -60,7 +60,7 @@ module.exports = class ControlBarView extends CocoView
@homeViewClass = require 'views/play/ladder/LadderView'
@homeViewArgs.push levelID
else if @level.get('type', true) is 'hero'
@homeLink = c.homeLink = '/play-hero'
@homeLink = c.homeLink = '/play'
@homeViewClass = require 'views/play/WorldMapView'
else
@homeLink = c.homeLink = '/'

View file

@ -8,7 +8,7 @@ module.exports = class EditorConfigModal extends ModalView
aceConfig: {}
defaultConfig:
language: 'javascript'
language: 'python'
keyBindings: 'default'
invisibles: false
indentGuides: false
@ -32,9 +32,9 @@ module.exports = class EditorConfigModal extends ModalView
@aceConfig = _.defaults @aceConfig, @defaultConfig
c = super()
c.languages = [
{id: 'python', name: 'Python'}
{id: 'javascript', name: 'JavaScript'}
{id: 'coffeescript', name: 'CoffeeScript'}
{id: 'python', name: 'Python (Experimental)'}
{id: 'clojure', name: 'Clojure (Experimental)'}
{id: 'lua', name: 'Lua (Experimental)'}
{id: 'io', name: 'Io (Experimental)'}

View file

@ -68,7 +68,7 @@ module.exports = class VictoryModal extends ModalView
onClickWorldMap: (e) ->
e.preventDefault()
e.stopImmediatePropagation()
Backbone.Mediator.publish 'router:navigate', route: '/play-hero', viewClass: require('views/play/WorldMapView'), viewArgs: [{supermodel: @supermodel}]
Backbone.Mediator.publish 'router:navigate', route: '/play', viewClass: require('views/play/WorldMapView'), viewArgs: [{supermodel: @supermodel}]
onGameSubmitted: (e) ->
ladderURL = "/play/ladder/#{@level.get('slug')}#my-matches"

View file

@ -36,8 +36,6 @@ ThangListView = require './ThangListView'
SpellPaletteView = require './SpellPaletteView'
CastButtonView = require './CastButtonView'
window.SHIM_WORKER_PATH = '/javascripts/workers/catiline_worker_shim.js'
module.exports = class TomeView extends CocoView
id: 'tome-view'
template: template
@ -108,7 +106,7 @@ module.exports = class TomeView extends CocoView
return teamSpellMap
createSpells: (programmableThangs, world) ->
language = @options.session.get('codeLanguage') ? me.get('aceConfig')?.language ? 'javascript'
language = @options.session.get('codeLanguage') ? me.get('aceConfig')?.language ? 'python'
pathPrefixComponents = ['play', 'level', @options.levelID, @options.session.id, 'code']
@spells ?= {}
@thangSpells ?= {}

View file

@ -37,7 +37,7 @@
"firebase": "~1.0.2",
"catiline": "~2.9.3",
"d3": "~3.4.4",
"jsondiffpatch": "~0.1.5",
"jsondiffpatch": "0.1.8",
"nanoscroller": "~0.8.0",
"treema": "https://github.com/codecombat/treema.git#master",
"jquery.tablesorter": "~2",

View file

@ -75,7 +75,7 @@
"javascript-brunch": "> 1.0 < 1.8",
"coffee-script-brunch": "https://github.com/brunch/coffee-script-brunch/tarball/master",
"coffeelint-brunch": "> 1.0 < 1.8",
"sass-brunch": "1.7.0",
"sass-brunch": "1.8.3",
"css-brunch": "> 1.0 < 1.8",
"jade-brunch": "> 1.0 < 1.8",
"uglify-js-brunch": "~1.7.4",
@ -86,7 +86,7 @@
"marked": "0.2.x",
"telepath-brunch": "https://github.com/nwinter/telepath-brunch/tarball/master",
"bower": "~1.3.8",
"bless-brunch": "~1.6.1",
"bless-brunch": "https://github.com/ThomasConner/bless-brunch/tarball/master",
"karma-script-launcher": "~0.1.0",
"karma-chrome-launcher": "~0.1.2",
"karma-firefox-launcher": "~0.1.3",

View file

@ -5,7 +5,7 @@ class AchievementHandler extends Handler
modelClass: Achievement
# Used to determine which properties requests may edit
editableProperties: ['name', 'query', 'worth', 'collection', 'description', 'userField', 'proportionalTo', 'icon', 'function', 'related', 'difficulty', 'category', 'recalculable']
editableProperties: ['name', 'query', 'worth', 'collection', 'description', 'userField', 'proportionalTo', 'icon', 'function', 'related', 'difficulty', 'category', 'recalculable', 'rewards']
allowedMethods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE']
jsonSchema = require '../../app/schemas/models/achievement.coffee'

View file

@ -77,15 +77,21 @@ class EarnedAchievementHandler extends Handler
EarnedAchievement.find {user: userID}, (err, alreadyEarned) ->
alreadyEarnedIDs = []
previousPoints = 0
previousRewards = heroes: [], items: [], levels: [], gems: 0
async.each alreadyEarned, ((earned, doneWithEarned) ->
if (_.find achievements, (single) -> earned.get('achievement') is single.get('_id').toHexString()) # if already earned
alreadyEarnedIDs.push earned.get('achievement')
previousPoints += earned.get 'earnedPoints'
for rewardType in ['heroes', 'items', 'levels']
previousRewards[rewardType] = previousRewards[rewardType].concat(earned.get('earnedRewards')?[rewardType] ? [])
previousRewards.gems += earned.get('earnedRewards')?.gems ? 0
doneWithEarned()
), -> # After checking already achieved
), (err) -> # After checking already achieved
log.error err if err
# TODO maybe also delete earned? Make sure you don't delete too many
newTotalPoints = 0
newTotalRewards = heroes: [], items: [], levels: [], gems: 0
async.each achievements, ((achievement, doneWithAchievement) ->
return doneWithAchievement() unless achievement.isRecalculable()
@ -122,17 +128,43 @@ class EarnedAchievementHandler extends Handler
earned.earnedPoints = newPoints
newTotalPoints += newPoints
earned.earnedRewards = achievement.get('rewards')
for rewardType in ['heroes', 'items', 'levels']
newTotalRewards[rewardType] = newTotalRewards[rewardType].concat(achievement.get('rewards')?[rewardType] ? [])
newTotalRewards.gems += achievement.get('rewards')?.gems ? 0
EarnedAchievement.update {achievement:earned.achievement, user:earned.user}, earned, {upsert: true}, (err) ->
doneWithAchievement err
), -> # Wrap up a user, save points
), (err) -> # Wrap up a user, save points
log.error err if err
# Since some achievements cannot be recalculated it's important to deduct the old amount of exp
# and add the new amount, instead of just setting to the new amount
return doneWithUser(user) unless newTotalPoints
#console.log 'User', user.get('name'), 'had newTotalPoints', newTotalPoints, 'and newTotalRewards', newTotalRewards
return doneWithUser(user) unless newTotalPoints or newTotalRewards.gems or _.some(newTotalRewards, (r) -> r.length)
# log.debug "Matched a total of #{newTotalPoints} new points"
# log.debug "Incrementing score for these achievements with #{newTotalPoints - previousPoints}"
pctDone = (100 * usersFinished / total).toFixed(2)
console.log "Updated points to #{newTotalPoints}(+#{newTotalPoints - previousPoints}) for #{user.get('name') or '???'} (#{user.get('_id')}) (#{pctDone}%)"
User.update {_id: userID}, {$inc: points: newTotalPoints - previousPoints}, {}, (err) ->
update = {$inc: {points: newTotalPoints - previousPoints}}
for rewardType, rewards of newTotalRewards
if rewardType is 'gems'
update.$inc['earned.gems'] = rewards - previousRewards.gems
else
previousCounts = _.countBy previousRewards[rewardType]
newCounts = _.countBy rewards
relevantRewards = _.union _.keys(previousCounts), _.keys(newCounts)
for reward in relevantRewards
[previousCount, newCount] = [previousCounts[reward], newCounts[reward]]
if newCount and not previousCount
update.$addToSet ?= {}
update.$addToSet["earned.#{rewardType}"] ?= {$each: []}
update.$addToSet["earned.#{rewardType}"].$each.push reward
else if previousCount and not newCount
# Might $pull $each also work here?
update.$pullAll ?= {}
update.$pullAll["earned.#{rewardType}"] ?= []
update.$pullAll["earned.#{rewardType}"].push reward
User.update {_id: userID}, update, {}, (err) ->
log.error err if err?
doneWithUser(user)

View file

@ -93,7 +93,7 @@ LevelHandler = class LevelHandler extends Handler
access: 'write'
}
]
initVals.codeLanguage = req.user.get('aceConfig')?.language ? 'javascript'
initVals.codeLanguage = req.user.get('aceConfig')?.language ? 'python'
session = new Session(initVals)
session.save (err) =>

View file

@ -50,12 +50,20 @@ AchievablePlugin = (schema, options) ->
user: userID
achievement: achievement._id.toHexString()
achievementName: achievement.get 'name'
earnedRewarsd: achievement.get 'rewards'
worth = achievement.get('worth') ? 10
earnedPoints = 0
wrapUp = ->
# Update user's experience points
User.update {_id: userID}, {$inc: {points: earnedPoints}}, {}, (err, count) ->
update = {$inc: {points: earnedPoints}}
for rewardType, rewards of achievement.get('rewards') ? {}
if rewardType is 'gems'
update.$inc['earned.gems'] = rewards if rewards
else if rewards.length
update.$addToSet ?= {}
update.$addToSet["earned.#{rewardType}"] = $each: rewards
User.update {_id: userID}, update, {}, (err, count) ->
log.error err if err?
if isRepeatable

View file

@ -9,7 +9,7 @@ thangTypes = [
describe 'InventoryView', ->
inventoryView = null
beforeEach (done) ->
equipment = { 'feet':'boots', 'eyes': 'crude-glasses' }
inventoryView = new InventoryView({ equipment: equipment })
@ -19,53 +19,23 @@ describe 'InventoryView', ->
_.defer ->
inventoryView.render()
done()
it 'selects a slot when you click it', ->
inventoryView.getSlot('eyes').click()
expect(inventoryView.getSelectedSlot().data('slot')).toBe('eyes')
it 'unselects a selected slot when you click it', ->
inventoryView.getSlot('eyes').click().click()
expect(inventoryView.getSelectedSlot().data('slot')).toBeUndefined()
it 'selects an available item when you click it', ->
inventoryView.getAvailableItemContainer('boots-of-leaping-id').click()
expect(inventoryView.getSelectedAvailableItemContainer().data('item-id')).toBe('boots-of-leaping-id')
inventoryView.getAvailableItemContainer('boots-of-leaping').click()
expect(inventoryView.getSelectedAvailableItemContainer().data('item-id')).toBe('boots-of-leaping')
it 'equips an available item when you double click it', ->
inventoryView.getAvailableItemContainer('crossbow-id').click().dblclick()
inventoryView.getAvailableItemContainer('crossbow').click().dblclick()
expect(inventoryView.getCurrentEquipmentConfig()['right-hand']).toBeTruthy()
it 'unequips an itm when you double click it', ->
it 'unequips an item when you double click it', ->
inventoryView.getSlot('eyes').find('.item-view').click().dblclick()
expect(inventoryView.getCurrentEquipmentConfig().eyes).toBeUndefined()
describe 'swap button', ->
it 'does nothing if nothing is selected', ->
inventoryView.$el.find('#swap-button').click()
expect(inventoryView.getSelectedSlot()[0]).toBeFalsy()
expect(inventoryView.getSelectedAvailableItemContainer()[0]).toBeFalsy()
it 'unequips and selects the unequipped item if just an equipped slot is chosen', ->
expect(inventoryView.getCurrentEquipmentConfig().eyes).toBeTruthy()
slot = inventoryView.getSlot('eyes')
inventoryView.selectSlot(slot)
inventoryView.$el.find('#swap-button').click()
expect(inventoryView.getCurrentEquipmentConfig().eyes).toBeUndefined()
expect(inventoryView.getSelectedAvailableItemContainer().data('item-id')).toBe('crude-glasses-id')
it 'equips the selected item if just an available item is selected', ->
expect(inventoryView.getCurrentEquipmentConfig()['right-hand']).toBeUndefined()
inventoryView.getAvailableItemContainer('crossbow-id').click()
inventoryView.$el.find('#swap-button').click()
expect(inventoryView.getCurrentEquipmentConfig()['right-hand']).toBeTruthy()
expect(inventoryView.getSelectedAvailableItemContainer().data('item-id')).toBeUndefined()
expect(inventoryView.getSelectedSlot().data('slot')).toBe('right-hand')
it 'swaps items if both a slot and item are selected, and keeps them selected', ->
inventoryView.getAvailableItemContainer('boots-of-leaping-id').click()
inventoryView.getSlot('feet').click()
inventoryView.$el.find('#swap-button').click()
expect(inventoryView.getCurrentEquipmentConfig()['feet']).toBe('boots-of-leaping')
expect(inventoryView.getSelectedAvailableItemContainer().data('item-id')).toBe('boots-id')
expect(inventoryView.getSelectedSlot().data('slot')).toBe('feet')