Implemented map run-length encoding, updated KO lang
This commit is contained in:
@@ -17,7 +17,7 @@ text.name = 이름:
|
|||||||
text.public = 공개
|
text.public = 공개
|
||||||
text.players = {0} 명 플레이어 온라인
|
text.players = {0} 명 플레이어 온라인
|
||||||
text.players.single = {0} 명 플레이어 온라인
|
text.players.single = {0} 명 플레이어 온라인
|
||||||
text.server.mismatch = 패킷 오류 : 클라이언트 / 서버 버전 불일치합니다! 당신과 호스트가 최신 버전의 Mindustry 를 가지고 있는지 확인해주세요!
|
text.server.mismatch = 패킷 오류 : 클라이언트 / 서버 버전이 불일치합니다! 당신과 호스트가 최신 버전의 Mindustry 를 가지고 있는지 확인해주세요!
|
||||||
.server.closing = [accent]서버 닫는중...
|
.server.closing = [accent]서버 닫는중...
|
||||||
text.server.kicked.kick = 당신은 서버에서 쫓겨났습니다!
|
text.server.kicked.kick = 당신은 서버에서 쫓겨났습니다!
|
||||||
text.server.kicked.invalidPassword = 잘못된 비밀번호 입니다!
|
text.server.kicked.invalidPassword = 잘못된 비밀번호 입니다!
|
||||||
@@ -229,47 +229,47 @@ map.tundra.name = 툰드라
|
|||||||
map.spiral.name = 나선
|
map.spiral.name = 나선
|
||||||
map.tutorial.name = 튜토리얼
|
map.tutorial.name = 튜토리얼
|
||||||
tutorial.intro.text = [yellow] 튜토리얼에 오신 것을 환영합니다.[] 시작하려면 '다음'을 누르세요.
|
tutorial.intro.text = [yellow] 튜토리얼에 오신 것을 환영합니다.[] 시작하려면 '다음'을 누르세요.
|
||||||
tutorial.moveDesktop.text = 이동하려면 [orange] [[WASD] [] 키를 사용하세요. 빠르게 이동하려면 [orange] 쉬프트[]를 길게 누르세요. [orange] CTRL []을 누르고 있으면 [orange] 스크롤 휠 []을 사용하여 확대 또는 축소 할 수 있습니다.
|
tutorial.moveDesktop.text = 이동하려면 [orange] [[WASD] [] 키를 사용하세요. 또한, [orange]Shift[]를 [orange] 누르고 있으면 빠르게 이동할 수 있습니다. [orange]CTRL[]을 누르고 있으면 [orange] 스크롤 휠 []을 사용하여 확대 또는 축소 할 수 있습니다.
|
||||||
tutorial.shoot.text = 마우스를 사용하여 조준하고 [오렌지] 마우스 왼쪽 버튼 []을 잡고 촬영하십시오. [노란색] 타겟 []에서 연습 해보십시오.
|
tutorial.shoot.text = 마우스를 사용하여 조준하고 [orange]왼쪽 마우스 버튼[]을 눌러 쏘세요. 저기 노란색 [yellow]타겟[]앞에서 연습해보세요.
|
||||||
tutorial.moveAndroid.text = 보기를 이동하려면 손가락 하나를 화면 전체로 끕니다. 핀치 앤 드래그를 사용하여 확대 또는 축소합니다.
|
tutorial.moveAndroid.text = 화면을 이동하기 위해서 한손가락으로 스크롤을 하세요. 줌인 줌아웃은 두손가락으로 하시면 됩니다.
|
||||||
tutorial.placeSelect.text = 오른쪽 하단의 블록 메뉴에서 [yellow] 컨베이어 []를 선택하세요.
|
tutorial.placeSelect.text = 오른쪽 하단에 블럭 메뉴에서[yellow]컨베이어[]를 선택하세요.
|
||||||
tutorial.placeConveyorDesktop.text = [orange] [[scrollwheel] []을 사용하여 컨베이어를 [orange] forwards [] 방향으로 회전시킨 다음 [orange] [left mouse button] []을 사용하여 [yellow] 표시된 위치 []에 놓습니다.
|
tutorial.placeConveyorDesktop.text = [orange][[scrollwheel][]을 사용하여 컨베이어를[orange]앞 방향[]으로 돌린다음 [yellow]표시된 위치[]에 [orange][[left mouse button][]을 이용해 설치 합니다.
|
||||||
tutorial.placeConveyorAndroid.text = 컨베이어를 회전 시키려면 [orange] [rotate button] []을 사용하십시오. [orange] forwards []를 사용하여 한 손가락으로 원하는 위치로 드래그 한 다음 [orange] 표시된 위치 []에 놓으십시오. [[체크 표시][].
|
tutorial.placeConveyorAndroid.text = 컨베이어를 회전 시키기 위해[orange][[rotate button][]를 터치하고 [orange]앞방향[]을 보게 한후, 한손가락으로 [yellow]표시된 위치[]에 [orange][[checkmark][]으로 설치하세요.
|
||||||
tutorial.placeConveyorAndroidInfo.text = 또는 왼쪽 하단의 십자선 아이콘을 눌러 [주황색] [[터치 모드] []로 전환하고 화면을 두드려 블럭을 배치 할 수 있습니다. 터치 모드에서 블록은 왼쪽 하단의 화살표로 회전 할 수 있습니다. 다음 노란색 []을 눌러 시도해보십시오.
|
tutorial.placeConveyorAndroidInfo.text = 아니면 왼쪽 하단에 [orange][[touch mode][]를 눌러 터치모드로 전환하고 터치를 이용해 블럭을 배치 할수 있습니다 방향을 바꾸려면 왼쪽하단에 화살표로 바꾸시면 됩니다[yellow]다음[]을 눌러 시도해 보세요
|
||||||
tutorial.placeDrill.text = 이제, 표시된 위치에 [yellow] 돌 드릴 []을 선택하여 배치하세요.
|
tutorial.placeDrill.text = 이제, 표시된 위치에 [yellow]돌 드릴[]을 선택하여 배치하세요.
|
||||||
tutorial.blockInfo.text = 블록에 대해 더 자세히 알고 싶다면, 오른쪽 상단에있는 [orange] 물음표 []를 눌러 설명을 읽으세요.
|
tutorial.blockInfo.text = 블록에 대해 더 자세히 알고 싶다면, 오른쪽 상단에있는 [orange]물음표[]를 눌러 설명을 읽으세요.
|
||||||
tutorial.deselectDesktop.text = [orange] [[마우스 오른쪽 버튼] []을 사용하여 블록 선택을 취소 할 수 있습니다.
|
tutorial.deselectDesktop.text = [orange][[마우스 오른쪽 버튼][]을 사용하여 블록을 선택 해제할 수 있습니다.
|
||||||
tutorial.deselectAndroid.text = [orange] X [] 버튼을 눌러 블록 선택을 취소 할 수 있습니다.
|
tutorial.deselectAndroid.text = [orange]X[] 버튼을 눌러 블록을 선택 해제할 수 있습니다.
|
||||||
tutorial.drillPlaced.text = 드릴은 이제 [yellow] 돌[]을 생산할 것이고, 컨베이어로 출력 한 다음 [yellow] 코어 []로 옮길 것입니다.
|
tutorial.drillPlaced.text = 드릴은 이제 [yellow] 돌[]을 생산할 것이고, 컨베이어로 출력 한 다음 [yellow] 코어 []로 옮길 것입니다.
|
||||||
tutorial.drillInfo.text = 각 광석은 그에 맞는 드릴이 필요합니다. 돌은 돌 드릴이 필요하고, 철은 철 드릴이 필요합니다.
|
tutorial.drillInfo.text = 각 광석은 그에 맞는 드릴이 필요합니다. 돌은 돌 드릴이 필요하고, 철은 철 드릴이 필요합니다.
|
||||||
tutorial.drillPlaced2.text = 아이템을 코어로 이동하면 왼쪽 상단의 [orange] 아이템 인벤토리 []에 표시됩니다. 인벤토리의 아이템은 블록을 배치할때 사용됩니다.
|
tutorial.drillPlaced2.text = 아이템을 코어로 이동하면 왼쪽 상단의 [orange]아이템 인벤토리[]에 표시됩니다. 인벤토리의 아이템은 블록을 배치할때 사용됩니다.
|
||||||
tutorial.moreDrills.text = 드릴과 컨베이어는 많이 연결할 수 있습니다. 이것처럼요.
|
tutorial.moreDrills.text = 드릴과 컨베이어는 많이 연결할 수 있습니다. 이것처럼요.
|
||||||
tutorial.deleteBlock.text = 삭제하려는 블록에서 마우스 오른쪽 버튼 []을 클릭하여 블록을 삭제할 수 있습니다. 이 컨베이어를 삭제 해보십시오.
|
tutorial.deleteBlock.text = 블록을 삭제하고 싶으면 [orange]마우스 오른쪽 버튼[]을 클릭하여 블록을 삭제할 수 있습니다. 이 컨베이어를 삭제 해보십시오.
|
||||||
tutorial.deleteBlockAndroid.text = 왼쪽 하단의 [주황색] 중단 모드 메뉴 []에서 십자선 []을 선택하고 블록을 눌러 [오렌지]로 블록을 삭제할 수 있습니다. 이 컨베이어를 삭제 해보십시오.
|
tutorial.deleteBlockAndroid.text = 왼쪽 하단에 [orange]블록삭제모드[]안에 [orange]십자선을[] 선택한 다음 블록을 눌러 삭제할 수 있습니다. 이 컨베이어를 삭제해 보세요.
|
||||||
tutorial.placeTurret.text = 이제[yellow] 표시된 위치 []에 [yellow]포탑[]을 선택하여 배치하세요.
|
tutorial.placeTurret.text = 이제[yellow] 표시된 위치 []에 [yellow]포탑[]을 선택하여 배치하세요.
|
||||||
tutorial.placedTurretAmmo.text = 이 포탑은 컨베이어에서 [황색] 탄약을 받아 들일 것입니다. 마우스를 가져 가면 [녹색] 녹색 막대 []를 확인하여 얼마나 많은 탄약이 있는지 확인할 수 있습니다.
|
tutorial.placedTurretAmmo.text = 이 포탑은 컨베이어에서 [yellow]탄약[]을 받습니다 커서를 가져 가묜[green]녹색 막대[]를 통해 얼마나 많은 탄약이 있는지 확인 할수 있습니다.
|
||||||
tutorial.turretExplanation.text = 포탑은 충분한 탄약을 보유하고있는 한 범위 내에서 가장 가까운 적에게 자동으로 내부를 쏜다.
|
tutorial.turretExplanation.text = 포탑은 충분한 탄약을 보유하고 있는 한 범위 내에서 가장 가까운 적에게 자동으로 총알을 쏩니다.
|
||||||
tutorial.waves.text = [황색] 60 초마다, [산호] 원수의 물결이 특정 위치에 스폰되고 핵을 파괴하려고 시도합니다.
|
tutorial.waves.text = [yellow]60[] 초 마다, 웨이브가 시작되고[coral]적[]들이 특정 위치에 스폰되어 코어를 파괴하기위해 올 것 입니다.
|
||||||
tutorial.coreDestruction.text = 당신의 목표는 [yellow]코어를 방어하는 것[]입니다. 코어가 파괴되면 [coral]게임에서 패배합니다[].
|
tutorial.coreDestruction.text = 당신의 목표는 [yellow]코어를 방어하는 것[]입니다. 코어가 파괴되면 [coral]게임에서 패배합니다[].
|
||||||
tutorial.pausingDesktop.text = 휴식을 취해야 할 경우 왼쪽 상단이나 [오렌지] 스페이스 []에서 [오렌지] 일시 중지 버튼 []을 눌러 게임을 일시 중지하십시오. 일시 중지 된 상태에서 블록을 선택하고 배치 할 수는 있지만 이동하거나 촬영할 수는 없습니다.
|
tutorial.pausingDesktop.text = 일시정지를 하고 싶은 경우 왼쪽 상단의 [orange]스페이스[]를 눌러 게임을 일시정지하세요. 일시 중지 된 상태에서는 블록을 선택하고 배치할수는 있지만 이동하거나 쏠수는 없습니다.
|
||||||
tutorial.pausingAndroid.text = 휴식을 취해야 할 경우 왼쪽 상단의 [오렌지] 일시 중지 버튼 []을 눌러 게임을 일시 중지하십시오. 일시 중지 된 상태에서 선택 및 배치 블록을 배치 할 수 있습니다.
|
tutorial.pausingAndroid.text = 일시정지를 하고 싶은 경우 왼쪽 상단의 [orange]일시 정지 버튼[]을 눌러 게임을 일시정지하세요. 일시 중지 된 상태에서도 선택 및 블록 배치를 할 수 있습니다.
|
||||||
tutorial.purchaseWeapons.text = 왼쪽 하단에있는 업그레이드 메뉴를 열어 새로운 [노란색] 무기 []를 구입할 수 있습니다.
|
tutorial.purchaseWeapons.text = 왼쪽 하단에 있는 업그레이드 메뉴를 열어 새로운 [yellow]무기[]를 구입할 수 있습니다.
|
||||||
tutorial.switchWeapons.text = 왼쪽 하단의 아이콘을 클릭하거나 숫자 [오렌지] [[1-9] []를 사용하여 무기를 전환하십시오.
|
tutorial.switchWeapons.text = 왼쪽 하단의 아이콘을 클릭하거나 숫자 [orange][[1-9][] 버튼을 사용하여 무기를 전환하세요
|
||||||
tutorial.spawnWave.text = 여기 파도가왔다. 그들을 파괴하십시오.
|
tutorial.spawnWave.text = 웨이브가 시작되었습니다. 적들을 파괴하세요!
|
||||||
tutorial.pumpDesc.text = 추후 파도에서 발전기 또는 추출기 용 액체를 분배하기 위해 [노란색] 펌프 []를 사용해야 할 수도 있습니다.
|
tutorial.pumpDesc.text = 이후 웨이브에선 발전기 또는 추출기 용 액체를 분배하기 위해 [yellow]펌프[] 를 사용해야 할 수도 있습니다
|
||||||
tutorial.pumpPlace.text = 펌프는 드릴과 유사하게 작동하지만, 아이템 대신 액체를 생산합니다. [yellow]지정된 석유[]에 펌프를 놓으세요.
|
tutorial.pumpPlace.text = 펌프는 드릴과 유사하게 작동하지만, 아이템 대신 액체를 생산합니다. [yellow]지정된 위치[]에 펌프를 놓으세요.
|
||||||
tutorial.conduitUse.text = 이제 [orange] 도관 []을 펌프에서 멀리 떨어지게하십시오.
|
tutorial.conduitUse.text = 이제 [orange]파이프[] 를 펌프에서 멀리 떨어트려 두세요
|
||||||
tutorial.conduitUse2.text = 하나 더...
|
tutorial.conduitUse2.text = 하나 더...
|
||||||
tutorial.conduitUse3.text = 하나 더...
|
tutorial.conduitUse3.text = 하나 더...
|
||||||
tutorial.generator.text = 이제 파이프 끝 부분에 [orange]석유 발전기[] 블록을 놓으세요.
|
tutorial.generator.text = 이제 파이프 끝 부분에 [orange]석유 발전기[] 블록을 놓으세요.
|
||||||
tutorial.generatorExplain.text = 이제 이 발전기는 석유에서 [yellow]전력[]을 생성합니다.
|
tutorial.generatorExplain.text = 이제 이 발전기는 석유에서 [yellow]전력[]을 생성합니다.
|
||||||
tutorial.lasers.text = 전력은 [yellow]파워 레이저[]를 통해 전송됩니다. 회전한 후 이곳에 배치하세요.
|
tutorial.lasers.text = 전력은 [yellow]파워 레이저[]를 통해 전송됩니다. 회전한 후 이곳에 배치하세요.
|
||||||
tutorial.laserExplain.text = 발전기가 이제 레이저 블록으로 전원을 이동합니다. [황색] 불투명 [] 광선은 현재 전력을 전송 중임을 의미하고 [황색] 투명 [] 광선은 전송하지 않음을 의미합니다.
|
tutorial.laserExplain.text = 발전기가 이제 레이저 블록으로 전력을 보냅니다. [yellow]불두명[] 광선은 현재 전력을 전송 중임을 의미하고 [yellow]투명[] 광선은 전송하지 않음을 의미합니다.
|
||||||
tutorial.laserMore.text = 블록 위로 마우스를 올리고 상단의 [황색] 노란 막대 []를 확인하여 블록의 전력을 확인할 수 있습니다.
|
tutorial.laserMore.text = 블록 위로 마우스를 올리고 상단의 [yellow]노란 막대[]를 확인하여 블록의 전력을 볼 수 있습니다
|
||||||
tutorial.healingTurret.text = 이 레이저는 [석회] 수리 터렛에 전원을 공급하는 데 사용할 수 있습니다 []. 여기에 하나 넣으세요.
|
tutorial.healingTurret.text = 이 레이저는 [lime]수리터렛[] 에 전력을 공급하는데 사용합니다. 여기에 하나 놓으세요
|
||||||
tutorial.healingTurretExplain.text = 힘이있는 한,이 포탑은 주변 블록을 수리 할 것입니다. [] 노는 중에 가능한 한 빨리 기지에 하나가 있는지 확인하십시오!
|
tutorial.healingTurretExplain.text = 전력이 있는 한 이 포탑은 [lime]주변 블록을 수리[] 합니다 시간이 있을 때 가능한 한 빨리 기지에 하나가 있는지 확인하세요!
|
||||||
tutorial.smeltery.text = 많은 블록에서 [오렌지] 제련소가 필요한 [오렌지] 스틸 []을 만들 필요가 있습니다. 여기에 하나 넣으세요.
|
tutorial.smeltery.text = 많은 블록들은[orange]강철[]을 필요로 합니다. [orange]제련소[]를 선택해 여기에 놓으세요.
|
||||||
tutorial.smelterySetup.text = 이 제련소는 석탄을 연료하여 투입된 철에서 [orange] 강철 []을 생산할 것입니다.
|
tutorial.smelterySetup.text = 이 제련소는 석탄을 연료로 사용하며 철을 넣으면 [orange]강철[] 을 생산할 것입니다.
|
||||||
tutorial.end.text = 이것으로 튜토리얼을 마칩니다! 행운을 빕니다!
|
tutorial.end.text = 이것으로 튜토리얼을 마칩니다! 행운을 빕니다!
|
||||||
keybind.move_x.name = x축 이동
|
keybind.move_x.name = x축 이동
|
||||||
keybind.move_y.name = y축 이동
|
keybind.move_y.name = y축 이동
|
||||||
@@ -454,26 +454,26 @@ block.nuclearreactor.fulldescription = 우라늄 발전기의 고급 버전. 우
|
|||||||
block.turret.name = 포탑
|
block.turret.name = 포탑
|
||||||
block.turret.fulldescription = 간단한 포탑. 탄약으로 돌을 사용합니다. 이중 포탑보다 약간 넓은 범위를가집니다.
|
block.turret.fulldescription = 간단한 포탑. 탄약으로 돌을 사용합니다. 이중 포탑보다 약간 넓은 범위를가집니다.
|
||||||
block.doubleturret.name = 이중 포탑
|
block.doubleturret.name = 이중 포탑
|
||||||
block.doubleturret.fulldescription = 터렛의 약간 더 강력한 버전입니다. 탄약에 돌을 사용합니다. 더 많은 데미지를 주지만 범위는 낮습니다. 두 발의 총알을 쏴.
|
block.doubleturret.fulldescription = 포탑의 상위 버전입니다. 탄약으로 돌을 사용합니다. 더 많은 데미지를 주지만 범위는 낮습니다. 두발에 총알을 쏩니다
|
||||||
block.machineturret.name = 싸우는 터렛
|
block.machineturret.name = 게틀링 터렛
|
||||||
block.machineturret.fulldescription = 표준 포위 대포. 탄약에 철분을 사용합니다. 적정한 데미지를 입힌 빠른 발사 속도를 가지고 있습니다.
|
block.machineturret.fulldescription = 표준적인 포탑. 탄약으로 철을 사용합니다. 적당한 데미지에 빠른 발사 속도를 가지고 있습니다.
|
||||||
block.shotgunturret.name = 스플리터 터렛
|
block.shotgunturret.name = 스플리터 터렛
|
||||||
block.shotgunturret.fulldescription = 표준 포탑. 탄약에 철분을 사용합니다. 총알 7 발을 쏘아. 범위가 낮지 만 전투 중 포탑보다 높은 데미지 출력.
|
block.shotgunturret.fulldescription = 표준적인 포탑. 탄약으로 철을 사용합니다. 7발에 총알을 쏩니다. 범위가 낮지만 게틀링 포탑보다 높은 데미지를 가지고 있습니다.
|
||||||
block.flameturret.name = 화염 터렛
|
block.flameturret.name = 화염 터렛
|
||||||
block.flameturret.fulldescription = 고급 근거리 포탑. 탄약에 석탄을 사용합니다. 범위는 매우 낮지 만 매우 높습니다. 가까운 분기에 좋습니다. 벽 뒤에 사용하는 것이 좋습니다.
|
block.flameturret.fulldescription = 고급 근거리 포탑. 탄약으로 석탄을 사용합니다. 범위는 낮지만 높은 데미지를 가지고 있습니다, 벽 뒤에 두는것이 좋습니다.
|
||||||
block.sniperturret.name = 레일 건 터렛
|
block.sniperturret.name = 레일 건 터렛
|
||||||
block.sniperturret.fulldescription = 고급 장거리 포탑. 탄약에 강철을 사용합니다. 매우 높은 데미지를 입지만 발사 속도는 낮습니다. 비싸지 만 사용 범위에 따라 적의 선과 멀리 떨어질 수 있습니다.
|
block.sniperturret.fulldescription = 고급 장거리 포탑. 탄약으로 강철을 사용합니다. 매우 높은 데미지를 입지만 발사 속도는 낮습니다. 비싸지 만 사용 범위에 따라 적의 선과 멀리 떨어질 수 있습니다.
|
||||||
block.mortarturret.name = 플랙 터렛
|
block.mortarturret.name = 플랭크 터렛
|
||||||
block.mortarturret.fulldescription = 고급 스플래시 데미지 터렛. 탄약에 석탄을 사용합니다. 매우 느린 발사 속도와 총알은 있지만, 단일 타겟과 스플래쉬 데미지는 매우 높습니다. 많은 적군에게 유용합니다.
|
block.mortarturret.fulldescription = 고급 범위공격 터렛. 탄약으로 석탄을 사용합니다. 매우 느린 발사 속도와 총알을 가지고 있지만, 단일 타겟 데미지와 스플래쉬 데미지는 매우 높습니다. 뭉쳐있는 적군에게 유용합니다.
|
||||||
block.laserturret.name = 레이저 포탑
|
block.laserturret.name = 레이저 포탑
|
||||||
block.laserturret.fulldescription = 고급 싱글 타겟 터렛. 전원을 사용합니다. 좋은 중거리 포위 터렛. 단일 타겟 만. 절대 놓치지 마십시오.
|
block.laserturret.fulldescription = 고급 싱글 타겟 터렛. 전력을 사용합니다. 좋은 중거리 포위 터렛. 단일 타겟 만. 절대 놓치지 마십시오.
|
||||||
block.waveturret.name = 테슬라 포탑
|
block.waveturret.name = 테슬라 포탑
|
||||||
block.waveturret.fulldescription = 고급 다중 타겟 포탑. 전원을 사용합니다. 중간 범위. 놓칠 염려가 없습니다. 손상은 거의 없지만 체인 조명으로 여러 명의 적을 동시에 때릴 수 있습니다.
|
block.waveturret.fulldescription = 고급 다중 타겟 포탑. 전력을 사용합니다. 중간 범위를 가지고 있으며. 타겟을 놓칠 염려가 없습니다. 데미지는 거의 없지만 연속공격으로 여러 명의 적들을 동시에 때릴 수 있습니다.
|
||||||
block.plasmaturret.name = 플라즈마 포탑
|
block.plasmaturret.name = 플라즈마 포탑
|
||||||
block.plasmaturret.fulldescription = 진창 포탑의 고급 버전. 석탄을 탄약으로 사용합니다. 매우 낮은 데미지, 중저 범위의 데미지.
|
block.plasmaturret.fulldescription = 포탑의 최고급 버전. 석탄을 탄약으로 사용합니다. 매우 높은 데미지를 가지고 있고, 근거리와 중거리의 걸쳐있습니다.
|
||||||
block.chainturret.name = 체인 터렛
|
block.chainturret.name = 체인 포탑
|
||||||
block.chainturret.fulldescription = 궁극의 급속 터렛 터렛. 우라늄을 탄약으로 사용합니다. 높은 사격 률로 대형 슬러그를 쏘십시오. 중간 범위. 여러 타일에 걸쳐 있습니다. 매우 힘들다.
|
block.chainturret.fulldescription = 궁극에 고속 포탑. 우라늄을 탄약으로 사용합니다. 높은 발사속도에 적당한 사정거리를 가지고 있고 대형 슬러그를 쏩니다. 여러 타일에 걸쳐 있으며. 매우 아픕니다.
|
||||||
block.titancannon.name = 타이탄 캐논
|
block.titancannon.name = 타이탄 캐논
|
||||||
block.titancannon.fulldescription = 궁극의 장거리 포탑. 우라늄을 탄약으로 사용합니다. 중간 스킬로 큰 스플래쉬 데미지 껍질을 쏘십시오. 장거리. 여러 타일에 걸쳐 있습니다. 매우 힘들다.
|
block.titancannon.fulldescription = 궁극의 장거리 포탑. 우라늄을 탄약으로 사용합니다. 적당한 발사속도에 긴 사정거리를 가지고 있고 여러 타일에 걸쳐 있으며. 매우 아픕니다
|
||||||
block.playerspawn.name = 플레이어 스폰 지점
|
block.playerspawn.name = 플레이어 스폰 지점
|
||||||
block.enemyspawn.name = 적 스폰 지점
|
block.enemyspawn.name = 적 스폰 지점
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import com.badlogic.gdx.utils.TimeUtils;
|
|||||||
/**An IndexedAStarPathfinder that uses an OptimizedGraph, and therefore has less allocations.*/
|
/**An IndexedAStarPathfinder that uses an OptimizedGraph, and therefore has less allocations.*/
|
||||||
public class OptimizedPathFinder<N> implements PathFinder<N> {
|
public class OptimizedPathFinder<N> implements PathFinder<N> {
|
||||||
OptimizedGraph<N> graph;
|
OptimizedGraph<N> graph;
|
||||||
//NodeRecord<N>[] nodeRecords; //TODO remove.
|
|
||||||
IntMap<NodeRecord<N>> records = new IntMap<>();
|
IntMap<NodeRecord<N>> records = new IntMap<>();
|
||||||
BinaryHeap<NodeRecord<N>> openList;
|
BinaryHeap<NodeRecord<N>> openList;
|
||||||
NodeRecord<N> current;
|
NodeRecord<N> current;
|
||||||
@@ -25,7 +24,6 @@ public class OptimizedPathFinder<N> implements PathFinder<N> {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public OptimizedPathFinder(OptimizedGraph<N> graph) {
|
public OptimizedPathFinder(OptimizedGraph<N> graph) {
|
||||||
this.graph = graph;
|
this.graph = graph;
|
||||||
//this.nodeRecords = (NodeRecord<N>[]) new NodeRecord[graph.getNodeCount()];
|
|
||||||
this.openList = new BinaryHeap<>();
|
this.openList = new BinaryHeap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -218,20 +216,6 @@ public class OptimizedPathFinder<N> implements PathFinder<N> {
|
|||||||
}else{
|
}else{
|
||||||
return records.get(graph.getIndex(node));
|
return records.get(graph.getIndex(node));
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
int index = graph.getIndex(node);
|
|
||||||
NodeRecord<N> nr = nodeRecords[index];
|
|
||||||
if (nr != null) {
|
|
||||||
if (nr.searchId != searchId) {
|
|
||||||
nr.category = UNVISITED;
|
|
||||||
nr.searchId = searchId;
|
|
||||||
}
|
|
||||||
return nr;
|
|
||||||
}
|
|
||||||
nr = nodeRecords[index] = new NodeRecord<>();
|
|
||||||
nr.node = node;
|
|
||||||
nr.searchId = searchId;
|
|
||||||
return nr;*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import io.anuke.mindustry.entities.effect.Shield;
|
|||||||
import io.anuke.mindustry.entities.enemies.Enemy;
|
import io.anuke.mindustry.entities.enemies.Enemy;
|
||||||
import io.anuke.mindustry.entities.enemies.EnemyTypes;
|
import io.anuke.mindustry.entities.enemies.EnemyTypes;
|
||||||
import io.anuke.mindustry.game.*;
|
import io.anuke.mindustry.game.*;
|
||||||
import io.anuke.mindustry.game.Tutorial;
|
|
||||||
import io.anuke.mindustry.graphics.Fx;
|
import io.anuke.mindustry.graphics.Fx;
|
||||||
import io.anuke.mindustry.input.AndroidInput;
|
import io.anuke.mindustry.input.AndroidInput;
|
||||||
import io.anuke.mindustry.input.DesktopInput;
|
import io.anuke.mindustry.input.DesktopInput;
|
||||||
@@ -36,9 +35,9 @@ import io.anuke.ucore.core.Inputs.DeviceType;
|
|||||||
import io.anuke.ucore.entities.Entities;
|
import io.anuke.ucore.entities.Entities;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.graphics.Lines;
|
import io.anuke.ucore.graphics.Lines;
|
||||||
import io.anuke.ucore.util.Atlas;
|
|
||||||
import io.anuke.ucore.modules.Module;
|
import io.anuke.ucore.modules.Module;
|
||||||
import io.anuke.ucore.scene.ui.layout.Unit;
|
import io.anuke.ucore.scene.ui.layout.Unit;
|
||||||
|
import io.anuke.ucore.util.Atlas;
|
||||||
import io.anuke.ucore.util.Input;
|
import io.anuke.ucore.util.Input;
|
||||||
import io.anuke.ucore.util.InputProxy;
|
import io.anuke.ucore.util.InputProxy;
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
@@ -87,7 +86,6 @@ public class Control extends Module{
|
|||||||
public Control(){
|
public Control(){
|
||||||
if(Mindustry.args.contains("-debug", false))
|
if(Mindustry.args.contains("-debug", false))
|
||||||
Vars.debug = true;
|
Vars.debug = true;
|
||||||
|
|
||||||
saves = new Saves();
|
saves = new Saves();
|
||||||
|
|
||||||
Inputs.useControllers(!Vars.gwt);
|
Inputs.useControllers(!Vars.gwt);
|
||||||
|
|||||||
@@ -96,6 +96,7 @@ public class NetClient extends Module {
|
|||||||
UCore.log("Recieved world data: " + data.stream.available() + " bytes.");
|
UCore.log("Recieved world data: " + data.stream.available() + " bytes.");
|
||||||
NetworkIO.loadWorld(data.stream);
|
NetworkIO.loadWorld(data.stream);
|
||||||
Vars.player.set(Vars.control.core.worldx(), Vars.control.core.worldy() - Vars.tilesize * 2);
|
Vars.player.set(Vars.control.core.worldx(), Vars.control.core.worldy() - Vars.tilesize * 2);
|
||||||
|
UCore.log(Vars.control.core);
|
||||||
|
|
||||||
gotData = true;
|
gotData = true;
|
||||||
|
|
||||||
@@ -103,6 +104,7 @@ public class NetClient extends Module {
|
|||||||
});
|
});
|
||||||
|
|
||||||
Net.handle(CustomMapPacket.class, packet -> {
|
Net.handle(CustomMapPacket.class, packet -> {
|
||||||
|
UCore.log("Recieved custom map: " + packet.stream.available() + " bytes.");
|
||||||
|
|
||||||
//custom map is always sent before world data
|
//custom map is always sent before world data
|
||||||
Pixmap pixmap = NetworkIO.loadMap(packet.stream);
|
Pixmap pixmap = NetworkIO.loadMap(packet.stream);
|
||||||
|
|||||||
@@ -26,17 +26,40 @@ public class NetworkIO {
|
|||||||
|
|
||||||
public static void writeMap(Pixmap map, OutputStream os){
|
public static void writeMap(Pixmap map, OutputStream os){
|
||||||
try(DataOutputStream stream = new DataOutputStream(os)){
|
try(DataOutputStream stream = new DataOutputStream(os)){
|
||||||
ByteBuffer buffer = (ByteBuffer) map.getPixels();
|
|
||||||
UCore.log("Buffer position: " + buffer.position());
|
|
||||||
stream.writeShort(map.getWidth());
|
stream.writeShort(map.getWidth());
|
||||||
stream.writeShort(map.getHeight());
|
stream.writeShort(map.getHeight());
|
||||||
for(int i = 0; i < map.getWidth() * map.getHeight(); i ++){
|
|
||||||
int color = buffer.getInt();
|
int width = map.getWidth();
|
||||||
|
int cap = map.getWidth() * map.getHeight();
|
||||||
|
int pos = 0;
|
||||||
|
|
||||||
|
while(pos < cap){
|
||||||
|
int color = map.getPixel(pos % width, pos / width);
|
||||||
byte id = ColorMapper.getColorID(color);
|
byte id = ColorMapper.getColorID(color);
|
||||||
|
|
||||||
|
int length = 1;
|
||||||
|
while(true){
|
||||||
|
if(pos >= cap || length > 254){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
pos ++;
|
||||||
|
|
||||||
|
int next = map.getPixel(pos % width, pos / width);
|
||||||
|
if(next != color){
|
||||||
|
pos --;
|
||||||
|
break;
|
||||||
|
}else{
|
||||||
|
length ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(id == -1) id = 0;
|
if(id == -1) id = 0;
|
||||||
|
stream.writeByte((byte)(length > 127 ? length - 256 : length));
|
||||||
stream.writeByte(id);
|
stream.writeByte(id);
|
||||||
|
|
||||||
|
pos ++;
|
||||||
}
|
}
|
||||||
buffer.position(0);
|
|
||||||
}catch (IOException e){
|
}catch (IOException e){
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
@@ -47,21 +70,21 @@ public class NetworkIO {
|
|||||||
short width = stream.readShort();
|
short width = stream.readShort();
|
||||||
short height = stream.readShort();
|
short height = stream.readShort();
|
||||||
Pixmap pixmap = new Pixmap(width, height, Format.RGBA8888);
|
Pixmap pixmap = new Pixmap(width, height, Format.RGBA8888);
|
||||||
if(!Vars.gwt) {
|
|
||||||
ByteBuffer buffer = (ByteBuffer) pixmap.getPixels();
|
|
||||||
buffer.position(0);
|
|
||||||
|
|
||||||
for (int i = 0; i < width * height; i++) {
|
int pos = 0;
|
||||||
byte id = stream.readByte();
|
while(stream.available() > 0){
|
||||||
buffer.putInt(ColorMapper.getColorByID(id));
|
int length = stream.readByte();
|
||||||
}
|
byte id = stream.readByte();
|
||||||
}else{
|
if(length < 0) length += 256;
|
||||||
for(int i = 0; i < width * height; i++){
|
int color = ColorMapper.getColorByID(id);
|
||||||
byte id = stream.readByte();
|
|
||||||
pixmap.drawPixel(i % width, i /width, ColorMapper.getColorByID(id));
|
for(int p = 0; p < length; p ++){
|
||||||
|
pixmap.drawPixel(pos % width, pos / width,color);
|
||||||
|
pos ++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return pixmap;
|
return pixmap;
|
||||||
}catch (IOException e){
|
}catch (IOException e){
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
|
|||||||
Reference in New Issue
Block a user