diff --git a/app/assets/images/pages/base/background_texture.png b/app/assets/images/pages/base/background_texture.png index a94fb9c17..6521dea8b 100644 Binary files a/app/assets/images/pages/base/background_texture.png and b/app/assets/images/pages/base/background_texture.png differ diff --git a/app/assets/images/pages/base/repeat-tile.png b/app/assets/images/pages/base/repeat-tile.png index ccf8400da..16186dbee 100644 Binary files a/app/assets/images/pages/base/repeat-tile.png and b/app/assets/images/pages/base/repeat-tile.png differ diff --git a/app/assets/images/pages/base/sky_repeater.png b/app/assets/images/pages/base/sky_repeater.png new file mode 100644 index 000000000..824fb83f8 Binary files /dev/null and b/app/assets/images/pages/base/sky_repeater.png differ diff --git a/app/collections/ComponentsCollection.coffee b/app/collections/ComponentsCollection.coffee index d5b2d4837..14db7a2b6 100644 --- a/app/collections/ComponentsCollection.coffee +++ b/app/collections/ComponentsCollection.coffee @@ -2,6 +2,5 @@ LevelComponent = require 'models/LevelComponent' CocoCollection = require 'models/CocoCollection' module.exports = class ComponentsCollection extends CocoCollection - url: '/db/level_component/search' + url: '/db/level.component/search' model: LevelComponent - diff --git a/app/lib/surface/CocoSprite.coffee b/app/lib/surface/CocoSprite.coffee index 5e1fe71c6..9b6b68804 100644 --- a/app/lib/surface/CocoSprite.coffee +++ b/app/lib/surface/CocoSprite.coffee @@ -76,6 +76,7 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass @stillLoading = false @actions = @thangType.getActions() @buildFromSpriteSheet @buildSpriteSheet() + @createMarks() destroy: -> mark.destroy() for name, mark of @marks @@ -285,7 +286,7 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass ################################################## updateAction: -> action = @determineAction() - isDifferent = action isnt @currentRootAction + isDifferent = action isnt @currentRootAction or action is null if not action and @thang?.actionActivated and not @stopLogging console.error "action is", action, "for", @thang?.id, "from", @currentRootAction, @thang.action, @thang.getActionName?() @stopLogging = true @@ -411,12 +412,34 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass pos.y *= @thang.scaleFactorY ? scaleFactor pos + createMarks: -> + if @thang + allProps = [] + allProps = allProps.concat (@thang.hudProperties ? []) + allProps = allProps.concat (@thang.programmableProperties ? []) + allProps = allProps.concat (@thang.moreProgrammableProperties ? []) + + @addMark('voiceradius') if 'voiceRange' in allProps + @addMark('visualradius') if 'visualRange' in allProps + @addMark('attackradius') if 'attackRange' in allProps + + @addMark('bounds').toggle true if @thang?.drawsBounds + @addMark('shadow').toggle true unless @thangType.get('shadow') is 0 + updateMarks: -> return unless @options.camera @addMark 'repair', null, 'repair' if @thang?.errorsOut @marks.repair?.toggle @thang?.errorsOut - @addMark('bounds').toggle true if @thang?.drawsBounds - @addMark('shadow').toggle true unless @thangType.get('shadow') is 0 + + if @selected + @marks.voiceradius?.toggle true + @marks.visualradius?.toggle true + @marks.attackradius?.toggle true + else + @marks.voiceradius?.toggle false + @marks.visualradius?.toggle false + @marks.attackradius?.toggle false + mark.update() for name, mark of @marks #@thang.effectNames = ['berserk', 'confuse', 'control', 'curse', 'fear', 'poison', 'paralyze', 'regen', 'sleep', 'slow', 'haste'] @updateEffectMarks() if @thang?.effectNames?.length or @previousEffectNames?.length diff --git a/app/lib/surface/Mark.coffee b/app/lib/surface/Mark.coffee index 07536aef5..dc7568b12 100644 --- a/app/lib/surface/Mark.coffee +++ b/app/lib/surface/Mark.coffee @@ -55,6 +55,9 @@ module.exports = class Mark extends CocoClass if @name is 'bounds' then @buildBounds() else if @name is 'shadow' then @buildShadow() else if @name is 'debug' then @buildDebug() + else if @name is 'voiceradius' then @buildRadius('voice') + else if @name is 'visualradius' then @buildRadius('visual') + else if @name is 'attackradius' then @buildRadius('attack') else if @thangType then @buildSprite() else console.error "Don't know how to build mark for", @name @mark?.mouseEnabled = false @@ -114,8 +117,59 @@ module.exports = class Mark extends CocoClass @mark.layerIndex = 10 #@mark.cache 0, 0, diameter, diameter # not actually faster than simple ellipse draw - buildRadius: -> - return # not implemented + buildRadius: (type) -> + return if type is 'voice' and @sprite.thang.voiceRange > 9000 + return if type is 'visual' and @sprite.thang.visualRange > 9000 + return if type is 'attack' and @sprite.thang.attackRange > 9000 + + colors = + voice: "rgba(0, 145, 0, alpha)" + visual: "rgba(0, 0, 145, alpha)" + attack: "rgba(145, 0, 0, alpha)" + + color = colors[type] + + @mark = new createjs.Shape() + @mark.graphics.beginFill color.replace('alpha', 0.4) + + if type is 'voice' + r = @sprite.thang.voiceRange + ranges = [ + r, + if 'visualradius' of @sprite.marks and @sprite.thang.visualRange < 9001 then @sprite.thang.visualRange else 0, + if 'attackradius' of @sprite.marks and @sprite.thang.attackRange < 9001 then @sprite.thang.attackRange else 0 + ] + else if type is 'visual' + r = @sprite.thang.visualRange + ranges = [ + r, + if 'attackradius' of @sprite.marks and @sprite.thang.attackRange < 9001 then @sprite.thang.attackRange else 0, + if 'voiceradius' of @sprite.marks and @sprite.thang.voiceRange < 9001 then @sprite.thang.voiceRange else 0, + ] + else if type is 'attack' + r = @sprite.thang.attackRange + ranges = [ + r, + if 'voiceradius' of @sprite.marks and @sprite.thang.voiceRange < 9001 then @sprite.thang.voiceRange else 0, + if 'visualradius' of @sprite.marks and @sprite.thang.visualRange < 9001 then @sprite.thang.visualRange else 0 + ] + + # Draw the outer circle + @mark.graphics.drawCircle 0, 0, r * Camera.PPM + + # Cut out the inner circle + if Math.max(ranges['1'], ranges['2']) < r + @mark.graphics.arc 0, 0, Math.max(ranges['1'], ranges['2']) * Camera.PPM, Math.PI*2, 0, true + else if Math.min(ranges['1'], ranges['2']) < r + @mark.graphics.arc 0, 0, Math.min(ranges['1'], ranges['2']) * Camera.PPM, Math.PI*2, 0, true + + # Add perspective + @mark.scaleY *= @camera.y2x + + @mark.graphics.endStroke() + @mark.graphics.endFill() + + return buildDebug: -> @mark = new createjs.Shape() diff --git a/app/lib/surface/SpriteBoss.coffee b/app/lib/surface/SpriteBoss.coffee index ddf5ffb27..7e3fc29a7 100644 --- a/app/lib/surface/SpriteBoss.coffee +++ b/app/lib/surface/SpriteBoss.coffee @@ -256,15 +256,15 @@ module.exports = class SpriteBoss extends CocoClass return if key.shift #and @options.choosing @selectSprite e if e.onBackground - selectThang: (thangID, spellName=null) -> + selectThang: (thangID, spellName=null, treemaThangSelected = null) -> return @willSelectThang = [thangID, spellName] unless @sprites[thangID] - @selectSprite null, @sprites[thangID], spellName + @selectSprite null, @sprites[thangID], spellName, treemaThangSelected - selectSprite: (e, sprite=null, spellName=null) -> + selectSprite: (e, sprite=null, spellName=null, treemaThangSelected = null) -> return if e and (@disabled or @selectLocked) # Ignore clicks for selection/panning/wizard movement while disabled or select is locked worldPos = sprite?.thang?.pos worldPos ?= @camera.canvasToWorld {x: e.originalEvent.rawX, y: e.originalEvent.rawY} if e - if worldPos and (@options.navigateToSelection or not sprite) + if worldPos and (@options.navigateToSelection or not sprite or treemaThangSelected) @camera.zoomTo(sprite?.displayObject or @camera.worldToSurface(worldPos), @camera.zoom, 1000) sprite = null if @options.choosing # Don't select sprites while choosing if sprite isnt @selectedSprite diff --git a/app/lib/surface/WizardSprite.coffee b/app/lib/surface/WizardSprite.coffee index 58eec1dc7..cf07adc68 100644 --- a/app/lib/surface/WizardSprite.coffee +++ b/app/lib/surface/WizardSprite.coffee @@ -120,11 +120,20 @@ module.exports = class WizardSprite extends IndieSprite @shoveOtherWizards(true) if @targetSprite @targetSprite = if isSprite then newTarget else null - @targetPos = targetPos + @targetPos = @boundWizard targetPos @beginMoveTween(duration, isLinear) @shoveOtherWizards() Backbone.Mediator.publish('self-wizard:target-changed', {sender:@}) if @isSelf + boundWizard: (target) -> + # Passed an {x, y} in world coordinates, returns {x, y} within world bounds + return target unless @options.camera.bounds + @bounds = @options.camera.bounds + surfaceTarget = @options.camera.worldToSurface target + x = Math.min(Math.max(surfaceTarget.x, @bounds.x), @bounds.x + @bounds.width) + y = Math.min(Math.max(surfaceTarget.y, @bounds.y), @bounds.y + @bounds.height) + return @options.camera.surfaceToWorld {x: x, y: y} + getPosFromTarget: (target) -> """ Could be null, a vector, or sprite object. Get the position from any of these. diff --git a/app/locale/it.coffee b/app/locale/it.coffee index b9a4159ce..98e3c10ad 100644 --- a/app/locale/it.coffee +++ b/app/locale/it.coffee @@ -1,4 +1,4 @@ -module.exports = nativeDescription: "italiano", englishDescription: "Italian", translation: +module.exports = nativeDescription: "Italiano", englishDescription: "Italian", translation: common: loading: "Caricamento in corso..." saving: "Salvataggio in corso..." @@ -9,7 +9,7 @@ module.exports = nativeDescription: "italiano", englishDescription: "Italian", t delay_3_sec: "3 secondi" delay_5_sec: "5 secondi" manual: "Manuale" -# fork: "Fork" + fork: "Fork" play: "Gioca" modal: @@ -20,11 +20,11 @@ module.exports = nativeDescription: "italiano", englishDescription: "Italian", t page_not_found: "Pagina non trovata" nav: - play: "Gioca" + play: "Livelli" editor: "Editor" blog: "Blog" forum: "Forum" - admin: "Admin" + admin: "Amministratore" home: "Pagina iniziale" contribute: "Contribuisci" legal: "Legale" @@ -49,30 +49,30 @@ module.exports = nativeDescription: "italiano", englishDescription: "Italian", t recover: recover_account_title: "Recupera account" - send_password: "Spedisci password di recupero" + send_password: "Invia password di recupero" signup: - create_account_title: "Crea un accounto per salvare le partite" - description: "È gratis. Servono solo un paio di dettagli:" + create_account_title: "Crea un account per salvare le partite" + description: "È gratuito. Servono solo un paio di dettagli e sarai pronto per iniziare:" email_announcements: "Ricevi comunicazioni per email" coppa: "13+ o non-USA" coppa_why: "(Perché?)" creating: "Creazione account..." sign_up: "Registrati" - log_in: "accedi con password" + log_in: "Accedi con la password" home: slogan: "Impara a programmare in JavaScript giocando" - no_ie: "CodeCombat non supporta IE8 o browser precedenti. Ci dispiace!" - no_mobile: "CodeCombat non è stato pensato per dispositivi mobili e potrebbe non funzionare!" + no_ie: "CodeCombat non supporta Internet Explorer 9 o browser precedenti. Ci dispiace!" + no_mobile: "CodeCombat non è stato progettato per dispositivi mobile e potrebbe non funzionare!" play: "Gioca" play: choose_your_level: "Scegli il tuo livello" - adventurer_prefix: "Puoi saltare a qualunque livello qui sotto, o scambiare opinioni sui livelli sul" + adventurer_prefix: "Puoi entrare in qualunque livello qui sotto, o scambiare opinioni su questi livelli sul" adventurer_forum: "forum degli Avventurieri" adventurer_suffix: "." - campaign_beginner: "Campagne facili" + campaign_beginner: "Campagne per principianti" 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." @@ -81,13 +81,13 @@ module.exports = nativeDescription: "italiano", englishDescription: "Italian", t campaign_player_created: "Creati dai giocatori" campaign_player_created_description: "... nei quali affronterai la creatività dei tuoi compagni Stregoni Artigiani." level_difficulty: "Difficoltà: " -# play_as: "Play As " + play_as: "Gioca come " contact: contact_us: "Contatta CodeCombat" welcome: "È bello sentirti! Usa questo modulo per mandarci un'email." contribute_prefix: "Se sei interessato a contribuire, dai un'occhiata alla nostra " - contribute_page: "pagina dei contributi" + contribute_page: "pagina Contribuisci" contribute_suffix: "!" forum_prefix: "Per discussioni pubbliche, puoi provare " forum_page: "il nostro forum" @@ -95,24 +95,24 @@ module.exports = nativeDescription: "italiano", englishDescription: "Italian", t send: "Invia feedback" diplomat_suggestion: - title: "Aiuta a tradurre CodeCombat!" - sub_heading: "Abbiamo bisogno di traduttori." - pitch_body: "Noi sviluppiamo CodeCombat in inglese, ma abbiamo già giocatori in tutto il mondo. Molti di loro vorrebbero giocare in italiano, ma non parlano inglese, quindi se tu li conosci entrambi sarebbe fantastico se decidessi di diventare un Diplomatico ed aiutassi a tradurre sia il sito di CodeCombat che tutti i livelli in italiano." - missing_translations: "Finché non riusciamo a tradurre tutto in italiano vedrai alcune parti in inglese, dove l'italiano non è disponibile." - learn_more: "Maggiori dettagli su cosa vuol dire essere un Diplomatico" + title: "Aiutaci a tradurre CodeCombat!" + sub_heading: "Abbiamo bisogno delle tue competenze linguistiche." + pitch_body: "Noi sviluppiamo CodeCombat in inglese, ma abbiamo già giocatori in tutto il mondo. Molti di loro vorrebbero giocare in {Italiano}, ma non parlano inglese, quindi se tu li conosci entrambi sarebbe fantastico se decidessi di diventare un Diplomatico ed aiutassi a tradurre sia il sito di CodeCombat che tutti i livelli in {Italiano}." + missing_translations: "Finché non riusciamo a tradurre tutto in {Italiano} vedrai alcune parti in inglese, dove l'{Italiano} non è disponibile." + learn_more: "Maggiori dettagli su come diventare un Diplomatico" subscribe_as_diplomat: "Diventa un Diplomatico" -# wizard_settings: + wizard_settings: # title: "Wizard Settings" -# customize_avatar: "Customize Your Avatar" -# clothes: "Clothes" + customize_avatar: "Personalizza il tuo personaggio" + clothes: "Abbigliamento" # trim: "Trim" # cloud: "Cloud" # spell: "Spell" # boots: "Boots" # hue: "Hue" -# saturation: "Saturation" -# lightness: "Lightness" + saturation: "Saturazione" + lightness: "Luminosità" account_settings: title: "Impostazioni account" @@ -123,18 +123,18 @@ module.exports = nativeDescription: "italiano", englishDescription: "Italian", t wizard_tab: "Stregone" password_tab: "Password" emails_tab: "Email" -# admin: "Admin" + admin: "Amministratore" gravatar_select: "Seleziona quale foto di Gravatar usare" - gravatar_add_photos: "Aggiungi delle immagini all'account di Gravatar per la tua email per scegliere un'immagine." + gravatar_add_photos: "Aggiungi delle miniature e delle immagini all'account di Gravatar per la tua email per scegliere un'immagine." gravatar_add_more_photos: "Aggiungi più foto al tuo account di Gravatar per vederle qui." wizard_color: "Colore dei vestiti da Stregone" new_password: "Nuova password" new_password_verify: "Verifica" email_subscriptions: "Sottoscrizioni email" - email_announcements: "Annunci" -# email_notifications: "Notifications" -# email_notifications_description: "Get periodic notifications for your account." - email_announcements_description: "Ricevi email con le ultime novità e sviluppi a CodeCombat." + email_announcements: "Annunci email" + email_notifications: "Notifiche email" + email_notifications_description: "Ricevi notifiche periodiche del tuo account." + email_announcements_description: "Ricevi email con le ultime novità e sviluppi di CodeCombat." contributor_emails: "Email dei collaboratori" contribute_prefix: "Stiamo cercando persone che si uniscano al nostro gruppo! Dai un'occhiata alla " contribute_page: "pagina dei collaboratori" @@ -147,11 +147,11 @@ module.exports = nativeDescription: "italiano", englishDescription: "Italian", t account_profile: edit_settings: "Modifica impostazioni" profile_for_prefix: "Profilo di " -# profile_for_suffix: "" + profile_for_suffix: "" profile: "Profilo" - user_not_found: "Utente non trovato. Forse l'URL è sbagliato." + user_not_found: "Utente non trovato. Controlla l'URL" gravatar_not_found_mine: "Non abbiamo trovato un profilo associato a:" -# gravatar_not_found_email_suffix: "." + gravatar_not_found_email_suffix: "." gravatar_signup_prefix: "Iscriviti su " gravatar_signup_suffix: " per impostare tutto!" gravatar_not_found_other: "A quanto pare non c'è un profilo associato con l'indirizzo email di questa persona." @@ -175,7 +175,7 @@ module.exports = nativeDescription: "italiano", englishDescription: "Italian", t reload_title: "Ricarica tutto il codice?" reload_really: "Sei sicuro di voler ricominciare il livello?" reload_confirm: "Ricarica tutto" -# victory_title_prefix: "" + victory_title_prefix: "" victory_title_suffix: " Completato" victory_sign_up: "Registrati per gli aggiornamenti" victory_sign_up_poke: "Vuoi ricevere le ultime novità per email? Crea un account gratuito e ti terremo aggiornato!" diff --git a/app/locale/ko.coffee b/app/locale/ko.coffee index 6922e26b7..6e97a6bd4 100644 --- a/app/locale/ko.coffee +++ b/app/locale/ko.coffee @@ -1,317 +1,306 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", translation: common: - loading: "Loading..." -# saving: "Saving..." -# sending: "Sending..." -# cancel: "Cancel" -# save: "Save" -# delay_1_sec: "1 second" -# delay_3_sec: "3 seconds" -# delay_5_sec: "5 seconds" + loading: "로딩중입니다..." + saving: "저장중입니다..." + sending: "보내는 중입니다..." + cancel: "취소" + save: "저장" + delay_1_sec: "1초" + delay_3_sec: "3초" + delay_5_sec: "5초" # manual: "Manual" -# fork: "Fork" -# play: "Play" + fork: "Fork" + play: "시작" -# modal: -# close: "Close" -# okay: "Okay" + modal: + close: "Close" + okay: "Okay" -# not_found: -# page_not_found: "Page not found" + not_found: + page_not_found: "페이지를 찾을 수 없습니다" -# nav: -# play: "Levels" -# editor: "Editor" -# blog: "Blog" -# forum: "Forum" -# admin: "Admin" -# home: "Home" -# contribute: "Contribute" -# legal: "Legal" -# about: "About" -# contact: "Contact" -# twitter_follow: "Follow" -# employers: "Employers" + nav: + play: "레벨" + editor: "에디터" + blog: "블로그" + forum: "포럼" + admin: "관리자" + home: "홈" + contribute: "참여하기" + legal: "법" + about: "소개" + contact: "문의" + twitter_follow: "Follow" + employers: "직원들" -# versions: -# save_version_title: "Save New Version" -# new_major_version: "New Major Version" -# cla_prefix: "To save changes, first you must agree to our" -# cla_url: "CLA" -# cla_suffix: "." -# cla_agree: "I AGREE" + versions: + save_version_title: "새로운 버전을 저장합니다" + new_major_version: "신규 버전" + cla_prefix: "변경사항을 저장하기 위해서는, 먼저 계약사항에 동의 하셔야 합니다." + cla_url: "CLA" + cla_suffix: "." + cla_agree: "동의 합니다" -# login: -# sign_up: "Create Account" -# log_in: "Log In" -# log_out: "Log Out" -# recover: "recover account" + login: + sign_up: "계정 생성" + log_in: "로그인" + log_out: "로그아웃" + recover: "계정 복구" -# recover: -# recover_account_title: "Recover Account" -# send_password: "Send Recovery Password" + recover: + recover_account_title: "계정 복구" + send_password: "복구 비밀번호 전송" -# signup: -# create_account_title: "Create Account to Save Progress" -# description: "It's free. Just need a couple things and you'll be good to go:" -# email_announcements: "Receive announcements by email" -# coppa: "13+ or non-USA " -# coppa_why: "(Why?)" -# creating: "Creating Account..." -# sign_up: "Sign Up" -# log_in: "log in with password" + signup: + create_account_title: "진행 상황을 저장하기 위해서 새 계정을 생성합니다" + description: "이것은 무료입니다. 계속 진행하기 위해서 간단한 몇가지만 적어주세요" + email_announcements: "안내 사항을 메일로 받겠습니다" + coppa: "13살 이상 또는 미국 외 거주자" + coppa_why: "(왜?)" + creating: "계정을 생성 중입니다..." + sign_up: "등록" + log_in: "비밀번호로 로그인" -# home: -# slogan: "Learn to Code JavaScript by Playing a Game" -# no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!" -# no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!" -# play: "Play" + home: + slogan: "쉽고 간단한 게임으로 자바스크립트 배우기" + no_ie: "죄송하지만 코드컴뱃은 인터넷 익스플로러 9에서는 동작하지 않습니다." + no_mobile: "코드 컴뱃은 모바일 기기용으로 제작되지 않았습니다. 아마 동작하지 않을 가능성이 높습니다." + play: "시작" -# play: -# choose_your_level: "Choose Your Level" -# adventurer_prefix: "You can jump to any level below, or discuss the levels on " -# adventurer_forum: "the Adventurer forum" -# adventurer_suffix: "." -# campaign_beginner: "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." -# campaign_multiplayer: "Multiplayer Arenas" -# campaign_multiplayer_description: "... in which you code head-to-head against other players." -# campaign_player_created: "Player-Created" -# campaign_player_created_description: "... in which you battle against the creativity of your fellow Artisan Wizards." -# level_difficulty: "Difficulty: " -# play_as: "Play As " + play: + choose_your_level: "레벨을 선택하세요." + adventurer_prefix: "아래에 있는 어떤 레벨도 바로 시작하실 수 있습니다.또는 포럼에서 레벨에 관해 토론하세요 :" + adventurer_forum: "모험가들의 포럼" + adventurer_suffix: "." + campaign_beginner: "초보자 캠페인" + campaign_beginner_description: "... 이곳에서 당신은 프로그래밍의 마법을 배우게 될 것입니다." + campaign_dev: "상급 레벨 랜덤 선택" + campaign_dev_description: "... 이곳에서 당신은 조금 더 어려운 레벨에 도전할때 필요한 조작 방법을 배울 것입니다." + campaign_multiplayer: "멀티 플레이어 전투장" + campaign_multiplayer_description: "... 이곳에서 당신은 다른 인간 플레이어들과 직접 결투할 수 있습니다." + campaign_player_created: "사용자 직접 제작" + campaign_player_created_description: "... 당신 동료가 고안한 레벨에 도전하세요 Artisan Wizards." + level_difficulty: "난이도: " + play_as: "Play As " -# contact: -# contact_us: "Contact CodeCombat" -# welcome: "Good to hear from you! Use this form to send us email. " -# contribute_prefix: "If you're interested in contributing, check out our " -# contribute_page: "contribute page" -# contribute_suffix: "!" -# forum_prefix: "For anything public, please try " -# forum_page: "our forum" -# forum_suffix: " instead." -# send: "Send Feedback" + contact: + contact_us: "코드컴뱃에 전할말" + welcome: "의견은 언제든지 환영합니다. 이 양식을 이메일에 사용해 주세요!" + contribute_prefix: "혹시 같이 코드컴뱃에 공헌하고 싶으시다면 홈페이지에 들러주세요 " + contribute_page: "참여하기 페이지" + contribute_suffix: "!" + forum_prefix: "공개적으로 논의할 사항이라면 우리 포럼에서 해주세요 : " + forum_page: "포럼" + forum_suffix: " 대신에." + send: "의견 보내기" diplomat_suggestion: -# title: "Help translate CodeCombat!" -# sub_heading: "We need your language skills." + title: "코드 컴뱃 번역을 도와주세요!" + sub_heading: "우리는 당신의 언어 능력이필요합니다." pitch_body: "We develop CodeCombat in English, but we already have players all over the world. Many of them want to play in Korean but don't speak English, so if you can speak both, please consider signing up to be a Diplomat and help translate both the CodeCombat website and all the levels into Korean." missing_translations: "Until we can translate everything into Korean, you'll see English when Korean isn't available." -# learn_more: "Learn more about being a Diplomat" -# subscribe_as_diplomat: "Subscribe as a Diplomat" + learn_more: "외교관에 대해서 좀더 자세히알기" + subscribe_as_diplomat: "훌륭한 외교관으로써, 정기 구독하기" -# wizard_settings: -# title: "Wizard Settings" -# customize_avatar: "Customize Your Avatar" -# clothes: "Clothes" -# trim: "Trim" -# cloud: "Cloud" -# spell: "Spell" -# boots: "Boots" -# hue: "Hue" -# saturation: "Saturation" -# lightness: "Lightness" + wizard_settings: + title: "마법사 설장" + customize_avatar: "당신의 분신을 직접 꾸미세요" + clothes: "옷" + trim: "장식" + cloud: "구름" + spell: "마법" + boots: "장화" + hue: "색조" + saturation: "채도" + lightness: "명도" -# account_settings: -# title: "Account Settings" -# not_logged_in: "Log in or create an account to change your settings." -# autosave: "Changes Save Automatically" -# me_tab: "Me" -# picture_tab: "Picture" -# wizard_tab: "Wizard" -# password_tab: "Password" -# emails_tab: "Emails" -# admin: "Admin" -# gravatar_select: "Select which Gravatar photo to use" -# gravatar_add_photos: "Add thumbnails and photos to a Gravatar account for your email to choose an image." -# gravatar_add_more_photos: "Add more photos to your Gravatar account to access them here." -# wizard_color: "Wizard Clothes Color" -# new_password: "New Password" -# new_password_verify: "Verify" -# email_subscriptions: "Email Subscriptions" -# email_announcements: "Announcements" -# email_notifications: "Notifications" -# email_notifications_description: "Get periodic notifications for your account." -# email_announcements_description: "Get emails on the latest news and developments at CodeCombat." + account_settings: + title: "계정 설정" + not_logged_in: "로그인 하시거나 계정을 생성하여 주세요." + autosave: "변경 사항은 자동 저장 됩니다" + me_tab: "나" + picture_tab: "사진" + wizard_tab: "마법사" + password_tab: "비밀번호" + emails_tab: "이메일" + admin: "관리자" + gravatar_select: "사용하기 위한 Gravatar를 선택해 주세요" + gravatar_add_photos: "이미지를 선택하기 위해서는 우선 Gravatar 계정에 썸네일이나 이미지를 추가하여 주세요" + gravatar_add_more_photos: "코드컴뱃에서 더 많은 이미지를 추가하려면 우선 당신의 Gravatar 계정에 좀 더 많은 이미지를 추가해 주세요" + wizard_color: "마법사 옷 색깔" + new_password: "새 비밀번호" + new_password_verify: "승인" + email_subscriptions: "이메일 구독" + email_announcements: "공지사항" + email_notifications: "알람" + email_notifications_description: "계정을 위해서 정기적으로 구독하세요" + email_announcements_description: "코드 컴뱃의 개발 또는 진행상황을 이메일로 구독 하세요" # contributor_emails: "Contributor Class Emails" -# 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" -# saved: "Changes Saved" -# password_mismatch: "Password does not match." + contribute_prefix: "우리는 언제나 당신의 참여를 환영 합니다 : " + contribute_page: "참여하기 페이지" + contribute_suffix: " 좀 더 찾기 위해." + email_toggle: "모두 토글" + error_saving: "오류 저장" + saved: "변경사항 저장 완료" + password_mismatch: "비밀번호가 일치하지 않습니다." -# account_profile: -# edit_settings: "Edit Settings" -# profile_for_prefix: "Profile for " -# profile_for_suffix: "" -# profile: "Profile" -# user_not_found: "No user found. Check the URL?" -# gravatar_not_found_mine: "We couldn't find your profile associated with:" -# gravatar_not_found_email_suffix: "." -# gravatar_signup_prefix: "Sign up at " + account_profile: + edit_settings: "설정사항 변경" + profile_for_prefix: "프로필 " + profile_for_suffix: "" + profile: "프로필" + user_not_found: "유저를 찾을 수 없습니다 URL은 체크 하셨죠?" + gravatar_not_found_mine: "죄송하지만 귀하의 이메일 주소를 찾을 수 없습니다 :" + gravatar_not_found_email_suffix: "." + gravatar_signup_prefix: "등록" # gravatar_signup_suffix: " to get set up!" -# gravatar_not_found_other: "Alas, there's no profile associated with this person's email address." -# gravatar_contact: "Contact" -# gravatar_websites: "Websites" + gravatar_not_found_other: "이 사람의 이메일 주소와 관련된 어떤것도 찾을 수 없습니다." + gravatar_contact: "연락처" + gravatar_websites: "웹사이트" # gravatar_accounts: "As Seen On" -# gravatar_profile_link: "Full Gravatar Profile" + gravatar_profile_link: "전체 Gravatar 프로필" -# play_level: -# level_load_error: "Level could not be loaded: " -# done: "Done" -# grid: "Grid" -# customize_wizard: "Customize Wizard" -# home: "Home" -# guide: "Guide" -# multiplayer: "Multiplayer" -# restart: "Restart" -# goals: "Goals" -# action_timeline: "Action Timeline" -# click_to_select: "Click on a unit to select it." -# reload_title: "Reload All Code?" -# reload_really: "Are you sure you want to reload this level back to the beginning?" -# reload_confirm: "Reload All" -# victory_title_prefix: "" -# victory_title_suffix: " Complete" -# victory_sign_up: "Sign Up to Save Progress" -# victory_sign_up_poke: "Want to save your code? Create a free account!" -# victory_rate_the_level: "Rate the level: " -# victory_rank_my_game: "Rank My Game" -# victory_ranking_game: "Submitting..." -# victory_return_to_ladder: "Return to Ladder" -# victory_play_next_level: "Play Next Level" -# victory_go_home: "Go Home" -# victory_review: "Tell us more!" -# victory_hour_of_code_done: "Are You Done?" -# victory_hour_of_code_done_yes: "Yes, I'm finished with my Hour of Code™!" -# multiplayer_title: "Multiplayer Settings" -# multiplayer_link_description: "Give this link to anyone to have them join you." -# multiplayer_hint_label: "Hint:" -# multiplayer_hint: " Click the link to select all, then press ⌘-C or Ctrl-C to copy the link." -# multiplayer_coming_soon: "More multiplayer features to come!" -# guide_title: "Guide" -# tome_minion_spells: "Your Minions' Spells" -# tome_read_only_spells: "Read-Only Spells" -# tome_other_units: "Other Units" -# tome_cast_button_castable: "Cast Spell" -# tome_cast_button_casting: "Casting" -# tome_cast_button_cast: "Spell Cast" -# tome_autocast_delay: "Autocast Delay" -# tome_select_spell: "Select a Spell" -# tome_select_a_thang: "Select Someone for " -# tome_available_spells: "Available Spells" -# hud_continue: "Continue (shift+space)" -# spell_saved: "Spell Saved" -# skip_tutorial: "Skip (esc)" -# editor_config: "Editor Config" -# editor_config_title: "Editor Configuration" -# editor_config_keybindings_label: "Key Bindings" -# editor_config_keybindings_default: "Default (Ace)" -# editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." -# editor_config_invisibles_label: "Show Invisibles" -# editor_config_invisibles_description: "Displays invisibles such as spaces or tabs." -# editor_config_indentguides_label: "Show Indent Guides" -# editor_config_indentguides_description: "Displays vertical lines to see indentation better." -# editor_config_behaviors_label: "Smart Behaviors" -# editor_config_behaviors_description: "Autocompletes brackets, braces, and quotes." + play_level: + level_load_error: "레벨 로딩 실패 : " + done: "완료" + grid: "그리드" + customize_wizard: "사용자 정의 마법사" + home: "홈" + guide: "가이드" + multiplayer: "멀티 플레이어" + restart: "재시작" + goals: "목표" + action_timeline: "액션 타임라인" + click_to_select: "유닛을 선택하기 위해서 유닛을 마우스로 클릭하세요." + reload_title: "모든 코드가 다시 로딩 되었나요?" + reload_really: "모든 레벨 초기화합니다. 확실한가요?" + reload_confirm: "모두 초기화" + victory_title_prefix: "" + victory_title_suffix: " 완료" + victory_sign_up: "진행사항 저장을 위해 등록하세요" + victory_sign_up_poke: "코드를 저장하고 싶으세요? 지금 등록하세요!" + victory_rate_the_level: "이번 레벨 평가: " + victory_rank_my_game: "내이름 순위 등록" + victory_ranking_game: "제출 중..." + victory_return_to_ladder: "레더로 돌아가기" + victory_play_next_level: "다음 레벨 플레이 하기" + victory_go_home: "홈으로" + victory_review: "리뷰를 남겨주세요" + victory_hour_of_code_done: "정말 종료합니까?" + victory_hour_of_code_done_yes: "네 내 Hour of Code™ 완료했습니다!" + multiplayer_title: "멀티 플레이어 설정" + multiplayer_link_description: "당신에게 참여를 원하는 사람에게 이 링크를 주세요." + multiplayer_hint_label: "힌트:" + multiplayer_hint: " 모두 선택하려면 링크를 클릭하세요, 그리고 ⌘-C 또는 Ctrl-C 를 눌러서 링크를 복사하세요." + multiplayer_coming_soon: "곧 좀 더 다양한 멀티플레이어 모드가 업데이트 됩니다!" + guide_title: "가이드" + tome_minion_spells: "당신 미니언의' 마법" + tome_read_only_spells: "읽기 전용 마법" + tome_other_units: "다른 유닛들" + tome_cast_button_castable: "마법 캐스팅" + tome_cast_button_casting: "캐스팅 중" + tome_cast_button_cast: "마법 캐스팅" + tome_autocast_delay: "자동 마법 캐스팅 딜레이" + tome_select_spell: "마법을 선택 하세요" + tome_select_a_thang: "누군가를 선택하세요. " + tome_available_spells: "마법 사용 가능하므로" + hud_continue: "계속진행 (shift+space)" + spell_saved: "마법 저장 완료" + skip_tutorial: "넘기기 (esc)" -# admin: -# av_title: "Admin Views" -# av_entities_sub_title: "Entities" -# av_entities_users_url: "Users" -# av_entities_active_instances_url: "Active Instances" + admin: + av_title: "관리자 뷰" + av_entities_sub_title: "속성들" + av_entities_users_url: "유저들" + av_entities_active_instances_url: "액티브 인스턴스들" # av_other_sub_title: "Other" -# av_other_debug_base_url: "Base (for debugging base.jade)" -# u_title: "User List" -# lg_title: "Latest Games" + av_other_debug_base_url: "베이스 (for debugging base.jade)" + u_title: "유저 목록" + lg_title: "가장 최근 게임" -# editor: -# main_title: "CodeCombat Editors" -# main_description: "Build your own levels, campaigns, units and educational content. We provide all the tools you need!" -# article_title: "Article Editor" + editor: + main_title: "코드 컴뱃 에디터들" + main_description: "당신의 레벨들, 캠페인들, 유닛 그리고 교육 컨텐츠들을 구축하세요. 우리는 당신이 필요한 모든 도구들을 제공합니다!" + article_title: "기사 에디터들" # article_description: "Write articles that give players overviews of programming concepts which can be used across a variety of levels and campaigns." -# thang_title: "Thang Editor" + thang_title: "Thang 에디터" # thang_description: "Build units, defining their default logic, graphics and audio. Currently only supports importing Flash exported vector graphics." -# level_title: "Level Editor" + level_title: "레벨 에디터" # level_description: "Includes the tools for scripting, uploading audio, and constructing custom logic to create all sorts of levels. Everything we use ourselves!" # security_notice: "Many major features in these editors are not currently enabled by default. As we improve the security of these systems, they will be made generally available. If you'd like to use these features sooner, " -# contact_us: "contact us!" -# hipchat_prefix: "You can also find us in our" + contact_us: "연락히기!" + hipchat_prefix: "당신은 또한 우리를 여기에서 찾을 수 있습니다 : " # hipchat_url: "HipChat room." -# revert: "Revert" -# revert_models: "Revert Models" -# level_some_options: "Some Options?" -# level_tab_thangs: "Thangs" -# level_tab_scripts: "Scripts" -# level_tab_settings: "Settings" -# level_tab_components: "Components" -# level_tab_systems: "Systems" + revert: "되돌리기" + revert_models: "모델 되돌리기" + level_some_options: "다른 옵션들?" + level_tab_thangs: "Thangs" + level_tab_scripts: "스크립트들" + level_tab_settings: "설정" + level_tab_components: "요소들" + level_tab_systems: "시스템" # level_tab_thangs_title: "Current Thangs" # level_tab_thangs_conditions: "Starting Conditions" # level_tab_thangs_add: "Add Thangs" -# level_settings_title: "Settings" -# level_component_tab_title: "Current Components" -# level_component_btn_new: "Create New Component" -# level_systems_tab_title: "Current Systems" -# level_systems_btn_new: "Create New System" -# level_systems_btn_add: "Add System" + level_settings_title: "설정" + level_component_tab_title: "현재 요소들" + level_component_btn_new: "새로운 요소들 생성" + level_systems_tab_title: "현재 시스템" + level_systems_btn_new: "새로운 시스템생성" + level_systems_btn_add: "새로운 시스템 추가" # level_components_title: "Back to All Thangs" # level_components_type: "Type" -# level_component_edit_title: "Edit Component" -# level_component_config_schema: "Config Schema" -# level_component_settings: "Settings" -# level_system_edit_title: "Edit System" -# create_system_title: "Create New System" -# new_component_title: "Create New Component" -# new_component_field_system: "System" -# new_article_title: "Create a New Article" -# new_thang_title: "Create a New Thang Type" -# new_level_title: "Create a New Level" -# article_search_title: "Search Articles Here" -# thang_search_title: "Search Thang Types Here" -# level_search_title: "Search Levels Here" + level_component_edit_title: "요소 편집" + level_component_config_schema: "환경 설정" + level_component_settings: "설정" + level_system_edit_title: "시스템 편집" + create_system_title: "새로운 시스템 생성" + new_component_title: "새로운 요소들 생성" + new_component_field_system: "시스템" + new_article_title: "새로운 기사 작성" + new_thang_title: "새로운 Thang type 시작" + new_level_title: "새로운 레벨 시작" + article_search_title: "기사들은 여기에서 찾으세요" + thang_search_title: "Thang 타입들은 여기에서 찾으세요" + level_search_title: "레벨들은 여기에서 찾으세요" -# article: -# edit_btn_preview: "Preview" -# edit_article_title: "Edit Article" + article: + edit_btn_preview: "미리보기" + edit_article_title: "기사 편집하기" -# general: -# and: "and" -# name: "Name" -# body: "Body" -# version: "Version" -# commit_msg: "Commit Message" -# history: "History" -# version_history_for: "Version History for: " -# result: "Result" -# results: "Results" -# description: "Description" -# or: "or" -# email: "Email" -# password: "Password" -# message: "Message" -# code: "Code" -# ladder: "Ladder" -# when: "When" -# opponent: "Opponent" -# rank: "Rank" -# score: "Score" -# win: "Win" -# loss: "Loss" -# tie: "Tie" -# easy: "Easy" -# medium: "Medium" -# hard: "Hard" + general: + and: "그리고" + name: "이름" + body: "구성" + version: "버전" + commit_msg: "커밋 메세지" + history: "히스토리" + version_history_for: "버전 히스토리 : " + result: "결과" + results: "결과들" + description: "설명" + or: "또한" + email: "이메일" + password: "비밀번호" + message: "메시지" + code: "코드" + ladder: "레더" + when: "언제" + opponent: "상대" + rank: "랭크" + score: "점수" + win: "승" + loss: "패" + tie: "비김" + easy: "쉬움" + medium: "중간" + hard: "어려" # about: # who_is_codecombat: "Who is CodeCombat?" # why_codecombat: "Why CodeCombat?" # who_description_prefix: "together started CodeCombat in 2013. We also created " -# who_description_suffix: "in 2008, growing it to the #1 web and iOS application for learning to write Chinese and Japanese characters." +# who_description_suffix: "in 2008, growing it to the 1 web and iOS application for learning to write Chinese and Japanese characters." # who_description_ending: "Now it's time to teach people to write code." # why_paragraph_1: "When making Skritter, George didn't know how to program and was constantly frustrated by his inability to implement his ideas. Afterwards, he tried learning, but the lessons were too slow. His housemate, wanting to reskill and stop teaching, tried Codecademy, but \"got bored.\" Each week another friend started Codecademy, then dropped off. We realized it was the same problem we'd solved with Skritter: people learning a skill via slow, intensive lessons when what they need is fast, extensive practice. We know how to fix that." # why_paragraph_2: "Need to learn to code? You don't need lessons. You need to write a lot of code and have a great time doing it." @@ -328,7 +317,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t # nick_description: "Programming wizard, eccentric motivation mage, and upside-down experimenter. Nick can do anything and chooses to build CodeCombat." # jeremy_description: "Customer support mage, usability tester, and community organizer; you've probably already spoken with Jeremy." # michael_description: "Programmer, sys-admin, and undergrad technical wunderkind, Michael is the person keeping our servers online." - +# # legal: # page_title: "Legal" # opensource_intro: "CodeCombat is free to play and completely open source." @@ -389,7 +378,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t # nutshell_title: "In a Nutshell" # nutshell_description: "Any resources we provide in the Level Editor are free to use as you like for creating Levels. But we reserve the right to restrict distribution of the Levels themselves (that are created on codecombat.com) so that they may be charged for in the future, if that's what ends up happening." # canonical: "The English version of this document is the definitive, canonical version. If there are any discrepencies between translations, the English document takes precedence." - +# # contribute: # page_title: "Contributing" # character_classes_title: "Character Classes" @@ -483,7 +472,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t # brave_adventurers: "Our Brave Adventurers:" # translating_diplomats: "Our Translating Diplomats:" # helpful_ambassadors: "Our Helpful Ambassadors:" - +# # classes: # archmage_title: "Archmage" # archmage_title_description: "(Coder)" @@ -499,7 +488,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t # ambassador_title_description: "(Support)" # counselor_title: "Counselor" # counselor_title_description: "(Expert/Teacher)" - +# # ladder: # please_login: "Please log in first before playing a ladder game." # my_matches: "My Matches" diff --git a/app/locale/pl.coffee b/app/locale/pl.coffee index 9c1984988..86dd96046 100644 --- a/app/locale/pl.coffee +++ b/app/locale/pl.coffee @@ -81,7 +81,7 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish campaign_player_created: "Stworzone przez graczy" campaign_player_created_description: "... w których walczysz przeciwko dziełom Czarodziejów Rękodzielnictwa" level_difficulty: "Poziom trudności: " -# play_as: "Play As " + play_as: "Graj jako " contact: contact_us: "Kontakt z CodeCombat" @@ -123,7 +123,7 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish wizard_tab: "Czarodziej" password_tab: "Hasło" emails_tab: "Powiadomienia" -# admin: "Admin" + admin: "Administrator" gravatar_select: "Wybierz fotografię z Gravatar" gravatar_add_photos: "Dodaj zdjęcia i miniatury do swojego konta Gravatar, by móc wybrać zdjęcie." gravatar_add_more_photos: "Dodaj więcej zdjęć do swojego konta Gravatar, by móc ich użyć." @@ -132,7 +132,7 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish new_password_verify: "Zweryfikuj" email_subscriptions: "Powiadomienia email" email_announcements: "Ogłoszenia" -# email_notifications: "Notifications" + email_notifications: "Powiadomienia" email_notifications_description: "Otrzymuj okresowe powiadomienia dotyczące twojego konta." email_announcements_description: "Otrzymuj powiadomienia o najnowszych wiadomościach i zmianach w CodeCombat." contributor_emails: "Powiadomienia asystentów" @@ -180,9 +180,9 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish victory_sign_up: "Zapisz się, by zapisać postępy" victory_sign_up_poke: "Chcesz zapisać swój kod? Utwórz bezpłatne konto!" victory_rate_the_level: "Oceń poziom: " -# victory_rank_my_game: "Rank My Game" -# victory_ranking_game: "Submitting..." -# victory_return_to_ladder: "Return to Ladder" + victory_rank_my_game: "Oceń moją grę" + victory_ranking_game: "Wprowadzanie..." + victory_return_to_ladder: "Powrót do drabinki" victory_play_next_level: "Przejdź na następny poziom" victory_go_home: "Powrót do strony głównej" victory_review: "Powiedz nam coś więcej!" @@ -207,17 +207,17 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish hud_continue: "Kontynuuj (Shift + spacja)" spell_saved: "Czar zapisany" skip_tutorial: "Pomiń (esc)" -# editor_config: "Editor Config" -# editor_config_title: "Editor Configuration" -# editor_config_keybindings_label: "Key Bindings" -# editor_config_keybindings_default: "Default (Ace)" -# editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." -# editor_config_invisibles_label: "Show Invisibles" -# editor_config_invisibles_description: "Displays invisibles such as spaces or tabs." -# editor_config_indentguides_label: "Show Indent Guides" -# editor_config_indentguides_description: "Displays vertical lines to see indentation better." -# editor_config_behaviors_label: "Smart Behaviors" -# editor_config_behaviors_description: "Autocompletes brackets, braces, and quotes." + editor_config: "Konfiguracja edytora" + editor_config_title: "Konfiguracja edytora" + editor_config_keybindings_label: "Przypisania klawiszy" + editor_config_keybindings_default: "Domyślny (Ace)" + editor_config_keybindings_description: "Dodaje skróty znane z popularnych edytorów." + editor_config_invisibles_label: "Pokaż białe znaki" + editor_config_invisibles_description: "Wyświetla białe znaki takie jak spacja czy tabulator." + editor_config_indentguides_label: "Pokaż linijki wcięć" + editor_config_indentguides_description: "Wyświetla pionowe linie, by lepiej zaznaczyć wcięcia." + editor_config_behaviors_label: "Inteligentne zachowania" + editor_config_behaviors_description: "Autouzupełnianie nawiasów, klamer i cudzysłowów." admin: av_title: "Panel administracyjny" @@ -242,8 +242,8 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish contact_us: "skontaktuj się z nami!" hipchat_prefix: "Możesz nas też spotkać w naszym" hipchat_url: "pokoju HipChat." -# revert: "Revert" -# revert_models: "Revert Models" + revert: "Przywróć" + revert_models: "Przywróć wersję" level_some_options: "Trochę opcji?" level_tab_thangs: "Obiekty" level_tab_scripts: "Skrypty" @@ -262,18 +262,18 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish level_components_title: "Powrót do listy obiektów" level_components_type: "Typ" level_component_edit_title: "Edytuj komponent" -# level_component_config_schema: "Config Schema" -# level_component_settings: "Settings" + level_component_config_schema: "Schemat konfiguracji" + level_component_settings: "Ustawienia" level_system_edit_title: "Edytuj system" create_system_title: "Stwórz nowy system" new_component_title: "Stwórz nowy komponent" new_component_field_system: "System" -# new_article_title: "Create a New Article" -# new_thang_title: "Create a New Thang Type" -# new_level_title: "Create a New Level" -# article_search_title: "Search Articles Here" -# thang_search_title: "Search Thang Types Here" -# level_search_title: "Search Levels Here" + new_article_title: "Stwórz nowy artykuł" + new_thang_title: "Stwórz nowy typ obiektu" + new_level_title: "Stwórz nowy poziom" + article_search_title: "Przeszukaj artykuły" + thang_search_title: "Przeszukaj typy obiektów" + level_search_title: "Przeszukaj poziomy" article: edit_btn_preview: "Podgląd" @@ -285,27 +285,27 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish body: "Zawartość" version: "Wersja" commit_msg: "Wiadomość do commitu" -# history: "History" + history: "Historia" version_history_for: "Historia wersji dla: " -# result: "Result" - results: "Wynik" + result: "Wynik" + results: "Wyniki" description: "Opis" or: "lub" email: "Email" -# password: "Password" + password: "Hasło" message: "Wiadomość" -# code: "Code" -# ladder: "Ladder" -# when: "When" -# opponent: "Opponent" -# rank: "Rank" -# score: "Score" -# win: "Win" -# loss: "Loss" -# tie: "Tie" -# easy: "Easy" -# medium: "Medium" -# hard: "Hard" + code: "Kod" + ladder: "Drabinka" + when: "kiedy" + opponent: "Przeciwnik" + rank: "Ranking" + score: "Wynik" + win: "Wygrana" + loss: "Przegrana" + tie: "Remis" + easy: "Łatwy" + medium: "Średni" + hard: "Trudny" about: who_is_codecombat: "Czym jest CodeCombat?" @@ -416,7 +416,7 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish join_desc_4: ", a dowiesz się wszystkiego!" join_url_email: "Napisz do nas" join_url_hipchat: "publicznego pokoju HipChat" - more_about_archmage: "Dowiedz się więcej na temat stawania się Arcymagiem" + more_about_archmage: "Dowiedz się więcej o stawaniu się Arcymagiem" archmage_subscribe_desc: "Otrzymuj e-maile dotyczące nowych okazji programistycznych oraz ogłoszeń." artisan_summary_pref: "Chcesz projektować poziomy i rozwijać arsenał CodeCombat? Ludzie grają w dostarczane przez nas zasoby szybciej, niż potrafimy je tworzyć! Obecnie, nasz edytor jest dosyć niemrawy więc czuj się ostrzeżony - tworzenie poziomów przy jego pomocy może być trochę wymagające i zbugowane. Jeśli masz wizję nowych kampanii, od pętli typu for do" artisan_summary_suf: ", ta klasa jest dla ciebie." @@ -441,15 +441,15 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish adventurer_join_suf: "więc jeśli wolałbyś być informowany w ten sposób, zarejestruj się na nich!" more_about_adventurer: "Dowiedz się więcej o stawaniu się Podróżnikiem" adventurer_subscribe_desc: "Otrzymuj e-maile, gdy pojawią się nowe poziomy do tesotwania." - scribe_summary_pref: "Codecombat nie będzie tylko zbieraniną poziomów. Będzie też źródłem wiedzy programistycznej, na której gracze będą mogli sie opierać. Dzięki temu, każdy z Rzemieślników będzie mógł podać link do szczegółowego artykułu, który pomoże graczowi: dokumentacji w stylu zbudowanej przez " -# scribe_summary_suf: " has built. If you enjoy explaining programming concepts, then this class is for you." + scribe_summary_pref: "Codecombat nie będzie tylko zbieraniną poziomów. Będzie też źródłem wiedzy programistycznej, na której gracze będą mogli sie opierać. Dzięki temu, każdy z Rzemieślników będzie mógł podać link do szczegółowego artykułu, który pomoże graczowi: dokumentacji w stylu " + scribe_summary_suf: ". Jeśli lubisz wyjaśniać idee programistyczne, ta klasa jest dla ciebie." scribe_introduction_pref: "CodeCombat nie będzie tylko zbieraniną poziomów. Będzie też zawierać źródło wiedzy, wiki programistycznych idei, na której będzie można oprzeć poziomy. Dzięki temu, każdy z Rzemieślników zamiast opisywać ze szczegółami, czym jest operator porónania, będzie mógł po prostu podać graczowi w swoim poziomie link do artykułu opisującego go. Mamy na myśli coś podobnego do " scribe_introduction_url_mozilla: "Mozilla Developer Network" - scribe_introduction_suf: " . Jeśli twoją definicją zabawy jest artykułowanie idei programistycznych przy pomocy składni Markdown, ta klasa może być dla ciebie." + scribe_introduction_suf: ". Jeśli twoją definicją zabawy jest artykułowanie idei programistycznych przy pomocy składni Markdown, ta klasa może być dla ciebie." scribe_attribute_1: "Umiejętne posługiwanie się słowem to właściwie wszystko, czego potrzebujesz. Nie tylko gramatyka i ortografia, ale również umiejętnośc tłumaczenia trudnego materiału innym." contact_us_url: "Skontaktuj się z nami" scribe_join_description: "powiedz nam coś o sobie, swoim doświadczeniu w programowaniu i rzeczach, o których chciałbyś pisać, a chętnie to z tobą uzgodnimy!" - more_about_scribe: "Dowiedz się więcej na temat stawania się Skrybą" + more_about_scribe: "Dowiedz się więcej o stawaniu się Skrybą" scribe_subscribe_desc: "Otrzymuj e-maile na temat ogłoszeń dotyczących pisania artykułów." diplomat_summary: "W krajach nieanglojęzycznych istnieje wielkie zainteresowanie CodeCombat! Szukamy tłumaczy chętnych do poświęcenia swojego czasu na tłumaczenie treści strony, aby CodeCombat było dostępne dla całego świata tak szybko, jak to tylko możliwe. Jeśli chcesz pomóc w sprawieniu, by CodeCombat było prawdziwie międzynarodowe, ta klasa jest dla ciebie." diplomat_introduction_pref: "Jeśli dowiedzieliśmy jednej rzeczy z naszego " @@ -459,7 +459,7 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish diplomat_join_pref_github: "Znajdź plik lokalizacyjny dla wybranego języka " diplomat_github_url: "na GitHubie" diplomat_join_suf_github: ", edytuj go online i wyślij pull request. Do tego, zaznacz kratkę poniżej, aby być na bieżąco z naszym międzynarodowym rozwojem!" - more_about_diplomat: "Dowiedz się więcej na temat stawania się Dyplomatą" + more_about_diplomat: "Dowiedz się więcej o stawaniu się Dyplomatą" diplomat_subscribe_desc: "Otrzymuj e-maile na temat postępów i18n i poziomów do tłumaczenia." ambassador_summary: "Staramy się zbudować społeczność, a każda społeczność potrzebuje zespołu wsparcia, kiedy pojawią się kłopoty. Mamy czaty, e-maile i strony w sieciach społecznościowych, aby nasi użytkownicy mogli zapoznać się z grą. Jeśli chcesz pomóc ludziom w tym, jak do nas dołączyć, dobrze się bawić, a do tego poznać tajniki programowania, ta klasa jest dla ciebie." ambassador_introduction: "Oto społeczność, którą budujemy, a ty jesteś jej łącznikiem. Mamy czaty, e-maile i strony w sieciach społecznościowych oraz wielu ludzi potrzebujących pomocy w zapoznaniu się z grą oraz uczeniu się za jej pomocą. Jeśli chcesz pomóc ludziom, by do nas dołączyli i dobrze się bawili oraz mieć pełne poczucie tętna CodeCombat oraz kierunku, w którym zmierzamy, ta klasa może być dla ciebie." @@ -475,7 +475,7 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish counselor_attribute_1: "Doświadczenie, w którymkolwiek z powyższych obszarów lub czymś, co uważasz za pomocne." counselor_attribute_2: "Trochę wolnego czasu" counselor_join_desc: "powiedz nam coś o sobie, o tym, czego dokonałeś i jak chciałbyś nam pomóc. Dodamy cię do naszej listy kontaktów i damy ci znać, kiedy będziemy potrzebować twojej pomocy (nie za często)." - more_about_counselor: "Dowiedz się więcej na temat stawania się Opiekunem" + more_about_counselor: "Dowiedz się więcej o stawaniu się Opiekunem" changes_auto_save: "Zmiany zapisują się automatycznie po kliknięci kratki." diligent_scribes: "Nasi pilni Skrybowie:" powerful_archmages: "Nasi potężni Arcymagowie:" @@ -500,34 +500,34 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish counselor_title: "Opiekun" counselor_title_description: "(ekspert/nauczyciel)" -# ladder: -# please_login: "Please log in first before playing a ladder game." -# my_matches: "My Matches" -# simulate: "Simulate" -# simulation_explanation: "By simulating games you can get your game ranked faster!" -# simulate_games: "Simulate Games!" -# simulate_all: "RESET AND SIMULATE GAMES" -# leaderboard: "Leaderboard" -# battle_as: "Battle as " -# summary_your: "Your " -# summary_matches: "Matches - " -# summary_wins: " Wins, " -# summary_losses: " Losses" -# rank_no_code: "No New Code to Rank" -# rank_my_game: "Rank My Game!" -# rank_submitting: "Submitting..." -# rank_submitted: "Submitted for Ranking" -# rank_failed: "Failed to Rank" -# rank_being_ranked: "Game Being Ranked" -# code_being_simulated: "Your new code is being simulated by other players for ranking. This will refresh as new matches come in." -# no_ranked_matches_pre: "No ranked matches for the " -# no_ranked_matches_post: " team! Play against some competitors and then come back here to get your game ranked." -# choose_opponent: "Choose an Opponent" -# tutorial_play: "Play Tutorial" -# tutorial_recommended: "Recommended if you've never played before" -# tutorial_skip: "Skip Tutorial" -# tutorial_not_sure: "Not sure what's going on?" -# tutorial_play_first: "Play the Tutorial first." -# simple_ai: "Simple AI" -# warmup: "Warmup" + ladder: + please_login: "Przed rozpoczęciem gry rankingowej musisz się zalogować." + my_matches: "Moje pojedynki" + simulate: "Symuluj" + simulation_explanation: "Symulując gry możesz szybciej uzyskać ocenę swojej gry!" + simulate_games: "Symuluj gry!" + simulate_all: "RESETUJ I SYMULUJ GRY" + leaderboard: "Tabela rankingowa" + battle_as: "Walcz jako " + summary_your: "Twój " + summary_matches: "Pojedynki - " + summary_wins: " Wygrane, " + summary_losses: " Przegrane" + rank_no_code: "Brak nowego kodu do oceny" + rank_my_game: "Oceń moją grę!" + rank_submitting: "Wysyłanie..." + rank_submitted: "Wysłano do oceny" + rank_failed: "Błąd oceniania" + rank_being_ranked: "Aktualnie oceniane gry" + code_being_simulated: "Twój nowy kod jest aktualnie symulowany przez innych graczy w celu oceny. W miarę pojawiania sie nowych pojedynków, nastąpi odświeżenie." + no_ranked_matches_pre: "Brak ocenionych pojedynków dla drużyny " + no_ranked_matches_post: " ! Zagraj przeciwko kilku oponentom i wróc tutaj, aby uzyskać ocenę gry." + choose_opponent: "Wybierz przeciwnika" + tutorial_play: "Rozegraj samouczek" + tutorial_recommended: "Zalecane, jeśli wcześniej nie grałeś" + tutorial_skip: "Pomiń samouczek" + tutorial_not_sure: "Nie wiesz, co się dzieje?" + tutorial_play_first: "Rozegraj najpierw samouczek." + simple_ai: "Proste AI" + warmup: "Rozgrzewka" # vs: "VS" diff --git a/app/styles/base.sass b/app/styles/base.sass index ee3d36d21..166fd23e3 100644 --- a/app/styles/base.sass +++ b/app/styles/base.sass @@ -16,6 +16,7 @@ h1 h2 h3 h4 letter-spacing: 2px .main-content-area + box-shadow: 0px 0px 10px position: relative width: 1024px margin: 56px auto 0 @@ -26,6 +27,9 @@ h1 h2 h3 h4 #outer-content-wrapper background: #8cc63f url(/images/pages/base/repeat-tile.png) top center +#intermediate-content-wrapper + background: url(/images/pages/base/sky_repeater.png) repeat-x + #inner-content-wrapper background: url(/images/pages/base/background_texture.png) top center no-repeat diff --git a/app/styles/play/level/loading.sass b/app/styles/play/level/loading.sass index 6d2d61319..71ec1b424 100644 --- a/app/styles/play/level/loading.sass +++ b/app/styles/play/level/loading.sass @@ -13,6 +13,7 @@ background-image: url($url), linear-gradient(to bottom, $top, $mid $stop, $bot) background-repeat: no-repeat background-position: top $backgroundPosition + background-size: contain #level-loading-view color: blue diff --git a/app/templates/base.jade b/app/templates/base.jade index c9ebc9c95..fadb36e0a 100644 --- a/app/templates/base.jade +++ b/app/templates/base.jade @@ -35,10 +35,11 @@ body block outer_content #outer-content-wrapper - #inner-content-wrapper - .main-content-area - block content - p If this is showing, you dun goofed + #intermediate-content-wrapper + #inner-content-wrapper + .main-content-area + block content + p If this is showing, you dun goofed block footer .footer diff --git a/app/views/editor/level/thangs_tab_view.coffee b/app/views/editor/level/thangs_tab_view.coffee index be314e68a..be020ff6f 100644 --- a/app/views/editor/level/thangs_tab_view.coffee +++ b/app/views/editor/level/thangs_tab_view.coffee @@ -8,6 +8,7 @@ CocoCollection = require 'models/CocoCollection' Surface = require 'lib/surface/Surface' Thang = require 'lib/world/thang' LevelThangEditView = require './thang/edit' +ComponentsCollection = require 'collections/ComponentsCollection' # Moving the screen while dragging thangs constants MOVE_MARGIN = 0.15 @@ -60,12 +61,25 @@ module.exports = class ThangsTabView extends View @thangTypes.once 'sync', @onThangTypesLoaded @thangTypes.fetch() + # just loading all Components for now: https://github.com/codecombat/codecombat/issues/405 + @componentCollection = @supermodel.getCollection new ComponentsCollection() + @componentCollection.once 'sync', @onComponentsLoaded + @componentCollection.fetch() + onThangTypesLoaded: => + return if @destroyed @supermodel.addCollection @thangTypes @supermodel.populateModel model for model in @thangTypes.models - @startsLoading = false + @startsLoading = not @componentCollection.loaded @render() # do it again but without the loading screen - @onLevelLoaded level: @level if @level + @onLevelLoaded level: @level if @level and not @startsLoading + + onComponentsLoaded: => + return if @destroyed + @supermodel.addCollection @componentCollection + @startsLoading = not @thangTypes.loaded + @render() # do it again but without the loading screen + @onLevelLoaded level: @level if @level and not @startsLoading getRenderData: (context={}) -> context = super(context) @@ -346,7 +360,7 @@ module.exports = class ThangsTabView extends View onTreemaThangSelected: (e, selectedTreemas) => selectedThangID = _.last(selectedTreemas)?.data.id if selectedThangID isnt @selectedExtantThang?.id - @surface.spriteBoss.selectThang selectedThangID + @surface.spriteBoss.selectThang selectedThangID, null, true onTreemaThangDoubleClicked: (e, treema) => id = treema?.data?.id diff --git a/app/views/play/level_view.coffee b/app/views/play/level_view.coffee index dc2cb931a..64d48ae8b 100644 --- a/app/views/play/level_view.coffee +++ b/app/views/play/level_view.coffee @@ -164,7 +164,7 @@ module.exports = class PlayLevelView extends View @initSurface() @initGoalManager() @initScriptManager() - @insertSubviews ladderGame: @otherSession? + @insertSubviews ladderGame: (@level.get('type') is "ladder") @initVolume() @session.on 'change:multiplayer', @onMultiplayerChanged, @ @originalSessionState = _.cloneDeep(@session.get('state'))