From 511bbfdc8f2630cea4d2ca69bb2affe33c20131d Mon Sep 17 00:00:00 2001 From: Song Minjae Date: Tue, 22 Mar 2016 15:45:31 +0900 Subject: [PATCH] more Kotlin, UIs now can open/close with animation, working world time with skybox colour changing (sunlight transition is still WIP), fixed project library settings so that the suggestion in IntelliJ IDEA would work properly Former-commit-id: 82c857164f2636ad943d5a43f0690a3431ab0f26 Former-commit-id: 7c8b70e6b267f7c5c050d7d0902278739ec18b44 --- .idea/libraries/KotlinJavaRuntime.xml | 10 - .idea/libraries/lib.xml | 21 +- Terrarum_renewed.iml | 1 - res/batchtest.txt | 5 +- res/graphics/fonts/han_johab.png | Bin 1852 -> 19928 bytes .../gui/message_twoline_black_body.png | Bin 377 -> 15292 bytes .../gui/message_twoline_black_left.png | Bin 433 -> 15400 bytes .../gui/message_twoline_black_right.png | Bin 451 -> 15426 bytes res/graphics/health_bar_colouring_4096.png | Bin 18460 -> 902 bytes res/graphics/sky_colour.png | Bin 16458 -> 4276 bytes res/graphics/sprites/test_player.png | Bin 17987 -> 17975 bytes res/graphics/terrain/terrain.png | Bin 355499 -> 354806 bytes src/com/Torvald/CSVFetcher.java | 41 -- src/com/Torvald/CSVFetcher.kt | 48 ++ src/com/Torvald/ColourUtil/Col216.java | 81 --- src/com/Torvald/ColourUtil/Col216.kt | 82 +++ src/com/Torvald/ColourUtil/Col40.java | 64 -- src/com/Torvald/ColourUtil/Col40.kt | 72 ++ src/com/Torvald/ColourUtil/Col4096.java | 135 ---- src/com/Torvald/ColourUtil/Col4096.kt | 127 ++++ src/com/Torvald/ColourUtil/HSV.java | 49 -- src/com/Torvald/ColourUtil/HSV.kt | 15 + src/com/Torvald/ColourUtil/HSVUtil.java | 109 --- src/com/Torvald/ColourUtil/HSVUtil.kt | 110 ++++ .../Torvald/ColourUtil/LimitedColours.java | 18 - src/com/Torvald/ColourUtil/LimitedColours.kt | 17 + src/com/Torvald/ImageFont/GameFontBase.java | 621 ------------------ src/com/Torvald/ImageFont/GameFontBase.kt | 500 ++++++++++++++ src/com/Torvald/ImageFont/GameFontWhite.java | 109 --- src/com/Torvald/ImageFont/GameFontWhite.kt | 79 +++ src/com/Torvald/JsonFetcher.java | 42 -- src/com/Torvald/JsonFetcher.kt | 36 + src/com/Torvald/JsonWriter.java | 29 - src/com/Torvald/JsonWriter.kt | 31 + src/com/Torvald/Rand/Fudge3.java | 19 - src/com/Torvald/Rand/Fudge3.kt | 13 + src/com/Torvald/Rand/FudgeDice.java | 58 -- src/com/Torvald/Rand/FudgeDice.kt | 47 ++ src/com/Torvald/RasterWriter.java | 55 -- src/com/Torvald/RasterWriter.kt | 51 ++ src/com/Torvald/Serialise/WriteCSV.kt | 65 ++ src/com/Torvald/Serialise/WriteGameMapData.kt | 79 +++ src/com/Torvald/Serialise/WriteMeta.kt | 72 +- src/com/Torvald/SimpleCipher/ROTUtil.kt | 77 +++ .../Torvald/Terrarum/Actors/ActorInventory.kt | 23 +- .../Torvald/Terrarum/Actors/ActorValue.java | 10 - src/com/Torvald/Terrarum/Actors/ActorValue.kt | 8 + .../Torvald/Terrarum/Actors/ActorWithBody.kt | 143 ++-- .../Terrarum/Actors/Faction/Faction.java | 96 --- .../Terrarum/Actors/Faction/Faction.kt | 60 ++ .../Actors/Faction/FactionRelatorFactory.java | 36 - .../Actors/Faction/FactionRelatorFactory.kt | 32 + .../Torvald/Terrarum/Actors/Factionable.kt | 4 +- .../Actors/ItemProperties/Material.java | 41 -- .../ItemProperties/MaterialFactory.java | 12 - .../Terrarum/Actors/NPCIntelligentBase.kt | 24 +- src/com/Torvald/Terrarum/Actors/PFSigrid.kt | 6 +- src/com/Torvald/Terrarum/Actors/Player.kt | 68 +- src/com/Torvald/Terrarum/Actors/Pocketed.kt | 2 +- .../ConsoleCommand/Authenticator.java | 45 -- .../Terrarum/ConsoleCommand/Authenticator.kt | 46 ++ .../Terrarum/ConsoleCommand/Batch.java | 25 - .../Torvald/Terrarum/ConsoleCommand/Batch.kt | 24 + .../Terrarum/ConsoleCommand/CodexEdictis.java | 50 -- .../Terrarum/ConsoleCommand/CodexEdictis.kt | 45 ++ .../Terrarum/ConsoleCommand/CommandDict.java | 46 -- .../Terrarum/ConsoleCommand/CommandDict.kt | 47 ++ .../ConsoleCommand/CommandInterpreter.java | 127 ---- .../ConsoleCommand/CommandInterpreter.kt | 116 ++++ .../Terrarum/ConsoleCommand/ConsoleCommand.kt | 2 +- .../Torvald/Terrarum/ConsoleCommand/Echo.java | 1 - .../Terrarum/ConsoleCommand/ExportAV.java | 2 +- .../Terrarum/ConsoleCommand/ExportMap.java | 8 +- .../Terrarum/ConsoleCommand/GetAV.java | 6 +- .../ConsoleCommand/GetFactioning.java | 7 +- .../Terrarum/ConsoleCommand/Gettime.kt | 20 + .../Terrarum/ConsoleCommand/GsonTest.java | 2 +- .../Torvald/Terrarum/ConsoleCommand/Help.kt | 20 + .../Terrarum/ConsoleCommand/SetAV.java | 2 +- .../Terrarum/ConsoleCommand/SetBulletin.java | 3 +- .../ConsoleCommand/SetGlobalLightLevel.java | 53 -- .../ConsoleCommand/SetGlobalLightLevel.kt | 52 ++ .../Terrarum/ConsoleCommand/SetLocale.java | 8 +- .../Terrarum/ConsoleCommand/SetTimeDelta.kt | 25 + .../Terrarum/ConsoleCommand/Settime.kt | 42 ++ .../ConsoleCommand/TeleportPlayer.java | 2 +- .../Terrarum/ConsoleCommand/ToggleNoClip.java | 4 +- .../Torvald/Terrarum/ConsoleCommand/Zoom.java | 45 -- .../Torvald/Terrarum/ConsoleCommand/Zoom.kt | 42 ++ src/com/Torvald/Terrarum/DefaultConfig.java | 21 - src/com/Torvald/Terrarum/DefaultConfig.kt | 19 + .../Exceptions/InvalidValueException.java | 8 - src/com/Torvald/Terrarum/{Game.java => Game} | 4 +- src/com/Torvald/Terrarum/Game.kt | 357 ++++++++++ src/com/Torvald/Terrarum/GameConfig.java | 8 - src/com/Torvald/Terrarum/GameConfig.kt | 6 + .../{EnumKeyFunc.java => EnumKeyFunc.kt} | 4 +- .../Terrarum/GameControl/GameController.java | 134 ---- .../Terrarum/GameControl/GameController.kt | 122 ++++ src/com/Torvald/Terrarum/GameControl/Key.java | 86 --- src/com/Torvald/Terrarum/GameControl/Key.kt | 86 +++ .../Torvald/Terrarum/GameControl/KeyMap.java | 31 - .../Torvald/Terrarum/GameControl/KeyMap.kt | 31 + .../Terrarum/GameControl/KeyToggler.java | 46 -- .../Terrarum/GameControl/KeyToggler.kt | 47 ++ .../Terrarum/GameItem/InventoryItem.kt | 9 +- .../Torvald/Terrarum/GameItem/TileAsItem.kt | 7 +- src/com/Torvald/Terrarum/GameMap/GameMap.java | 63 +- .../Terrarum/GameMap/PairedMapLayer.java | 25 +- .../Torvald/Terrarum/GameMap/WorldTime.java | 150 ----- src/com/Torvald/Terrarum/GameMap/WorldTime.kt | 150 +++++ .../Terrarum/ItemProperties/ItemProp.kt | 9 + .../ItemPropCodex.kt | 7 +- .../Terrarum/ItemProperties/Material.kt | 10 + .../ItemProperties/MaterialFactory.kt | 7 + .../ItemProperties/MaterialPropCodex.kt | 9 + src/com/Torvald/Terrarum/KVHashMap.java | 73 -- src/com/Torvald/Terrarum/KVHashMap.kt | 72 ++ src/com/Torvald/Terrarum/LangPack/Lang.java | 8 +- .../Terrarum/MapDrawer/LightmapLantern.kt | 6 +- .../Terrarum/MapDrawer/LightmapRenderer.kt | 157 ++--- .../Torvald/Terrarum/MapDrawer/MapCamera.kt | 2 +- .../Torvald/Terrarum/MapDrawer/MapDrawer.kt | 3 +- .../MapGenerator/FloatingIslandsPreset.java | 65 -- .../MapGenerator/FloatingIslandsPreset.kt | 65 ++ .../MapGenerator/FloatingIslePreset01.java | 7 - .../MapGenerator/FloatingIslePreset01.kt | 7 + .../MapGenerator/FloatingIslePreset02.java | 7 - .../MapGenerator/FloatingIslePreset02.kt | 7 + .../MapGenerator/FloatingIslePreset03.java | 7 - .../MapGenerator/FloatingIslePreset03.kt | 7 + .../MapGenerator/FloatingIslePreset04.java | 7 - .../MapGenerator/FloatingIslePreset04.kt | 7 + .../MapGenerator/FloatingIslePreset05.java | 7 - .../MapGenerator/FloatingIslePreset05.kt | 7 + .../Terrarum/MapGenerator/MapGenerator.kt | 11 +- .../MapGenerator/RoguelikeRandomiser.kt | 2 +- .../Terrarum/MapGenerator/SimplexNoise.java | 78 --- .../Terrarum/MapGenerator/SimplexNoise.kt | 75 +++ .../MapGenerator/SimplexNoise_octave.java | 388 ----------- .../MapGenerator/SimplexNoise_octave.kt | 457 +++++++++++++ src/com/Torvald/Terrarum/NoNegative.java | 8 - src/com/Torvald/Terrarum/NonZero.java | 8 - src/com/Torvald/Terrarum/NotNull.java | 8 - src/com/Torvald/Terrarum/Nullable.java | 8 - src/com/Torvald/Terrarum/SAVE_FORMAT | 20 +- .../Terrarum/{Terrarum.java => Terrarum} | 0 src/com/Torvald/Terrarum/Terrarum.kt | 337 ++++++++++ .../Terrarum/TileProperties/TileNameCode.java | 144 ---- .../Terrarum/TileProperties/TileNameCode.kt | 144 ++++ .../Terrarum/TileProperties/TileProp.java | 161 ----- .../Terrarum/TileProperties/TileProp.kt | 41 ++ .../TileProperties/TilePropCodex.java | 120 ---- .../Terrarum/TileProperties/TilePropCodex.kt | 129 ++++ .../Torvald/Terrarum/TileStat/TileStat.java | 86 --- src/com/Torvald/Terrarum/TileStat/TileStat.kt | 81 +++ .../UserInterface/BasicDebugInfoWindow | 220 ------- .../UserInterface/BasicDebugInfoWindow.kt | 33 +- .../Terrarum/UserInterface/ConsoleWindow.java | 182 ----- .../Terrarum/UserInterface/ConsoleWindow.kt | 182 +++++ .../Terrarum/UserInterface/Message.java | 101 --- .../Terrarum/UserInterface/MessageWindow.kt | 121 ++++ .../UserInterface/MovementInterpolator.kt | 30 + .../Terrarum/UserInterface/Notification.java | 82 --- .../Terrarum/UserInterface/Notification.kt | 87 +++ .../Terrarum/UserInterface/UICanvas.kt | 19 +- .../Terrarum/UserInterface/UIClickable.kt | 2 +- .../Terrarum/UserInterface/UIHandler.java | 191 ------ .../Terrarum/UserInterface/UIHandler.kt | 235 +++++++ .../Terrarum/UserInterface/UIItem.java | 14 - .../Torvald/Terrarum/UserInterface/UIItem.kt | 13 + .../Terrarum/UserInterface/UITypable.kt | 2 +- .../spriteAnimation/SpriteAnimation.java | 250 +++---- .../DataFormats/Map data format.numbers | Bin 147763 -> 150517 bytes work_files/UI_fast_pull_out.gcx | Bin 0 -> 240820 bytes work_files/UI_sinusoid.gcx | Bin 0 -> 190008 bytes work_files/sky colour.gcx | Bin 0 -> 516675 bytes work_files/sky colour.numbers | Bin 89316 -> 114811 bytes 178 files changed, 5565 insertions(+), 4952 deletions(-) delete mode 100644 .idea/libraries/KotlinJavaRuntime.xml delete mode 100644 src/com/Torvald/CSVFetcher.java create mode 100644 src/com/Torvald/CSVFetcher.kt delete mode 100644 src/com/Torvald/ColourUtil/Col216.java create mode 100644 src/com/Torvald/ColourUtil/Col216.kt delete mode 100644 src/com/Torvald/ColourUtil/Col40.java create mode 100644 src/com/Torvald/ColourUtil/Col40.kt delete mode 100644 src/com/Torvald/ColourUtil/Col4096.java create mode 100644 src/com/Torvald/ColourUtil/Col4096.kt delete mode 100644 src/com/Torvald/ColourUtil/HSV.java create mode 100644 src/com/Torvald/ColourUtil/HSV.kt delete mode 100644 src/com/Torvald/ColourUtil/HSVUtil.java create mode 100644 src/com/Torvald/ColourUtil/HSVUtil.kt delete mode 100644 src/com/Torvald/ColourUtil/LimitedColours.java create mode 100644 src/com/Torvald/ColourUtil/LimitedColours.kt delete mode 100644 src/com/Torvald/ImageFont/GameFontBase.java create mode 100644 src/com/Torvald/ImageFont/GameFontBase.kt delete mode 100644 src/com/Torvald/ImageFont/GameFontWhite.java create mode 100644 src/com/Torvald/ImageFont/GameFontWhite.kt delete mode 100644 src/com/Torvald/JsonFetcher.java create mode 100644 src/com/Torvald/JsonFetcher.kt delete mode 100644 src/com/Torvald/JsonWriter.java create mode 100644 src/com/Torvald/JsonWriter.kt delete mode 100644 src/com/Torvald/Rand/Fudge3.java create mode 100644 src/com/Torvald/Rand/Fudge3.kt delete mode 100644 src/com/Torvald/Rand/FudgeDice.java create mode 100644 src/com/Torvald/Rand/FudgeDice.kt delete mode 100644 src/com/Torvald/RasterWriter.java create mode 100644 src/com/Torvald/RasterWriter.kt create mode 100644 src/com/Torvald/Serialise/WriteCSV.kt create mode 100644 src/com/Torvald/Serialise/WriteGameMapData.kt create mode 100644 src/com/Torvald/SimpleCipher/ROTUtil.kt delete mode 100644 src/com/Torvald/Terrarum/Actors/ActorValue.java create mode 100644 src/com/Torvald/Terrarum/Actors/ActorValue.kt delete mode 100644 src/com/Torvald/Terrarum/Actors/Faction/Faction.java create mode 100644 src/com/Torvald/Terrarum/Actors/Faction/Faction.kt delete mode 100644 src/com/Torvald/Terrarum/Actors/Faction/FactionRelatorFactory.java create mode 100644 src/com/Torvald/Terrarum/Actors/Faction/FactionRelatorFactory.kt delete mode 100644 src/com/Torvald/Terrarum/Actors/ItemProperties/Material.java delete mode 100644 src/com/Torvald/Terrarum/Actors/ItemProperties/MaterialFactory.java delete mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/Authenticator.java create mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/Authenticator.kt delete mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/Batch.java create mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/Batch.kt delete mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/CodexEdictis.java create mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/CodexEdictis.kt delete mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/CommandDict.java create mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/CommandDict.kt delete mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/CommandInterpreter.java create mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/CommandInterpreter.kt create mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/Gettime.kt create mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/Help.kt delete mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/SetGlobalLightLevel.java create mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/SetGlobalLightLevel.kt create mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/SetTimeDelta.kt create mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/Settime.kt delete mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/Zoom.java create mode 100644 src/com/Torvald/Terrarum/ConsoleCommand/Zoom.kt delete mode 100644 src/com/Torvald/Terrarum/DefaultConfig.java create mode 100644 src/com/Torvald/Terrarum/DefaultConfig.kt delete mode 100644 src/com/Torvald/Terrarum/Exceptions/InvalidValueException.java rename src/com/Torvald/Terrarum/{Game.java => Game} (99%) create mode 100644 src/com/Torvald/Terrarum/Game.kt delete mode 100644 src/com/Torvald/Terrarum/GameConfig.java create mode 100644 src/com/Torvald/Terrarum/GameConfig.kt rename src/com/Torvald/Terrarum/GameControl/{EnumKeyFunc.java => EnumKeyFunc.kt} (66%) delete mode 100644 src/com/Torvald/Terrarum/GameControl/GameController.java create mode 100644 src/com/Torvald/Terrarum/GameControl/GameController.kt delete mode 100644 src/com/Torvald/Terrarum/GameControl/Key.java create mode 100644 src/com/Torvald/Terrarum/GameControl/Key.kt delete mode 100644 src/com/Torvald/Terrarum/GameControl/KeyMap.java create mode 100644 src/com/Torvald/Terrarum/GameControl/KeyMap.kt delete mode 100644 src/com/Torvald/Terrarum/GameControl/KeyToggler.java create mode 100644 src/com/Torvald/Terrarum/GameControl/KeyToggler.kt delete mode 100644 src/com/Torvald/Terrarum/GameMap/WorldTime.java create mode 100644 src/com/Torvald/Terrarum/GameMap/WorldTime.kt create mode 100644 src/com/Torvald/Terrarum/ItemProperties/ItemProp.kt rename src/com/Torvald/Terrarum/{GameItem => ItemProperties}/ItemPropCodex.kt (84%) create mode 100644 src/com/Torvald/Terrarum/ItemProperties/Material.kt create mode 100644 src/com/Torvald/Terrarum/ItemProperties/MaterialFactory.kt create mode 100644 src/com/Torvald/Terrarum/ItemProperties/MaterialPropCodex.kt delete mode 100644 src/com/Torvald/Terrarum/KVHashMap.java create mode 100644 src/com/Torvald/Terrarum/KVHashMap.kt delete mode 100644 src/com/Torvald/Terrarum/MapGenerator/FloatingIslandsPreset.java create mode 100644 src/com/Torvald/Terrarum/MapGenerator/FloatingIslandsPreset.kt delete mode 100644 src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset01.java create mode 100644 src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset01.kt delete mode 100644 src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset02.java create mode 100644 src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset02.kt delete mode 100644 src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset03.java create mode 100644 src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset03.kt delete mode 100644 src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset04.java create mode 100644 src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset04.kt delete mode 100644 src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset05.java create mode 100644 src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset05.kt delete mode 100644 src/com/Torvald/Terrarum/MapGenerator/SimplexNoise.java create mode 100644 src/com/Torvald/Terrarum/MapGenerator/SimplexNoise.kt delete mode 100644 src/com/Torvald/Terrarum/MapGenerator/SimplexNoise_octave.java create mode 100644 src/com/Torvald/Terrarum/MapGenerator/SimplexNoise_octave.kt delete mode 100644 src/com/Torvald/Terrarum/NoNegative.java delete mode 100644 src/com/Torvald/Terrarum/NonZero.java delete mode 100644 src/com/Torvald/Terrarum/NotNull.java delete mode 100644 src/com/Torvald/Terrarum/Nullable.java rename src/com/Torvald/Terrarum/{Terrarum.java => Terrarum} (100%) create mode 100644 src/com/Torvald/Terrarum/Terrarum.kt delete mode 100644 src/com/Torvald/Terrarum/TileProperties/TileNameCode.java create mode 100644 src/com/Torvald/Terrarum/TileProperties/TileNameCode.kt delete mode 100644 src/com/Torvald/Terrarum/TileProperties/TileProp.java create mode 100644 src/com/Torvald/Terrarum/TileProperties/TileProp.kt delete mode 100644 src/com/Torvald/Terrarum/TileProperties/TilePropCodex.java create mode 100644 src/com/Torvald/Terrarum/TileProperties/TilePropCodex.kt delete mode 100644 src/com/Torvald/Terrarum/TileStat/TileStat.java create mode 100644 src/com/Torvald/Terrarum/TileStat/TileStat.kt delete mode 100644 src/com/Torvald/Terrarum/UserInterface/BasicDebugInfoWindow delete mode 100644 src/com/Torvald/Terrarum/UserInterface/ConsoleWindow.java create mode 100644 src/com/Torvald/Terrarum/UserInterface/ConsoleWindow.kt delete mode 100644 src/com/Torvald/Terrarum/UserInterface/Message.java create mode 100644 src/com/Torvald/Terrarum/UserInterface/MessageWindow.kt create mode 100644 src/com/Torvald/Terrarum/UserInterface/MovementInterpolator.kt delete mode 100644 src/com/Torvald/Terrarum/UserInterface/Notification.java create mode 100644 src/com/Torvald/Terrarum/UserInterface/Notification.kt delete mode 100644 src/com/Torvald/Terrarum/UserInterface/UIHandler.java create mode 100644 src/com/Torvald/Terrarum/UserInterface/UIHandler.kt delete mode 100644 src/com/Torvald/Terrarum/UserInterface/UIItem.java create mode 100644 src/com/Torvald/Terrarum/UserInterface/UIItem.kt create mode 100644 work_files/UI_fast_pull_out.gcx create mode 100644 work_files/UI_sinusoid.gcx create mode 100644 work_files/sky colour.gcx diff --git a/.idea/libraries/KotlinJavaRuntime.xml b/.idea/libraries/KotlinJavaRuntime.xml deleted file mode 100644 index b0b18f4e3..000000000 --- a/.idea/libraries/KotlinJavaRuntime.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/lib.xml b/.idea/libraries/lib.xml index 147d598bf..544fa9b7c 100644 --- a/.idea/libraries/lib.xml +++ b/.idea/libraries/lib.xml @@ -1,11 +1,23 @@ - + + + + + + + + + + + + + + - @@ -21,10 +33,5 @@ - - - - - \ No newline at end of file diff --git a/Terrarum_renewed.iml b/Terrarum_renewed.iml index 0069b3d80..35a74489f 100644 --- a/Terrarum_renewed.iml +++ b/Terrarum_renewed.iml @@ -9,6 +9,5 @@ - \ No newline at end of file diff --git a/res/batchtest.txt b/res/batchtest.txt index 126f6c3e7..995dc3d1a 100644 --- a/res/batchtest.txt +++ b/res/batchtest.txt @@ -1,4 +1,5 @@ -echo "Hello, world!" -echo "This is a batch test." +echo "Hello, world! This is a batch test." +echo "Will add actorvalue 'batch = true' to player" setav batch true +echo "Checking if command did something." getav batch \ No newline at end of file diff --git a/res/graphics/fonts/han_johab.png b/res/graphics/fonts/han_johab.png index c4024ee27a92ef58755993f1f7a0bd4f7aa40aec..93eff33c485518c739e559573c9ea3acd0adf827 100644 GIT binary patch literal 19928 zcmeI4c~leE_rM1iEDEA%Wl55{SV2*kBohcr0!auE5h$oFDi%Qj z6{=RTdJw6~B2olYKm<`l1qAmhRzQm@yT1ux$sjiN*Z!98ImtPY+;`u-@6G4kci)}) zW8zjhFIStaGZ_E?HG4Z77XVPwLVhQFp^W^m(-FoaUn)U%9s&TEGDGsG1nf&gdMqvA zxVa16omSA9yg*}!#bdz6VSzzNZvZf}3=4vo{;&|kfPFYzbAy+K#ReD-%iLfM*$H$C zvW9&*c49v4Dt2~biv5{1mVu?kWV0|j;vf(fLYT0?0Iq-@W^ORxmyZ0FG~)~~16_pv z<_1=h0Wt1Qt1#9)K8zt7Q?N`t9*?2YjPYa>B7wXZLjdt)97x0AK`e-;<3TzB#0-86 zEG8qr%=j!e-NnXsa5zLVH}Dk-gXlP1XlST$DAAb5_rc+5G#U;h;0OdP(gQ09=L(@P zELUJCbu#3~1{N^+oFE~G$HhqeLJVGr(A>a4GSKj6@VWwnh6myb2H7DLabZvp4sQ(N z#xi0thi!sF_yGe`V=-}X02~N&g#yG5Kc*dm)X8bsbj;xb1IM%!2$zYFD;Oj)rlr6w zJP5|Qzye+fp9wD$Au}-?Yw`l23p@h%Gh89v$8;3r%MT zPnyADoKKiZG*YvHn368F8A6?I&4(c&kMG9g1z1SKb=A=9G1k@t;feX$31V`%l1o}( zh8t}(5;`OPU>isXTOgrL!Gc6ANN~dw>3Axg3@!p`bP$wrBJDZKhZC}mSdb7xdBM}% z2t+zap%Y26UQm5U`{A)T?C{U>GSXAV2a8E(^Z0>~(1H^P`M|g!u8$dRq*12lK>X6} zxdI`?Wy1D07D$6Jhr^JTD#XTBP#mH<;AEFMp#VIe9=#X=-94J5)e3Z9K0 z8c4?3M+2?obC6^R1<3S~Tnh^si~*AIOfr>(Ww41PED1?qSO$p-VL>uPWrBDU8ViDl zh8V-mM?=|h1W4qC%S0p+mjmg}6%IzX4k-dS18FM=;tOEOt~NIq+SbE)Za9reYzDFe z9b!rno&{49>M+X;hiV;}*0ANE8Rz5W{5%9w|1##E9wXEj=Kj@2k-8e_^=T&p9$Od+ z@nI_;Btpj8#i$J|b&0ka?b{3|IUNEx{{yQafJFan4Olc5k;P=wuq-l-f+c}uGM2$$ zQLz*X#3EA3L<*Tg8Cv82?ivt~qnI$1X8w=XU?hH-z7W?3W?A5dE^DaaKWW(*Y$}OD zr4q3OkikGQA(eooks%tE0x?Jo21Fy`Y0%L1{rzPd<8=6UmQ7Nhp%1{%*+2ik){e>J zieUcVNqtCyg^*$v<_j#?d|n_13JMC~Fd<1A#fiAA!D?{$^uY*u7?~qdN=U}X|6-i7 zU_R&XBp8`l4r9Xnhh6hOPN|<)rAU`mu{Ve61nD7(u2qKWpO0%BNp*}Ac{bAcw3X~C z$r&rZltHQyZ;Lm`F+?u#n>&WSD?h5{%pln$S$h zSPGFqB9R$P0+B=>duGyBG)mcZ`m2R7liVKDk$VrM4jwqHERcJikJ@C`cR=SZxrYb{ z8MsHF52F;6n3|BPnpn0fbg7 zaG`m~krcS(079!3xX?W0ND5qX0HM_iTxcG0Bn2)xfY53ME;J80k^+|;KxnlB7n+A0 zNr6iaAhcS63(Z50q`)Ny5L&Ikh2|kgQs9yU2(4D&Li3O#DR9XFgjOqXp?S!W6u9I7 zLaP>Xte?tnui=oflCe`v|51+ z%|ni)z$FI|TCKo^<{?K?;F1FftybVd^N=GcaLECLRx5C!dB~9zxa0srs};D=Jmg4! ziEHx6`zT;8@)C+rqpB?OdDyKx_m6(TLpj0r~y|075_jc#OYwcDMpD;tlrUk>a`dbfUIj-l|9 z@k=lJG^2iT_r;$hHB7Z0Jifchqr11W{a$2I;hXzUvmF;aS?;g^YkI9EdrzC+OZ{B` zTiE3;#rx849=POO_u`iA9nBXd{M`PWj&(a8o&NgH1$m`c%gg!9QDO zcZve9(jCskHy?#F)7#zm?B5)+eJfE5`>@jI*vhKxt8Gt%FTR_o{M@MLf_^hENTXGQ zV_s=G9%rU>Ja?TwZtD|=rrOi~n|{b^S;080d!zAIUS!8Xepa7-54Qc1So?=5bA*X& zi0k9WnYPC@tvNGgX<@^k`kSwLq%3+nKRziWEhAXz;*9f_k%jq1_4m$BRR+X~SGvRY zd%p78rMG!9kh7b;n0Eh*F9G)sujDXy1EmsDYAN!*5@o;+S;4tl0H(Agq~M(DID(p{ zJ@~Bj;G{Zc%N#L?tEwn;?0VQ-9KW;G>y7vI*hb0ML5IjgcYm^|-sc??gxMT0ZQUj? z_QJ_|>JLn-vWl)v>FchcyO&>^;-wzbdAr;8@k;ToJ=ZjBw2s}U98X|5Kd9lWJu98# zYAgm#2@^d+huY^{3@6Ooxq0*JF3(Glg-R^{N}ftkj<}>|t}i+4{Ayw0l#{ zQwxG^)t>@K3XeCoeE~c@AqJ7Drz*#|0@uwQ7Zl|^zmVV!lf+BRW4z*gB}qyen( znwJ&#ebR3LsP?-K5Itdh%Ea|rzVlMuXnd!c$Jb}itM)Beo^zPJM%+yN)94(ik-mFx zhv3EQjIOG(?)+~pQ>(>^`9f{c`TV0tCK66h|Fy-XNJ**l zi>f;LzN?l`78!P|qgPz$ZhqIb41do=dFO%qu50!0clbOHi?+mdzSB>ie)akm+Tmtj zlh|5~(-n5yv>cmrv!T<)({B}<7sMLQ_9_TlpFNo-Li)@q%X& zYC9e}Y(SuD-cc$6GtBJ~!rpNcfcgWc0;~u#fTI^QR3t&OBt{7dnrQ83rAvrNxWwwM z$W9kLEB$S5Q&Yv$3O__{s+rQ1pZoenYI>n0paeP@O%;(h;;htd-D-Yr=uKHDTC2M! z12VN%w{<~cVa~Hstr$=1V#_z)8@g3>`D&NRnEI0MJTGRoCHSY#_W50B>eKo{$JVR2 z^IF&q3jyG$3VR9?z~?j^s^2eDO0>Yxmn!Y*@ z595a7tnN}Jv*!9f-3;Ad3d*;Z)ws3m&5VEdgJyEi3DW@AL%N3yMd2U(NX)e0DEFHy z8I#6Gw52uobu<-atyAvj>aOz33Gk}(+vVQC30W?FYm?JISF}&$pW}WcGV98%?z(aw zep^+Ha&?F4G0W4%p*?%)&Tm@2yniywW4Y6Iqc3|W#y0L;U10B?Kd|^eMQj!CH@b26 z3)P#B@3vT;z5iftUVV9W_m`DZRxa^tzg@8%D!3uaX8laY+pu?)I#5UURr)>Z#-B)=#@rw)F!hqUN0EaZ66x&T0D@BGTSOz+}y< zanXOg^6goqA&G-kOOF@Tu$Kc`4vSkK7p31qVq%qRBIojfmN}}xidca(91z?{M%ikm zu56>CY_9djTiljrt^O453JYCenbz|@>20^BdFr`z&AhtV#8R3)H=WR z40_+7osjX}w9{4rZ=uPP3-_5tzg%2zFx~!%4tv^!zGO%IX4?q=O@}+?7b#!xIW_0F zG?#d9oUSJZDRFkDttM;LZP!sV`L(g(R=11nT4|};X$$HfOmv+6yG}qd8yf`)avtTI zC-{fGGI9-6j`h6gY5Kd)({k;Ct+6TAxrL^uR|CM-nlryU9&Y!dn2w9qLH?Ee0mdo; zXJ8kLq_0YWlAMegNW@iZOm>_Lq@G`~c82==a3yb@%jAJn`eKha>74Pm^sjZIbc+A5 ziJJ9<^O%2Bc^lkY*AIjPA(B1-*9BeVZwLg0HpC%m4hPUGl z_8xM-vSr+Fy{gJcZWByD5q0taoc}(m)x9~FOEnDF|E)nouTS&nqTWwcZ0R}eIM;uT6pl752+JV z7T2z_H0spFD9~Z*VbLMxihD2SM~GaNHfvU`52`+Su<>R)95!CJAm%nqaPVR`*$H zM3$x)1SZvZFPX$wgQK$N)_aqua`$_`$lEVYE{;gZK6CKKBteh3J$84~vP0>Yyegxr zleguztgX7TZ~e?WxxMX0*XZBu+%es&qfy-V&T+2DwW{|nObvOqWBu_BhZvd*U*gIr zq${~|sBK3nF?VkQB{a!tIWT?XG?82kl20TTBatLoQ7R4P$bn69G%013mSOp&7ni#? zwFVjNTGVzb^RC;8<+Dz&=5kw_*K9epw>=%opZO>w?sau{7GAGozP5h2X%_d@ypH+b zTxpHFPZ6z|6IJ-OZd+u^%>0Pb8lRWP8$D)(Ude9Ub4PRjC8HnX_pHy1+)%r7ZQHAU zY+1G&vYR(OEI7l(8Fs~F<{ApiJ(%^|tlE0pI+uR9-R|NrOH%U0w5$`kSl$rZ^=AF3 zS=RHucaQr*kz>X^b5SCHT`;$6VV8g7+e-zk6n&$@Z#QN<<_Xi@?d;Jrz1o@CmGq`I z&+>MQ#jV#nnv!px4}RpFr{71})jhjNw{mfZAp6(tF}#!CrX7ATTW~~oR{kcHZH*3@ zMNJ;xU#js-^Q#Jp;UBJ5WgoG$c>l7D4d(KW{KWIiDlR+NtWDIa;%7ZRkxtXq^{HI( zOQ)J=s@3jZ?6%;H1^MtVdu!K~7c_3j)UH0phzy9B{ibHBxOdBVwoy?qooGBu)N#aQ zQrX$etEy`slfJIllhce@{P#w#sgoxcd}&s^zfwQ-D~#CoNZ1n^^W;3<$J{y literal 1852 zcmY*a3s6&68oq&;q>zwMkVFVgP}bJ+ND2aKF!B)55)c6g+6{22E!t*50~;bDgoHOp zpiNh!fUk~Hv;9E zfG^I-(g*+m+@XW}g8%?Qg2#mz6#RW^`S*MPKpP&~?-_Ese^PVgrv^H~r*l$({lm_HP_dFGM3ii-mX*BqGsJg z2m0R(B@q|9%Hu<&bs<(g)$wGZHZg*e(K@@f`UyY<0SpNs&;cYCKo|lBsMJ&h6;z@} zW`+1nd{enq*1iNLX#;MI8PyvYsc3pJ&!3j?C*Hzt-cYjtUw$kp-j(!p*r!9UtHxLN> z$h*>Rxm`my&>m>4|Jnw0ZCC1M9h1Fc-zCO)|9}q0k$R3HS>8(Xm6%oH4xPyv11;Qm z*0&Wzs#_cD1LbwReM5?Fm$sG3*KTs+iOXZVY4G-f;!dac7*8aOIloI8uPz(bL|je0 zeB8n9oL;rAcf(Hu)P|q12e6;RMilJ-K%I}?38!j77CuwL6RreZGr;>k`cC_|)z z009e#5O8?V0r;-Np#rER4-;(kvg={n?xWw(A;^*9E8v2Zr-UY_e-M8&5vV?A|7TD3 z5oEFjYy5)KUYRF%^P5i5MT+m^jxFxZfpc~X&2|O)^N4tq+2K@kpGxMfYsojJs(*+Z zM5)pr3_{(Ic1(Z9PvHb&v`1C{O5AEZ6Fi|T_4>6)bQ9HR%5or$eTTVe&Kf=$O-7on zY>MtSRuR(Z0j{|Ltgt`J1y;56LdF@ENq;0 zCpf**zgPEOAgpdfpb7v~9z(hAq(u4*II4P-W&@9CjwjYrDn8nq-Ei4ms;Q`upbZo0 zFD*w^9_+MQ6c_i>@}WyMhtNZnA(%H&|7RBL7l1T`t%QTz!Xa+UT)7w7w>Z>6>uB>E zt}eY&2aSv`<`n)BkBpb|Akh?sq9R~b3aWI|VKwJeaiuIWF5E`yGcr!R#U-eXnCYjQ zOx4flwn0UN0t&|8&HnOVq+~Y!~`%G7_3Y;@e4*oKw2qvE}6GgwOs=2oHZ7 z{(E2b!pZ<`{rW8bs26jsQ9>$q_#K8>9yx79{KB%l>411tEynOlOT3f^0D!>)28I9<1qc!Fx*HpS zYXtbj)@yJxRT)xg7jm4Jq@UkhaP#1uoZYUw6h|#GZBCxktrU&qDtsuxCGkTg-17V5 z(0SS2@~$jTK^-&Jp5Dit&h@j%^3yyqaIXB09Y^C*dc!U_KXlOh>&P>2B?Am^O=TOT z9JZ$)XPETYvg_P0H!P7G2bp^({AEePiwcX_IjNko1Wn$)vSR@vJ;Y5Y?zq+c{7+@N z)Kl|(evkg~ToOk=K;5G^linz-QI0OuC;g_lg5kz@wsL*5jd@#0Ns-0Z?sH4@t9ic) z6plgSWqg#xtvTG>SsDa(w?9Zg#dnrx?0k)T>DmUaxQN*on0k(`IK%DV&{z?4Fxfw` zlq<~Y0pkR2?ue`Wi!}0b>q4AnO2-*l7)utE%!a9BZg9>{IhkOF|%e+9*e*s&KN*MqE diff --git a/res/graphics/gui/message_twoline_black_body.png b/res/graphics/gui/message_twoline_black_body.png index 67c251fdf5db901929ed822af7e58515f0068302..76ddb9d6a2aad6381ba0943a0aadc448ccc89b34 100644 GIT binary patch literal 15292 zcmeI3--{bX9KffXRD1S7>Vw5n*rqKgcC$Z{O>UPY?cL?-9hmEJJ@xuzC$p2>(qwnt z-88w=LRAn1K`n^V`VZ)Xpgsut&=VA2E56u*Z&FYc3xX&pb$0V(H3Xp*c;iY&^Cp~!|R3%w^*nkK&ro>?>2 z%BOqbh*V5%27zlxQoG$ww=-$St4oTm>yoTWsw$EmqQ7Maup`?3(XNxepECB5XSspp z*h1(RR-IN*Or^p=gQqvIraK5^`#pAqqSS$|q@-nOf>EWyHfuJ=TKd7_MKY4!%*F=v z*SB0OtzqA3c?d6F#CC9W+#uXdCvf~tXTtag>WQ;3(O@8M%WFh{O(fw4ZjzWju~Wv* zA+T!k;tWk8)JzPAJJtlVP}4PwQlYy-1(JWpf`?(?cA!C?#9bd zU)qmjTD7fRd5L=t`>0fmW!n#+jqq~0MCP8hEYmRa@+{UAQ&ekuUd$@hnyBME6d^ihr4x5j-E<30dW&&~D-TJ13i2Ffe8Je6^)mcaw)-VzkC9jJxFXu&=)pR+7 z^_)^01WGs?33SG@NM(YJM4xajCJB}|RjrCODC#JS#H^V?V%5Z^m_u+D=M@dBIkP{P zF>XdeEm=Ovr>#Vuk!*`<&sqHZaBE-Du%a5`LeIzH)-0y_dvj291~nzLiMF@_QCNLS zC`@2XhB(w34{KoAGqXmQb9V^3{uAbtW3)H1%}W2StEksxC%#h)+R(#ub&?_D_ok{2 z@6E2?VM97VK?>`2!}<@F!iN|C-9qecU;R%OBF<#A3GF&IOHx0H`whEWyY7k(@2>ui z9o>zExVrSK!5pb>;imP6b0XTb^RPbL8VJ_X(C|31q zzN+VS-Bd`;AD4FB*5MchX?G(`Ok}}nI9|muaVe9uj+X=&ge`JhY(A8hg_Xp|l(q1%xefTx>p+mgAy;utkoG&4|zoE{al73p11#df=8EXy)YY&IJ`ND6<3 zd@TB6ykucwK45kt4zWki;mT3FEObl7gU zDH#ie%K)ubi$%?5(<~GkjRp-`$kTFBuh%JRwVDWXD1x}Kpi-%@TCJ*h{{6Eg`LX;1 X!V4e(+E*vK00000NkvXXu0mjfCjX?F diff --git a/res/graphics/gui/message_twoline_black_left.png b/res/graphics/gui/message_twoline_black_left.png index f2a93064bde3f0bd9f202d34a345c5150dde4a12..3a4e0d8027be6a741a8742ce1f01c8cffbca3341 100644 GIT binary patch literal 15400 zcmeI3Z)_Ar6u_56EfxV2FdFp3=72#lc)rPqIf!&+)+qsGqe&RtjTc8}XF zz4CzoCLn4El3>J`XhOB_ZV2e(?tJ&4%P?~m z_!HW$Fk{*A(A5u4gjmar zht?@6A(d~3!&djE0$jUkO~0{ey`h?+6^Z6pQ9}-L&;x8Sm$hB37!L)0HT2yd=0j{S z#akZ_wfOgc8l@ zTdZKFwZ3F$IUJJWp<&Oj*fg2YP_hh}i@nC*cgXS<6_PAYzq z&@~EH-m@H=_5A|f8S&zwkRPb}l=qd(R|DB@nH{3Y7eSsE!va5zQ7T0?%jKrDbiIy^ zXeH&HO&QSbAIn3&54z4s!GIkbq3tc6Y7zNi$8+3aXPWg_)zj|6G^z{9j})>2VAJ4X z7Uob)7uktZ?!mLtwZm!Hg0Go294uPXnE9HLS&#~)6N;hy)7lFVcut|;ak7b0mi1P4 z&9=7(S;an_0)}P#C?1LNxKZuIYyMyocrbx7GQtTmCrSOHthGp*q&zC9njq9UDb2)u zq)_&ozymY!(l8hILt z2%}u9A|TO_3?VAYx~V9^CL7HsxlTI9h@T0_b*c1C$3X6@iKR&}EkqPa;G{G(I8ltM z9Eb{04zwt$AVW1Gro~F2I%kstJyEbwX9C%}IsRTu6iigovTi6cXGRs3YiTiBIUt)l z7m?Glpqo;Q3_vBs6mBMk>b6{zPh)j?hO#Z_J!|2H#?gu*YXvrmU zv^NS0uq}f!Wa`?Kq{iAT`E4}B1H^d0UuUiV;3!h!DHe6@rUkJ2-&subMg^7rw$mk~vAI2?uts=}0BrWu# z<@(LHwQPcqPiZ$;vx^`eL9D>APEj^2Vor!L$??281k9Tx33&mg2&IkVT4%%m>p_To@3tNO6(*U|Na` z140&wxSDG(q(U3Lg*u8}H+^u1%~=6+|-bDwsixfgqqZT-a`uIv?`pXj|e`E&H+4aR10^yuk@%YM9LTif2NyH_5V zx4X0H#YNwa@3z_d#=FAopP}!~ua~f&A4_!`3%Km@d*sKydF9nl4(!Xr54WCPIKZqL z`l;!QEnP!R*{#Z+%^R0li!Ys2*JTFZpFh$2?Djj4u0Q?9(w;pR4j*29Ysb=~C$If| zX!$DnoIdZJm-qkj<*DDc>^NwJPhV-ee&g-V?O^+pXLl|6Y>Cr#_ASAi)pTa!`b~Ss zL$em0iNCaeV(0nmN0xk~UAWx3YsI_o9sBNbcIg3YeEzn_4_^Ph=g_{bdi-$5wF~EO bE@HHcC!YEBwZX5@o|&GGHOV6@hqnC#q=wL} literal 433 zcmV;i0Z#sjP)3 zIc@?$5QSk!mJh%-?E5yru&)z1hLboaGN%9uLZ5@o2jD`Wk$CPGw5rB{CiqmM{_e@> zHvrbV;TWFb+vSJh8ehhbakeM9{J!08m(%GKY&IJ(I6TSaZnwMpz7JyXc>Q=h2CLNy z7K3k`*XuR@hfm{oxm-REi^T$roD>R{IUr#^pMxH5s3i|bn9XL;qQi7Lg%S>v$>cF` zIUbL}Nzq|68bOgT91fvK7z_rlL%-jLnIysUJZRCO*Xu!%(Cv27>2$1cpoiePE))sv zb{nl$3!D@RLWO3t34^ytLZi`uBB55R!K&Bm68OVn4BeD#LLZQGZfeS@KKA(rdC8va3E(gkHvz!vtG8{6Q47BKwPNzYR<8VF=Bq5bb zL5mKFL;{M0WHPCPJTm;J#$qv0JRX;4>2Np%Tv(xpY`fjw<%W9tuGi~jzuyP^?90dU b<@5Rn_~`r`?NFpB00000NkvXXu0mjfyePwE diff --git a/res/graphics/gui/message_twoline_black_right.png b/res/graphics/gui/message_twoline_black_right.png index 47bb835fde9827a6d833312030d7fcde2b91ec5e..860d8fa426b70e2a185f1f9bdf272780fa0358fb 100644 GIT binary patch literal 15426 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 IVaJ|-0MWzNHUIzs literal 451 zcmV;!0X+VRP)3 zJ8r^25XNy=CM?RJaJ zW&@s=%jK@VHjF{H+wGwKXQV;L@I}2k{53`b>-8Gc|FBxEI6fetmPuGHmoR${^Z6W$ z#X={b7wUk0V>X*XO#%KxGGIELLS@5bGJ)B17>!04kHc6r($8Q}YVe3~XF(CKtwB+zcR!L?c~PCzY_&}=qgB+zIy zz}4$@PCzf!0fAbr28xlVK($(hu2QK8sD(y>a=8p6fl{f2VzCICoB%B~@DwN%3NT6l zpSHpCJmm9v(BuSosgM)M<#I5xA)C!6A(P3(pr#E}5?t3sI-Lej{?+P7CI;QZ literal 18460 zcmeI4c|4R|*vAj*2}ROERHl)hwlSL#6O$|%Jw&!>AG0vb*34K&CG9;eC?so&lG47A zvb0jRC@K_*BzuxX&3g}p?t12ZKJW5*-#=zPX1UIFuHQN5d(L(4bN_Ms+hMu2in5k6 z06@itZ0QJnn?Y|mMFr^7{fe6&^rgfjy9)pqJ5lnM12J)$04UorEi4=yytqQHz>CX6 z*jQK~cziB{$)W=gP#N#!?-t%Og;di+AMa}ZyyH?7Ya2l7rYYvDxt~xw3@AI*)Xnbi z+N*FmGCY^;+q-JN%NnCLo$8cpTLRl#Tl=2%-D-?$>@OCT zj1QimKKszy6W+ksahD14xlX7(`QF21^^_}x4fqYGH(di0J8AJfU5^Xj|f-@?h z<)aO0Gu@n#!9aJ2b?LVz%m2Np9X7AYWX6%sLJIklQib{S1z^!+hYfeXK*gjAMz%p^$yo*c5jJrK4Emt+}_Vio18uFAsEX~Hv$~93l z|D!&5n(}eYBTJ?_=MtZfx^_`PD{(^1YqhJlu|_J5wd!lOHS;w7*r1tkNAuQhrBO@r z6(>?=68BE<2zibyR@8_N8HJ>f4GsqT3^>b>^@JcyUV+?J-zZkst{ zW`f?jKUF8L4=2x3eR#Njx$;cCFr3X;8y|8N8I|mmOe#}j#@Wtp4r4!jRj+tCI1LeX zC_QX^nEm0thj;7KClT-Ot+Q1+G0QPILVX#5zPMr3$zwS4=)^NCic%AvDxTR(JhsY) zo#^L)cG{CV(ZDxGuPAnkML{wusr+#a)05fbg>DjND!tq>!z$`=RGH7aF-?t4J3ji4 zQ`xPuBaiGcXR6QCO;b}e)2E`NZBLDU5*3~AjCqFBj`ln{{wUYQZQiGOn9oLcH~#otrD~!$@NsV#L4QSR|+V;8Jae@r$@+#WRaliZ`JYP>WHQD!k7z&IO%YSQ%KE zUFp%vZ=KTGT-ol+i#Lm35Z_H?6MKA>G7U3VWbVqW@-2B!dO~d$H7RvJ>Q-%fS!&(Q z{+QIQ@xHyHy;Nr*#z4_9Y$^+DMC~XHqrUSw%FHP3*!lYOgaWV3L-)LrN^O$<%$VJ_ z$MX##K!e0c<4*HPGk8U>_A#M&FmYAM_mc0|XU{E)@QGn$mR@}#EG*1lP@VQX?O{uZ zae16i0ww#!t*ZWmyG~lg-CwrfaDU#B$|IW#Mjx>|(vx=7mEc}Ic|kL~ zVkOH#du8mnSYm9!_0#8K&)xHjW!Frqn-n^?Y;Ly`rxM%J-=f?S)AC2F@h8eBy-(~< zCDRM1sZXz1BwVzaFZ3<+WASb^C%-nhn|d$xZqrInZO`L^_%4FRslUPs)T8{OG@RHe z`%*Z^0t+G=wAwPuu082aioF?IeeMPO>B~aX`&-WT+3Ck>KU{m)w0+6PjvlwVjfHRG zQ({x@bcHpd*ZHk;U)Ps4!~RO#?1TyoJHP7Q>e{S=O&f?LQ~HL1)WjRqfU+? zj6OK}<{#*Bq{-&vlvLbx_~G1KjSt$rRD8APf|%0Dj}+r4uhRa4DV%LPqhdnH?h?fs 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 HH*Eh8%=VM- diff --git a/res/graphics/sky_colour.png b/res/graphics/sky_colour.png index 906d5de7b2c59e8d19d180479dc7fa5659417ec8..ebacbd067ed34b027930953a21df4b4f8a32e54d 100644 GIT binary patch literal 4276 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 a>e5A2&aN{Cs{avya&dBV%>QD2^#1@{sfS(w diff --git a/res/graphics/sprites/test_player.png b/res/graphics/sprites/test_player.png index e77017d254a4f5b2d659ab8fb831af4a6eebbffd..91a3a290585c10635a4ede673ecba0208dd410a2 100644 GIT binary patch delta 3227 zcma)-cRbXOAIGiiz4y$D%Q+)6T%>HWBb_VG%ud#aWM<|nk`;%Nl}+}_?3~JsjKjs5 z;f}+%-+$lVf8Y0iulM8mem!2Vzuvtm7E&c`t)&KTc3Y5C^5JhWDY&>S7;6fq*+4T-Q%Bb-v|fj~yh4aM(RuN=t}x&b3W$ zRIPzK2lds77D~_c#~+@hn7)~stHywY#CiUIq# zrQZXlqke{ro8+Ntz%lsIK-X11*hlKQUUg^^kLCiy1c zTw&+(>jUQZWfHOxlP`z;@V~g<#rIFgP107@NYHIrFh<+NToB@R5*;hLL7F;4(8}?R zK85n{3?`=L@az|XN<8K2^oxn?ra+YepQ2!OT#-%0g=&4iXGE4JfrPesC}e7hwF=1G^F zlm-r`=12Qh!KuqskC=5NZR`DxZyaw76R5{jI+STj=*vs?v9BmbD+<~%^$06 zPxcxBL&VU+VrS;y#ren|vfRZxn-Wt>%~5W_qFu(P1>BpM8!2h$DJ?k+^Lu+P@KSrX z0Jj%+B&2a;sEy50w71HW^*?M;*hcfc9+r-qTEZ^e49AO2l+lj>0IL_-k7?YjINlJb znz^AluV=UJxS&Cl%Dv`WJR>vlVH~2anWo_V`BT42EOj#1W@*rE6p#!70J{tfTMk4GM0W}H4Qf>Va2^2_BswLPJ_gA%dBN5 zA?$rUPu+-GNftaqp(!g8z54ozMjjMRHv0M?vwS`WuA^lE!&hCe$X~J;$!f6;=v&B} zWQ?pKR5nS!ogKE%^4cRJz6yunThec-8MWVAEvpt8U>&(z0Q`8PptCFeCGK4m_PZUi zZ{e#vp1Y0t{MGjOk!2Qot}}0WOAQ+SaZ^awlqG9q718)cIqqw(%gl&2K(bRiq&V}U z3Eh4E7?bsNGH-+uedLskg_xH0cM59gDd)Pbj?$W+4?b3)8JnQIkoT`Vb3|&=s(M>6M7QdYUSarX@a^Z&X=yFsNGNac8RQXeND!Cm_$I+ zdCM_&74ZP|S}c<}zV%>Pq?_#28ZJ?iY&YVsqkB=k?iYGCdWZQ|e~wbt5)BAxbq03t z6nA+jjjC{Cd@c0cWl=JMu5mP>P5Aud5jp%!g%%5lS!~U==0f+x$*_(&0S(WjCH*yH z(|=iikx2wTvQdMCRmv2gaX0Ss*e;Jhzby(t_-kIY(MQ z-zQbqxE^Ja`arAGM^C0Un19fRTQXA#2tB#wjG-#$E4bQNa|W`rLmhNnK&I1`u{fON zGd}XJdJ`ucdy)Y;f|F+>`GG@*&9d{REHFCiD$K(>Azx&h7uHTa1cqh zJP+6$#Zk|}v94R8c;lEA3b0+lO|x5=+RH@Grx9}c?bDr`{=DnrxKW|KUXesB+sdby;tmq9y-@owTZ%tyS#;^2#F=4@Y09H*Z z82`lIRK=-*LAiWJFNcRMPiD%5F+2>H_+L|tAdNKyZv8$H9=0P?lBqR^2)IivK#f>% z2769CVw{d%&^@Zuj09igdlmX-3?ly@1f3T3U9uIvQ%C55tz-thmfaGJ=8-}nyIMRc5T@)@<-dnSaQDFlv-LUTqmev+J zvz}D3E{<1_oJX6vlwHq>U#jetA3>Vs(~V?rU%)#?Xww*Gv$$$G^*$i#u-De z)YG>7);uSClhG#X9qF7ThF&zEw@XJs)%daTAdj9(RuvaD#pD^tfN}ey~FU zhZy|QdajfsO|+4Zu(bEmP+==Ah1^TqFUBapq>__um;HjZZFhY?-`c(agWcNrJN;Hg zT?sqJVT;F>R#9LEyU3Ig_OMT;TH4XJg)eV=Tgmli9To5O%1`mGe;?O zr!6;DbZ@QDfKk@y{D^*=^`+q!af))=>DH&~%^Mc1wzGB!E@dfLqH*gWMdc&)-A6c11u+GAA^;Rumlr=^|gCmCA*dGW$7y-|5Y^L|8mJUgUEz#Y`L@)$4td!3(sbbFh)Thk5Aql1#o_ g^+}h3yAx@VEcVyr#ifwi5wgE?+rUh}3VQ$PKSO30WdHyG delta 3240 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 diff --git a/res/graphics/terrain/terrain.png b/res/graphics/terrain/terrain.png index 7a09cbfa59bc59cbb72bdd5e98b9cc150c96e941..d4a10ca529404ef082c440a2281ad6c197af78d3 100644 GIT binary patch delta 100195 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 M)zXXaZa(;b0dU4^o&W#< delta 97584 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

4e?GMLw4tv5aLKNd#Ez(8iJr)BZrpbYKa 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%0D?(wuT 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 readCSV(String csvFilePath) throws IOException { - csvString = new StringBuffer(); // reset buffer every time it called - readCsvFileAsString(csvFilePath); - - CSVParser csvParser = CSVParser.parse(csvString.toString() - , CSVFormat.DEFAULT.withIgnoreSurroundingSpaces().withHeader() - .withIgnoreEmptyLines().withDelimiter(';') - .withCommentMarker('#').withNullString("N/A") - .withRecordSeparator('\n') - ); - - List csvRecordList = csvParser.getRecords(); - csvParser.close(); - - return csvRecordList; - } - - private static void readCsvFileAsString(String path) throws IOException { - Files.lines( - FileSystems.getDefault().getPath(path) - ).forEach(s -> csvString.append(s += "\n")); - } -} diff --git a/src/com/Torvald/CSVFetcher.kt b/src/com/Torvald/CSVFetcher.kt new file mode 100644 index 000000000..68ac10ae8 --- /dev/null +++ b/src/com/Torvald/CSVFetcher.kt @@ -0,0 +1,48 @@ +package com.Torvald + +import org.apache.commons.csv.CSVFormat +import org.apache.commons.csv.CSVParser +import org.apache.commons.csv.CSVRecord + +import java.io.IOException +import java.nio.file.FileSystems +import java.nio.file.Files + +/** + * Created by minjaesong on 16-02-16. + */ +object CSVFetcher { + + private var csvString: StringBuffer? = null + + @Throws(IOException::class) + fun readCSV(csvFilePath: String): List { + csvString = StringBuffer() // reset buffer every time it called + readCSVasString(csvFilePath) + + val csvParser = CSVParser.parse( + csvString!!.toString(), + CSVFormat.DEFAULT.withIgnoreSurroundingSpaces() + .withHeader() + .withIgnoreEmptyLines() + .withDelimiter(';') + .withCommentMarker('#') + .withNullString("N/A") + .withRecordSeparator('\n') + ) + + val csvRecordList = csvParser.records + csvParser.close() + + return csvRecordList + } + + @Throws(IOException::class) + fun readCSVasString(path: String): String { + csvString = StringBuffer() + Files.lines(FileSystems.getDefault().getPath(path)).forEach( + { s -> csvString!!.append("$s\n") } + ) + return csvString!!.toString() + } +} diff --git a/src/com/Torvald/ColourUtil/Col216.java b/src/com/Torvald/ColourUtil/Col216.java deleted file mode 100644 index 851c19ebb..000000000 --- a/src/com/Torvald/ColourUtil/Col216.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.Torvald.ColourUtil; - -import org.newdawn.slick.Color; - -/** - * Created by minjaesong on 16-02-11. - */ -public class Col216 implements LimitedColours { - - private byte data; - private static transient final int[] LOOKUP = {0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF}; - - public static final int MUL = 6; - public static final int MUL_2 = MUL * MUL; - public static final int MAX_STEP = MUL - 1; - public static final int COLOUR_DOMAIN_SIZE = MUL_2 * MUL; - - /** - * - * @param data - */ - public Col216(byte data) { - create(data); - } - - /** - * - * @param r 0-5 - * @param g 0-5 - * @param b 0-5 - */ - public Col216(int r, int g, int b) { - create(r, g, b); - } - - @Override - public Color createSlickColor(int raw) { - assertRaw(raw); - int r = raw / MUL_2; - int g = (raw % MUL_2) / MUL; - int b = raw % MUL; - - return createSlickColor(r, g, b); - } - - @Override - public Color createSlickColor(int r, int g, int b) { - assertRGB(r, g, b); - return new Color(LOOKUP[r], LOOKUP[g], LOOKUP[b]); - } - - @Override - public void create(int raw) { - assertRaw(raw); - data = (byte) raw; - } - - @Override - public void create(int r, int g, int b) { - assertRGB(r, g, b); - data = (byte) (MUL_2 * r + MUL * g + b); - } - - public byte getRaw() { return data; } - - private void assertRaw(int i) { - if (i >= COLOUR_DOMAIN_SIZE || i < 0) { - System.out.println("i: " + String.valueOf(i)); - throw new IllegalArgumentException(); - } - } - - private void assertRGB(int r, int g, int b) { - if (r > MAX_STEP || g > MAX_STEP || b > MAX_STEP || r < 0 || g < 0 || b < 0) { - System.out.println("r: " + String.valueOf(r)); - System.out.println("g: " + String.valueOf(g)); - System.out.println("b: " + String.valueOf(b)); - throw new IllegalArgumentException(); - } - } -} diff --git a/src/com/Torvald/ColourUtil/Col216.kt b/src/com/Torvald/ColourUtil/Col216.kt new file mode 100644 index 000000000..870092833 --- /dev/null +++ b/src/com/Torvald/ColourUtil/Col216.kt @@ -0,0 +1,82 @@ +package com.Torvald.ColourUtil + +import org.newdawn.slick.Color + +/** + * 6-Step RGB with builtin utils. + * Created by minjaesong on 16-02-11. + */ +class Col216 : LimitedColours { + + var raw: Byte = 0 + private set + + /** + + * @param data + */ + constructor(data: Byte) { + create(data.toInt()) + } + + /** + + * @param r 0-5 + * * + * @param g 0-5 + * * + * @param b 0-5 + */ + constructor(r: Int, g: Int, b: Int) { + create(r, g, b) + } + + override fun createSlickColor(raw: Int): Color { + assertRaw(raw) + val r = raw / MUL_2 + val g = raw % MUL_2 / MUL + val b = raw % MUL + + return createSlickColor(r, g, b) + } + + override fun createSlickColor(r: Int, g: Int, b: Int): Color { + assertRGB(r, g, b) + return Color(LOOKUP[r], LOOKUP[g], LOOKUP[b]) + } + + override fun create(raw: Int) { + assertRaw(raw) + this.raw = raw.toByte() + } + + override fun create(r: Int, g: Int, b: Int) { + assertRGB(r, g, b) + raw = (MUL_2 * r + MUL * g + b).toByte() + } + + private fun assertRaw(i: Int) { + if (i >= COLOUR_DOMAIN_SIZE || i < 0) { + println("i: " + i.toString()) + throw IllegalArgumentException() + } + } + + private fun assertRGB(r: Int, g: Int, b: Int) { + if (r !in 0..MAX_STEP || g !in 0..MAX_STEP || b !in 0..MAX_STEP) { + println("r: " + r.toString()) + println("g: " + g.toString()) + println("b: " + b.toString()) + throw IllegalArgumentException() + } + } + + companion object { + @Transient private val LOOKUP = intArrayOf(0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF) + + const val MUL = 6 + const val MUL_2 = MUL * MUL + const val MAX_STEP = MUL - 1 + const val COLOUR_DOMAIN_SIZE = MUL_2 * MUL + } +} diff --git a/src/com/Torvald/ColourUtil/Col40.java b/src/com/Torvald/ColourUtil/Col40.java deleted file mode 100644 index 51c45e818..000000000 --- a/src/com/Torvald/ColourUtil/Col40.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.Torvald.ColourUtil; - -import org.newdawn.slick.Color; - -/** - * Created by minjaesong on 16-02-20. - */ -public class Col40 implements LimitedColours { - - private char data; - private static transient final int[] LOOKUP = {0,7,13,20,26,33,39,46,52,59,65,72,78,85,92,98,105,111,118,124 - ,131,137,144,150,157,163,170,177,183,190,196,203,209,216,222,229,235,242,248,255}; - - public static final int MUL = 40; - public static final int MUL_2 = MUL * MUL; - public static final int MAX_STEP = MUL - 1; - public static final int COLOUR_DOMAIN_SIZE = MUL_2 * MUL; - - @Override - public Color createSlickColor(int raw) { - assertRaw(raw); - int r = raw / MUL_2; - int g = (raw % MUL_2) / MUL; - int b = raw % MUL; - - return createSlickColor(r, g, b); - } - - @Override - public Color createSlickColor(int r, int g, int b) { - assertRGB(r, g, b); - return new Color((LOOKUP[r] << 16) | (LOOKUP[g] << 8) | LOOKUP[b]); - } - - @Override - public void create(int raw) { - assertRaw(raw); - data = (char) raw; - } - - @Override - public void create(int r, int g, int b) { - assertRGB(r, g, b); - data = (char) (MUL_2 * r + MUL * g + b); - } - - public char getRaw() { return data; } - - private void assertRaw(int i) { - if (i >= COLOUR_DOMAIN_SIZE || i < 0) { - System.out.println("i: " + String.valueOf(i)); - throw new IllegalArgumentException(); - } - } - - private void assertRGB(int r, int g, int b) { - if (r > MAX_STEP || g > MAX_STEP || b > MAX_STEP || r < 0 || g < 0 || b < 0) { - System.out.println("r: " + String.valueOf(r)); - System.out.println("g: " + String.valueOf(g)); - System.out.println("b: " + String.valueOf(b)); - throw new IllegalArgumentException(); - } - } -} diff --git a/src/com/Torvald/ColourUtil/Col40.kt b/src/com/Torvald/ColourUtil/Col40.kt new file mode 100644 index 000000000..3c2da2897 --- /dev/null +++ b/src/com/Torvald/ColourUtil/Col40.kt @@ -0,0 +1,72 @@ +package com.Torvald.ColourUtil + +import org.newdawn.slick.Color + +/** + * 40-Step RGB with builtin utils. + * Created by minjaesong on 16-02-20. + */ +class Col40 : LimitedColours { + + var raw: Char = ' ' + private set + + override fun createSlickColor(raw: Int): Color { + assertRaw(raw) + val r = raw / MUL_2 + val g = raw % MUL_2 / MUL + val b = raw % MUL + + return createSlickColor(r, g, b) + } + + override fun createSlickColor(r: Int, g: Int, b: Int): Color { + assertRGB(r, g, b) + return Color(LOOKUP[r] shl 16 or (LOOKUP[g] shl 8) or LOOKUP[b]) + } + + override fun create(raw: Int) { + assertRaw(raw) + this.raw = raw.toChar() + } + + override fun create(r: Int, g: Int, b: Int) { + assertRGB(r, g, b) + raw = (MUL_2 * r + MUL * g + b).toChar() + } + + constructor() { + } + + constructor(c: Color) { + create( + Math.round(c.r * (MUL - 1)), + Math.round(c.g * (MUL - 1)), + Math.round(c.b * (MUL - 1))) + } + + private fun assertRaw(i: Int) { + if (i >= COLOUR_DOMAIN_SIZE || i < 0) { + println("i: " + i.toString()) + throw IllegalArgumentException() + } + } + + private fun assertRGB(r: Int, g: Int, b: Int) { + if (r !in 0..MAX_STEP || g !in 0..MAX_STEP || b !in 0..MAX_STEP) { + println("r: " + r.toString()) + println("g: " + g.toString()) + println("b: " + b.toString()) + throw IllegalArgumentException() + } + } + + companion object { + @Transient private val LOOKUP = intArrayOf(0, 7, 13, 20, 26, 33, 39, 46, 52, 59, 65, 72, 78, 85, 92, 98, 105, 111, 118, 124, 131, 137, 144, 150, 157, 163, 170, 177, 183, 190, 196, 203, 209, 216, 222, 229, 235, 242, 248, 255) + + const val MUL = 40 + const val MUL_2 = MUL * MUL + const val MAX_STEP = MUL - 1 + const val COLOUR_DOMAIN_SIZE = MUL_2 * MUL + } +} diff --git a/src/com/Torvald/ColourUtil/Col4096.java b/src/com/Torvald/ColourUtil/Col4096.java deleted file mode 100644 index 0fa482df7..000000000 --- a/src/com/Torvald/ColourUtil/Col4096.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.Torvald.ColourUtil; - -import org.newdawn.slick.Color; - -/** - * Created by minjaesong on 16-01-23. - * - * 12-bit RGB - */ -public class Col4096 implements LimitedColours { - - private short data; - - /** - * - * @param data - */ - public Col4096(int data) { - create(data); - } - - /** - * - * @param r 0-15 - * @param g 0-15 - * @param b 0-15 - */ - public Col4096(int r, int g, int b) { - create(r, g, b); - } - - /** - * Create Col4096 colour and convert it to Slick Color - * @param i - * @return - */ - public Color createSlickColor(int i) { - assertRaw(i); - - int a, r, g, b; - - r = (i & 0xF00) >> 8; - g = (i & 0x0F0) >> 4; - b = i & 0x00F; - - if (i > 0xFFF) { - a = (i & 0xF000) >> 12; - - return new Color( - (r << 4) | r - , (g << 4) | g - , (b << 4) | b - , (a << 4) | a - ); - } - else { - return new Color( - (r << 4) | r - , (g << 4) | g - , (b << 4) | b - ); - } - } - - @Override - public Color createSlickColor(int r, int g, int b) { - assertARGB(0, r, g, b); - return createSlickColor(r << 8 | g << 4 | b); - } - - public Color createSlickColor(int a, int r, int g, int b) { - assertARGB(a, r, g, b); - return createSlickColor(a << 12 |r << 8 | g << 4 | b); - } - - @Override - public void create(int raw) { - assertRaw(raw); - data = (short) (raw & 0xFFFF); - } - - @Override - public void create(int r, int g, int b) { - assertARGB(0, r, g, b); - data = (short) (r << 8 | g << 4 | b); - } - - public void create(int a, int r, int g, int b) { - assertARGB(a, r, g, b); - data = (short) (a << 12 | r << 8 | g << 4 | b); - } - - /** - * Convert to 3 byte values, for raster imaging. - * @return byte[RR, GG, BB] e.g. 0x4B3 -> 0x44, 0xBB, 0x33 - */ - public byte[] toByteArray() { - byte[] ret = new byte[3]; - int r = (data & 0xF00) >> 8; - int g = (data & 0x0F0) >> 4; - int b = data & 0x00F; - - ret[0] = (byte) ((r << 4) | r); - ret[1] = (byte) ((g << 4) | g); - ret[2] = (byte) ((b << 4) | b); - - return ret; - } - - /** - * Retrieve raw ARGB value - * @return 0xARGB - */ - public short getRaw() { - return data; - } - - private void assertRaw(int i) { - if (i > 0xFFFF || i < 0) { - System.out.println("i: " + String.valueOf(i)); - throw new IllegalArgumentException(); - } - } - - private void assertARGB(int a, int r, int g, int b) { - if (a > 16 || r > 16 || g > 16 || b > 16 || r < 0 || g < 0 || b < 0 || a < 0) { - System.out.println("a: " + String.valueOf(a)); - System.out.println("r: " + String.valueOf(r)); - System.out.println("g: " + String.valueOf(g)); - System.out.println("b: " + String.valueOf(b)); - throw new IllegalArgumentException(); - } - } - -} diff --git a/src/com/Torvald/ColourUtil/Col4096.kt b/src/com/Torvald/ColourUtil/Col4096.kt new file mode 100644 index 000000000..2199f430d --- /dev/null +++ b/src/com/Torvald/ColourUtil/Col4096.kt @@ -0,0 +1,127 @@ +package com.Torvald.ColourUtil + +import org.newdawn.slick.Color + +/** + * 12-bit (16-step) RGB with builtin utils. + * Created by minjaesong on 16-01-23. + */ +class Col4096 : LimitedColours { + + /** + * Retrieve raw ARGB value + * @return 0xARGB + */ + var raw: Short = 0 + private set + + /** + + * @param data + */ + constructor(data: Int) { + create(data) + } + + /** + + * @param r 0-15 + * * + * @param g 0-15 + * * + * @param b 0-15 + */ + constructor(r: Int, g: Int, b: Int) { + create(r, g, b) + } + + /** + * Create Col4096 colour and convert it to Slick Color + * @param i + * * + * @return + */ + override fun createSlickColor(raw: Int): Color { + assertRaw(raw) + + val a: Int + val r: Int + val g: Int + val b: Int + + r = raw and 0xF00 shr 8 + g = raw and 0x0F0 shr 4 + b = raw and 0x00F + + if (raw > 0xFFF) { + a = raw and 0xF000 shr 12 + + return Color( + r shl 4 or r, g shl 4 or g, b shl 4 or b, a shl 4 or a) + } + else { + return Color( + r shl 4 or r, g shl 4 or g, b shl 4 or b) + } + } + + override fun createSlickColor(r: Int, g: Int, b: Int): Color { + assertARGB(0, r, g, b) + return createSlickColor(r shl 8 or g shl 4 or b) + } + + fun createSlickColor(a: Int, r: Int, g: Int, b: Int): Color { + assertARGB(a, r, g, b) + return createSlickColor(a shl 12 or r shl 8 or g shl 4 or b) + } + + override fun create(raw: Int) { + assertRaw(raw) + this.raw = (raw and 0xFFFF).toShort() + } + + override fun create(r: Int, g: Int, b: Int) { + assertARGB(0, r, g, b) + raw = (r shl 8 or g shl 4 or b).toShort() + } + + fun create(a: Int, r: Int, g: Int, b: Int) { + assertARGB(a, r, g, b) + raw = (a shl 12 or r shl 8 or g shl 4 or b).toShort() + } + + /** + * Convert to 3 byte values, for raster imaging. + * @return byte[RR, GG, BB] e.g. 0x4B3 -> 0x44, 0xBB, 0x33 + */ + fun toByteArray(): ByteArray { + val ret = ByteArray(3) + val r = (raw.toInt() and 0xF00) shr 8 + val g = (raw.toInt() and 0x0F0) shr 4 + val b = (raw.toInt() and 0x00F) + + ret[0] = (r shl 4 or r).toByte() + ret[1] = (g shl 4 or g).toByte() + ret[2] = (b shl 4 or b).toByte() + + return ret + } + + private fun assertRaw(i: Int) { + if (i > 0xFFFF || i < 0) { + println("i: " + i.toString()) + throw IllegalArgumentException() + } + } + + private fun assertARGB(a: Int, r: Int, g: Int, b: Int) { + if (a !in 0..16 || r !in 0..16 || g !in 0..16 || b !in 0..16) { + println("a: " + a.toString()) + println("r: " + r.toString()) + println("g: " + g.toString()) + println("b: " + b.toString()) + throw IllegalArgumentException() + } + } + +} diff --git a/src/com/Torvald/ColourUtil/HSV.java b/src/com/Torvald/ColourUtil/HSV.java deleted file mode 100644 index c4cc944eb..000000000 --- a/src/com/Torvald/ColourUtil/HSV.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.Torvald.ColourUtil; - -/** - * Created by minjaesong on 16-03-10. - */ -public class HSV { - private float H; - private float S; - private float V; - - public HSV() { - } - - /** - * - * @param h 0-359 - * @param s 0-1 - * @param v 0-1 - */ - public HSV(float h, float s, float v) { - H = h; - S = s; - V = v; - } - - public float getH() { - return H; - } - - public void setH(float h) { - H = h; - } - - public float getS() { - return S; - } - - public void setS(float s) { - S = s; - } - - public float getV() { - return V; - } - - public void setV(float v) { - V = v; - } -} diff --git a/src/com/Torvald/ColourUtil/HSV.kt b/src/com/Torvald/ColourUtil/HSV.kt new file mode 100644 index 000000000..4cf940a74 --- /dev/null +++ b/src/com/Torvald/ColourUtil/HSV.kt @@ -0,0 +1,15 @@ +package com.Torvald.ColourUtil + +/** + * Created by minjaesong on 16-03-10. + */ +/** + * @param h : Hue 0-359 + * @param s : Saturation 0-1 + * @param v : Value (brightness in Adobe Photoshop(TM)) 0-1 + */ +data class HSV( + var h: Float, + var s: Float, + var v: Float +) diff --git a/src/com/Torvald/ColourUtil/HSVUtil.java b/src/com/Torvald/ColourUtil/HSVUtil.java deleted file mode 100644 index 9a79a1108..000000000 --- a/src/com/Torvald/ColourUtil/HSVUtil.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.Torvald.ColourUtil; - -import com.jme3.math.FastMath; -import org.newdawn.slick.Color; - -/** - * Created by minjaesong on 16-01-16. - */ -public class HSVUtil { - - /** - * Convert HSV parameters to RGB color. - * @param H 0-359 Hue - * @param S 0-1 Saturation - * @param V 0-1 Value - * @return org.newdawn.slick.Color - * @link http://www.rapidtables.com/convert/color/hsv-to-rgb.htm - */ - public static Color toRGB(float H, float S, float V) { - H %= 360; - - float C = V * S; - float X = C * (1 - FastMath.abs( - (H / 60f) % 2 - 1 - )); - float m = V - C; - - float R_prime = Float.NaN; - float G_prime = Float.NaN; - float B_prime = Float.NaN; - - if (H < 60) { - R_prime = C; - G_prime = X; - B_prime = 0; - } - else if (H < 120) { - R_prime = X; - G_prime = C; - B_prime = 0; - } - else if (H < 180) { - R_prime = 0; - G_prime = C; - B_prime = X; - } - else if (H < 240) { - R_prime = 0; - G_prime = X; - B_prime = C; - } - else if (H < 300) { - R_prime = X; - G_prime = 0; - B_prime = C; - } - else if (H < 360) { - R_prime = C; - G_prime = 0; - B_prime = X; - } - - return new Color( - (R_prime + m) - , (G_prime + m) - , (B_prime + m) - ); - } - - public static Color toRGB(HSV hsv) { - return toRGB(hsv.getH(), hsv.getS(), hsv.getV()); - } - - public static HSV fromRGB(Color color) { - float r = color.r; - float g = color.g; - float b = color.b; - - float rgbMin = FastMath.min(r, g, b); - float rgbMax = FastMath.max(r, g, b); - - float h; - float s; - float v = rgbMax; - - float delta = rgbMax - rgbMin; - - if (rgbMax != 0) - s = delta / rgbMax; - else { - h = 0; - s = 0; - return new HSV(h, s, v); - } - - if (r == rgbMax) - h = (g - b) / delta; - else if (g == rgbMax) - h = 2 + (b - r) / delta; - else - h = 4 + (r - g) / delta; - - h *= 60; - if (h < 0) h += 360; - - return new HSV(h, s, v); - } - -} diff --git a/src/com/Torvald/ColourUtil/HSVUtil.kt b/src/com/Torvald/ColourUtil/HSVUtil.kt new file mode 100644 index 000000000..fd2268ae5 --- /dev/null +++ b/src/com/Torvald/ColourUtil/HSVUtil.kt @@ -0,0 +1,110 @@ +package com.Torvald.ColourUtil + +import com.jme3.math.FastMath +import org.newdawn.slick.Color + +/** + * Created by minjaesong on 16-01-16. + */ +object HSVUtil { + + /** + * Convert HSV parameters to RGB color. + * @param H 0-359 Hue + * * + * @param S 0-1 Saturation + * * + * @param V 0-1 Value + * * + * @return org.newdawn.slick.Color + * * + * @link http://www.rapidtables.com/convert/color/hsv-to-rgb.htm + */ + fun toRGB(H: Float, S: Float, V: Float): Color { + var H = H + H %= 360f + + val C = V * S + val X = C * (1 - FastMath.abs( + H / 60f % 2 - 1)) + val m = V - C + + var R_prime = java.lang.Float.NaN + var G_prime = java.lang.Float.NaN + var B_prime = java.lang.Float.NaN + + if (H < 60) { + R_prime = C + G_prime = X + B_prime = 0f + } + else if (H < 120) { + R_prime = X + G_prime = C + B_prime = 0f + } + else if (H < 180) { + R_prime = 0f + G_prime = C + B_prime = X + } + else if (H < 240) { + R_prime = 0f + G_prime = X + B_prime = C + } + else if (H < 300) { + R_prime = X + G_prime = 0f + B_prime = C + } + else if (H < 360) { + R_prime = C + G_prime = 0f + B_prime = X + } + + return Color( + R_prime + m, G_prime + m, B_prime + m) + } + + fun toRGB(hsv: HSV): Color { + return toRGB(hsv.h, hsv.s, hsv.v) + } + + fun fromRGB(color: Color): HSV { + val r = color.r + val g = color.g + val b = color.b + + val rgbMin = FastMath.min(r, g, b) + val rgbMax = FastMath.max(r, g, b) + + var h: Float + val s: Float + val v = rgbMax + + val delta = rgbMax - rgbMin + + if (rgbMax != 0f) + s = delta / rgbMax + else { + h = 0f + s = 0f + return HSV(h, s, v) + } + + if (r == rgbMax) + h = (g - b) / delta + else if (g == rgbMax) + h = 2 + (b - r) / delta + else + h = 4 + (r - g) / delta + + h *= 60f + if (h < 0) h += 360f + + return HSV(h, s, v) + } + +} diff --git a/src/com/Torvald/ColourUtil/LimitedColours.java b/src/com/Torvald/ColourUtil/LimitedColours.java deleted file mode 100644 index 61f4ddd81..000000000 --- a/src/com/Torvald/ColourUtil/LimitedColours.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.Torvald.ColourUtil; - -import org.newdawn.slick.Color; - -/** - * Created by minjaesong on 16-02-11. - */ -public interface LimitedColours { - - - - Color createSlickColor(int raw); - Color createSlickColor(int r, int g, int b); - - void create(int raw); - void create(int r, int g, int b); - -} diff --git a/src/com/Torvald/ColourUtil/LimitedColours.kt b/src/com/Torvald/ColourUtil/LimitedColours.kt new file mode 100644 index 000000000..82cc14fd3 --- /dev/null +++ b/src/com/Torvald/ColourUtil/LimitedColours.kt @@ -0,0 +1,17 @@ +package com.Torvald.ColourUtil + +import org.newdawn.slick.Color + +/** + * Created by minjaesong on 16-02-11. + */ +interface LimitedColours { + + + fun createSlickColor(raw: Int): Color + fun createSlickColor(r: Int, g: Int, b: Int): Color + + fun create(raw: Int) + fun create(r: Int, g: Int, b: Int) + +} diff --git a/src/com/Torvald/ImageFont/GameFontBase.java b/src/com/Torvald/ImageFont/GameFontBase.java deleted file mode 100644 index 3c2e57ceb..000000000 --- a/src/com/Torvald/ImageFont/GameFontBase.java +++ /dev/null @@ -1,621 +0,0 @@ -package com.Torvald.ImageFont; - -import com.Torvald.Terrarum.Terrarum; -import org.lwjgl.opengl.GL11; -import org.newdawn.slick.*; - -import java.util.Arrays; - -/** - * Created by minjaesong on 16-01-27. - */ -public class GameFontBase implements Font { - - static SpriteSheet hangulSheet; - static SpriteSheet asciiSheet; - static SpriteSheet asciiSheetEF; - static SpriteSheet runicSheet; - static SpriteSheet extASheet; - static SpriteSheet extASheetEF; - static SpriteSheet kanaSheet; - static SpriteSheet cjkPunct; - // static SpriteSheet uniHan; - static SpriteSheet cyrilic; - static SpriteSheet cyrilicEF; - static SpriteSheet fullwidthForms; - static SpriteSheet uniPunct; - static SpriteSheet wenQuanYi_1; - static SpriteSheet wenQuanYi_2; - - static final int JUNG_COUNT = 21; - static final int JONG_COUNT = 28; - - static final int W_CJK = 10; - static final int W_UNIHAN = 16; - static final int W_LATIN_WIDE = 9; // width of regular letters, including m - static final int W_LATIN_NARROW = 5; // width of letter f, t, i, l - static final int H = 20; - static final int H_HANGUL = 16; - static final int H_UNIHAN = 16; - static final int H_KANA = 20; - - static final int SHEET_ASCII_EM = 0; - static final int SHEET_ASCII_EF = 1; - static final int SHEET_HANGUL = 2; - static final int SHEET_RUNIC = 3; - static final int SHEET_EXTA_EM = 4; - static final int SHEET_EXTA_EF = 5; - static final int SHEET_KANA = 6; - static final int SHEET_CJK_PUNCT = 7; - static final int SHEET_UNIHAN = 8; - static final int SHEET_CYRILIC_EM = 9; - static final int SHEET_CYRILIC_EF = 10; - static final int SHEET_FW_UNI = 11; - static final int SHEET_UNI_PUNCT = 12; - static final int SHEET_WENQUANYI_1 = 13; - static final int SHEET_WENQUANYI_2 = 14; - - static SpriteSheet[] sheetKey; - static final Character[] asciiEFList = { - ' ','!','"','\'','(',')',',','.',':',';','I','[',']','`','f','i' - ,'j','l','t','{','|','}',0xA1,'Ì','Í','Î','Ï','ì','í','î','ï','·' - }; - - static final Character[] extAEFList = { - 0x12E, 0x12F, 0x130, 0x131, 0x135, 0x13A, 0x13C, 0x142, 0x163, 0x167, 0x17F - }; - - static final Character[] cyrilecEFList = { - 0x406, 0x407, 0x456, 0x457, 0x458 - }; - - /** - * Runic letters list used for game. The set is - * Younger Futhark + Medieval rune 'e' + Punct + Runic Almanac - * - * BEWARE OF SIMILAR-LOOKING RUNES, especially: - * - * * Algiz ᛉ instead of Maðr ᛘ - * - * * Short-Twig Hagall ᚽ instead of Runic Letter E ᛂ - * - * * Runic Letter OE ᚯ instead of Óss ᚬ - * - * Examples: - * ᛭ᛋᛁᚴᚱᛁᚦᛦ᛭ - * ᛭ᛂᛚᛋᛅ᛭ᛏᚱᚢᛏᚾᛁᚾᚴᚢᚾᛅ᛬ᛅᚱᚾᛅᛏᛅᛚᛋ - */ - static final Character[] runicList = { - 'ᚠ','ᚢ','ᚦ','ᚬ','ᚱ','ᚴ','ᚼ','ᚾ','ᛁ','ᛅ','ᛋ','ᛏ','ᛒ','ᛘ','ᛚ','ᛦ' - ,'ᛂ','᛬','᛫','᛭','ᛮ','ᛯ','ᛰ' - }; - - static int interchar = 0; - - - public GameFontBase() throws SlickException { - - } - - private int[] getHan(int hanIndex) { - int han_x = hanIndex % JONG_COUNT; - int han_y = hanIndex / JONG_COUNT; - int[] ret = {han_x, han_y}; - return ret; - } - - private int getHanChosung(int hanIndex) { - return hanIndex / (JUNG_COUNT * JONG_COUNT); - } - - private int getHanJungseong(int hanIndex) { - return hanIndex / (JONG_COUNT) % JUNG_COUNT; - } - - private int getHanJongseong(int hanIndex) { - return hanIndex % JONG_COUNT; - } - - private int getHanChoseongRow(int hanIndex) { - int jungseongIndex = getHanJungseong(hanIndex); - Integer[] jungseongWide = {8, 12, 13, 17, 18, 21}; - Integer[] jungseongComplex = {9, 10, 11, 14, 15, 16, 22}; - int ret; - - if (Arrays.asList(jungseongWide).contains(jungseongIndex)) { - ret = 2; - } - else if (Arrays.asList(jungseongComplex).contains(jungseongIndex)) { - ret = 4; - } - else { - ret = 0; - } - return (getHanJongseong(hanIndex) == 0) ? ret : ret + 1; - } - - private int getHanJungseongRow(int hanIndex) { - return (getHanJongseong(hanIndex) == 0) ? 6 : 7; - } - - private int getHanJongseongRow() { - return 8; - } - - private boolean isAsciiEF(char c) { - return (Arrays.asList(asciiEFList).contains(c)); - } - - private boolean isExtAEF(char c) { - return (Arrays.asList(extAEFList).contains(c)); - } - - private boolean isHangul(char c) { - return (c >= 0xAC00 && c < 0xD7A4); - } - - private boolean isAscii(char c) { return (c > 0 && c <= 0xFF); } - - private boolean isRunic(char c) { - return (Arrays.asList(runicList).contains(c)); - } - - private boolean isExtA(char c) { - return (c >= 0x100 && c < 0x180); - } - - private boolean isKana(char c) { - return (c >= 0x3040 && c < 0x3100); - } - - private boolean isCJKPunct(char c) { - return (c >= 0x3000 && c < 0x3040); - } - - private boolean isUniHan(char c) { - return (c >= 0x3400 && c < 0xA000); - } - - private boolean isCyrilic(char c) { - return (c >= 0x400 && c < 0x460); - } - - private boolean isCyrilicEF(char c) { - return (Arrays.asList(cyrilecEFList).contains(c)); - } - - private boolean isFullwidthUni(char c) { - return (c >= 0xFF00 && c < 0xFF20); - } - - private boolean isUniPunct(char c) { - return (c >= 0x2000 && c < 0x2070); - } - - private boolean isWenQuanYi1(char c) { - return (c >= 0x33F3 && c <= 0x69FC); - } - - private boolean isWenQuanYi2(char c) { - return (c >= 0x69FD && c <= 0x9FDC); - } - - /** */ - - private int asciiEFindexX(char c) { - return (Arrays.asList(asciiEFList).indexOf(c) % 16); - } - - private int asciiEFindexY(char c) { - return (Arrays.asList(asciiEFList).indexOf(c) / 16); - } - - private int extAEFindexX(char c) { - return (Arrays.asList(extAEFList).indexOf(c) % 16); - } - - private int extAEFindexY(char c) { - return (Arrays.asList(extAEFList).indexOf(c) / 16); - } - - private int runicIndexX(char c) { - return (Arrays.asList(runicList).indexOf(c) % 16); - } - - private int runicIndexY(char c) { - return (Arrays.asList(runicList).indexOf(c) / 16); - } - - private int kanaIndexX(char c) { - return (c - 0x3040) % 16; - } - - private int kanaIndexY(char c) { - return (c - 0x3040) / 16; - } - - private int cjkPunctIndexX(char c) { - return (c - 0x3000) % 16; - } - - private int cjkPunctIndexY(char c) { - return (c - 0x3000) / 16; - } - - private int uniHanIndexX(char c) { - return (c - 0x3400) % 256; - } - - private int uniHanIndexY(char c) { - return (c - 0x3400) / 256; - } - - private int cyrilicIndexX(char c) { - return (c - 0x400) % 16; - } - - private int cyrilicIndexY(char c) { - return (c - 0x400) / 16; - } - - private int cyrilicEFindexX(char c) { - return (Arrays.asList(cyrilecEFList).indexOf(c) % 16); - } - - private int cyrilicEFindexY(char c) { - return (Arrays.asList(cyrilecEFList).indexOf(c) / 16); - } - - private int fullwidthUniIndexX(char c) { - return (c - 0xFF00) % 16; - } - - private int fullwidthUniIndexY(char c) { - return (c - 0xFF00) / 16; - } - - private int uniPunctIndexX(char c) { - return (c - 0x2000) % 16; - } - - private int uniPunctIndexY(char c) { - return (c - 0x2000) / 16; - } - - private int wenQuanYiIndexX(char c) { - // v Ext1 v Unihan - return (c - (c <= 0x4DB5 ? 0x33F3 : 0x33F3 + 0x4A)) % 32; - } - - private int wenQuanYi1IndexY(char c) { - return (c - (0x33F3 + 0x4A)) / 32; - } - - private int wenQuanYi2IndexY(char c) { - return (c - 0x69FD) / 32; - } - - @Override - public int getWidth(String s) { - return getWidthSubstr(s, s.length()); - } - - private int getWidthSubstr(String s, int endIndex) { - int len = 0; - for (int i = 0; i < endIndex; i++) { - int c = getSheetType(s.charAt(i)); - - if (i > 0 && s.charAt(i) > 0x20) { // Kerning - int cpre = getSheetType(s.charAt(i - 1)); - if ( - ((cpre == SHEET_UNIHAN || cpre == SHEET_HANGUL) - && !(c == SHEET_UNIHAN || c == SHEET_HANGUL)) - - || ((c == SHEET_UNIHAN || c == SHEET_HANGUL) - && !(cpre == SHEET_UNIHAN || cpre == SHEET_HANGUL)) - ) { - // margin after/before hangul/unihan - len += 2; - } - else if ((c == SHEET_HANGUL || c == SHEET_KANA) - && (cpre == SHEET_HANGUL || cpre == SHEET_KANA)) { - // margin between hangul/kana - len += 1; - } - - } - - if (c == SHEET_ASCII_EF || c == SHEET_EXTA_EF || c == SHEET_CYRILIC_EF) - len += W_LATIN_NARROW; - else if (c == SHEET_KANA || c == SHEET_HANGUL || c == SHEET_CJK_PUNCT) - len += W_CJK; - else if (c == SHEET_UNIHAN || c == SHEET_FW_UNI || c == SHEET_WENQUANYI_1 || c == SHEET_WENQUANYI_2) - len += W_UNIHAN; - else - len += W_LATIN_WIDE; - - if (i < endIndex - 1) len += interchar; - } - return len; - } - - @Override - public int getHeight(String s) { - return H; - } - - @Override - public int getLineHeight() { - return H; - } - - @Override - public void drawString(float x, float y, String s) { - drawString(x, y, s, Color.white); - } - - @Override - public void drawString(float x, float y, String s, Color color) { - // hangul fonts first - hangulSheet.startUse(); - // JOHAB - for (int i = 0; i < s.length(); i++) { - char ch = s.charAt(i); - - if (isHangul(ch)) { - int hIndex = ch - 0xAC00; - - int indexCho = getHanChosung(hIndex); - int indexJung = getHanJungseong(hIndex); - int indexJong = getHanJongseong(hIndex); - - int choRow = getHanChoseongRow(hIndex); - int jungRow = getHanJungseongRow(hIndex); - int jongRow = getHanJongseongRow(); - - int glyphW = getWidth("" + ch); - - // chosung - hangulSheet.renderInUse( - Math.round(x - + getWidthSubstr(s, i + 1) - glyphW - ) - , Math.round((H - H_HANGUL) / 2 + y + 1) - , indexCho - , choRow - ); - // jungseong - hangulSheet.renderInUse( - Math.round(x - + getWidthSubstr(s, i + 1) - glyphW - ) - , Math.round((H - H_HANGUL) / 2 + y + 1) - , indexJung - , jungRow - ); - // jongseong - hangulSheet.renderInUse( - Math.round(x - + getWidthSubstr(s, i + 1) - glyphW - ) - , Math.round((H - H_HANGUL) / 2 + y + 1) - , indexJong - , jongRow - ); - } - } - hangulSheet.endUse(); - - // unihan fonts - /*uniHan.startUse(); - for (int i = 0; i < s.length(); i++) { - char ch = s.charAt(i); - - if (isUniHan(ch)) { - int glyphW = getWidth("" + ch); - uniHan.renderInUse( - Math.round(x - + getWidthSubstr(s, i + 1) - glyphW - ) - , Math.round((H - H_UNIHAN) / 2 + y) - , uniHanIndexX(ch) - , uniHanIndexY(ch) - ); - } - } - - uniHan.endUse();*/ - - // WenQuanYi 1 - wenQuanYi_1.startUse(); - - for (int i = 0; i < s.length(); i++) { - char ch = s.charAt(i); - - if (isWenQuanYi1(ch)) { - int glyphW = getWidth("" + ch); - wenQuanYi_1.renderInUse( - Math.round(x - + getWidthSubstr(s, i + 1) - glyphW - ) - , Math.round((H - H_UNIHAN) / 2 + y - 1) - , wenQuanYiIndexX(ch) - , wenQuanYi1IndexY(ch) - ); - } - } - - wenQuanYi_1.endUse(); - wenQuanYi_2.startUse(); - - for (int i = 0; i < s.length(); i++) { - char ch = s.charAt(i); - - if (isWenQuanYi2(ch)) { - int glyphW = getWidth("" + ch); - wenQuanYi_2.renderInUse( - Math.round(x - + getWidthSubstr(s, i + 1) - glyphW - ) - , Math.round((H - H_UNIHAN) / 2 + y - 1) - , wenQuanYiIndexX(ch) - , wenQuanYi2IndexY(ch) - ); - } - } - - wenQuanYi_2.endUse(); - - //ascii fonts - int prevInstance = -1; - for (int i = 0; i < s.length(); i++) { - char ch = s.charAt(i); - - if (!isHangul(ch) && !isUniHan(ch)) { - - // if not init, enduse first - if (prevInstance != -1) { - sheetKey[prevInstance].endUse(); - } - sheetKey[getSheetType(ch)].startUse(); - prevInstance = getSheetType(ch); - - int sheetX; - int sheetY; - switch (prevInstance) { - case SHEET_ASCII_EF: - sheetX = asciiEFindexX(ch); - sheetY = asciiEFindexY(ch); - break; - case SHEET_EXTA_EF: - sheetX = extAEFindexX(ch); - sheetY = extAEFindexY(ch); - break; - case SHEET_RUNIC: - sheetX = runicIndexX(ch); - sheetY = runicIndexY(ch); - break; - case SHEET_EXTA_EM: - sheetX = (ch - 0x100) % 16; - sheetY = (ch - 0x100) / 16; - break; - case SHEET_KANA: - sheetX = kanaIndexX(ch); - sheetY = kanaIndexY(ch); - break; - case SHEET_CJK_PUNCT: - sheetX = cjkPunctIndexX(ch); - sheetY = cjkPunctIndexY(ch); - break; - case SHEET_CYRILIC_EM: - sheetX = cyrilicIndexX(ch); - sheetY = cyrilicIndexY(ch); - break; - case SHEET_CYRILIC_EF: - sheetX = cyrilicEFindexX(ch); - sheetY = cyrilicEFindexY(ch); - break; - case SHEET_FW_UNI: - sheetX = fullwidthUniIndexX(ch); - sheetY = fullwidthUniIndexY(ch); - break; - case SHEET_UNI_PUNCT: - sheetX = uniPunctIndexX(ch); - sheetY = uniPunctIndexY(ch); - break; - default: - sheetX = ch % 16; - sheetY = ch / 16; - break; - } - - try { - int glyphW = getWidth("" + ch); - sheetKey[prevInstance].renderInUse( - Math.round(x + getWidthSubstr(s, i + 1) - glyphW) - // Interchar: pull punct right next to hangul to the left - + ((i > 0 && isHangul(s.charAt(i - 1))) ? -3 : 0) - , Math.round(y) - + ((prevInstance == SHEET_CJK_PUNCT) ? -1 : - (prevInstance == SHEET_FW_UNI) ? (H - H_HANGUL) / 2 : 0) - , sheetX - , sheetY - ); - } - catch (ArrayIndexOutOfBoundsException e) { - // System.out.println("ArrayIndexOutOfBoundsException") - // System.out.println("char: '" + ch + "' (" + String.valueOf((int) ch) + ")"); - // System.out.println("sheet: " + prevInstance); - // System.out.println("sheetX: " + sheetX); - // System.out.println("sheetY: " + sheetY); - } - - } - - } - if (prevInstance != -1) { - sheetKey[prevInstance].endUse(); - } - } - - private int getSheetType(char c) { - // EFs - if (isAsciiEF(c)) return SHEET_ASCII_EF; - else if (isExtAEF(c)) return SHEET_EXTA_EF; - else if (isCyrilicEF(c)) return SHEET_CYRILIC_EF; - // fixed width - else if (isRunic(c)) return SHEET_RUNIC; - else if (isHangul(c)) return SHEET_HANGUL; - else if (isKana(c)) return SHEET_KANA; - else if (isUniHan(c)) return SHEET_UNIHAN; - else if (isAscii(c)) return SHEET_ASCII_EM; - else if (isExtA(c)) return SHEET_EXTA_EM; - else if (isCyrilic(c)) return SHEET_CYRILIC_EM; - else if (isUniPunct(c)) return SHEET_UNI_PUNCT; - // fixed width punctuations - else if (isCJKPunct(c)) return SHEET_CJK_PUNCT; - else if (isFullwidthUni(c)) return SHEET_FW_UNI; - - else return SHEET_ASCII_EM; // fallback - } - - /** - * Draw part of a string to the screen. Note that this will still position the text as though - * it's part of the bigger string. - * @param x - * @param y - * @param s - * @param color - * @param startIndex - * @param endIndex - */ - @Override - public void drawString(float x, float y, String s, Color color, int startIndex, int endIndex) { - String unprintedHead = s.substring(0, startIndex); - String printedBody = s.substring(startIndex, endIndex); - int xoff = getWidth(unprintedHead); - drawString(x + xoff, y, printedBody, color); - } - - public void reloadUnihan() throws SlickException { - - } - - /** - * Set margin between characters - * @param margin - */ - public void setInterchar(int margin) { - interchar = margin; - } - - private void setBlendModeMul() { - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_DST_COLOR, GL11.GL_ONE_MINUS_SRC_ALPHA); - } - - private void setBlendModeNormal() { - GL11.glDisable(GL11.GL_BLEND); - Terrarum.appgc.getGraphics().setDrawMode(Graphics.MODE_NORMAL); - } -} diff --git a/src/com/Torvald/ImageFont/GameFontBase.kt b/src/com/Torvald/ImageFont/GameFontBase.kt new file mode 100644 index 000000000..9cea5ddd2 --- /dev/null +++ b/src/com/Torvald/ImageFont/GameFontBase.kt @@ -0,0 +1,500 @@ +package com.Torvald.ImageFont + +import com.Torvald.Terrarum.Terrarum +import org.lwjgl.opengl.GL11 +import org.newdawn.slick.* + +/** + * Created by minjaesong on 16-01-27. + */ +open class GameFontBase @Throws(SlickException::class) +constructor() : Font { + + private fun getHan(hanIndex: Int): IntArray { + val han_x = hanIndex % JONG_COUNT + val han_y = hanIndex / JONG_COUNT + val ret = intArrayOf(han_x, han_y) + return ret + } + + private fun getHanChosung(hanIndex: Int) = hanIndex / (JUNG_COUNT * JONG_COUNT) + + private fun getHanJungseong(hanIndex: Int) = hanIndex / JONG_COUNT % JUNG_COUNT + + private fun getHanJongseong(hanIndex: Int) = hanIndex % JONG_COUNT + + + private fun getHanChoseongRow(hanIndex: Int): Int { + val jungseongIndex = getHanJungseong(hanIndex) + val jungseongWide = arrayOf(8, 12, 13, 17, 18, 21) + val jungseongComplex = arrayOf(9, 10, 11, 14, 15, 16, 22) + val ret: Int + + if (jungseongWide.contains(jungseongIndex)) { + ret = 2 + } + else if (jungseongComplex.contains(jungseongIndex)) { + ret = 4 + } + else { + ret = 0 + } + return if (getHanJongseong(hanIndex) == 0) ret else ret + 1 + } + + private fun getHanJungseongRow(hanIndex: Int) = if (getHanJongseong(hanIndex) == 0) 6 else 7 + + private val hanJongseongRow: Int + get() = 8 + + private fun isAsciiEF(c: Char) = asciiEFList.contains(c) + + private fun isExtAEF(c: Char) = extAEFList.contains(c) + + private fun isHangul(c: Char) = c.toInt() >= 0xAC00 && c.toInt() < 0xD7A4 + + private fun isAscii(c: Char) = c.toInt() > 0 && c.toInt() <= 0xFF + + private fun isRunic(c: Char) = runicList.contains(c) + + private fun isExtA(c: Char) = c.toInt() >= 0x100 && c.toInt() < 0x180 + + private fun isKana(c: Char) = c.toInt() >= 0x3040 && c.toInt() < 0x3100 + + private fun isCJKPunct(c: Char) = c.toInt() >= 0x3000 && c.toInt() < 0x3040 + + private fun isUniHan(c: Char) = c.toInt() >= 0x3400 && c.toInt() < 0xA000 + + private fun isCyrilic(c: Char) = c.toInt() >= 0x400 && c.toInt() < 0x460 + + private fun isCyrilicEF(c: Char) = cyrilecEFList.contains(c) + + private fun isFullwidthUni(c: Char) = c.toInt() >= 0xFF00 && c.toInt() < 0xFF20 + + private fun isUniPunct(c: Char) = c.toInt() >= 0x2000 && c.toInt() < 0x2070 + + private fun isWenQuanYi1(c: Char) = c.toInt() >= 0x33F3 && c.toInt() <= 0x69FC + + private fun isWenQuanYi2(c: Char) = c.toInt() >= 0x69FD && c.toInt() <= 0x9FDC + + + + private fun asciiEFindexX(c: Char) = asciiEFList.indexOf(c) % 16 + private fun asciiEFindexY(c: Char) = asciiEFList.indexOf(c) / 16 + + private fun extAEFindexX(c: Char) = extAEFList.indexOf(c) % 16 + private fun extAEFindexY(c: Char) = extAEFList.indexOf(c) / 16 + + private fun runicIndexX(c: Char) = runicList.indexOf(c) % 16 + private fun runicIndexY(c: Char) = runicList.indexOf(c) / 16 + + private fun kanaIndexX(c: Char) = (c.toInt() - 0x3040) % 16 + private fun kanaIndexY(c: Char) = (c.toInt() - 0x3040) / 16 + + private fun cjkPunctIndexX(c: Char) = (c.toInt() - 0x3000) % 16 + private fun cjkPunctIndexY(c: Char) = (c.toInt() - 0x3000) / 16 + + private fun uniHanIndexX(c: Char) = (c.toInt() - 0x3400) % 256 + private fun uniHanIndexY(c: Char) = (c.toInt() - 0x3400) / 256 + + private fun cyrilicIndexX(c: Char) = (c.toInt() - 0x400) % 16 + private fun cyrilicIndexY(c: Char) = (c.toInt() - 0x400) / 16 + + private fun cyrilicEFindexX(c: Char) = cyrilecEFList.indexOf(c) % 16 + private fun cyrilicEFindexY(c: Char) = cyrilecEFList.indexOf(c) / 16 + + private fun fullwidthUniIndexX(c: Char) = (c.toInt() - 0xFF00) % 16 + private fun fullwidthUniIndexY(c: Char) = (c.toInt() - 0xFF00) / 16 + + private fun uniPunctIndexX(c: Char) = (c.toInt() - 0x2000) % 16 + private fun uniPunctIndexY(c: Char) = (c.toInt() - 0x2000) / 16 + + private fun wenQuanYiIndexX(c: Char) = + (c.toInt() - if (c.toInt() <= 0x4DB5) 0x33F3 else 0x33F3 + 0x4A) % 32 + private fun wenQuanYi1IndexY(c: Char) = (c.toInt() - (0x33F3 + 0x4A)) / 32 + private fun wenQuanYi2IndexY(c: Char) = (c.toInt() - 0x69FD) / 32 + + override fun getWidth(s: String) = getWidthSubstr(s, s.length) + + + private fun getWidthSubstr(s: String, endIndex: Int): Int { + var len = 0 + for (i in 0..endIndex - 1) { + val c = getSheetType(s[i]) + + if (i > 0 && s[i].toInt() > 0x20) { + // Kerning + val cpre = getSheetType(s[i - 1]) + if ((cpre == SHEET_UNIHAN || cpre == SHEET_HANGUL) && !(c == SHEET_UNIHAN || c == SHEET_HANGUL) + + || (c == SHEET_UNIHAN || c == SHEET_HANGUL) && !(cpre == SHEET_UNIHAN || cpre == SHEET_HANGUL)) { + // margin after/before hangul/unihan + len += 2 + } + else if ((c == SHEET_HANGUL || c == SHEET_KANA) && (cpre == SHEET_HANGUL || cpre == SHEET_KANA)) { + // margin between hangul/kana + len += 1 + } + + } + + if (c == SHEET_ASCII_EF || c == SHEET_EXTA_EF || c == SHEET_CYRILIC_EF) + len += W_LATIN_NARROW + else if (c == SHEET_KANA || c == SHEET_HANGUL || c == SHEET_CJK_PUNCT) + len += W_CJK + else if (c == SHEET_UNIHAN || c == SHEET_FW_UNI || c == SHEET_WENQUANYI_1 || c == SHEET_WENQUANYI_2) + len += W_UNIHAN + else + len += W_LATIN_WIDE + + if (i < endIndex - 1) len += interchar + } + return len + } + + override fun getHeight(s: String) = H + + override fun getLineHeight() = H + + override fun drawString(x: Float, y: Float, s: String) { + drawString(x, y, s, Color.white) + } + + override fun drawString(x: Float, y: Float, s: String, color: Color) { + // hangul fonts first + hangulSheet.startUse() + // JOHAB + for (i in 0..s.length - 1) { + val ch = s[i] + + if (isHangul(ch)) { + val hIndex = ch.toInt() - 0xAC00 + + val indexCho = getHanChosung(hIndex) + val indexJung = getHanJungseong(hIndex) + val indexJong = getHanJongseong(hIndex) + + val choRow = getHanChoseongRow(hIndex) + val jungRow = getHanJungseongRow(hIndex) + val jongRow = hanJongseongRow + + val glyphW = getWidth("" + ch) + + // chosung + hangulSheet.renderInUse( + Math.round(x + getWidthSubstr(s, i + 1) - glyphW), Math.round(((H - H_HANGUL) / 2).toFloat() + y + 1f), indexCho, choRow) + // jungseong + hangulSheet.renderInUse( + Math.round(x + getWidthSubstr(s, i + 1) - glyphW), Math.round(((H - H_HANGUL) / 2).toFloat() + y + 1f), indexJung, jungRow) + // jongseong + hangulSheet.renderInUse( + Math.round(x + getWidthSubstr(s, i + 1) - glyphW), Math.round(((H - H_HANGUL) / 2).toFloat() + y + 1f), indexJong, jongRow) + } + } + hangulSheet.endUse() + + // unihan fonts + /*uniHan.startUse(); + for (int i = 0; i < s.length(); i++) { + char ch = s.charAt(i); + + if (isUniHan(ch)) { + int glyphW = getWidth("" + ch); + uniHan.renderInUse( + Math.round(x + + getWidthSubstr(s, i + 1) - glyphW + ) + , Math.round((H - H_UNIHAN) / 2 + y) + , uniHanIndexX(ch) + , uniHanIndexY(ch) + ); + } + } + + uniHan.endUse();*/ + + // WenQuanYi 1 + wenQuanYi_1.startUse() + + for (i in 0..s.length - 1) { + val ch = s[i] + + if (isWenQuanYi1(ch)) { + val glyphW = getWidth("" + ch) + wenQuanYi_1.renderInUse( + Math.round(x + getWidthSubstr(s, i + 1) - glyphW), + Math.round((H - H_UNIHAN) / 2 + y), + wenQuanYiIndexX(ch), + wenQuanYi1IndexY(ch) + ) + } + } + + wenQuanYi_1.endUse() + wenQuanYi_2.startUse() + + for (i in 0..s.length - 1) { + val ch = s[i] + + if (isWenQuanYi2(ch)) { + val glyphW = getWidth("" + ch) + wenQuanYi_2.renderInUse( + Math.round(x + getWidthSubstr(s, i + 1) - glyphW), + Math.round((H - H_UNIHAN) / 2 + y), + wenQuanYiIndexX(ch), + wenQuanYi2IndexY(ch) + ) + } + } + + wenQuanYi_2.endUse() + + //ascii fonts + var prevInstance = -1 + for (i in 0..s.length - 1) { + val ch = s[i] + + if (!isHangul(ch) && !isUniHan(ch)) { + + // if not init, endUse first + if (prevInstance != -1) { + sheetKey[prevInstance].endUse() + } + sheetKey[getSheetType(ch)].startUse() + prevInstance = getSheetType(ch) + + val sheetX: Int + val sheetY: Int + when (prevInstance) { + SHEET_ASCII_EF -> { + sheetX = asciiEFindexX(ch) + sheetY = asciiEFindexY(ch) + } + SHEET_EXTA_EF -> { + sheetX = extAEFindexX(ch) + sheetY = extAEFindexY(ch) + } + SHEET_RUNIC -> { + sheetX = runicIndexX(ch) + sheetY = runicIndexY(ch) + } + SHEET_EXTA_EM -> { + sheetX = (ch.toInt() - 0x100) % 16 + sheetY = (ch.toInt() - 0x100) / 16 + } + SHEET_KANA -> { + sheetX = kanaIndexX(ch) + sheetY = kanaIndexY(ch) + } + SHEET_CJK_PUNCT -> { + sheetX = cjkPunctIndexX(ch) + sheetY = cjkPunctIndexY(ch) + } + SHEET_CYRILIC_EM -> { + sheetX = cyrilicIndexX(ch) + sheetY = cyrilicIndexY(ch) + } + SHEET_CYRILIC_EF -> { + sheetX = cyrilicEFindexX(ch) + sheetY = cyrilicEFindexY(ch) + } + SHEET_FW_UNI -> { + sheetX = fullwidthUniIndexX(ch) + sheetY = fullwidthUniIndexY(ch) + } + SHEET_UNI_PUNCT -> { + sheetX = uniPunctIndexX(ch) + sheetY = uniPunctIndexY(ch) + } + else -> { + sheetX = ch.toInt() % 16 + sheetY = ch.toInt() / 16 + } + } + + val glyphW = getWidth("" + ch) + sheetKey[prevInstance].renderInUse( + Math.round(x + getWidthSubstr(s, i + 1) - glyphW) // Interchar: pull punct right next to hangul to the left + + if (i > 0 && isHangul(s[i - 1])) -3 else 0, Math.round(y) + if (prevInstance == SHEET_CJK_PUNCT) + -1 + else if (prevInstance == SHEET_FW_UNI) (H - H_HANGUL) / 2 else 0, sheetX, sheetY) + + } + + } + if (prevInstance != -1) { + sheetKey[prevInstance].endUse() + } + } + + private fun getSheetType(c: Char): Int { + // EFs + if (isAsciiEF(c)) + return SHEET_ASCII_EF + else if (isExtAEF(c)) + return SHEET_EXTA_EF + else if (isCyrilicEF(c)) + return SHEET_CYRILIC_EF + else if (isRunic(c)) + return SHEET_RUNIC + else if (isHangul(c)) + return SHEET_HANGUL + else if (isKana(c)) + return SHEET_KANA + else if (isUniHan(c)) + return SHEET_UNIHAN + else if (isAscii(c)) + return SHEET_ASCII_EM + else if (isExtA(c)) + return SHEET_EXTA_EM + else if (isCyrilic(c)) + return SHEET_CYRILIC_EM + else if (isUniPunct(c)) + return SHEET_UNI_PUNCT + else if (isCJKPunct(c)) + return SHEET_CJK_PUNCT + else if (isFullwidthUni(c)) + return SHEET_FW_UNI + else + return SHEET_ASCII_EM// fixed width punctuations + // fixed width + // fallback + } + + /** + * Draw part of a string to the screen. Note that this will still position the text as though + * it's part of the bigger string. + * @param x + * * + * @param y + * * + * @param s + * * + * @param color + * * + * @param startIndex + * * + * @param endIndex + */ + override fun drawString(x: Float, y: Float, s: String, color: Color, startIndex: Int, endIndex: Int) { + val unprintedHead = s.substring(0, startIndex) + val printedBody = s.substring(startIndex, endIndex) + val xoff = getWidth(unprintedHead) + drawString(x + xoff, y, printedBody, color) + } + + @Throws(SlickException::class) + open fun reloadUnihan() { + + } + + /** + * Set margin between characters + * @param margin + */ + fun setInterchar(margin: Int) { + interchar = margin + } + + private fun setBlendModeMul() { + GL11.glEnable(GL11.GL_BLEND) + GL11.glBlendFunc(GL11.GL_DST_COLOR, GL11.GL_ONE_MINUS_SRC_ALPHA) + } + + private fun setBlendModeNormal() { + GL11.glDisable(GL11.GL_BLEND) + Terrarum.appgc.graphics.setDrawMode(Graphics.MODE_NORMAL) + } + + companion object { + + lateinit internal var hangulSheet: SpriteSheet + lateinit internal var asciiSheet: SpriteSheet + lateinit internal var asciiSheetEF: SpriteSheet + lateinit internal var runicSheet: SpriteSheet + lateinit internal var extASheet: SpriteSheet + lateinit internal var extASheetEF: SpriteSheet + lateinit internal var kanaSheet: SpriteSheet + lateinit internal var cjkPunct: SpriteSheet + // static SpriteSheet uniHan; + lateinit internal var cyrilic: SpriteSheet + lateinit internal var cyrilicEF: SpriteSheet + lateinit internal var fullwidthForms: SpriteSheet + lateinit internal var uniPunct: SpriteSheet + lateinit internal var wenQuanYi_1: SpriteSheet + lateinit internal var wenQuanYi_2: SpriteSheet + + internal val JUNG_COUNT = 21 + internal val JONG_COUNT = 28 + + internal val W_CJK = 10 + internal val W_UNIHAN = 16 + internal val W_LATIN_WIDE = 9 // width of regular letters, including m + internal val W_LATIN_NARROW = 5 // width of letter f, t, i, l + internal val H = 20 + internal val H_HANGUL = 16 + internal val H_UNIHAN = 16 + internal val H_KANA = 20 + + internal val SHEET_ASCII_EM = 0 + internal val SHEET_ASCII_EF = 1 + internal val SHEET_HANGUL = 2 + internal val SHEET_RUNIC = 3 + internal val SHEET_EXTA_EM = 4 + internal val SHEET_EXTA_EF = 5 + internal val SHEET_KANA = 6 + internal val SHEET_CJK_PUNCT = 7 + internal val SHEET_UNIHAN = 8 + internal val SHEET_CYRILIC_EM = 9 + internal val SHEET_CYRILIC_EF = 10 + internal val SHEET_FW_UNI = 11 + internal val SHEET_UNI_PUNCT = 12 + internal val SHEET_WENQUANYI_1 = 13 + internal val SHEET_WENQUANYI_2 = 14 + + lateinit internal var sheetKey: Array + internal val asciiEFList = arrayOf(' ', '!', '"', '\'', '(', ')', ',', '.', ':', ';', 'I', '[', ']', '`', 'f', 'i', 'j', 'l', 't', '{', '|', '}', 0xA1.toChar(), 'Ì', 'Í', 'Î', 'Ï', 'ì', 'í', 'î', 'ï', '·') + + internal val extAEFList = arrayOf( + 0x12E.toChar(), + 0x12F.toChar(), + 0x130.toChar(), + 0x131.toChar(), + 0x135.toChar(), + 0x13A.toChar(), + 0x13C.toChar(), + 0x142.toChar(), + 0x163.toChar(), + 0x167.toChar(), + 0x17F.toChar() + ) + + internal val cyrilecEFList = arrayOf( + 0x406.toChar(), + 0x407.toChar(), + 0x456.toChar(), + 0x457.toChar(), + 0x458.toChar() + ) + + /** + * Runic letters list used for game. The set is + * Younger Futhark + Medieval rune 'e' + Punct + Runic Almanac + + * BEWARE OF SIMILAR-LOOKING RUNES, especially: + + * * Algiz ᛉ instead of Maðr ᛘ + + * * Short-Twig Hagall ᚽ instead of Runic Letter E ᛂ + + * * Runic Letter OE ᚯ instead of Óss ᚬ + + * Examples: + * ᛭ᛋᛁᚴᚱᛁᚦᛦ᛭ + * ᛭ᛂᛚᛋᛅ᛭ᛏᚱᚢᛏᚾᛁᚾᚴᚢᚾᛅ᛬ᛅᚱᚾᛅᛏᛅᛚᛋ + */ + internal val runicList = arrayOf('ᚠ', 'ᚢ', 'ᚦ', 'ᚬ', 'ᚱ', 'ᚴ', 'ᚼ', 'ᚾ', 'ᛁ', 'ᛅ', 'ᛋ', 'ᛏ', 'ᛒ', 'ᛘ', 'ᛚ', 'ᛦ', 'ᛂ', '᛬', '᛫', '᛭', 'ᛮ', 'ᛯ', 'ᛰ') + + internal var interchar = 0 + } +} diff --git a/src/com/Torvald/ImageFont/GameFontWhite.java b/src/com/Torvald/ImageFont/GameFontWhite.java deleted file mode 100644 index e8ad5d55d..000000000 --- a/src/com/Torvald/ImageFont/GameFontWhite.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.Torvald.ImageFont; - -import com.Torvald.Terrarum.Terrarum; -import org.newdawn.slick.*; - -/** - * Created by minjaesong on 16-01-20. - */ -public class GameFontWhite extends GameFontBase { - - public GameFontWhite() throws SlickException { - super(); - - hangulSheet = new SpriteSheet( - "./res/graphics/fonts/han_johab.png" - , W_CJK, H_HANGUL - ); - asciiSheet = new SpriteSheet( - "./res/graphics/fonts/ascii_majuscule.png" - , W_LATIN_WIDE, H - ); - asciiSheetEF = new SpriteSheet( - "./res/graphics/fonts/ascii_special_ef.png" - , W_LATIN_NARROW, H - ); - runicSheet = new SpriteSheet( - "./res/graphics/fonts/futhark.png" - , W_LATIN_WIDE, H - ); - extASheet = new SpriteSheet( - "./res/graphics/fonts/LatinExtA_majuscule.png" - , W_LATIN_WIDE, H - ); - extASheetEF = new SpriteSheet( - "./res/graphics/fonts/LatinExtA_ef.png" - , W_LATIN_NARROW, H - ); - kanaSheet = new SpriteSheet( - "./res/graphics/fonts/kana.png" - , W_CJK, H_KANA - ); - cjkPunct = new SpriteSheet( - "./res/graphics/fonts/cjkpunct.png" - , W_CJK, H_KANA - ); - /*uniHan = new SpriteSheet( - "./res/graphics/fonts/unifont_unihan" - + ((!Terrarum.gameLocale.contains("zh")) - ? "_ja" : "") - +".png" - , W_UNIHAN, H_UNIHAN - );*/ - cyrilic = new SpriteSheet( - "./res/graphics/fonts/cyrilic_majuscule.png" - , W_LATIN_WIDE, H - ); - cyrilicEF = new SpriteSheet( - "./res/graphics/fonts/cyrilic_ef.png" - , W_LATIN_NARROW, H - ); - fullwidthForms = new SpriteSheet( - "./res/graphics/fonts/fullwidth_forms.png" - , W_UNIHAN, H_UNIHAN - ); - uniPunct = new SpriteSheet( - "./res/graphics/fonts/unipunct.png" - , W_LATIN_WIDE, H - ); - wenQuanYi_1 = new SpriteSheet( - "./res/graphics/fonts/wenquanyi_11pt_part1.png" - , 16, 18, 2 - ); - wenQuanYi_2 = new SpriteSheet( - "./res/graphics/fonts/wenquanyi_11pt_part2.png" - , 16, 18, 2 - ); - - SpriteSheet[] shk = { - asciiSheet - , asciiSheetEF - , hangulSheet - , runicSheet - , extASheet - , extASheetEF - , kanaSheet - , cjkPunct - //, uniHan - , null - , cyrilic - , cyrilicEF - , fullwidthForms - , uniPunct - , wenQuanYi_1 - , wenQuanYi_2 - }; - sheetKey = shk; - } - - @Override - public void reloadUnihan() throws SlickException { - /*uniHan = new SpriteSheet( - "./res/graphics/fonts/unifont_unihan" - + ((!Terrarum.gameLocale.contains("zh")) - ? "_ja" : "") - +".png" - , W_UNIHAN, H_UNIHAN - );*/ - } -} diff --git a/src/com/Torvald/ImageFont/GameFontWhite.kt b/src/com/Torvald/ImageFont/GameFontWhite.kt new file mode 100644 index 000000000..65270bbf8 --- /dev/null +++ b/src/com/Torvald/ImageFont/GameFontWhite.kt @@ -0,0 +1,79 @@ +package com.Torvald.ImageFont + +import com.Torvald.Terrarum.Terrarum +import org.newdawn.slick.* + +/** + * Created by minjaesong on 16-01-20. + */ +class GameFontWhite @Throws(SlickException::class) +constructor() : GameFontBase() { + + init { + + GameFontBase.hangulSheet = SpriteSheet( + "./res/graphics/fonts/han_johab.png", GameFontBase.W_CJK, GameFontBase.H_HANGUL) + GameFontBase.asciiSheet = SpriteSheet( + "./res/graphics/fonts/ascii_majuscule.png", GameFontBase.W_LATIN_WIDE, GameFontBase.H) + GameFontBase.asciiSheetEF = SpriteSheet( + "./res/graphics/fonts/ascii_special_ef.png", GameFontBase.W_LATIN_NARROW, GameFontBase.H) + GameFontBase.runicSheet = SpriteSheet( + "./res/graphics/fonts/futhark.png", GameFontBase.W_LATIN_WIDE, GameFontBase.H) + GameFontBase.extASheet = SpriteSheet( + "./res/graphics/fonts/LatinExtA_majuscule.png", GameFontBase.W_LATIN_WIDE, GameFontBase.H) + GameFontBase.extASheetEF = SpriteSheet( + "./res/graphics/fonts/LatinExtA_ef.png", GameFontBase.W_LATIN_NARROW, GameFontBase.H) + GameFontBase.kanaSheet = SpriteSheet( + "./res/graphics/fonts/kana.png", GameFontBase.W_CJK, GameFontBase.H_KANA) + GameFontBase.cjkPunct = SpriteSheet( + "./res/graphics/fonts/cjkpunct.png", GameFontBase.W_CJK, GameFontBase.H_KANA) + /*uniHan = new SpriteSheet( + "./res/graphics/fonts/unifont_unihan" + + ((!Terrarum.gameLocale.contains("zh")) + ? "_ja" : "") + +".png" + , W_UNIHAN, H_UNIHAN + );*/ + GameFontBase.cyrilic = SpriteSheet( + "./res/graphics/fonts/cyrilic_majuscule.png", GameFontBase.W_LATIN_WIDE, GameFontBase.H) + GameFontBase.cyrilicEF = SpriteSheet( + "./res/graphics/fonts/cyrilic_ef.png", GameFontBase.W_LATIN_NARROW, GameFontBase.H) + GameFontBase.fullwidthForms = SpriteSheet( + "./res/graphics/fonts/fullwidth_forms.png", GameFontBase.W_UNIHAN, GameFontBase.H_UNIHAN) + GameFontBase.uniPunct = SpriteSheet( + "./res/graphics/fonts/unipunct.png", GameFontBase.W_LATIN_WIDE, GameFontBase.H) + GameFontBase.wenQuanYi_1 = SpriteSheet( + "./res/graphics/fonts/wenquanyi_11pt_part1.png", 16, 18, 2) + GameFontBase.wenQuanYi_2 = SpriteSheet( + "./res/graphics/fonts/wenquanyi_11pt_part2.png", 16, 18, 2) + + val shk = arrayOf( + GameFontBase.asciiSheet, + GameFontBase.asciiSheetEF, + GameFontBase.hangulSheet, + GameFontBase.runicSheet, + GameFontBase.extASheet, + GameFontBase.extASheetEF, + GameFontBase.kanaSheet, + GameFontBase.cjkPunct, + GameFontBase.asciiSheet, // Filler + GameFontBase.cyrilic, + GameFontBase.cyrilicEF, + GameFontBase.fullwidthForms, + GameFontBase.uniPunct, + GameFontBase.wenQuanYi_1, + GameFontBase.wenQuanYi_2)//, uniHan + GameFontBase.sheetKey = shk + } + + @Throws(SlickException::class) + override fun reloadUnihan() { + /*uniHan = new SpriteSheet( + "./res/graphics/fonts/unifont_unihan" + + ((!Terrarum.gameLocale.contains("zh")) + ? "_ja" : "") + +".png" + , W_UNIHAN, H_UNIHAN + );*/ + } +} diff --git a/src/com/Torvald/JsonFetcher.java b/src/com/Torvald/JsonFetcher.java deleted file mode 100644 index c8829538a..000000000 --- a/src/com/Torvald/JsonFetcher.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.Torvald; - -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; - -import java.io.IOException; -import java.nio.file.FileSystems; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.Iterator; - -/** - * Created by minjaesong on 16-02-15. - */ -public class JsonFetcher { - - private static StringBuffer jsonString; - - public static JsonObject readJson(String jsonFilePath) throws IOException { - jsonString = new StringBuffer(); // reset buffer every time it called - readJsonFileAsString(jsonFilePath); - - JsonParser jsonParser = new JsonParser(); - JsonObject jsonObj = jsonParser.parse(jsonString.toString()).getAsJsonObject(); - - return jsonObj; - } - - public static ArrayList readJsonAsString(String jsonFilePath) throws IOException { - ArrayList jsonFileLines = new ArrayList<>(); - Files.lines( - FileSystems.getDefault().getPath(jsonFilePath) - ).forEach(jsonFileLines::add); - return jsonFileLines; - } - - private static void readJsonFileAsString(String path) throws IOException { - Files.lines( - FileSystems.getDefault().getPath(path) - ).forEach(jsonString::append); // JSON does not require line break - } -} diff --git a/src/com/Torvald/JsonFetcher.kt b/src/com/Torvald/JsonFetcher.kt new file mode 100644 index 000000000..5249ed84a --- /dev/null +++ b/src/com/Torvald/JsonFetcher.kt @@ -0,0 +1,36 @@ +package com.Torvald + +import com.google.gson.JsonObject +import com.google.gson.JsonParser + +import java.io.IOException +import java.nio.file.FileSystems +import java.nio.file.Files +import java.util.ArrayList +import java.util.function.Consumer + +/** + * Created by minjaesong on 16-02-15. + */ +object JsonFetcher { + + private var jsonString: StringBuffer? = null + + @Throws(IOException::class) + fun readJson(jsonFilePath: String): JsonObject { + jsonString = StringBuffer() // reset buffer every time it called + readJsonFileAsString(jsonFilePath) + + val jsonParser = JsonParser() + val jsonObj = jsonParser.parse(jsonString!!.toString()).asJsonObject + + return jsonObj + } + + @Throws(IOException::class) + private fun readJsonFileAsString(path: String) { + Files.lines(FileSystems.getDefault().getPath(path)).forEach( + { jsonString!!.append(it) } + ) // JSON does not require line break + } +} diff --git a/src/com/Torvald/JsonWriter.java b/src/com/Torvald/JsonWriter.java deleted file mode 100644 index a580938ff..000000000 --- a/src/com/Torvald/JsonWriter.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.Torvald; - -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -import java.io.FileWriter; -import java.io.IOException; - -/** - * Created by minjaesong on 16-03-04. - */ -public class JsonWriter { - - public static void writeToFile(Object c, String path) throws IOException { - JsonElement classElem = new Gson().toJsonTree(c); - String jsonString = classElem.toString(); - FileWriter writer = new FileWriter(path); - writer.write(jsonString); - writer.close(); - } - - public static void writeToFile(JsonObject jsonObject, String path) throws IOException { - FileWriter writer = new FileWriter(path); - writer.write(jsonObject.toString()); - writer.close(); - } - -} diff --git a/src/com/Torvald/JsonWriter.kt b/src/com/Torvald/JsonWriter.kt new file mode 100644 index 000000000..52563b523 --- /dev/null +++ b/src/com/Torvald/JsonWriter.kt @@ -0,0 +1,31 @@ +package com.Torvald + +import com.google.gson.Gson +import com.google.gson.JsonElement +import com.google.gson.JsonObject + +import java.io.FileWriter +import java.io.IOException + +/** + * Created by minjaesong on 16-03-04. + */ +object JsonWriter { + + @Throws(IOException::class) + fun writeToFile(c: Any, path: String) { + val classElem = Gson().toJsonTree(c) + val jsonString = classElem.toString() + val writer = FileWriter(path) + writer.write(jsonString) + writer.close() + } + + @Throws(IOException::class) + fun writeToFile(jsonObject: JsonObject, path: String) { + val writer = FileWriter(path) + writer.write(jsonObject.toString()) + writer.close() + } + +} diff --git a/src/com/Torvald/Rand/Fudge3.java b/src/com/Torvald/Rand/Fudge3.java deleted file mode 100644 index 115da3334..000000000 --- a/src/com/Torvald/Rand/Fudge3.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.Torvald.Rand; - -import java.util.Random; - -/** - * Created by minjaesong on 16-02-03. - */ -public class Fudge3 extends FudgeDice { - - /** - * Define new set of fudge dice with three dice. - * @param randfunc java.util.Random or its extension - */ - public Fudge3(Random randfunc) { - super(randfunc, 3); - } - - -} diff --git a/src/com/Torvald/Rand/Fudge3.kt b/src/com/Torvald/Rand/Fudge3.kt new file mode 100644 index 000000000..a2a2ab060 --- /dev/null +++ b/src/com/Torvald/Rand/Fudge3.kt @@ -0,0 +1,13 @@ +package com.Torvald.Rand + +import java.util.Random + +/** + * Created by minjaesong on 16-02-03. + */ +class Fudge3 +/** + * Define new set of fudge dice with three dice. + * @param randfunc java.util.Random or its extension + */ +(randfunc: Random) : FudgeDice(randfunc, 3) diff --git a/src/com/Torvald/Rand/FudgeDice.java b/src/com/Torvald/Rand/FudgeDice.java deleted file mode 100644 index c45fe477b..000000000 --- a/src/com/Torvald/Rand/FudgeDice.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.Torvald.Rand; - -import java.util.Random; - -/** - * Created by minjaesong on 16-02-03. - */ -public class FudgeDice { - - private Random randfunc; - private int diceCounts; - - /** - * Define new set of fudge dice with given counts. - * @param randfunc java.util.Random or its extension - * @param counts amount of die - */ - public FudgeDice(Random randfunc, int counts) { - this.randfunc = randfunc; - diceCounts = counts; - } - - /** - * Roll dice and get result. - * @return Normal distributed integer [-N , N] for diceCount of N. 0 is the most frequent return. - */ - public int roll() { - int diceResult = 0; - for (int c = 0; c < diceCounts; c++) { - diceResult += rollSingleDie(); - } - - return diceResult; - } - - /** - * Roll dice and get result, for array index - * @return Normal distributed integer [0 , N] for N = 2 × DiceCounts + 1. 0 is the most frequent return. - */ - public int rollForArray() { - return roll() + diceCounts; - } - - public int getDiceCounts() { - return diceCounts; - } - - public int getSizeOfProbabilityRange() { - return 2 * diceCounts + 1; - } - - /** - * @return integer randomly picked from {-1, 0, 1} - */ - private int rollSingleDie() { - return (randfunc.nextInt(3)) - 1; - } -} diff --git a/src/com/Torvald/Rand/FudgeDice.kt b/src/com/Torvald/Rand/FudgeDice.kt new file mode 100644 index 000000000..7ac5a2704 --- /dev/null +++ b/src/com/Torvald/Rand/FudgeDice.kt @@ -0,0 +1,47 @@ +package com.Torvald.Rand + +import java.util.Random + +/** + * Created by minjaesong on 16-02-03. + */ +open class FudgeDice +/** + * Define new set of fudge dice with given counts. + * @param randfunc java.util.Random or its extension + * * + * @param counts amount of die + */ +(private val randfunc: Random, val diceCounts: Int) { + + /** + * Roll dice and get result. + * @return Normal distributed integer [-N , N] for diceCount of N. 0 is the most frequent return. + */ + fun roll(): Int { + var diceResult = 0 + for (c in 0..diceCounts - 1) { + diceResult += rollSingleDie() + } + + return diceResult + } + + /** + * Roll dice and get result, for array index + * @return Normal distributed integer [0 , N] for N = 2 × DiceCounts + 1. 0 is the most frequent return. + */ + fun rollForArray(): Int { + return roll() + diceCounts + } + + val sizeOfProbabilityRange: Int + get() = 2 * diceCounts + 1 + + /** + * @return integer randomly picked from {-1, 0, 1} + */ + private fun rollSingleDie(): Int { + return randfunc.nextInt(3) - 1 + } +} diff --git a/src/com/Torvald/RasterWriter.java b/src/com/Torvald/RasterWriter.java deleted file mode 100644 index d861dedd1..000000000 --- a/src/com/Torvald/RasterWriter.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.Torvald; - -import com.Torvald.Terrarum.Terrarum; - -import javax.imageio.ImageIO; -import java.awt.*; -import java.awt.color.ColorSpace; -import java.awt.image.*; -import java.io.File; -import java.io.IOException; - -/** - * Created by minjaesong on 16-03-04. - */ -public class RasterWriter { - - public static final int[] BANDOFFSET_RGB = {0, 1, 2}; - public static final int[] BANDOFFSET_RGBA = {0, 1, 2, 3}; - public static final int[] BANDOFFSET_ARGB = {3, 0, 1, 2}; - public static final int[] BANDOFFSET_MONO = {0}; - - public static final int COLORSPACE_SRGB = ColorSpace.CS_sRGB; - public static final int COLORSPACE_GRAY = ColorSpace.CS_GRAY; - public static final int COLORSPACE_GREY = COLORSPACE_GRAY; - public static final int COLORSPACE_CIEXYZ = ColorSpace.CS_CIEXYZ; - public static final int COLORSPACE_RGB_LINEAR_GAMMA = ColorSpace.CS_LINEAR_RGB; - - public static void writePNG_RGB(int w, int h, byte[] rasterData, String path) throws IOException { - writePNG(w, h, rasterData, BANDOFFSET_RGB, COLORSPACE_SRGB, path); - } - - public static void writePNG_Mono(int w, int h, byte[] rasterData, String path) throws IOException { - writePNG(w, h, rasterData, BANDOFFSET_MONO, COLORSPACE_GREY, path); - } - - public static void writePNG(int w, int h, byte[] rasterData, int[] bandOffsets, int awt_colorspace, String path) throws IOException { - DataBuffer buffer = new DataBufferByte(rasterData, rasterData.length); - WritableRaster raster = Raster.createInterleavedRaster( - buffer - , w - , h - , bandOffsets.length * w - , bandOffsets.length - , bandOffsets - , null - ); - - ColorModel colorModel = new ComponentColorModel(ColorSpace.getInstance(awt_colorspace), false, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); - - BufferedImage image = new BufferedImage(colorModel, raster, colorModel.isAlphaPremultiplied(), null); - - ImageIO.write(image, "PNG", new File(path)); - } - -} diff --git a/src/com/Torvald/RasterWriter.kt b/src/com/Torvald/RasterWriter.kt new file mode 100644 index 000000000..182399e14 --- /dev/null +++ b/src/com/Torvald/RasterWriter.kt @@ -0,0 +1,51 @@ +package com.Torvald + +import com.Torvald.Terrarum.Terrarum + +import javax.imageio.ImageIO +import java.awt.* +import java.awt.color.ColorSpace +import java.awt.image.* +import java.io.File +import java.io.IOException + +/** + * Created by minjaesong on 16-03-04. + */ +object RasterWriter { + + val BANDOFFSET_RGB = intArrayOf(0, 1, 2) + val BANDOFFSET_RGBA = intArrayOf(0, 1, 2, 3) + val BANDOFFSET_ARGB = intArrayOf(3, 0, 1, 2) + val BANDOFFSET_MONO = intArrayOf(0) + + val COLORSPACE_SRGB = ColorSpace.CS_sRGB + val COLORSPACE_GRAY = ColorSpace.CS_GRAY + val COLORSPACE_GREY = COLORSPACE_GRAY + val COLORSPACE_CIEXYZ = ColorSpace.CS_CIEXYZ + val COLORSPACE_RGB_LINEAR_GAMMA = ColorSpace.CS_LINEAR_RGB + + @Throws(IOException::class) + fun writePNG_RGB(w: Int, h: Int, rasterData: ByteArray, path: String) { + writePNG(w, h, rasterData, BANDOFFSET_RGB, COLORSPACE_SRGB, path) + } + + @Throws(IOException::class) + fun writePNG_Mono(w: Int, h: Int, rasterData: ByteArray, path: String) { + writePNG(w, h, rasterData, BANDOFFSET_MONO, COLORSPACE_GREY, path) + } + + @Throws(IOException::class) + fun writePNG(w: Int, h: Int, rasterData: ByteArray, bandOffsets: IntArray, awt_colorspace: Int, path: String) { + val buffer = DataBufferByte(rasterData, rasterData.size) + val raster = Raster.createInterleavedRaster( + buffer, w, h, bandOffsets.size * w, bandOffsets.size, bandOffsets, null) + + val colorModel = ComponentColorModel(ColorSpace.getInstance(awt_colorspace), false, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE) + + val image = BufferedImage(colorModel, raster, colorModel.isAlphaPremultiplied, null) + + ImageIO.write(image, "PNG", File(path)) + } + +} diff --git a/src/com/Torvald/Serialise/WriteCSV.kt b/src/com/Torvald/Serialise/WriteCSV.kt new file mode 100644 index 000000000..8eafa130d --- /dev/null +++ b/src/com/Torvald/Serialise/WriteCSV.kt @@ -0,0 +1,65 @@ +package com.Torvald.Serialise + +import com.Torvald.CSVFetcher +import com.Torvald.Terrarum.ItemProperties.ItemPropCodex +import com.Torvald.Terrarum.ItemProperties.MaterialPropCodex +import com.Torvald.Terrarum.Terrarum +import com.Torvald.Terrarum.TileProperties.TilePropCodex +import java.io.IOException +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.Paths +import java.nio.file.StandardCopyOption + +/** + * Created by minjaesong on 16-03-18. + */ +object WriteCSV { + val META_FILENAME_TILE = "worldinfo2" + val META_FILENAME_ITEM = "worldinfo3" + val META_FILENAME_MAT = "worldinfo4" + + fun write(saveDirectoryName: String): Boolean { + val tileCSV = CSVFetcher.readCSVasString(TilePropCodex.CSV_PATH) + val itemCSV = CSVFetcher.readCSVasString(ItemPropCodex.CSV_PATH) + val matCSV = CSVFetcher.readCSVasString(MaterialPropCodex.CSV_PATH) + + val pathTile = Paths.get("${Terrarum.defaultSaveDir}" + + "/$saveDirectoryName/${META_FILENAME_TILE}") + val pathItem = Paths.get("${Terrarum.defaultSaveDir}" + + "/$saveDirectoryName/${META_FILENAME_ITEM}") + val pathMat = Paths.get("${Terrarum.defaultSaveDir}" + + "/$saveDirectoryName/${META_FILENAME_MAT}") + val tempPathTile = Files.createTempFile(pathTile.toString(), "_temp") + val tempPathItem = Files.createTempFile(pathItem.toString(), "_temp") + val tempPathMat = Files.createTempFile(pathMat.toString(), "_temp") + + // TODO gzip + + // write CSV to path + Files.write(tempPathTile, tileCSV.toByteArray(Charsets.UTF_8)) + Files.write(tempPathItem, itemCSV.toByteArray(Charsets.UTF_8)) + Files.write(tempPathMat, matCSV.toByteArray(Charsets.UTF_8)) + + // replace savemeta with tempfile + try { + Files.copy(tempPathTile, pathTile, StandardCopyOption.REPLACE_EXISTING) + Files.deleteIfExists(tempPathTile) + + Files.copy(tempPathItem, pathItem, StandardCopyOption.REPLACE_EXISTING) + Files.deleteIfExists(tempPathItem) + + Files.copy(tempPathMat, pathMat, StandardCopyOption.REPLACE_EXISTING) + Files.deleteIfExists(tempPathMat) + + println("Saved map data '${WriteGameMapData.META_FILENAME}' to $saveDirectoryName.") + + return true + } + catch (e: IOException) { + e.printStackTrace() + } + return false + } + +} \ No newline at end of file diff --git a/src/com/Torvald/Serialise/WriteGameMapData.kt b/src/com/Torvald/Serialise/WriteGameMapData.kt new file mode 100644 index 000000000..9a41b8563 --- /dev/null +++ b/src/com/Torvald/Serialise/WriteGameMapData.kt @@ -0,0 +1,79 @@ +package com.Torvald.Serialise + +import com.Torvald.Terrarum.GameMap.GameMap +import com.Torvald.Terrarum.Terrarum +import java.io.IOException +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.Paths +import java.nio.file.StandardCopyOption + +/** + * Created by minjaesong on 16-03-18. + */ +object WriteGameMapData { + + val META_FILENAME = "worldinfo1" + + val MAGIC: ByteArray = byteArrayOf( + 'T'.toByte(), + 'E'.toByte(), + 'M'.toByte(), + 'D'.toByte() + ) + + val BYTE_NULL: Byte = 0 + + + fun write(saveDirectoryName: String): Boolean { + val path = Paths.get("${Terrarum.defaultSaveDir}" + + "/$saveDirectoryName/${WriteMeta.META_FILENAME}") + val tempPath = Files.createTempFile(path.toString(), "_temp") + val map = Terrarum.game.map + + // TODO gzip + + // write binary + Files.write(tempPath, MAGIC) + Files.write(tempPath, byteArrayOf(GameMap.BITS)) + Files.write(tempPath, byteArrayOf(GameMap.LAYERS)) + Files.write(tempPath, byteArrayOf(BYTE_NULL)) + Files.write(tempPath, byteArrayOf(BYTE_NULL)) + Files.write(tempPath, toByteArray(map.width)) + Files.write(tempPath, toByteArray(map.height)) + Files.write(tempPath, toByteArray(map.spawnX)) + Files.write(tempPath, toByteArray(map.spawnY)) + map.layerTerrain.forEach( + {b -> Files.write(tempPath, byteArrayOf(b))}) + map.layerWall.forEach( + {b -> Files.write(tempPath, byteArrayOf(b))}) + map.terrainDamage.forEach( + {b -> Files.write(tempPath, byteArrayOf(b))}) + map.wallDamage.forEach( + {b -> Files.write(tempPath, byteArrayOf(b))}) + map.layerWire.forEach( + {b -> Files.write(tempPath, byteArrayOf(b))}) + + // replace savemeta with tempfile + try { + Files.copy(tempPath, path, StandardCopyOption.REPLACE_EXISTING) + Files.deleteIfExists(tempPath) + println("Saved map data '$META_FILENAME' to $saveDirectoryName.") + + return true + } + catch (e: IOException) { + e.printStackTrace() + } + return false + } + + fun toByteArray(int: Int): ByteArray { + return byteArrayOf( + ((int ushr 0x18) and 0xFF).toByte(), + ((int ushr 0x10) and 0xFF).toByte(), + ((int ushr 0x08) and 0xFF).toByte(), + ((int ) and 0xFF).toByte() + ) + } +} \ No newline at end of file diff --git a/src/com/Torvald/Serialise/WriteMeta.kt b/src/com/Torvald/Serialise/WriteMeta.kt index c44c3f045..f5af48c4e 100644 --- a/src/com/Torvald/Serialise/WriteMeta.kt +++ b/src/com/Torvald/Serialise/WriteMeta.kt @@ -2,10 +2,13 @@ package com.Torvald.Serialise import com.Torvald.Terrarum.MapGenerator.MapGenerator import com.Torvald.Terrarum.MapGenerator.RoguelikeRandomiser +import com.Torvald.Terrarum.Terrarum import com.Torvald.Terrarum.TileProperties.TilePropCodex import org.apache.commons.codec.digest.DigestUtils import java.io.FileInputStream import java.io.File +import java.io.IOException +import java.nio.file.* import java.util.* /** @@ -13,19 +16,31 @@ import java.util.* */ object WriteMeta { - val MAGIC: Array = arrayOf( - 'T'.toByte() - , 'E'.toByte() - , 'S'.toByte() - , 'V'.toByte() + val META_FILENAME = "world" + + val MAGIC: ByteArray = byteArrayOf( + 'T'.toByte(), + 'E'.toByte(), + 'S'.toByte(), + 'V'.toByte() ) + val BYTE_NULL: Byte = 0 + val terraseed: Long = MapGenerator.getGeneratorSeed() val rogueseed: Long = RoguelikeRandomiser.getGeneratorSeed() - fun write() { - var hashArray: ArrayList = ArrayList() + /** + * Write save meta to specified directory. Returns false if something went wrong. + * @param saveDirectoryName + * @param savegameName -- Nullable. If the value is not specified, saveDirectoryName will be used instead. + */ + fun write(saveDirectoryName: String, savegameName: String?): Boolean { + val hashArray: ArrayList = ArrayList() + val savenameAsByteArray: ByteArray = + (savegameName ?: saveDirectoryName).toByteArray(Charsets.UTF_8) + // define files to get hash val fileArray: Array = arrayOf( File(TilePropCodex.CSV_PATH) //, File(ItemPropCodex.CSV_PATH) @@ -33,11 +48,54 @@ object WriteMeta { //, ) + // get and store hash from fileArray for (file in fileArray) { val inputStream = FileInputStream(file) val hash = DigestUtils.sha256(inputStream) hashArray.add(hash) } + + // open file and delete it + val metaPath = Paths.get("${Terrarum.defaultSaveDir}" + + "/$saveDirectoryName/$META_FILENAME") + val metaTempPath = Files.createTempFile(metaPath.toString(), "_temp") + + // TODO gzip + + // write bytes in tempfile + Files.write(metaTempPath, MAGIC) + Files.write(metaTempPath, savenameAsByteArray) + Files.write(metaTempPath, byteArrayOf(BYTE_NULL)) + Files.write(metaTempPath, toByteArray(terraseed)) + Files.write(metaTempPath, toByteArray(rogueseed)) + for (hash in hashArray) + Files.write(metaTempPath, hash) + + // replace savemeta with tempfile + try { + Files.copy(metaTempPath, metaPath, StandardCopyOption.REPLACE_EXISTING) + Files.deleteIfExists(metaTempPath) + println("Saved metadata to $saveDirectoryName.") + + return true + } + catch (e: IOException) { + e.printStackTrace() + } + return false + } + + fun toByteArray(long: Long): ByteArray { + return byteArrayOf( + ((long ushr 0x38) and 0xFF).toByte(), + ((long ushr 0x30) and 0xFF).toByte(), + ((long ushr 0x28) and 0xFF).toByte(), + ((long ushr 0x20) and 0xFF).toByte(), + ((long ushr 0x18) and 0xFF).toByte(), + ((long ushr 0x10) and 0xFF).toByte(), + ((long ushr 0x08) and 0xFF).toByte(), + ((long ) and 0xFF).toByte() + ) } } \ No newline at end of file diff --git a/src/com/Torvald/SimpleCipher/ROTUtil.kt b/src/com/Torvald/SimpleCipher/ROTUtil.kt new file mode 100644 index 000000000..89316d54c --- /dev/null +++ b/src/com/Torvald/SimpleCipher/ROTUtil.kt @@ -0,0 +1,77 @@ +package com.Torvald.SimpleCipher + +/** + * Created by minjaesong on 16-03-20. + */ +object ROTUtil { + + const val CODE_CAP_A = 'A'.toInt() + const val CODE_LOW_A = 'a'.toInt() + + /** + * ROT encryption, default setting + * + * * Latin alph: removes diacritics and do ROT13, string reverse, capitalised. + * Ligatures are disassembled. Even if the target language does not have + * certain alphabet (e.g. C in Icelandic), such alphabet will be printed anyway. + * + * * Cyrillic: removes diacritics and do ROTnn, string reverse, capitalised. + * + * * Kana: raise Sutegana, ROT3 on vowels (a i u e o -> e o a i u), string reverse + * (Wa Wo -> Wo Wa), Nn will remain untouched, forced Katakana. + * + * * Hangul: ROT3 on initials\*, lower double initials to single + * (ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ -> ㄹ ㄹ ㅁ ㅂ ㅂ ㅅ ㅇ ㅇ ㅈ ㅈ ㅊ ㅋ ㅋ ㅌ ㅍ ㅎ ㄱ ㄴ ㄷ), + * string reverse + * + * * Chinese: NOT SUPPORTED + * + * * Numeric: no encrypt + */ + fun encrypt(plaintext: String): String { + + fun removeDiacritics(c: Char): Char { + val normaliseMap = hashMapOf( + Pair('À', "A"), + Pair('Á', "A"), + Pair('Â', "A"), + Pair('À', "A"), + Pair('Ã', "A"), + Pair('Å', "A"), + Pair('Æ', "AE"), + Pair('Ç', "C"), + Pair('È', "E"), + Pair('É', "E"), + Pair('Ê', "E"), + Pair('Ë', "E"), + Pair('Ì', "I"), + Pair('Í', "I"), + Pair('Î', "I"), + Pair('Ï', "I"), + Pair('Ð', "D") + ) + throw NotImplementedError("Feature WIP") + } + + throw NotImplementedError("Feature WIP") + } + + /** + * Note; range starts with zero + * @param number to rotate + * @param rotation + * @param range size of the rotation table. 4 means (0,1,2,3) + */ + fun rotN(number: Int, rotation: Int, range: Int): Int { + return if (number < range - rotation + 1) number + rotation + else number - (range - rotation + 1) + } + + fun rot13(c: Char): Char { + return if (c in 'a'..'z') + (rotN((c.toInt() - CODE_LOW_A), 13, 26) + CODE_LOW_A).toChar() + else if (c in 'A'..'Z') + (rotN((c.toInt() - CODE_CAP_A), 13, 26) + CODE_CAP_A).toChar() + else c + } +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/Actors/ActorInventory.kt b/src/com/Torvald/Terrarum/Actors/ActorInventory.kt index 889b364e1..72b3f52c9 100644 --- a/src/com/Torvald/Terrarum/Actors/ActorInventory.kt +++ b/src/com/Torvald/Terrarum/Actors/ActorInventory.kt @@ -1,14 +1,14 @@ package com.Torvald.Terrarum.Actors import com.Torvald.Terrarum.GameItem.InventoryItem -import com.Torvald.Terrarum.GameItem.ItemPropCodex +import com.Torvald.Terrarum.ItemProperties.ItemPropCodex import java.util.* /** * Created by minjaesong on 16-03-15. */ -class ActorInventory { +class ActorInventory() { @Transient val CAPACITY_MAX = 0x7FFFFFFF @Transient val CAPACITY_MODE_NO_ENCUMBER = 0 @@ -16,22 +16,31 @@ class ActorInventory { @Transient val CAPACITY_MODE_WEIGHT = 2 - private var capacityByCount: Int = 0 - private var capacityByWeight: Int = 0 - private var capacityMode: Int = 0 + private var capacityByCount: Int + private var capacityByWeight: Int + private var capacityMode: Int /** * <ReferenceID, Amounts> */ private val itemList: HashMap = HashMap() + /** + * Default constructor with no encumbrance. + */ + init { + capacityMode = CAPACITY_MODE_NO_ENCUMBER + capacityByCount = 0 + capacityByWeight = 0 + } + /** * Construct new inventory with specified capacity. * @param capacity if is_weight is true, killogramme value is required, counts of items otherwise. * * * @param is_weight whether encumbrance should be calculated upon the weight of the inventory. False to use item counts. */ - constructor(capacity: Int, is_weight: Boolean) { + constructor(capacity: Int, is_weight: Boolean) : this() { if (is_weight) { capacityByWeight = capacity capacityMode = CAPACITY_MODE_WEIGHT @@ -81,7 +90,7 @@ class ActorInventory { var weight = 0f for (item in itemList.entries) { - weight += ItemPropCodex.getItem(item.key).weight * item.value + weight += ItemPropCodex.getItem(item.key).mass * item.value } return weight diff --git a/src/com/Torvald/Terrarum/Actors/ActorValue.java b/src/com/Torvald/Terrarum/Actors/ActorValue.java deleted file mode 100644 index 9b8640b24..000000000 --- a/src/com/Torvald/Terrarum/Actors/ActorValue.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.Torvald.Terrarum.Actors; - -import com.Torvald.Terrarum.KVHashMap; - -/** - * Created by minjaesong on 16-01-03. - */ -public class ActorValue extends KVHashMap { - -} diff --git a/src/com/Torvald/Terrarum/Actors/ActorValue.kt b/src/com/Torvald/Terrarum/Actors/ActorValue.kt new file mode 100644 index 000000000..6d98c83fa --- /dev/null +++ b/src/com/Torvald/Terrarum/Actors/ActorValue.kt @@ -0,0 +1,8 @@ +package com.Torvald.Terrarum.Actors + +import com.Torvald.Terrarum.KVHashMap + +/** + * Created by minjaesong on 16-03-19. + */ +class ActorValue : KVHashMap() \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/Actors/ActorWithBody.kt b/src/com/Torvald/Terrarum/Actors/ActorWithBody.kt index c80d20a51..f92a7a550 100644 --- a/src/com/Torvald/Terrarum/Actors/ActorWithBody.kt +++ b/src/com/Torvald/Terrarum/Actors/ActorWithBody.kt @@ -252,10 +252,8 @@ open class ActorWithBody constructor() : Actor, Visible, Glowing { val A = scale * scale val D = DRAG_COEFF * 0.5f * 1.292f * veloY * veloY * A - val fluidResistance = tileMvmtRstc - veloY += clampCeil( - (W - D) / mass * SI_TO_GAME_ACC * G_MUL_PLAYABLE_CONST, VELO_HARD_LIMIT)// * mvmtRstcToMultiplier(fluidResistance) // eliminate shoot-up from fluids + (W - D) / mass * SI_TO_GAME_ACC * G_MUL_PLAYABLE_CONST, VELO_HARD_LIMIT) } } @@ -406,30 +404,6 @@ open class ActorWithBody constructor() : Actor, Visible, Glowing { // set tile positions val tileX: Int val tileY: Int - /*if (side == CONTACT_AREA_BOTTOM) { - tileX = div16TruncateToMapWidth(Math.round(nextHitbox.getHitboxStart().getX()) - + i + translateX); - tileY = div16TruncateToMapHeight(FastMath.floor(nextHitbox.getHitboxEnd().getY()) - + translateY); - } - else if (side == CONTACT_AREA_TOP) { - tileX = div16TruncateToMapWidth(Math.round(nextHitbox.getHitboxStart().getX()) - + i + translateX); - tileY = div16TruncateToMapHeight(FastMath.ceil(nextHitbox.getHitboxStart().getY()) - + translateY); - } - else if (side == CONTACT_AREA_RIGHT) { - tileX = div16TruncateToMapWidth(FastMath.floor(nextHitbox.getHitboxEnd().getX()) - + translateX); - tileY = div16TruncateToMapHeight(Math.round(nextHitbox.getHitboxStart().getY()) - + i + translateY); - } - else if (side == CONTACT_AREA_LEFT) { - tileX = div16TruncateToMapWidth(FastMath.ceil(nextHitbox.getHitboxStart().getX()) - + translateX); - tileY = div16TruncateToMapHeight(Math.round(nextHitbox.getHitboxStart().getY()) - + i + translateY); - }*/ if (side == CONTACT_AREA_BOTTOM) { tileX = div16TruncateToMapWidth(Math.round(nextHitbox!!.hitboxStart.x) + i + translateX) @@ -459,6 +433,41 @@ open class ActorWithBody constructor() : Actor, Visible, Glowing { return contactAreaCounter } + private fun getContactingAreaFluid(side: Int, translateX: Int = 0, translateY: Int = 0): Int { + var contactAreaCounter = 0 + for (i in 0..Math.round(if (side % 2 == 0) nextHitbox!!.width else nextHitbox!!.height) - 1) { + // set tile positions + val tileX: Int + val tileY: Int + if (side == CONTACT_AREA_BOTTOM) { + tileX = div16TruncateToMapWidth(Math.round(nextHitbox!!.hitboxStart.x) + + i + translateX) + tileY = div16TruncateToMapHeight(Math.round(nextHitbox!!.hitboxEnd.y) + translateY) + } else if (side == CONTACT_AREA_TOP) { + tileX = div16TruncateToMapWidth(Math.round(nextHitbox!!.hitboxStart.x) + + i + translateX) + tileY = div16TruncateToMapHeight(Math.round(nextHitbox!!.hitboxStart.y) + translateY) + } else if (side == CONTACT_AREA_RIGHT) { + tileX = div16TruncateToMapWidth(Math.round(nextHitbox!!.hitboxEnd.x) + translateX) + tileY = div16TruncateToMapHeight(Math.round(nextHitbox!!.hitboxStart.y) + + i + translateY) + } else if (side == CONTACT_AREA_LEFT) { + tileX = div16TruncateToMapWidth(Math.round(nextHitbox!!.hitboxStart.x) + translateX) + tileY = div16TruncateToMapHeight(Math.round(nextHitbox!!.hitboxStart.y) + + i + translateY) + } else { + throw IllegalArgumentException(side.toString() + ": Wrong side input") + } + + // evaluate + if (TilePropCodex.getProp(map.getTileFromTerrain(tileX, tileY)).isFluid) { + contactAreaCounter += 1 + } + } + + return contactAreaCounter + } + /** * [N] = [kg * m / s^2] * F(bo) = density * submerged_volume * gravitational_acceleration [N] @@ -476,52 +485,25 @@ open class ActorWithBody constructor() : Actor, Visible, Glowing { } } - private //System.out.println("fluidHeight: "+fluidHeight+", submerged: "+submergedVolume); - //submergedHeight / TILE_SIZE * 1^2 (pixel to meter) - val submergedVolume: Float - get() { - val GAME_TO_SI_VOL = FastMath.pow(1f / METER, 3f) - - if (density > 0) { - return submergedHeight * - nextHitbox!!.width * nextHitbox!!.width * - GAME_TO_SI_VOL - } else { - return 0f - } - } + private val submergedVolume: Float + get() = submergedHeight * hitbox!!.width * hitbox!!.width private val submergedHeight: Float - get() = FastMath.clamp( - nextHitbox!!.pointedY - fluidLevel, 0f, nextHitbox!!.height) + get() = Math.max( + getContactingAreaFluid(CONTACT_AREA_LEFT), + getContactingAreaFluid(CONTACT_AREA_RIGHT) + ).toFloat() - private val fluidLevel: Int - get() { - val tilePosXStart = Math.round(nextHitbox!!.posX / TSIZE) - val tilePosXEnd = Math.round(nextHitbox!!.hitboxEnd.x / TSIZE) - val tilePosY = Math.round(nextHitbox!!.posY / TSIZE) - - var fluidHeight = 2147483647 - - for (x in tilePosXStart..tilePosXEnd) { - val tile = map.getTileFromTerrain(x, tilePosY) - if (TilePropCodex.getProp(tile).isFluid && tilePosY * TSIZE < fluidHeight) { - fluidHeight = tilePosY * TSIZE - } - } - - return fluidHeight - } /** * Get highest friction value from feet tiles. * @return */ - private //get density - val tileFriction: Int + private val tileFriction: Int get() { var friction = 0 + //get highest fluid density val tilePosXStart = Math.round(nextHitbox!!.posX / TSIZE) val tilePosXEnd = Math.round(nextHitbox!!.hitboxEnd.x / TSIZE) val tilePosY = Math.round(nextHitbox!!.pointedY / TSIZE) @@ -541,11 +523,11 @@ open class ActorWithBody constructor() : Actor, Visible, Glowing { * Get highest movement resistance value from tiles that the body occupies. * @return */ - private //get density - val tileMvmtRstc: Int + private val tileMvmtRstc: Int get() { var resistance = 0 + //get highest fluid density val tilePosXStart = Math.round(nextHitbox!!.posX / TSIZE) val tilePosYStart = Math.round(nextHitbox!!.posY / TSIZE) val tilePosXEnd = Math.round(nextHitbox!!.hitboxEnd.x / TSIZE) @@ -568,11 +550,11 @@ open class ActorWithBody constructor() : Actor, Visible, Glowing { * Get highest density (specific gravity) value from tiles that the body occupies. * @return */ - private //get density - val tileDensity: Int + private val tileDensity: Int get() { var density = 0 + //get highest fluid density val tilePosXStart = Math.round(nextHitbox!!.posX / TSIZE) val tilePosYStart = Math.round(nextHitbox!!.posY / TSIZE) val tilePosXEnd = Math.round(nextHitbox!!.hitboxEnd.x / TSIZE) @@ -608,18 +590,19 @@ open class ActorWithBody constructor() : Actor, Visible, Glowing { private fun updateNextHitboxFromVelo() { val fluidResistance = mvmtRstcToMultiplier(tileMvmtRstc) val submergedRatio = FastMath.clamp( - submergedHeight / nextHitbox!!.height, 0f, 1f) - - val applyResistance = !isNoSubjectToFluidResistance && submergedRatio > FLUID_RESISTANCE_IGNORE_THRESHOLD_RATIO - val resistanceMulInterValueSize = FLUID_RESISTANCE_APPLY_FULL_RATIO - FLUID_RESISTANCE_IGNORE_THRESHOLD_RATIO - val resistanceMultiplier = FastMath.interpolateLinear( - (submergedRatio - FLUID_RESISTANCE_IGNORE_THRESHOLD_RATIO) * FastMath.pow(resistanceMulInterValueSize, -1f), 0f, 1f) - val adjustedResistance = FastMath.interpolateLinear( - resistanceMultiplier, 1f, fluidResistance) + submergedHeight / nextHitbox!!.height, + 0f, 1f + ) + val applyResistance: Boolean = !isNoSubjectToFluidResistance + && submergedRatio > FLUID_RESISTANCE_IGNORE_THRESHOLD_RATIO + val resistance: Float = FastMath.interpolateLinear( + submergedRatio, + 1f, fluidResistance + ) nextHitbox!!.set( - Math.round(hitbox!!.posX + veloX * (if (!applyResistance) 1f else adjustedResistance)).toFloat() - , Math.round(hitbox!!.posY + veloY * (if (!applyResistance) 1f else adjustedResistance)).toFloat() + Math.round(hitbox!!.posX + veloX * (if (!applyResistance) 1f else resistance)).toFloat() + , Math.round(hitbox!!.posY + veloY * (if (!applyResistance) 1f else resistance)).toFloat() , Math.round(baseHitboxW * scale).toFloat() , Math.round(baseHitboxH * scale).toFloat()) /** Full quantisation; wonder what havoc these statements would wreak... @@ -658,12 +641,12 @@ open class ActorWithBody constructor() : Actor, Visible, Glowing { } } - override fun updateGlowSprite(gc: GameContainer, delta_t: Int) { - if (spriteGlow != null) spriteGlow!!.update(delta_t) + override fun updateGlowSprite(gc: GameContainer, delta: Int) { + if (spriteGlow != null) spriteGlow!!.update(delta) } - override fun updateBodySprite(gc: GameContainer, delta_t: Int) { - if (sprite != null) sprite!!.update(delta_t) + override fun updateBodySprite(gc: GameContainer, delta: Int) { + if (sprite != null) sprite!!.update(delta) } private fun clampW(x: Float): Float { diff --git a/src/com/Torvald/Terrarum/Actors/Faction/Faction.java b/src/com/Torvald/Terrarum/Actors/Faction/Faction.java deleted file mode 100644 index 3060054fb..000000000 --- a/src/com/Torvald/Terrarum/Actors/Faction/Faction.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.Torvald.Terrarum.Actors.Faction; - -import java.util.HashSet; - -/** - * Created by minjaesong on 16-02-15. - */ -public class Faction { - - private String factionName; - private HashSet factionAmicable; - private HashSet factionNeutral; - private HashSet factionHostile; - private HashSet factionFearful; - - public Faction(String factionName) { - this.factionName = factionName; - factionAmicable = new HashSet<>(); - factionNeutral = new HashSet<>(); - factionHostile = new HashSet<>(); - factionFearful = new HashSet<>(); - } - - public String getFactionName() { - return factionName; - } - - public void renewFactionName(String factionName) { - this.factionName = factionName; - } - - public HashSet getFactionFearful() { - return factionFearful; - } - - public void setFactionFearful(HashSet factionFearful) { - this.factionFearful = factionFearful; - } - - public HashSet getFactionAmicable() { - return factionAmicable; - } - - public void setFactionAmicable(HashSet factionAmicable) { - this.factionAmicable = factionAmicable; - } - - public HashSet getFactionNeutral() { - return factionNeutral; - } - - public void setFactionNeutral(HashSet factionNeutral) { - this.factionNeutral = factionNeutral; - } - - public HashSet getFactionHostile() { - return factionHostile; - } - - public void setFactionHostile(HashSet factionHostile) { - this.factionHostile = factionHostile; - } - - public void addFactionAmicable(String faction) { - factionAmicable.add(faction); - } - - public void addFactionNeutral(String faction) { - factionNeutral.add(faction); - } - - public void addFactionHostile(String faction) { - factionHostile.add(faction); - } - - public void addFactionFearful(String faction) { - factionFearful.add(faction); - } - - public void removeFactionAmicable(String faction) { - factionAmicable.remove(faction); - } - - public void removeFactionNeutral(String faction) { - factionNeutral.remove(faction); - } - - public void removeFactionHostile(String faction) { - factionHostile.remove(faction); - } - - public void removeFactionFearful(String faction) { - factionFearful.remove(faction); - } - -} diff --git a/src/com/Torvald/Terrarum/Actors/Faction/Faction.kt b/src/com/Torvald/Terrarum/Actors/Faction/Faction.kt new file mode 100644 index 000000000..b03817944 --- /dev/null +++ b/src/com/Torvald/Terrarum/Actors/Faction/Faction.kt @@ -0,0 +1,60 @@ +package com.Torvald.Terrarum.Actors.Faction + +import java.util.HashSet + +/** + * Created by minjaesong on 16-02-15. + */ +class Faction(factionName: String) { + + lateinit var factionName: String + lateinit var factionAmicable: HashSet + lateinit var factionNeutral: HashSet + lateinit var factionHostile: HashSet + lateinit var factionFearful: HashSet + + init { + this.factionName = factionName + factionAmicable = HashSet() + factionNeutral = HashSet() + factionHostile = HashSet() + factionFearful = HashSet() + } + + fun renewFactionName(factionName: String) { + this.factionName = factionName + } + + fun addFactionAmicable(faction: String) { + factionAmicable.add(faction) + } + + fun addFactionNeutral(faction: String) { + factionNeutral.add(faction) + } + + fun addFactionHostile(faction: String) { + factionHostile.add(faction) + } + + fun addFactionFearful(faction: String) { + factionFearful.add(faction) + } + + fun removeFactionAmicable(faction: String) { + factionAmicable.remove(faction) + } + + fun removeFactionNeutral(faction: String) { + factionNeutral.remove(faction) + } + + fun removeFactionHostile(faction: String) { + factionHostile.remove(faction) + } + + fun removeFactionFearful(faction: String) { + factionFearful.remove(faction) + } + +} diff --git a/src/com/Torvald/Terrarum/Actors/Faction/FactionRelatorFactory.java b/src/com/Torvald/Terrarum/Actors/Faction/FactionRelatorFactory.java deleted file mode 100644 index 06182e65d..000000000 --- a/src/com/Torvald/Terrarum/Actors/Faction/FactionRelatorFactory.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.Torvald.Terrarum.Actors.Faction; - -import com.Torvald.JsonFetcher; -import com.google.gson.JsonObject; - -import java.io.IOException; - -/** - * Created by minjaesong on 16-02-15. - */ -public class FactionRelatorFactory { - - private static final String JSONPATH = "./res/raw/"; - - public Faction build(String filename) throws IOException { - JsonObject jsonObj = JsonFetcher.readJson(JSONPATH + filename); - Faction factionObj = new Faction(jsonObj.get("factionname").getAsString()); - - - jsonObj.get("factionamicable").getAsJsonArray().forEach( - s -> factionObj.addFactionAmicable(s.getAsString()) - ); - jsonObj.get("factionneutral").getAsJsonArray().forEach( - s -> factionObj.addFactionNeutral(s.getAsString()) - ); - jsonObj.get("factionhostile").getAsJsonArray().forEach( - s -> factionObj.addFactionHostile(s.getAsString()) - ); - jsonObj.get("factionfearful").getAsJsonArray().forEach( - s -> factionObj.addFactionFearful(s.getAsString()) - ); - - return factionObj; - } - -} diff --git a/src/com/Torvald/Terrarum/Actors/Faction/FactionRelatorFactory.kt b/src/com/Torvald/Terrarum/Actors/Faction/FactionRelatorFactory.kt new file mode 100644 index 000000000..1f8a9abab --- /dev/null +++ b/src/com/Torvald/Terrarum/Actors/Faction/FactionRelatorFactory.kt @@ -0,0 +1,32 @@ +package com.Torvald.Terrarum.Actors.Faction + +import com.Torvald.JsonFetcher +import com.google.gson.JsonObject + +import java.io.IOException + +/** + * Created by minjaesong on 16-02-15. + */ +class FactionRelatorFactory { + + @Throws(IOException::class) + fun build(filename: String): Faction { + val jsonObj = JsonFetcher.readJson(JSONPATH + filename) + val factionObj = Faction(jsonObj.get("factionname").asString) + + + jsonObj.get("factionamicable").asJsonArray.forEach { s -> factionObj.addFactionAmicable(s.asString) } + jsonObj.get("factionneutral").asJsonArray.forEach { s -> factionObj.addFactionNeutral(s.asString) } + jsonObj.get("factionhostile").asJsonArray.forEach { s -> factionObj.addFactionHostile(s.asString) } + jsonObj.get("factionfearful").asJsonArray.forEach { s -> factionObj.addFactionFearful(s.asString) } + + return factionObj + } + + companion object { + + val JSONPATH = "./res/raw/" + } + +} diff --git a/src/com/Torvald/Terrarum/Actors/Factionable.kt b/src/com/Torvald/Terrarum/Actors/Factionable.kt index cad117824..912e8248e 100644 --- a/src/com/Torvald/Terrarum/Actors/Factionable.kt +++ b/src/com/Torvald/Terrarum/Actors/Factionable.kt @@ -8,8 +8,6 @@ import java.util.* */ interface Factionable { - fun assignFaction(f: Faction) - fun unassignFaction(f: Faction) - var faction: HashSet? + var faction: HashSet } \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/Actors/ItemProperties/Material.java b/src/com/Torvald/Terrarum/Actors/ItemProperties/Material.java deleted file mode 100644 index 9c74cf3ea..000000000 --- a/src/com/Torvald/Terrarum/Actors/ItemProperties/Material.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.Torvald.Terrarum.Actors.ItemProperties; - -/** - * Created by minjaesong on 16-03-06. - */ -public class Material { - - /** How sharp the material is. Default to 1000.*/ - int maxEdge; - /** Self-explanatory. [kPa in Vickers hardness]*/ - int hardness; - /** Self-explanatory. [g/l]*/ - int density; - - public Material() { - } - - public int getMaxEdge() { - return maxEdge; - } - - void setMaxEdge(int maxEdge) { - this.maxEdge = maxEdge; - } - - public int getHardness() { - return hardness; - } - - void setHardness(int hardness) { - this.hardness = hardness; - } - - public int getDensity() { - return density; - } - - void setDensity(int density) { - this.density = density; - } -} diff --git a/src/com/Torvald/Terrarum/Actors/ItemProperties/MaterialFactory.java b/src/com/Torvald/Terrarum/Actors/ItemProperties/MaterialFactory.java deleted file mode 100644 index 1eb09d4d7..000000000 --- a/src/com/Torvald/Terrarum/Actors/ItemProperties/MaterialFactory.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.Torvald.Terrarum.Actors.ItemProperties; - -/** - * Created by minjaesong on 16-03-06. - */ -public class MaterialFactory { - - /** - * Load from CSV - */ - -} diff --git a/src/com/Torvald/Terrarum/Actors/NPCIntelligentBase.kt b/src/com/Torvald/Terrarum/Actors/NPCIntelligentBase.kt index b9eda19a9..f5a1cd3de 100644 --- a/src/com/Torvald/Terrarum/Actors/NPCIntelligentBase.kt +++ b/src/com/Torvald/Terrarum/Actors/NPCIntelligentBase.kt @@ -17,7 +17,17 @@ open class NPCIntelligentBase : ActorWithBody() override var itemData: InventoryItem = object : InventoryItem { override var itemID = HQRNG().nextLong() - override var weight = 0f + override var mass: Float + get() = actorValue.get("mass") as Float + set(value) { + actorValue.set("mass", value) + } + + override var scale: Float + get() = actorValue.get("scale") as Float + set(value) { + actorValue.set("scale", value) + } override fun effectWhileInPocket(gc: GameContainer, delta_t: Int) { @@ -41,13 +51,13 @@ open class NPCIntelligentBase : ActorWithBody() } @Transient private var ai: ActorAI? = null - override var inventory: ActorInventory? = null + override var inventory: ActorInventory = ActorInventory() private val factionSet = HashSet() override var referenceID: Long = HQRNG().nextLong() - override var faction: HashSet? = null + override var faction: HashSet = HashSet() override var houseDesignation: ArrayList? = null /** @@ -56,14 +66,6 @@ open class NPCIntelligentBase : ActorWithBody() */ private var houseTiles = ArrayList() - override fun assignFaction(f: Faction) { - factionSet.add(f) - } - - override fun unassignFaction(f: Faction) { - factionSet.remove(f) - } - override fun attachItemData() { } diff --git a/src/com/Torvald/Terrarum/Actors/PFSigrid.kt b/src/com/Torvald/Terrarum/Actors/PFSigrid.kt index 04289aacc..15dc20294 100644 --- a/src/com/Torvald/Terrarum/Actors/PFSigrid.kt +++ b/src/com/Torvald/Terrarum/Actors/PFSigrid.kt @@ -69,13 +69,13 @@ object PFSigrid { p.setPosition((4096 * 16).toFloat(), (300 * 16).toFloat()) - p.assignFaction(loadFactioningData("FactionSigrid.json")) + p.faction.add(loadFactioningData("FactionSigrid.json")) return p } private fun loadFactioningData(filename: String): Faction { - var jsonObject: JsonObject? = null + var jsonObject: JsonObject = JsonObject() try { jsonObject = JsonFetcher.readJson(FACTION_PATH + filename) } catch (e: IOException) { @@ -83,7 +83,7 @@ object PFSigrid { System.exit(-1) } - val faction = Faction(jsonObject!!.get("factionname").asString) + val faction = Faction(jsonObject.get("factionname").asString) jsonObject.get("factionamicable").asJsonArray.forEach { jobj -> faction.addFactionAmicable(jobj.asString) } jsonObject.get("factionneutral").asJsonArray.forEach { jobj -> faction.addFactionNeutral(jobj.asString) } diff --git a/src/com/Torvald/Terrarum/Actors/Player.kt b/src/com/Torvald/Terrarum/Actors/Player.kt index 9f8e9f9b2..3b6312f04 100644 --- a/src/com/Torvald/Terrarum/Actors/Player.kt +++ b/src/com/Torvald/Terrarum/Actors/Player.kt @@ -61,16 +61,20 @@ class Player : ActorWithBody, Controllable, Pocketed, Factionable, Luminous, Lan @Transient private val BASE_DENSITY = 1020 /** Must be set by PlayerFactory */ - override var inventory: ActorInventory? = null + override var inventory: ActorInventory = ActorInventory() /** Must be set by PlayerFactory */ - override var faction: HashSet? = null + override var faction: HashSet = HashSet() override var houseDesignation: ArrayList? = null override var luminosity: Char - get() = if (actorValue.get("luminosity") != null) actorValue.getAsInt("luminosity").toChar() - else 0 as Char + get() { + if (actorValue.get("luminosity") != null) + return actorValue.getAsInt("luminosity")!!.toChar() + else + return 0.toChar() + } set(value) { actorValue.set("luminosity", value) } @@ -115,8 +119,8 @@ class Player : ActorWithBody, Controllable, Pocketed, Factionable, Luminous, Lan } private fun updatePhysicalInfos() { - scale = actorValue.getAsFloat("scale") - mass = actorValue.getAsFloat("basemass") * FastMath.pow(scale, 3f) + scale = actorValue.getAsFloat("scale")!! + mass = actorValue.getAsFloat("basemass")!! * FastMath.pow(scale, 3f) if (elasticity != 0f) elasticity = 0f } @@ -129,8 +133,8 @@ class Player : ActorWithBody, Controllable, Pocketed, Factionable, Luminous, Lan private fun walkHorizontal(left: Boolean, absAxisVal: Float) { //if ((!super.isWalledLeft() && left) || (!super.isWalledRight() && !left)) { readonly_totalX = veloX + - actorValue.getAsFloat("accel") * - actorValue.getAsFloat("accelmult") * + actorValue.getAsFloat("accel")!! * + actorValue.getAsFloat("accelmult")!! * FastMath.sqrt(scale) * applyAccelRealism(walkPowerCounter) * (if (left) -1 else 1).toFloat() * @@ -143,8 +147,8 @@ class Player : ActorWithBody, Controllable, Pocketed, Factionable, Luminous, Lan } // Clamp veloX - veloX = absClamp(veloX, actorValue.getAsFloat("speed") - * actorValue.getAsFloat("speedmult") + veloX = absClamp(veloX, actorValue.getAsFloat("speed")!! + * actorValue.getAsFloat("speedmult")!! * FastMath.sqrt(scale)) // Heading flag @@ -163,8 +167,8 @@ class Player : ActorWithBody, Controllable, Pocketed, Factionable, Luminous, Lan */ private fun walkVertical(up: Boolean, absAxisVal: Float) { readonly_totalY = veloY + - actorValue.getAsFloat("accel") * - actorValue.getAsFloat("accelmult") * + actorValue.getAsFloat("accel")!! * + actorValue.getAsFloat("accelmult")!! * FastMath.sqrt(scale) * applyAccelRealism(walkPowerCounter) * (if (up) -1 else 1).toFloat() * @@ -177,8 +181,8 @@ class Player : ActorWithBody, Controllable, Pocketed, Factionable, Luminous, Lan } // Clamp veloX - veloY = absClamp(veloY, actorValue.getAsFloat("speed") - * actorValue.getAsFloat("speedmult") + veloY = absClamp(veloY, actorValue.getAsFloat("speed")!! + * actorValue.getAsFloat("speedmult")!! * FastMath.sqrt(scale)) } @@ -211,15 +215,15 @@ class Player : ActorWithBody, Controllable, Pocketed, Factionable, Luminous, Lan private fun walkHStop() { if (veloX > 0) { - veloX -= actorValue.getAsFloat("accel") * - actorValue.getAsFloat("accelmult") * + veloX -= actorValue.getAsFloat("accel")!! * + actorValue.getAsFloat("accelmult")!! * FastMath.sqrt(scale) // compensate overshoot if (veloX < 0) veloX = 0f } else if (veloX < 0) { - veloX += actorValue.getAsFloat("accel") * - actorValue.getAsFloat("accelmult") * + veloX += actorValue.getAsFloat("accel")!! * + actorValue.getAsFloat("accelmult")!! * FastMath.sqrt(scale) // compensate overshoot @@ -234,7 +238,7 @@ class Player : ActorWithBody, Controllable, Pocketed, Factionable, Luminous, Lan private fun walkVStop() { if (veloY > 0) { veloY -= WALK_STOP_ACCEL * - actorValue.getAsFloat("accelmult") * + actorValue.getAsFloat("accelmult")!! * FastMath.sqrt(scale) // compensate overshoot @@ -242,7 +246,7 @@ class Player : ActorWithBody, Controllable, Pocketed, Factionable, Luminous, Lan veloY = 0f } else if (veloY < 0) { veloY += WALK_STOP_ACCEL * - actorValue.getAsFloat("accelmult") * + actorValue.getAsFloat("accelmult")!! * FastMath.sqrt(scale) // compensate overshoot @@ -406,22 +410,10 @@ class Player : ActorWithBody, Controllable, Pocketed, Factionable, Luminous, Lan private fun jump() { if (jumping) { val len = MAX_JUMP_LENGTH.toFloat() - val pwr = actorValue.getAsFloat("jumppower") + val pwr = actorValue.getAsFloat("jumppower")!! // increment jump counter if (jumpCounter < len) jumpCounter += 1 - // quadratic time (convex) mode - /* - float sumT = (jumpCounter * (jumpCounter + 1)) / 2f; - float timedJumpCharge = ((len + 1) / 2f) - (sumT / len); - if (timedJumpCharge < 0) timedJumpCharge = 0; - - float jumpAcc = pwr * timedJumpCharge * JUMP_ACCELERATION_MOD; - - super.setVeloY(veloY - - jumpAcc - ); - */ // linear time mode val init = (len + 1) / 2f @@ -432,7 +424,7 @@ class Player : ActorWithBody, Controllable, Pocketed, Factionable, Luminous, Lan veloY -= jumpAcc - // concave mode? + // try concave mode? } // for mob AI: @@ -501,14 +493,6 @@ class Player : ActorWithBody, Controllable, Pocketed, Factionable, Luminous, Lan return actorValue } - override fun assignFaction(f: Faction) { - factionSet.add(f) - } - - override fun unassignFaction(f: Faction) { - factionSet.remove(f) - } - override fun addHouseTile(x: Int, y: Int) { throw UnsupportedOperationException() } diff --git a/src/com/Torvald/Terrarum/Actors/Pocketed.kt b/src/com/Torvald/Terrarum/Actors/Pocketed.kt index c2ff9625f..b482f0e21 100644 --- a/src/com/Torvald/Terrarum/Actors/Pocketed.kt +++ b/src/com/Torvald/Terrarum/Actors/Pocketed.kt @@ -5,6 +5,6 @@ package com.Torvald.Terrarum.Actors */ interface Pocketed { - var inventory: ActorInventory? + var inventory: ActorInventory } \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/Authenticator.java b/src/com/Torvald/Terrarum/ConsoleCommand/Authenticator.java deleted file mode 100644 index 8d13a2e5d..000000000 --- a/src/com/Torvald/Terrarum/ConsoleCommand/Authenticator.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.Torvald.Terrarum.ConsoleCommand; - -import com.Torvald.Terrarum.Terrarum; -import com.Torvald.Terrarum.UserInterface.ConsoleWindow; -import org.apache.commons.codec.digest.DigestUtils; - -/** - * Created by minjaesong on 16-02-19. - */ -public class Authenticator implements ConsoleCommand { - - private static boolean a = false; - - @Override - public void execute(String[] args) { - if (args.length == 2) { - String pwd = args[1]; - String hashedPwd = DigestUtils.sha256Hex(pwd); - - if ("54c5b3dd459d5ef778bb2fa1e23a5fb0e1b62ae66970bcb436e8f81a1a1a8e41" - .equalsIgnoreCase(hashedPwd)) { // alpine - String msg = (a) ? "Locked" : "Authenticated"; - new Echo().execute(msg); - System.out.println("[Authenticator] " + msg); - a = !a; - ((ConsoleWindow) (Terrarum.game.consoleHandler.getUI())).reset(); - } - else { - printUsage(); // thou shalt not pass! - } - } - else { - printUsage(); - } - } - - public boolean b() { - return a; - } - - @Override - public void printUsage() { - CommandInterpreter.echoUnknownCmd("auth"); - } -} diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/Authenticator.kt b/src/com/Torvald/Terrarum/ConsoleCommand/Authenticator.kt new file mode 100644 index 000000000..831af50f2 --- /dev/null +++ b/src/com/Torvald/Terrarum/ConsoleCommand/Authenticator.kt @@ -0,0 +1,46 @@ +package com.Torvald.Terrarum.ConsoleCommand + +import com.Torvald.Terrarum.Terrarum +import com.Torvald.Terrarum.UserInterface.ConsoleWindow +import org.apache.commons.codec.digest.DigestUtils + +/** + * Created by minjaesong on 16-02-19. + */ +class Authenticator : ConsoleCommand { + + override fun execute(args: Array) { + if (args.size == 2) { + val pwd = args[1] + val hashedPwd = DigestUtils.sha256Hex(pwd) + + if ("54c5b3dd459d5ef778bb2fa1e23a5fb0e1b62ae66970bcb436e8f81a1a1a8e41".equals(hashedPwd, ignoreCase = true)) { + // alpine + val msg = if (a) "Locked" else "Authenticated" + Echo().execute(msg) + println("[Authenticator] " + msg) + a = !a + (Terrarum.game.consoleHandler.UI as ConsoleWindow).reset() + } + else { + printUsage() // thou shalt not pass! + } + } + else { + printUsage() + } + } + + fun b(): Boolean { + return a + } + + override fun printUsage() { + CommandInterpreter.echoUnknownCmd("auth") + } + + companion object { + + private var a = false + } +} diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/Batch.java b/src/com/Torvald/Terrarum/ConsoleCommand/Batch.java deleted file mode 100644 index 0837e34ed..000000000 --- a/src/com/Torvald/Terrarum/ConsoleCommand/Batch.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.Torvald.Terrarum.ConsoleCommand; - -import java.nio.file.FileSystems; -import java.nio.file.Files; - -/** - * Created by minjaesong on 16-03-07. - */ -public class Batch implements ConsoleCommand { - @Override - public void execute(String[] args) throws Exception { - if (args.length == 2) { - Files.lines(FileSystems.getDefault().getPath(args[1])).forEach - (CommandInterpreter::execute); - } - else { - printUsage(); - } - } - - @Override - public void printUsage() { - new Echo().execute("batch path/to/batch.txt"); - } -} diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/Batch.kt b/src/com/Torvald/Terrarum/ConsoleCommand/Batch.kt new file mode 100644 index 000000000..1f3a04450 --- /dev/null +++ b/src/com/Torvald/Terrarum/ConsoleCommand/Batch.kt @@ -0,0 +1,24 @@ +package com.Torvald.Terrarum.ConsoleCommand + +import java.nio.file.FileSystems +import java.nio.file.Files + +/** + * Created by minjaesong on 16-03-07. + */ +class Batch : ConsoleCommand { + @Throws(Exception::class) + override fun execute(args: Array) { + if (args.size == 2) { + Files.lines(FileSystems.getDefault().getPath(args[1])).forEach( + { CommandInterpreter.execute(it) }) + } + else { + printUsage() + } + } + + override fun printUsage() { + Echo().execute("batch path/to/batch.txt") + } +} diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/CodexEdictis.java b/src/com/Torvald/Terrarum/ConsoleCommand/CodexEdictis.java deleted file mode 100644 index 220b65e68..000000000 --- a/src/com/Torvald/Terrarum/ConsoleCommand/CodexEdictis.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.Torvald.Terrarum.ConsoleCommand; - -import com.Torvald.Terrarum.Game; -import com.Torvald.Terrarum.LangPack.Lang; -import com.Torvald.Terrarum.UserInterface.ConsoleWindow; - -import java.util.Formatter; - -/** - * Created by minjaesong on 16-01-16. - */ -public class CodexEdictis implements ConsoleCommand { - @Override - public void execute(String[] args) { - if (args.length == 1) { - printList(); - } - else{ - try { - ConsoleCommand commandObj = CommandDict.getCommand(args[1].toLowerCase()); - commandObj.printUsage(); - } - catch (NullPointerException e) { - StringBuilder sb = new StringBuilder(); - Formatter formatter = new Formatter(sb); - - new Echo().execute("Codex: " - + formatter.format(Lang.get("DEV_MESSAGE_CONSOLE_COMMAND_UNKNOWN") - , args[1] - ).toString() - ); - } - } - } - - @Override - public void printUsage() { - Echo echo = new Echo(); - echo.execute("Usage: codex (command)"); - echo.execute("shows how to use 'command'"); - echo.execute("leave blank to get list of available commands"); - } - - private void printList() { - Echo echo = new Echo(); - echo.execute(Lang.get("DEV_MESSAGE_CONSOLE_AVAILABLE_COMMANDS")); - CommandDict.dict.keySet().forEach((s) -> echo.execute("] " + s)); - } - -} diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/CodexEdictis.kt b/src/com/Torvald/Terrarum/ConsoleCommand/CodexEdictis.kt new file mode 100644 index 000000000..e36db126c --- /dev/null +++ b/src/com/Torvald/Terrarum/ConsoleCommand/CodexEdictis.kt @@ -0,0 +1,45 @@ +package com.Torvald.Terrarum.ConsoleCommand + +import com.Torvald.Terrarum.Game +import com.Torvald.Terrarum.LangPack.Lang +import com.Torvald.Terrarum.UserInterface.ConsoleWindow + +import java.util.Formatter + +/** + * Created by minjaesong on 16-01-16. + */ +class CodexEdictis : ConsoleCommand { + override fun execute(args: Array) { + if (args.size == 1) { + printList() + } + else { + try { + val commandObj = CommandDict.getCommand(args[1].toLowerCase()) + commandObj.printUsage() + } + catch (e: NullPointerException) { + val sb = StringBuilder() + val formatter = Formatter(sb) + + Echo().execute("Codex: " + formatter.format(Lang.get("DEV_MESSAGE_CONSOLE_COMMAND_UNKNOWN"), args[1]).toString()) + } + + } + } + + override fun printUsage() { + val echo = Echo() + echo.execute("Usage: codex (command)") + echo.execute("shows how to use 'command'") + echo.execute("leave blank to get list of available commands") + } + + private fun printList() { + val echo = Echo() + echo.execute(Lang.get("DEV_MESSAGE_CONSOLE_AVAILABLE_COMMANDS")) + CommandDict.dict.keys.forEach { s -> echo.execute("] " + s) } + } + +} diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/CommandDict.java b/src/com/Torvald/Terrarum/ConsoleCommand/CommandDict.java deleted file mode 100644 index 4041c2781..000000000 --- a/src/com/Torvald/Terrarum/ConsoleCommand/CommandDict.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.Torvald.Terrarum.ConsoleCommand; - -import com.Torvald.Terrarum.Terrarum; - -import java.util.HashMap; - -/** - * Created by minjaesong on 16-01-15. - */ -public class CommandDict { - - protected static HashMap dict; - - public CommandDict() { - dict = new HashMap<>(); - - dict.put("echo", new Echo()); - dict.put("setav", new SetAV()); - dict.put("qqq", new QuitApp()); - dict.put("codex", new CodexEdictis()); - dict.put("export", new ExportMap()); - dict.put("gc", new ForceGC()); - dict.put("getav", new GetAV()); - dict.put("getlocale", new GetLocale()); - dict.put("togglenoclip", new ToggleNoClip()); - dict.put("nc", dict.get("togglenoclip")); - dict.put("bulletintest", new SetBulletin()); - dict.put("setlocale", new SetLocale()); - dict.put("zoom", new Zoom()); - dict.put("teleport", new TeleportPlayer()); - dict.put("tp", dict.get("teleport")); - dict.put("cat", new CatStdout()); - dict.put("exportav", new ExportAV()); - dict.put("gsontest", new GsonTest()); - dict.put("setgl", new SetGlobalLightLevel()); - dict.put("getfaction", new GetFactioning()); - dict.put("auth", Terrarum.game.auth); - dict.put("spawnball", new SpawnPhysTestBall()); - dict.put("batch", new Batch()); - } - - public static ConsoleCommand getCommand(String commandName) { - return dict.get(commandName); - } - -} diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/CommandDict.kt b/src/com/Torvald/Terrarum/ConsoleCommand/CommandDict.kt new file mode 100644 index 000000000..2cd02bfcf --- /dev/null +++ b/src/com/Torvald/Terrarum/ConsoleCommand/CommandDict.kt @@ -0,0 +1,47 @@ +package com.Torvald.Terrarum.ConsoleCommand + +import com.Torvald.Terrarum.Terrarum + +import java.util.HashMap + +/** + * Created by minjaesong on 16-01-15. + */ +object CommandDict { + + internal var dict: HashMap = hashMapOf( + Pair("echo", Echo()), + Pair("setav", SetAV()), + Pair("qqq", QuitApp()), + Pair("codex", CodexEdictis()), + Pair("export", ExportMap()), + Pair("gc", ForceGC()), + Pair("getav", GetAV()), + Pair("getlocale", GetLocale()), + Pair("togglenoclip", ToggleNoClip()), + Pair("nc", ToggleNoClip()), + Pair("setlocale", SetLocale()), + Pair("zoom", Zoom()), + Pair("teleport", TeleportPlayer()), + Pair("tp", TeleportPlayer()), + Pair("cat", CatStdout()), + Pair("exportav", ExportAV()), + Pair("setgl", SetGlobalLightLevel()), + Pair("getfaction", GetFactioning()), + Pair("auth", Terrarum.game.auth), + Pair("spawnball", SpawnPhysTestBall()), + Pair("batch", Batch()), + Pair("settime", SetTime()), + Pair("gettime", GetTime()), + Pair("settimedelta", SetTimeDelta()), + Pair("help", Help()), + + // Test codes + Pair("bulletintest", SetBulletin()), + Pair("gsontest", GsonTest()) + ) + + fun getCommand(commandName: String): ConsoleCommand { + return dict[commandName]!! + } +} diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/CommandInterpreter.java b/src/com/Torvald/Terrarum/ConsoleCommand/CommandInterpreter.java deleted file mode 100644 index a10c226fa..000000000 --- a/src/com/Torvald/Terrarum/ConsoleCommand/CommandInterpreter.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.Torvald.Terrarum.ConsoleCommand; - -import com.Torvald.Terrarum.LangPack.Lang; -import com.Torvald.Terrarum.Terrarum; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Formatter; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Created by minjaesong on 16-01-15. - */ -public class CommandInterpreter { - - private static String[] commandsAvailableWOAuth = {"auth", "qqq", "zoom", "setlocale", "getlocale"}; - - public static void execute(String command) { - CommandInput[] cmd = parse(command); - - for (CommandInput single_command : cmd) { - ConsoleCommand commandObj = null; - try { - if (Arrays.asList(commandsAvailableWOAuth).contains(single_command.getName().toLowerCase())) { - commandObj = CommandDict.getCommand(single_command.getName().toLowerCase()); - } - else { - if (Terrarum.game.auth.b()) { - commandObj = CommandDict.getCommand( - single_command.getName().toLowerCase() - ); - } - else { - // System.out.println("ee1"); - throw new NullPointerException(); // if not authorised, say "Unknown command" - } - } - } - catch (NullPointerException e) { - - } - finally { - try { - if (commandObj != null) { - commandObj.execute(single_command.toStringArray()); - } - else { - echoUnknownCmd(single_command.getName()); - // System.out.println("ee3"); - } - } - catch (Exception e) { - System.out.println("[CommandInterpreter] :"); - e.printStackTrace(); - new Echo().execute(Lang.get("ERROR_GENERIC_TEXT")); - } - } - } - } - - private static CommandInput[] parse(String input) { - Pattern patternCommands = Pattern.compile("[^;]+"); - Pattern patternTokensInCommand = Pattern.compile("[\"'][^;]+[\"']|[^ ]+"); - - ArrayList commands = new ArrayList<>(); - - // split multiple commands - Matcher m = patternCommands.matcher(input); - while (m.find()) commands.add(m.group()); - - // split command tokens from a command - CommandInput[] parsedCommands = new CommandInput[commands.size()]; - - - for (int i = 0; i < parsedCommands.length; i++) { - ArrayList tokens = new ArrayList<>(); - - m = patternTokensInCommand.matcher(commands.get(i)); - while (m.find()) { - String regexGroup = m.group().replaceAll("[\"\']", ""); - tokens.add(regexGroup); - } - - // create new command - parsedCommands[i] = new CommandInput(tokens.toArray()); - - } - - return parsedCommands; - } - - static void echoUnknownCmd(String cmdname) { - StringBuilder sb = new StringBuilder(); - Formatter formatter = new Formatter(sb); - - new Echo().execute( - formatter.format(Lang.get("DEV_MESSAGE_CONSOLE_COMMAND_UNKNOWN") - , cmdname - ).toString() - ); - } - -} - -class CommandInput { - private String[] tokens; - - CommandInput(Object[] o) { - tokens = new String[o.length]; - for (int i = 0; i < o.length; i++) { - tokens[i] = (String) o[i]; - } - } - - String[] toStringArray() { - return tokens; - } - - String getName() { - return tokens[0]; - } - - int getArgsCount() { - return tokens.length; - } -} diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/CommandInterpreter.kt b/src/com/Torvald/Terrarum/ConsoleCommand/CommandInterpreter.kt new file mode 100644 index 000000000..d1105246c --- /dev/null +++ b/src/com/Torvald/Terrarum/ConsoleCommand/CommandInterpreter.kt @@ -0,0 +1,116 @@ +package com.Torvald.Terrarum.ConsoleCommand + +import com.Torvald.Terrarum.LangPack.Lang +import com.Torvald.Terrarum.Terrarum + +import java.util.ArrayList +import java.util.Formatter +import java.util.regex.Pattern + +/** + * Created by minjaesong on 16-01-15. + */ +object CommandInterpreter { + + private val commandsNoAuth = arrayOf("auth", "qqq", "zoom", "setlocale", "getlocale", "help") + + fun execute(command: String) { + val cmd = parse(command) + + for (single_command in cmd) { + var commandObj: ConsoleCommand? = null + try { + if (commandsNoAuth.contains(single_command!!.name.toLowerCase())) { + commandObj = CommandDict.getCommand(single_command.name.toLowerCase()) + } + else { + if (Terrarum.game.auth.b()) { + commandObj = CommandDict.getCommand( + single_command.name.toLowerCase()) + } + else { + // System.out.println("ee1"); + throw NullPointerException() // if not authorised, say "Unknown command" + } + } + } + catch (e: NullPointerException) { + + } + finally { + try { + if (commandObj != null) { + commandObj.execute(single_command!!.toStringArray()) + } + else { + echoUnknownCmd(single_command!!.name) + // System.out.println("ee3"); + } + } + catch (e: Exception) { + println("[CommandInterpreter] :") + e.printStackTrace() + Echo().execute(Lang.get("ERROR_GENERIC_TEXT")) + } + + } + } + } + + private fun parse(input: String): Array { + val patternCommands = Pattern.compile("[^;]+") + val patternTokensInCommand = Pattern.compile("[\"'][^;]+[\"']|[^ ]+") + + val commands = ArrayList() + + // split multiple commands + var m = patternCommands.matcher(input) + while (m.find()) commands.add(m.group()) + + // split command tokens from a command + val parsedCommands = arrayOfNulls(commands.size) + + + for (i in parsedCommands.indices) { + val tokens = ArrayList() + + m = patternTokensInCommand.matcher(commands[i]) + while (m.find()) { + val regexGroup = m.group().replace("[\"\']".toRegex(), "") + tokens.add(regexGroup) + } + + // create new command + parsedCommands[i] = CommandInput(tokens.toArray()) + + } + + return parsedCommands + } + + internal fun echoUnknownCmd(cmdname: String) { + val sb = StringBuilder() + val formatter = Formatter(sb) + + Echo().execute( + formatter.format(Lang.get("DEV_MESSAGE_CONSOLE_COMMAND_UNKNOWN"), cmdname).toString()) + } + + private class CommandInput(o: Array) { + private val tokens: Array + + init { + tokens = Array(o.size, { i -> o[i] as String }) + } + + fun toStringArray(): Array { + return tokens + } + + val name: String + get() = tokens[0] + + val argsCount: Int + get() = tokens.size + } +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/ConsoleCommand.kt b/src/com/Torvald/Terrarum/ConsoleCommand/ConsoleCommand.kt index 359235ca5..6cdf45ea2 100644 --- a/src/com/Torvald/Terrarum/ConsoleCommand/ConsoleCommand.kt +++ b/src/com/Torvald/Terrarum/ConsoleCommand/ConsoleCommand.kt @@ -1,7 +1,7 @@ package com.Torvald.Terrarum.ConsoleCommand /** - * Created by minjaesong on 16-03-15. + * Created by minjaesong on 16-01-15. */ interface ConsoleCommand { diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/Echo.java b/src/com/Torvald/Terrarum/ConsoleCommand/Echo.java index c2b38ef17..d90cabb7f 100644 --- a/src/com/Torvald/Terrarum/ConsoleCommand/Echo.java +++ b/src/com/Torvald/Terrarum/ConsoleCommand/Echo.java @@ -4,7 +4,6 @@ import com.Torvald.Terrarum.Terrarum; import com.Torvald.Terrarum.UserInterface.ConsoleWindow; import java.util.Arrays; -import java.util.List; /** * Created by minjaesong on 16-01-16. diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/ExportAV.java b/src/com/Torvald/Terrarum/ConsoleCommand/ExportAV.java index d664124eb..d625c5cb5 100644 --- a/src/com/Torvald/Terrarum/ConsoleCommand/ExportAV.java +++ b/src/com/Torvald/Terrarum/ConsoleCommand/ExportAV.java @@ -13,7 +13,7 @@ public class ExportAV implements ConsoleCommand { public void execute(String[] args) { if (args.length == 2) { try { - JsonWriter.writeToFile(Terrarum.game.getPlayer().getActorValue() + JsonWriter.INSTANCE.writeToFile(Terrarum.game.player.getActorValue() , Terrarum.defaultDir + "/Exports/" + args[1] + ".json" ); diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/ExportMap.java b/src/com/Torvald/Terrarum/ConsoleCommand/ExportMap.java index c958ecf29..5df05bf63 100644 --- a/src/com/Torvald/Terrarum/ConsoleCommand/ExportMap.java +++ b/src/com/Torvald/Terrarum/ConsoleCommand/ExportMap.java @@ -57,7 +57,7 @@ public class ExportMap implements ConsoleCommand { if (args.length == 2) { buildColorTable(); - mapData = new byte[Terrarum.game.map.width * Terrarum.game.map.height * 3]; + mapData = new byte[Terrarum.game.map.getWidth() * Terrarum.game.map.getHeight() * 3]; for (byte tile : Terrarum.game.map.getLayerTerrain()) { byte[] colArray = colorTable.getOrDefault(tile, new Col4096(0xFFF)) @@ -77,9 +77,9 @@ public class ExportMap implements ConsoleCommand { } try { - RasterWriter.writePNG_RGB( - Terrarum.game.map.width - , Terrarum.game.map.height + RasterWriter.INSTANCE.writePNG_RGB( + Terrarum.game.map.getWidth() + , Terrarum.game.map.getHeight() , mapData , dir + args[1] + ".png" ); diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/GetAV.java b/src/com/Torvald/Terrarum/ConsoleCommand/GetAV.java index b3630dcf3..6902b8feb 100644 --- a/src/com/Torvald/Terrarum/ConsoleCommand/GetAV.java +++ b/src/com/Torvald/Terrarum/ConsoleCommand/GetAV.java @@ -18,7 +18,7 @@ public class GetAV implements ConsoleCommand { try { if (args.length == 1) { // print all actorvalue of player - ActorValue av = Terrarum.game.getPlayer().getActorValue(); + ActorValue av = Terrarum.game.player.getActorValue(); Set keyset = av.getKeySet(); keyset.forEach( @@ -31,9 +31,9 @@ public class GetAV implements ConsoleCommand { } else if (args.length == 2) { echo.execute("player." + args[1] + " = " - + Terrarum.game.getPlayer().getActorValue().get(args[1]) + + Terrarum.game.player.getActorValue().get(args[1]) + " (" - + Terrarum.game.getPlayer().getActorValue().get(args[1]).getClass() + + Terrarum.game.player.getActorValue().get(args[1]).getClass() .getSimpleName() + ")" ); diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/GetFactioning.java b/src/com/Torvald/Terrarum/ConsoleCommand/GetFactioning.java index fc6adc70a..e58532f85 100644 --- a/src/com/Torvald/Terrarum/ConsoleCommand/GetFactioning.java +++ b/src/com/Torvald/Terrarum/ConsoleCommand/GetFactioning.java @@ -18,7 +18,12 @@ public class GetFactioning implements ConsoleCommand { Echo echo = new Echo(); if (args.length == 1) { // get all factioning data of player - HashSet factionSet = Terrarum.game.getPlayer().getFaction(); + HashSet factionSet = Terrarum.game.player.getFaction(); + + if (factionSet == null) { + echo.execute("The actor has null faction set."); + return; + } int count = factionSet.size(); echo.execute(String.valueOf(count) + Lang.pluralise(" faction", count) + " assigned."); diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/Gettime.kt b/src/com/Torvald/Terrarum/ConsoleCommand/Gettime.kt new file mode 100644 index 000000000..52e0c22ac --- /dev/null +++ b/src/com/Torvald/Terrarum/ConsoleCommand/Gettime.kt @@ -0,0 +1,20 @@ +package com.Torvald.Terrarum.ConsoleCommand + +import com.Torvald.Terrarum.Terrarum + +/** + * Created by minjaesong on 16-03-20. + */ +class GetTime : ConsoleCommand { + override fun execute(args: Array) { + val echo = Echo() + echo.execute("Day ${Terrarum.game.map.worldTime.days}, " + + "${Terrarum.game.map.worldTime.getFormattedTime()} " + + "(${Terrarum.game.map.worldTime.elapsedSeconds()} s)" + ) + } + + override fun printUsage() { + Echo().execute("Print current world time in convenient form") + } +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/GsonTest.java b/src/com/Torvald/Terrarum/ConsoleCommand/GsonTest.java index 2652f1320..2d23740d9 100644 --- a/src/com/Torvald/Terrarum/ConsoleCommand/GsonTest.java +++ b/src/com/Torvald/Terrarum/ConsoleCommand/GsonTest.java @@ -15,7 +15,7 @@ public class GsonTest implements ConsoleCommand { @Override public void execute(String[] args) { if (args.length == 2) { - JsonElement avelem = new Gson().toJsonTree(Terrarum.game.getPlayer()); + JsonElement avelem = new Gson().toJsonTree(Terrarum.game.player); String jsonString = avelem.toString(); diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/Help.kt b/src/com/Torvald/Terrarum/ConsoleCommand/Help.kt new file mode 100644 index 000000000..9f5f2d015 --- /dev/null +++ b/src/com/Torvald/Terrarum/ConsoleCommand/Help.kt @@ -0,0 +1,20 @@ +package com.Torvald.Terrarum.ConsoleCommand + +/** + * Created by minjaesong on 16-03-22. + */ +class Help : ConsoleCommand { + override fun execute(args: Array) { + Echo().execute(arrayOf( + "echo", + "Utility keys:", + "F3: Basic debug information", + "F7: Toggle lightmap blending", + "F8: Toggle smooth lighting" + )) + } + + override fun printUsage() { + Echo().execute("Prints some utility functions assigned to runction row of the keyboard.") + } +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/SetAV.java b/src/com/Torvald/Terrarum/ConsoleCommand/SetAV.java index 1a30f8c36..a73f5f2e4 100644 --- a/src/com/Torvald/Terrarum/ConsoleCommand/SetAV.java +++ b/src/com/Torvald/Terrarum/ConsoleCommand/SetAV.java @@ -48,7 +48,7 @@ class SetAV implements ConsoleCommand { } } - Terrarum.game.getPlayer().getActorValue().set(args[1], val); + Terrarum.game.player.getActorValue().set(args[1], val); echo.execute("Set " + args[1] + " to " + val); } else if (args.length == 4) { diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/SetBulletin.java b/src/com/Torvald/Terrarum/ConsoleCommand/SetBulletin.java index 6c0d71144..b4368a6be 100644 --- a/src/com/Torvald/Terrarum/ConsoleCommand/SetBulletin.java +++ b/src/com/Torvald/Terrarum/ConsoleCommand/SetBulletin.java @@ -13,7 +13,8 @@ public class SetBulletin implements ConsoleCommand { String[] testMsg = { //Lang.get("ERROR_SAVE_CORRUPTED") //, Lang.get("MENU_LABEL_CONTINUE_QUESTION") - "갎갎갎갎갎갎갎갎갎갎갎갎갎갎" + "Bulletin test “Hello, world!”", + "世界一みんなの人気者 それは彼女のこと アシュリー 달이 차오른다 가자" }; send(testMsg); } diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/SetGlobalLightLevel.java b/src/com/Torvald/Terrarum/ConsoleCommand/SetGlobalLightLevel.java deleted file mode 100644 index 5280db619..000000000 --- a/src/com/Torvald/Terrarum/ConsoleCommand/SetGlobalLightLevel.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.Torvald.Terrarum.ConsoleCommand; - -import com.Torvald.Terrarum.MapDrawer.LightmapRenderer; -import com.Torvald.Terrarum.Terrarum; - -/** - * Created by minjaesong on 16-02-17. - */ -public class SetGlobalLightLevel implements ConsoleCommand { - @Override - public void execute(String[] args) { - if (args.length == 4) { - try { - int r = new Integer(args[1]); - int g = new Integer(args[2]); - int b = new Integer(args[3]); - char GL = LightmapRenderer.constructRGBFromInt(r, g, b); - - Terrarum.game.map.setGlobalLight(GL); - } - catch (NumberFormatException e) { - new Echo().execute("Wrong number input."); - } - catch (IllegalArgumentException e1) { - new Echo().execute("Range: 0-" + LightmapRenderer.getCHANNEL_MAX() + " per channel"); - } - } - else if (args.length == 2) { - try { - char GL = (char) (new Integer(args[1]).intValue()); - - if (GL < 0 || GL >= LightmapRenderer.getCOLOUR_DOMAIN_SIZE()) { - new Echo().execute("Range: 0-" + (LightmapRenderer.getCOLOUR_DOMAIN_SIZE() - 1)); - } - else { - Terrarum.game.map.setGlobalLight(GL); - } - } - catch (NumberFormatException e) { - new Echo().execute("Wrong number input."); - } - - } - else{ - printUsage(); - } - } - - @Override - public void printUsage() { - new Echo().execute("Usage: setgl [raw_value|r g b]"); - } -} diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/SetGlobalLightLevel.kt b/src/com/Torvald/Terrarum/ConsoleCommand/SetGlobalLightLevel.kt new file mode 100644 index 000000000..0dc65825f --- /dev/null +++ b/src/com/Torvald/Terrarum/ConsoleCommand/SetGlobalLightLevel.kt @@ -0,0 +1,52 @@ +package com.Torvald.Terrarum.ConsoleCommand + +import com.Torvald.Terrarum.MapDrawer.LightmapRenderer +import com.Torvald.Terrarum.Terrarum + +/** + * Created by minjaesong on 16-02-17. + */ +class SetGlobalLightLevel : ConsoleCommand { + override fun execute(args: Array) { + if (args.size == 4) { + try { + val r = args[1].toInt() + val g = args[2].toInt() + val b = args[3].toInt() + val GL = LightmapRenderer.constructRGBFromInt(r, g, b) + + Terrarum.game.map.globalLight = GL + } + catch (e: NumberFormatException) { + Echo().execute("Wrong number input.") + } + catch (e1: IllegalArgumentException) { + Echo().execute("Range: 0-" + LightmapRenderer.CHANNEL_MAX + " per channel") + } + + } + else if (args.size == 2) { + try { + val GL = Integer(args[1]).toInt().toChar() + + if (GL.toInt() < 0 || GL.toInt() >= LightmapRenderer.COLOUR_DOMAIN_SIZE) { + Echo().execute("Range: 0-" + (LightmapRenderer.COLOUR_DOMAIN_SIZE - 1)) + } + else { + Terrarum.game.map.globalLight = GL + } + } + catch (e: NumberFormatException) { + Echo().execute("Wrong number input.") + } + + } + else { + printUsage() + } + } + + override fun printUsage() { + Echo().execute("Usage: setgl [raw_value|r g b]") + } +} diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/SetLocale.java b/src/com/Torvald/Terrarum/ConsoleCommand/SetLocale.java index c656b26d4..7c2b7220f 100644 --- a/src/com/Torvald/Terrarum/ConsoleCommand/SetLocale.java +++ b/src/com/Torvald/Terrarum/ConsoleCommand/SetLocale.java @@ -15,15 +15,15 @@ public class SetLocale implements ConsoleCommand { @Override public void execute(String[] args) { if (args.length == 2) { - String prevLocale = Terrarum.gameLocale; - Terrarum.gameLocale = args[1]; + String prevLocale = Terrarum.Companion.getGameLocale(); + Terrarum.Companion.setGameLocale(args[1]); try { new Lang(); - new Echo().execute("Set locale to '" + Terrarum.gameLocale + "'."); + new Echo().execute("Set locale to '" + Terrarum.Companion.getGameLocale() + "'."); } catch (IOException e) { new Echo().execute("could not read lang file."); - Terrarum.gameLocale = prevLocale; + Terrarum.Companion.setGameLocale(prevLocale); } } else if (args.length == 1) { diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/SetTimeDelta.kt b/src/com/Torvald/Terrarum/ConsoleCommand/SetTimeDelta.kt new file mode 100644 index 000000000..f56096d2b --- /dev/null +++ b/src/com/Torvald/Terrarum/ConsoleCommand/SetTimeDelta.kt @@ -0,0 +1,25 @@ +package com.Torvald.Terrarum.ConsoleCommand + +import com.Torvald.Terrarum.Terrarum + +/** + * Created by minjaesong on 16-03-20. + */ +class SetTimeDelta : ConsoleCommand { + override fun execute(args: Array) { + if (args.size == 2) { + Terrarum.game.map.worldTime.setTimeDelta(args[1].toInt()) + if (Terrarum.game.map.worldTime.timeDelta == 0) + Echo().execute("時間よ止まれ!ザ・ワルド!!") + else + Echo().execute("Set time delta to ${Terrarum.game.map.worldTime.timeDelta}") + } + else { + printUsage() + } + } + + override fun printUsage() { + Echo().execute("usage: settimedelta ") + } +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/Settime.kt b/src/com/Torvald/Terrarum/ConsoleCommand/Settime.kt new file mode 100644 index 000000000..601674225 --- /dev/null +++ b/src/com/Torvald/Terrarum/ConsoleCommand/Settime.kt @@ -0,0 +1,42 @@ +package com.Torvald.Terrarum.ConsoleCommand + +import com.Torvald.Terrarum.GameMap.WorldTime +import com.Torvald.Terrarum.Terrarum + +/** + * Created by minjaesong on 16-03-20. + */ +class SetTime : ConsoleCommand { + override fun execute(args: Array) { + if (args.size == 2) { + val lowercaseTime = args[1].toLowerCase() + val timeToSet = + if (args[1].length >= 4) { + lowercaseTime.substringBefore('h').toInt() * WorldTime.HOUR_SEC + + lowercaseTime.substringAfter('h').toInt() * WorldTime.MINUTE_SEC + } + else if (args[1].endsWith("h", true)) { + lowercaseTime.substring(0, args[1].length - 1).toInt() * WorldTime.HOUR_SEC + } + else { + lowercaseTime.toInt() + } + + Terrarum.game.map.worldTime.setTime(timeToSet) + + Echo().execute("Set time to ${Terrarum.game.map.worldTime.elapsedSeconds()} " + + "(${Terrarum.game.map.worldTime.hours}h${formatMin(Terrarum.game.map.worldTime.minutes)})") + } + else { + printUsage() + } + } + + private fun formatMin(min: Int): String { + return if (min < 10) "0${min.toString()}" else min.toString() + } + + override fun printUsage() { + Echo().execute("usage: settime <39201-in sec or 13h32-in hour>") + } +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/TeleportPlayer.java b/src/com/Torvald/Terrarum/ConsoleCommand/TeleportPlayer.java index 0cbd720f5..cc4e8ccce 100644 --- a/src/com/Torvald/Terrarum/ConsoleCommand/TeleportPlayer.java +++ b/src/com/Torvald/Terrarum/ConsoleCommand/TeleportPlayer.java @@ -26,7 +26,7 @@ public class TeleportPlayer implements ConsoleCommand { return; } - Terrarum.game.getPlayer().setPosition(x, y); + Terrarum.game.player.setPosition(x, y); } } diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/ToggleNoClip.java b/src/com/Torvald/Terrarum/ConsoleCommand/ToggleNoClip.java index 0fd72a919..4d6efb387 100644 --- a/src/com/Torvald/Terrarum/ConsoleCommand/ToggleNoClip.java +++ b/src/com/Torvald/Terrarum/ConsoleCommand/ToggleNoClip.java @@ -9,9 +9,9 @@ import com.Torvald.Terrarum.Terrarum; public class ToggleNoClip implements ConsoleCommand { @Override public void execute(String[] args) { - boolean status = Terrarum.game.getPlayer().isNoClip(); + boolean status = Terrarum.game.player.isNoClip(); - Terrarum.game.getPlayer().setNoClip(!status); + Terrarum.game.player.setNoClip(!status); new Echo().execute("Set no-clip status to " + String.valueOf(!status)); } diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/Zoom.java b/src/com/Torvald/Terrarum/ConsoleCommand/Zoom.java deleted file mode 100644 index cec68b4c9..000000000 --- a/src/com/Torvald/Terrarum/ConsoleCommand/Zoom.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.Torvald.Terrarum.ConsoleCommand; - -import com.Torvald.Terrarum.Game; -import com.Torvald.Terrarum.Terrarum; - -/** - * Created by minjaesong on 16-01-25. - */ -public class Zoom implements ConsoleCommand { - @Override - public void execute(String[] args) { - if (args.length == 2) { - - float zoom; - try { - zoom = new Float(args[1]); - } - catch (NumberFormatException e) { - new Echo().execute("Wrong number input."); - return; - } - - if (zoom < Terrarum.game.ZOOM_MIN) { - zoom = Terrarum.game.ZOOM_MIN; - } - else if (zoom > Terrarum.game.ZOOM_MAX) { - zoom = Terrarum.game.ZOOM_MAX; - } - - Terrarum.game.screenZoom = zoom; - - System.gc(); - - new Echo().execute("Set screen zoom to " + String.valueOf(zoom)); - } - else { - printUsage(); - } - } - - @Override - public void printUsage() { - new Echo().execute("Usage: zoom [zoom]"); - } -} diff --git a/src/com/Torvald/Terrarum/ConsoleCommand/Zoom.kt b/src/com/Torvald/Terrarum/ConsoleCommand/Zoom.kt new file mode 100644 index 000000000..ab96aca58 --- /dev/null +++ b/src/com/Torvald/Terrarum/ConsoleCommand/Zoom.kt @@ -0,0 +1,42 @@ +package com.Torvald.Terrarum.ConsoleCommand + +import com.Torvald.Terrarum.Terrarum + +/** + * Created by minjaesong on 16-01-25. + */ +class Zoom : ConsoleCommand { + override fun execute(args: Array) { + if (args.size == 2) { + + var zoom: Float + try { + zoom = args[1].toFloat() + } + catch (e: NumberFormatException) { + Echo().execute("Wrong number input.") + return + } + + if (zoom < Terrarum.game.ZOOM_MIN) { + zoom = Terrarum.game.ZOOM_MIN + } + else if (zoom > Terrarum.game.ZOOM_MAX) { + zoom = Terrarum.game.ZOOM_MAX + } + + Terrarum.game.screenZoom = zoom + + System.gc() + + Echo().execute("Set screen zoom to " + zoom.toString()) + } + else { + printUsage() + } + } + + override fun printUsage() { + Echo().execute("Usage: zoom [zoom]") + } +} diff --git a/src/com/Torvald/Terrarum/DefaultConfig.java b/src/com/Torvald/Terrarum/DefaultConfig.java deleted file mode 100644 index 8c6f69734..000000000 --- a/src/com/Torvald/Terrarum/DefaultConfig.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.Torvald.Terrarum; - -import com.google.gson.JsonObject; - -/** - * Created by minjaesong on 16-03-12. - */ -public class DefaultConfig { - - public static JsonObject fetch() { - JsonObject jsonObject = new JsonObject(); - - jsonObject.addProperty("smoothlighting", true); - jsonObject.addProperty("imtooyoungtodie", false); - jsonObject.addProperty("language", Terrarum.getSysLang()); - jsonObject.addProperty("notificationshowuptime", 6500); - - return jsonObject; - } - -} diff --git a/src/com/Torvald/Terrarum/DefaultConfig.kt b/src/com/Torvald/Terrarum/DefaultConfig.kt new file mode 100644 index 000000000..cc0ffeb51 --- /dev/null +++ b/src/com/Torvald/Terrarum/DefaultConfig.kt @@ -0,0 +1,19 @@ +package com.Torvald.Terrarum + +import com.google.gson.JsonObject + +/** + * Created by minjaesong on 16-03-19. + */ +object DefaultConfig { + fun fetch(): JsonObject { + val jsonObject = JsonObject() + + jsonObject.addProperty("smoothlighting", true) + jsonObject.addProperty("imtooyoungtodie", false) + jsonObject.addProperty("language", Terrarum.sysLang) + jsonObject.addProperty("notificationshowuptime", 6500) + + return jsonObject + } +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/Exceptions/InvalidValueException.java b/src/com/Torvald/Terrarum/Exceptions/InvalidValueException.java deleted file mode 100644 index 9aca6d067..000000000 --- a/src/com/Torvald/Terrarum/Exceptions/InvalidValueException.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.Torvald.Terrarum.Exceptions; - -/** - * Created by minjaesong on 16-01-04. - */ -public class InvalidValueException extends Exception { - -} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/Game.java b/src/com/Torvald/Terrarum/Game similarity index 99% rename from src/com/Torvald/Terrarum/Game.java rename to src/com/Torvald/Terrarum/Game index 1552f29f0..34aec2639 100644 --- a/src/com/Torvald/Terrarum/Game.java +++ b/src/com/Torvald/Terrarum/Game @@ -51,7 +51,7 @@ public class Game extends BasicGameState { public UIHandler debugWindow; public UIHandler notifinator; - @NotNull Player player; + Player player; private Image GRADIENT_IMAGE; private Rectangle skyBox; @@ -101,7 +101,7 @@ public class Game extends BasicGameState { map.setGravitation(9.8f); MapGenerator.attachMap(map); - MapGenerator.setSeed(0x51621D); + MapGenerator.setSeed(0x51621D2); //MapGenerator.setSeed(new HQRNG().nextLong()); MapGenerator.generateMap(); diff --git a/src/com/Torvald/Terrarum/Game.kt b/src/com/Torvald/Terrarum/Game.kt new file mode 100644 index 000000000..c03429853 --- /dev/null +++ b/src/com/Torvald/Terrarum/Game.kt @@ -0,0 +1,357 @@ +package com.Torvald.Terrarum + +import com.Torvald.ColourUtil.Col40 +import com.Torvald.Terrarum.Actors.* +import com.Torvald.Terrarum.ConsoleCommand.Authenticator +import com.Torvald.Terrarum.ConsoleCommand.CommandDict +import com.Torvald.Terrarum.GameControl.GameController +import com.Torvald.Terrarum.GameControl.Key +import com.Torvald.Terrarum.GameControl.KeyMap +import com.Torvald.Terrarum.GameControl.KeyToggler +import com.Torvald.Terrarum.GameMap.GameMap +import com.Torvald.Terrarum.GameMap.WorldTime +import com.Torvald.Terrarum.MapDrawer.LightmapRenderer +import com.Torvald.Terrarum.MapDrawer.MapCamera +import com.Torvald.Terrarum.MapDrawer.MapDrawer +import com.Torvald.Terrarum.MapGenerator.MapGenerator +import com.Torvald.Terrarum.MapGenerator.RoguelikeRandomiser +import com.Torvald.Terrarum.TileProperties.TilePropCodex +import com.Torvald.Terrarum.TileStat.TileStat +import com.Torvald.Terrarum.UserInterface.BasicDebugInfoWindow +import com.Torvald.Terrarum.UserInterface.ConsoleWindow +import com.Torvald.Terrarum.UserInterface.Notification +import com.Torvald.Terrarum.UserInterface.UIHandler +import com.jme3.math.FastMath +import org.lwjgl.opengl.ARBShaderObjects +import org.lwjgl.opengl.GL11 +import org.newdawn.slick.* +import org.newdawn.slick.fills.GradientFill +import org.newdawn.slick.geom.Rectangle +import org.newdawn.slick.state.BasicGameState +import org.newdawn.slick.state.StateBasedGame +import shader.Shader +import java.lang.management.ManagementFactory +import java.util.* + +/** + * Created by minjaesong on 16-03-19. + */ +class Game @Throws(SlickException::class) +constructor() : BasicGameState() { + internal var game_mode = 0 + + lateinit var map: GameMap + + var actorContainer = HashSet() + var uiContainer = HashSet() + + lateinit var consoleHandler: UIHandler + lateinit var debugWindow: UIHandler + lateinit var notifinator: UIHandler + + lateinit internal var player: Player + + private var GRADIENT_IMAGE: Image? = null + private var skyBox: Rectangle? = null + + var screenZoom = 1.0f + val ZOOM_MAX = 2.0f + val ZOOM_MIN = 0.25f + + private var shader12BitCol: Shader? = null + private var shaderBlurH: Shader? = null + private var shaderBlurV: Shader? = null + + + private val useShader: Boolean = false + private val shaderProgram = 0 + + + private val ENV_COLTEMP_SUNRISE = 2500 + private val ENV_SUNLIGHT_DELTA = MapDrawer.ENV_COLTEMP_NOON - ENV_COLTEMP_SUNRISE + + + var memInUse: Long = 0 + get() = ManagementFactory.getMemoryMXBean().heapMemoryUsage.used shr 20 + var totalVMMem: Long = 0 + get() = Runtime.getRuntime().maxMemory() shr 20 + + var auth = Authenticator() + + private var update_delta: Int = 0 + + private val KEY_LIGHTMAP_RENDER = Key.F7 + private val KEY_LIGHTMAP_SMOOTH = Key.F8 + + @Throws(SlickException::class) + override fun init(gameContainer: GameContainer, stateBasedGame: StateBasedGame) { + KeyMap.build() + + shader12BitCol = Shader.makeShader("./res/4096.vrt", "./res/4096.frg") + shaderBlurH = Shader.makeShader("./res/blurH.vrt", "./res/blur.frg") + shaderBlurV = Shader.makeShader("./res/blurV.vrt", "./res/blur.frg") + + + GRADIENT_IMAGE = Image("res/graphics/sky_colour.png") + skyBox = Rectangle(0f, 0f, Terrarum.WIDTH.toFloat(), Terrarum.HEIGHT.toFloat()) + + TilePropCodex() + // new ItemPropCodex() -- This is kotlin object and already initialised. + + map = GameMap(8192, 2048) + map.gravitation = 9.8f + + MapGenerator.attachMap(map) + MapGenerator.setSeed(0x51621D2) + //MapGenerator.setSeed(new HQRNG().nextLong()); + MapGenerator.generateMap() + + RoguelikeRandomiser.setSeed(0x540198) + //RoguelikeRandomiser.setSeed(new HQRNG().nextLong()); + + + // add new player and put it to actorContainer + //player = new Player(); + player = PFSigrid.build() + //player.setNoClip(true); + actorContainer.add(player) + + consoleHandler = UIHandler(ConsoleWindow()) + consoleHandler.setPosition(0, 0) + + debugWindow = UIHandler(BasicDebugInfoWindow()) + debugWindow.setPosition(0, 0) + + notifinator = UIHandler(Notification()) + notifinator.setPosition( + (Terrarum.WIDTH - notifinator.UI.width) / 2, Terrarum.HEIGHT - notifinator.UI.height) + notifinator.setVisibility(true) + + if (Terrarum.gameConfig.getAsBoolean("smoothlighting") == true) + KeyToggler.forceSet(KEY_LIGHTMAP_SMOOTH, true) + else + KeyToggler.forceSet(KEY_LIGHTMAP_SMOOTH, false) + } + + override fun update(gc: GameContainer, sbg: StateBasedGame, delta: Int) { + update_delta = delta + setAppTitle() + + // GL at after_sunrise-noon_before_sunset + map.updateWorldTime(delta) + map.setGlobalLight(globalLightByTime); + + GameController.processInput(gc.input) + + TileStat.update() + + MapDrawer.update(gc, delta) + MapCamera.update(gc, delta) + + actorContainer.forEach { actor -> actor.update(gc, delta) } + actorContainer.forEach { actor -> + if (actor is Visible) { + actor.updateBodySprite(gc, delta) + } + if (actor is Glowing) { + actor.updateGlowSprite(gc, delta) + } + } + + uiContainer.forEach { ui -> ui.update(gc, delta) } + consoleHandler.update(gc, delta) + debugWindow.update(gc, delta) + + + notifinator.update(gc, delta) + + Terrarum.appgc.setVSync(Terrarum.appgc.fps >= Terrarum.VSYNC_TRIGGER_THRESHOLD) + } + + private fun setAppTitle() { + Terrarum.appgc.setTitle( + "Simple Slick Game — FPS: " + + Terrarum.appgc.fps + " (" + + Terrarum.TARGET_INTERNAL_FPS.toString() + + ") — " + + memInUse.toString() + "M / " + + totalVMMem.toString() + "M") + } + + override fun render(gc: GameContainer, sbg: StateBasedGame, g: Graphics) { + Terrarum.gameConfig["smoothlighting"] = KeyToggler.isOn(KEY_LIGHTMAP_SMOOTH) + + if (!g.isAntiAlias) g.isAntiAlias = true + + drawSkybox(g) + + // compensate for zoom. UIs have to be treated specially! (see UIHandler) + g.translate( + -MapCamera.getCameraX() * screenZoom, -MapCamera.getCameraY() * screenZoom) + + MapCamera.renderBehind(gc, g) + + actorContainer.forEach { actor -> if (actor is Visible) actor.drawBody(gc, g) } + actorContainer.forEach { actor -> if (actor is Glowing) actor.drawGlow(gc, g) } + + LightmapRenderer.renderLightMap() + + MapCamera.renderFront(gc, g) + MapDrawer.render(gc, g) + + + setBlendModeMul() + + MapDrawer.drawEnvOverlay(g) + + if (!KeyToggler.isOn(KEY_LIGHTMAP_RENDER)) setBlendModeMul() + else setBlendModeNormal() + + LightmapRenderer.draw(g) + + setBlendModeNormal() + + uiContainer.forEach { ui -> ui.render(gc, g) } + debugWindow.render(gc, g) + consoleHandler.render(gc, g) + notifinator.render(gc, g) + } + + fun addActor(e: Actor): Boolean { + return actorContainer.add(e) + } + + fun removeActor(e: Actor): Boolean { + return actorContainer.remove(e) + } + + private fun getGradientColour(): Array { + val gradMapWidth = GRADIENT_IMAGE!!.width + val phase = Math.round( + map.worldTime.elapsedSeconds().toFloat() / WorldTime.DAY_LENGTH.toFloat() * gradMapWidth + ) + + //update in every INTERNAL_FRAME frames + return arrayOf( + GRADIENT_IMAGE!!.getColor(phase, 0), + GRADIENT_IMAGE!!.getColor(phase, GRADIENT_IMAGE!!.height - 1) + ) + } + + override fun keyPressed(key: Int, c: Char) { + GameController.keyPressed(key, c) + } + + override fun keyReleased(key: Int, c: Char) { + GameController.keyReleased(key, c) + } + + override fun mouseMoved(oldx: Int, oldy: Int, newx: Int, newy: Int) { + GameController.mouseMoved(oldx, oldy, newx, newy) + } + + override fun mouseDragged(oldx: Int, oldy: Int, newx: Int, newy: Int) { + GameController.mouseDragged(oldx, oldy, newx, newy) + } + + override fun mousePressed(button: Int, x: Int, y: Int) { + GameController.mousePressed(button, x, y) + } + + override fun mouseReleased(button: Int, x: Int, y: Int) { + GameController.mouseReleased(button, x, y) + } + + override fun mouseWheelMoved(change: Int) { + GameController.mouseWheelMoved(change) + } + + override fun controllerButtonPressed(controller: Int, button: Int) { + GameController.controllerButtonPressed(controller, button) + } + + override fun controllerButtonReleased(controller: Int, button: Int) { + GameController.controllerButtonReleased(controller, button) + } + + override fun getID(): Int { + return Terrarum.SCENE_ID_GAME + } + + private fun drawSkybox(g: Graphics) { + val colourTable = getGradientColour() + val skyColourFill = GradientFill( + 0f, 0f, colourTable[0], + 0f, Terrarum.HEIGHT.toFloat(), colourTable[1] + ) + g.fill(skyBox, skyColourFill) + } + + private fun setBlendModeMul() { + GL11.glEnable(GL11.GL_BLEND) + GL11.glBlendFunc(GL11.GL_DST_COLOR, GL11.GL_ONE_MINUS_SRC_ALPHA) + } + + private fun setBlendModeNormal() { + GL11.glDisable(GL11.GL_BLEND) + Terrarum.appgc.graphics.setDrawMode(Graphics.MODE_NORMAL) + } + + fun sendNotification(msg: Array) { + (notifinator.UI as Notification).sendNotification(Terrarum.appgc, update_delta, msg) + notifinator.setAsOpening() + } + + private val globalLightByTime: Char + get() { + /** + * y = -DELTA(x-1)^RAYLEIGH + MAX + * See documentation 'sky colour' + */ + val INTENSITY_MIN = 9 + val INTENSITY_MAX = 39 + + val COLTEMP_MIN = 2500 + val COLTEMP_MAX = MapDrawer.ENV_COLTEMP_NOON + val COLTEMP_DELTA = COLTEMP_MAX - COLTEMP_MIN + val RAYLEIGH_INDEX = 3.3f + + /** + * get colour temperature + */ + val dusk_len_colouring = 0.5f + val daytime_len = 10 + var secs_offset: Int = Math.round(WorldTime.HOUR_SEC * dusk_len_colouring) // 1h as Seconds + var time_domain_x_in_sec = (daytime_len + 2*dusk_len_colouring) * WorldTime.HOUR_SEC // 11h as Seconds + + var today_secs: Float = map.worldTime.elapsedSeconds().toFloat() + secs_offset + if (today_secs > time_domain_x_in_sec - secs_offset) today_secs - WorldTime.DAY_LENGTH // 79000 -> -200 + + var func_x: Float = (today_secs / time_domain_x_in_sec) * 2f // 0-46800 -> 0-2.0 + if (func_x < 1) func_x = 2f - func_x // mirror graph + if (func_x > 2) func_x = 2f // clamp + + // println("x: $func_x") + + val sunAltColouring: Int = FastMath.ceil( + -COLTEMP_DELTA * FastMath.pow(func_x - 1, RAYLEIGH_INDEX) + COLTEMP_MAX + ) + val sunColour: Col40 = Col40(MapDrawer.getColourFromMap(sunAltColouring)) + + /** + * get intensity + */ + val dusk_len = 1.5f + val intensity: Int = 39 + secs_offset = Math.round(WorldTime.HOUR_SEC * dusk_len) // 1h30 as Seconds + time_domain_x_in_sec = (daytime_len + 2*dusk_len) * WorldTime.HOUR_SEC // 13h as Seconds + + today_secs = map.worldTime.elapsedSeconds().toFloat() + secs_offset + if (today_secs > time_domain_x_in_sec - secs_offset) today_secs - WorldTime.DAY_LENGTH // 79000 -> -200 + + + + + return LightmapRenderer.darkenUniformInt(sunColour.raw, INTENSITY_MAX - intensity) + } +} diff --git a/src/com/Torvald/Terrarum/GameConfig.java b/src/com/Torvald/Terrarum/GameConfig.java deleted file mode 100644 index 94572d996..000000000 --- a/src/com/Torvald/Terrarum/GameConfig.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.Torvald.Terrarum; - -/** - * Created by minjaesong on 15-12-30. - */ -public class GameConfig extends KVHashMap { - -} diff --git a/src/com/Torvald/Terrarum/GameConfig.kt b/src/com/Torvald/Terrarum/GameConfig.kt new file mode 100644 index 000000000..2bb01c682 --- /dev/null +++ b/src/com/Torvald/Terrarum/GameConfig.kt @@ -0,0 +1,6 @@ +package com.Torvald.Terrarum + +/** + * Created by minjaesong on 16-03-19. + */ +class GameConfig : KVHashMap() diff --git a/src/com/Torvald/Terrarum/GameControl/EnumKeyFunc.java b/src/com/Torvald/Terrarum/GameControl/EnumKeyFunc.kt similarity index 66% rename from src/com/Torvald/Terrarum/GameControl/EnumKeyFunc.java rename to src/com/Torvald/Terrarum/GameControl/EnumKeyFunc.kt index 9d4d553a2..eb57e4b9c 100644 --- a/src/com/Torvald/Terrarum/GameControl/EnumKeyFunc.java +++ b/src/com/Torvald/Terrarum/GameControl/EnumKeyFunc.kt @@ -1,9 +1,9 @@ -package com.Torvald.Terrarum.GameControl; +package com.Torvald.Terrarum.GameControl /** * Created by minjaesong on 15-12-31. */ -public enum EnumKeyFunc{ +enum class EnumKeyFunc { UI_CONSOLE, UI_BASIC_INFO, MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN, JUMP } \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/GameControl/GameController.java b/src/com/Torvald/Terrarum/GameControl/GameController.java deleted file mode 100644 index 0b20c8f8b..000000000 --- a/src/com/Torvald/Terrarum/GameControl/GameController.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.Torvald.Terrarum.GameControl; - -import com.Torvald.Terrarum.Actors.Controllable; -import com.Torvald.Terrarum.Actors.Player; -import com.Torvald.Terrarum.MapDrawer.MapCamera; -import com.Torvald.Terrarum.MapDrawer.MapDrawer; -import com.Torvald.Terrarum.Terrarum; -import com.Torvald.Terrarum.TileProperties.TileNameCode; -import com.Torvald.Terrarum.TileProperties.TilePropCodex; -import com.Torvald.Terrarum.UserInterface.UIHandler; -import org.newdawn.slick.Input; - -/** - * Created by minjaesong on 15-12-31. - */ -public class GameController { - - private static KeyMap keyMap; - - public GameController() { - - } - - public static void setKeyMap(KeyMap map) { - keyMap = map; - } - - public static void processInput(Input input) { - int mouseTileX = (int) ((MapCamera.getCameraX() + input.getMouseX() / Terrarum.game.screenZoom) - / MapDrawer.getTILE_SIZE()); - int mouseTileY = (int) ((MapCamera.getCameraY() + input.getMouseY() / Terrarum.game.screenZoom) - / MapDrawer.getTILE_SIZE()); - - - KeyToggler.update(input); - - - if (!Terrarum.game.consoleHandler.isTakingControl()) { - if (Terrarum.game.getPlayer().getVehicleRiding() != null) { - Terrarum.game.getPlayer().getVehicleRiding().processInput(input); - } - - Terrarum.game.getPlayer().processInput(input); - - for (UIHandler ui : Terrarum.game.uiContainer) { - ui.processInput(input); - } - } - else { - Terrarum.game.consoleHandler.processInput(input); - } - - - if (input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON)) { - // test tile remove - try { - Terrarum.game.map.setTileTerrain(mouseTileX, mouseTileY, TileNameCode.AIR); - // Terrarum.game.map.setTileWall(mouseTileX, mouseTileY, TileNameCode.AIR); - } - catch (ArrayIndexOutOfBoundsException e) { - } - } - else if (input.isMouseButtonDown(Input.MOUSE_RIGHT_BUTTON)) { - // test tile place - try { - Terrarum.game.map.setTileTerrain(mouseTileX, mouseTileY - , Terrarum.game.getPlayer().getActorValue().getAsInt("selectedtile")); - } - catch (ArrayIndexOutOfBoundsException e) { - } - } - } - - public static void keyPressed(int key, char c) { - if (keyPressedByCode(key, EnumKeyFunc.UI_CONSOLE)) { - Terrarum.game.consoleHandler.toggleOpening(); - } - else if (keyPressedByCode(key, EnumKeyFunc.UI_BASIC_INFO)) { - Terrarum.game.debugWindow.toggleOpening(); - } - - - - if (!Terrarum.game.consoleHandler.isTakingControl()) { - if (Terrarum.game.getPlayer().getVehicleRiding() != null) { - Terrarum.game.getPlayer().getVehicleRiding().keyPressed(key, c); - } - - Terrarum.game.getPlayer().keyPressed(key, c); - } - else { - Terrarum.game.consoleHandler.keyPressed(key, c); - } - - //System.out.println(String.valueOf(key) + ", " + String.valueOf(c)); - } - - public static void keyReleased(int key, char c) { - - } - - public static void mouseMoved(int oldx, int oldy, int newx, int newy) { - - } - - public static void mouseDragged(int oldx, int oldy, int newx, int newy) { - - } - - public static void mousePressed(int button, int x, int y) { - - } - - public static void mouseReleased(int button, int x, int y) { - - } - - public static void mouseWheelMoved(int change) { - - } - - public static void controllerButtonPressed(int controller, int button) { - - } - - public static void controllerButtonReleased(int controller, int button) { - - } - - private static boolean keyPressedByCode(int key, EnumKeyFunc fn) { - return (KeyMap.getKeyCode(fn) == key); - } - -} diff --git a/src/com/Torvald/Terrarum/GameControl/GameController.kt b/src/com/Torvald/Terrarum/GameControl/GameController.kt new file mode 100644 index 000000000..05dca0526 --- /dev/null +++ b/src/com/Torvald/Terrarum/GameControl/GameController.kt @@ -0,0 +1,122 @@ +package com.Torvald.Terrarum.GameControl + +import com.Torvald.Terrarum.Actors.Controllable +import com.Torvald.Terrarum.Actors.Player +import com.Torvald.Terrarum.MapDrawer.MapCamera +import com.Torvald.Terrarum.MapDrawer.MapDrawer +import com.Torvald.Terrarum.Terrarum +import com.Torvald.Terrarum.TileProperties.TileNameCode +import com.Torvald.Terrarum.TileProperties.TilePropCodex +import com.Torvald.Terrarum.UserInterface.UIHandler +import org.newdawn.slick.Input + +/** + * Created by minjaesong on 15-12-31. + */ +object GameController { + + fun processInput(input: Input) { + val mouseTileX = ((MapCamera.getCameraX() + input.mouseX / Terrarum.game.screenZoom) / MapDrawer.TILE_SIZE).toInt() + val mouseTileY = ((MapCamera.getCameraY() + input.mouseY / Terrarum.game.screenZoom) / MapDrawer.TILE_SIZE).toInt() + + + KeyToggler.update(input) + + + if (!Terrarum.game.consoleHandler.isTakingControl) { + if (Terrarum.game.player.vehicleRiding != null) { + Terrarum.game.player.vehicleRiding!!.processInput(input) + } + + Terrarum.game.player.processInput(input) + + for (ui in Terrarum.game.uiContainer) { + ui.processInput(input) + } + } + else { + Terrarum.game.consoleHandler.processInput(input) + } + + + if (input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON)) { + // test tile remove + try { + Terrarum.game.map.setTileTerrain(mouseTileX, mouseTileY, TileNameCode.AIR) + // Terrarum.game.map.setTileWall(mouseTileX, mouseTileY, TileNameCode.AIR); + } + catch (e: ArrayIndexOutOfBoundsException) { + } + + } + else if (input.isMouseButtonDown(Input.MOUSE_RIGHT_BUTTON)) { + // test tile place + try { + Terrarum.game.map.setTileTerrain(mouseTileX, mouseTileY, Terrarum.game.player.getActorValue().getAsInt("selectedtile")!!) + } + catch (e: ArrayIndexOutOfBoundsException) { + } + + } + } + + fun keyPressed(key: Int, c: Char) { + if (keyPressedByCode(key, EnumKeyFunc.UI_CONSOLE)) { + Terrarum.game.consoleHandler.toggleOpening() + } + else if (keyPressedByCode(key, EnumKeyFunc.UI_BASIC_INFO)) { + Terrarum.game.debugWindow.toggleOpening() + } + + + + if (!Terrarum.game.consoleHandler.isTakingControl) { + if (Terrarum.game.player.vehicleRiding != null) { + Terrarum.game.player.vehicleRiding!!.keyPressed(key, c) + } + + Terrarum.game.player.keyPressed(key, c) + } + else { + Terrarum.game.consoleHandler.keyPressed(key, c) + } + + //System.out.println(String.valueOf(key) + ", " + String.valueOf(c)); + } + + fun keyReleased(key: Int, c: Char) { + + } + + fun mouseMoved(oldx: Int, oldy: Int, newx: Int, newy: Int) { + + } + + fun mouseDragged(oldx: Int, oldy: Int, newx: Int, newy: Int) { + + } + + fun mousePressed(button: Int, x: Int, y: Int) { + + } + + fun mouseReleased(button: Int, x: Int, y: Int) { + + } + + fun mouseWheelMoved(change: Int) { + + } + + fun controllerButtonPressed(controller: Int, button: Int) { + + } + + fun controllerButtonReleased(controller: Int, button: Int) { + + } + + private fun keyPressedByCode(key: Int, fn: EnumKeyFunc): Boolean { + return KeyMap.getKeyCode(fn) == key + } +} diff --git a/src/com/Torvald/Terrarum/GameControl/Key.java b/src/com/Torvald/Terrarum/GameControl/Key.java deleted file mode 100644 index 9a7a89dc3..000000000 --- a/src/com/Torvald/Terrarum/GameControl/Key.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.Torvald.Terrarum.GameControl; - -/** - * Created by minjaesong on 16-01-15. - */ -public class Key { - - public static final int RET = 28; - public static final int BKSP = 14; - public static final int GRAVE = 41; - public static final int TAB = 15; - public static final int ESCAPE = 1; - public static final int SPACE = 57; - - public static final int L_SHIFT = 42; - public static final int R_SHIFT = 54; - - public static final int UP = 200; - public static final int DOWN = 208; - public static final int LEFT = 203; - public static final int RIGHT = 205; - - public static final int F1 = 59; - public static final int F2 = 60; - public static final int F3 = 61; - public static final int F4 = 62; - - public static final int F5 = 63; - public static final int F6 = 64; - public static final int F7 = 65; - public static final int F8 = 66; - - public static final int F9 = 67; - public static final int F10 = 68; - public static final int F11 = 87; - public static final int F12 = 88; - - public static final int NUM_1 = 2; - public static final int NUM_2 = 3; - public static final int NUM_3 = 4; - public static final int NUM_4 = 5; - public static final int NUM_5 = 6; - public static final int NUM_6 = 7; - public static final int NUM_7 = 8; - public static final int NUM_8 = 9; - public static final int NUM_9 = 10; - public static final int NUM_0 = 11; - - public static final int Q = 16; - public static final int W = 17; - public static final int E = 18; - public static final int R = 19; - public static final int T = 20; - - public static final int Y = 21; - public static final int U = 22; - public static final int I = 23; - public static final int O = 24; - public static final int P = 25; - - public static final int A = 30; - public static final int S = 31; - public static final int D = 32; - public static final int F = 33; - public static final int G = 34; - - public static final int H = 35; - public static final int J = 36; - public static final int K = 37; - public static final int L = 38; - public static final int SEMICOLON = 39; - - public static final int Z = 44; - public static final int X = 45; - public static final int C = 46; - public static final int V = 47; - public static final int B = 48; - - public static final int N = 49; - public static final int M = 50; - - public static final int PGUP = 201; - public static final int PGDN = 209; - public static final int HOME = 199; - public static final int END = 207; -} diff --git a/src/com/Torvald/Terrarum/GameControl/Key.kt b/src/com/Torvald/Terrarum/GameControl/Key.kt new file mode 100644 index 000000000..851825994 --- /dev/null +++ b/src/com/Torvald/Terrarum/GameControl/Key.kt @@ -0,0 +1,86 @@ +package com.Torvald.Terrarum.GameControl + +/** + * Created by minjaesong on 16-01-15. + */ +object Key { + + val RET = 28 + val BKSP = 14 + val GRAVE = 41 + val TAB = 15 + val ESCAPE = 1 + val SPACE = 57 + + val L_SHIFT = 42 + val R_SHIFT = 54 + + val UP = 200 + val DOWN = 208 + val LEFT = 203 + val RIGHT = 205 + + val F1 = 59 + val F2 = 60 + val F3 = 61 + val F4 = 62 + + val F5 = 63 + val F6 = 64 + val F7 = 65 + val F8 = 66 + + val F9 = 67 + val F10 = 68 + val F11 = 87 + val F12 = 88 + + val NUM_1 = 2 + val NUM_2 = 3 + val NUM_3 = 4 + val NUM_4 = 5 + val NUM_5 = 6 + val NUM_6 = 7 + val NUM_7 = 8 + val NUM_8 = 9 + val NUM_9 = 10 + val NUM_0 = 11 + + val Q = 16 + val W = 17 + val E = 18 + val R = 19 + val T = 20 + + val Y = 21 + val U = 22 + val I = 23 + val O = 24 + val P = 25 + + val A = 30 + val S = 31 + val D = 32 + val F = 33 + val G = 34 + + val H = 35 + val J = 36 + val K = 37 + val L = 38 + val SEMICOLON = 39 + + val Z = 44 + val X = 45 + val C = 46 + val V = 47 + val B = 48 + + val N = 49 + val M = 50 + + val PGUP = 201 + val PGDN = 209 + val HOME = 199 + val END = 207 +} diff --git a/src/com/Torvald/Terrarum/GameControl/KeyMap.java b/src/com/Torvald/Terrarum/GameControl/KeyMap.java deleted file mode 100644 index d1897cde8..000000000 --- a/src/com/Torvald/Terrarum/GameControl/KeyMap.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.Torvald.Terrarum.GameControl; - -import java.util.Hashtable; - -/** - * Created by minjaesong on 15-12-31. - */ -public class KeyMap { - - public static Hashtable map_code = new Hashtable<>(); - - public static void build(){ - - map_code.put(EnumKeyFunc.MOVE_UP, Key.E); - map_code.put(EnumKeyFunc.MOVE_LEFT, Key.S); - map_code.put(EnumKeyFunc.MOVE_DOWN, Key.D); - map_code.put(EnumKeyFunc.MOVE_RIGHT, Key.F); - map_code.put(EnumKeyFunc.JUMP, Key.SPACE); - map_code.put(EnumKeyFunc.UI_CONSOLE, Key.GRAVE); - map_code.put(EnumKeyFunc.UI_BASIC_INFO, Key.F3); - } - - public static int getKeyCode(EnumKeyFunc fn) { - return map_code.get(fn); - } - - public static void set(EnumKeyFunc func, int key){ - map_code.put(func, key); - } - -} diff --git a/src/com/Torvald/Terrarum/GameControl/KeyMap.kt b/src/com/Torvald/Terrarum/GameControl/KeyMap.kt new file mode 100644 index 000000000..98dcfbff0 --- /dev/null +++ b/src/com/Torvald/Terrarum/GameControl/KeyMap.kt @@ -0,0 +1,31 @@ +package com.Torvald.Terrarum.GameControl + +import java.util.Hashtable + +/** + * Created by minjaesong on 15-12-31. + */ +object KeyMap { + + var map_code = Hashtable() + + fun build() { + + map_code.put(EnumKeyFunc.MOVE_UP, Key.E) + map_code.put(EnumKeyFunc.MOVE_LEFT, Key.S) + map_code.put(EnumKeyFunc.MOVE_DOWN, Key.D) + map_code.put(EnumKeyFunc.MOVE_RIGHT, Key.F) + map_code.put(EnumKeyFunc.JUMP, Key.SPACE) + map_code.put(EnumKeyFunc.UI_CONSOLE, Key.GRAVE) + map_code.put(EnumKeyFunc.UI_BASIC_INFO, Key.F3) + } + + fun getKeyCode(fn: EnumKeyFunc): Int { + return map_code[fn]!! + } + + operator fun set(func: EnumKeyFunc, key: Int) { + map_code.put(func, key) + } + +} diff --git a/src/com/Torvald/Terrarum/GameControl/KeyToggler.java b/src/com/Torvald/Terrarum/GameControl/KeyToggler.java deleted file mode 100644 index edc2eb637..000000000 --- a/src/com/Torvald/Terrarum/GameControl/KeyToggler.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.Torvald.Terrarum.GameControl; - -import org.newdawn.slick.GameContainer; -import org.newdawn.slick.Input; - -public class KeyToggler { - - private static boolean[] currentState = new boolean[256]; - private static boolean[] isPressed = new boolean[256]; - private static boolean[] isToggled = new boolean[256]; - - public static boolean isOn(int key){ - return currentState[key]; - } - - public static void update(Input input){ - for (int i = 0; i < 256; i++) { - if (input.isKeyDown(i)) { - isPressed[i] = true; - } else { - isPressed[i] = false; - } - } - - for (int i = 0; i < 256; i++){ - if (isPressed[i] && !currentState[i] && !isToggled[i]){ - currentState[i] = true; - isToggled[i] = true; - } - else if(isPressed[i] && currentState[i] && !isToggled[i]){ - currentState[i] = false; - isToggled[i] = true; - } - - if (!isPressed[i] && isToggled[i]){ - isToggled[i] = false; - } - } - } - - public static void forceSet(int key, boolean b) { - currentState[key] = b; - isToggled[key] = true; - } - -} diff --git a/src/com/Torvald/Terrarum/GameControl/KeyToggler.kt b/src/com/Torvald/Terrarum/GameControl/KeyToggler.kt new file mode 100644 index 000000000..5eef3b513 --- /dev/null +++ b/src/com/Torvald/Terrarum/GameControl/KeyToggler.kt @@ -0,0 +1,47 @@ +package com.Torvald.Terrarum.GameControl + +import org.newdawn.slick.GameContainer +import org.newdawn.slick.Input + +object KeyToggler { + + private val currentState = BooleanArray(256) + private val isPressed = BooleanArray(256) + private val isToggled = BooleanArray(256) + + fun isOn(key: Int): Boolean { + return currentState[key] + } + + fun update(input: Input) { + for (i in 0..255) { + if (input.isKeyDown(i)) { + isPressed[i] = true + } + else { + isPressed[i] = false + } + } + + for (i in 0..255) { + if (isPressed[i] && !currentState[i] && !isToggled[i]) { + currentState[i] = true + isToggled[i] = true + } + else if (isPressed[i] && currentState[i] && !isToggled[i]) { + currentState[i] = false + isToggled[i] = true + } + + if (!isPressed[i] && isToggled[i]) { + isToggled[i] = false + } + } + } + + fun forceSet(key: Int, b: Boolean) { + currentState[key] = b + isToggled[key] = true + } + +} diff --git a/src/com/Torvald/Terrarum/GameItem/InventoryItem.kt b/src/com/Torvald/Terrarum/GameItem/InventoryItem.kt index 7ce4389fa..eed2fd7b5 100644 --- a/src/com/Torvald/Terrarum/GameItem/InventoryItem.kt +++ b/src/com/Torvald/Terrarum/GameItem/InventoryItem.kt @@ -3,7 +3,7 @@ package com.Torvald.Terrarum.GameItem import org.newdawn.slick.GameContainer /** - * Created by minjaesong on 16-03-15. + * Created by minjaesong on 16-01-16. */ interface InventoryItem { /** @@ -17,7 +17,12 @@ interface InventoryItem { /** * Weight of the item, Float */ - var weight: Float + var mass: Float + + /** + * Scale of the item. Real mass: mass * (scale^3) + */ + var scale: Float /** * Effects applied while in pocket diff --git a/src/com/Torvald/Terrarum/GameItem/TileAsItem.kt b/src/com/Torvald/Terrarum/GameItem/TileAsItem.kt index dd79b2229..cab35535a 100644 --- a/src/com/Torvald/Terrarum/GameItem/TileAsItem.kt +++ b/src/com/Torvald/Terrarum/GameItem/TileAsItem.kt @@ -9,11 +9,12 @@ import org.newdawn.slick.GameContainer class TileAsItem(tileNum: Int) : InventoryItem { override var itemID: Long = -1 - override var weight: Float = 0f + override var mass: Float = 0f + override var scale: Float = 1f init { - itemID = tileNum as Long - weight = TilePropCodex.getProp(tileNum).density / 1000f + itemID = tileNum.toLong() + mass = TilePropCodex.getProp(tileNum).density / 1000f } override fun effectWhileInPocket(gc: GameContainer, delta_t: Int) { diff --git a/src/com/Torvald/Terrarum/GameMap/GameMap.java b/src/com/Torvald/Terrarum/GameMap/GameMap.java index 877df4432..29a4f0802 100644 --- a/src/com/Torvald/Terrarum/GameMap/GameMap.java +++ b/src/com/Torvald/Terrarum/GameMap/GameMap.java @@ -9,29 +9,22 @@ package com.Torvald.Terrarum.GameMap; -import com.sun.istack.internal.NotNull; import org.newdawn.slick.SlickException; -import java.io.Serializable; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.Spliterator; -import java.util.function.Consumer; - public class GameMap { //layers private volatile MapLayer layerWall; private volatile MapLayer layerTerrain; private volatile MapLayer layerWire; - private volatile PairedMapLayer wallDamageCode; - private volatile PairedMapLayer terrainDamageCode; + private volatile PairedMapLayer wallDamage; + private volatile PairedMapLayer terrainDamage; //properties - public int width; - public int height; - public int spawnX; - public int spawnY; + private int width; + private int height; + private int spawnX; + private int spawnY; public static transient final int WALL = 0; public static transient final int TERRAIN = 1; @@ -44,6 +37,8 @@ public class GameMap { private WorldTime worldTime; public static transient final int TILES_SUPPORTED = MapLayer.RANGE * PairedMapLayer.RANGE; + public static transient final byte BITS = 1; // 1 for Byte, 2 for Char, 4 for Int, 8 for Long + public static transient final byte LAYERS = 4; // terrain, wall (terrainDamage + wallDamage), wire /** * @param width @@ -59,8 +54,8 @@ public class GameMap { layerTerrain = new MapLayer(width, height); layerWall = new MapLayer(width, height); layerWire = new MapLayer(width, height); - terrainDamageCode = new PairedMapLayer(width, height); - wallDamageCode = new PairedMapLayer(width, height); + terrainDamage = new PairedMapLayer(width, height); + wallDamage = new PairedMapLayer(width, height); globalLight = (char) 63999; worldTime = new WorldTime(); @@ -103,7 +98,7 @@ public class GameMap { * @return byte[][] damage code pair */ public byte[][] getDamageDataArray() { - return terrainDamageCode.dataPair; + return terrainDamage.dataPair; } /** @@ -123,12 +118,12 @@ public class GameMap { return layerWire; } - public PairedMapLayer getTerrainDamageCode() { - return terrainDamageCode; + public PairedMapLayer getTerrainDamage() { + return terrainDamage; } - public PairedMapLayer getWallDamageCode() { - return wallDamageCode; + public PairedMapLayer getWallDamage() { + return wallDamage; } public int getTileFromWall(int x, int y) { @@ -144,11 +139,11 @@ public class GameMap { } public int getWallDamage(int x, int y) { - return wallDamageCode.getData(x, y); + return wallDamage.getData(x, y); } public int getTerrainDamage(int x, int y) { - return terrainDamageCode.getData(x, y); + return terrainDamage.getData(x, y); } /** @@ -177,12 +172,12 @@ public class GameMap { public void setTileWall(int x, int y, byte tile, int damage) { layerWall.setTile(x, y, tile); - wallDamageCode.setData(x, y, damage); + wallDamage.setData(x, y, damage); } public void setTileTerrain(int x, int y, byte tile, int damage) { layerTerrain.setTile(x, y, tile); - terrainDamageCode.setData(x, y, damage); + terrainDamage.setData(x, y, damage); } public void setTileWire(int x, int y, byte tile) { @@ -229,4 +224,24 @@ public class GameMap { public WorldTime getWorldTime() { return worldTime; } + + public void updateWorldTime(int delta) { + worldTime.update(delta); + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + public int getSpawnX() { + return spawnX; + } + + public int getSpawnY() { + return spawnY; + } } \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/GameMap/PairedMapLayer.java b/src/com/Torvald/Terrarum/GameMap/PairedMapLayer.java index 107942ca8..23e003d45 100644 --- a/src/com/Torvald/Terrarum/GameMap/PairedMapLayer.java +++ b/src/com/Torvald/Terrarum/GameMap/PairedMapLayer.java @@ -8,7 +8,7 @@ import java.util.function.Consumer; /** * Created by minjaesong on 16-02-15. */ -public class PairedMapLayer implements Iterable { +public class PairedMapLayer implements Iterable { /** * 0b_xxxx_yyyy, x for lower index, y for higher index @@ -40,28 +40,29 @@ public class PairedMapLayer implements Iterable { /** * Returns an iterator over elements of type {@code T}. + * Note: this iterator will return combined damage, that is 0bxxxx_yyyy as whole. * * @return an Iterator. */ @Override - public Iterator iterator() { - return new Iterator() { + public Iterator iterator() { + return new Iterator() { private int iteratorCount = 0; @Override public boolean hasNext() { - return iteratorCount < width * height * 2; + return iteratorCount < width * height; } @Override - public Integer next() { - int y = iteratorCount / (width * 2); - int x = iteratorCount % (width * 2); + public Byte next() { + int y = iteratorCount / width; + int x = iteratorCount % width; // advance counter iteratorCount += 1; - return getData(x, y); + return dataPair[y][x]; } }; } @@ -74,6 +75,8 @@ public class PairedMapLayer implements Iterable { * is specified). Exceptions thrown by the action are relayed to the * caller. * + * Note: this iterator will return combined damage, that is 0bxxxx_yyyy as whole. + * * @param action The action to be performed for each element * @throws NullPointerException if the specified action is null * @implSpec

The default implementation behaves as if: @@ -85,7 +88,9 @@ public class PairedMapLayer implements Iterable { */ @Override public void forEach(Consumer action) { - throw new UnsupportedOperationException(); + for (Byte b : this) { + action.accept(b); + } } /** @@ -106,7 +111,7 @@ public class PairedMapLayer implements Iterable { * @since 1.8 */ @Override - public Spliterator spliterator() { + public Spliterator spliterator() { throw new UnsupportedOperationException(); } diff --git a/src/com/Torvald/Terrarum/GameMap/WorldTime.java b/src/com/Torvald/Terrarum/GameMap/WorldTime.java deleted file mode 100644 index 444d87266..000000000 --- a/src/com/Torvald/Terrarum/GameMap/WorldTime.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.Torvald.Terrarum.GameMap; - -import java.io.Serializable; - -/** - * Created by minjaesong on 16-01-24. - */ -public class WorldTime { - - private static int seconds = 0; - private static int minutes = 0; - private static int hours = 0; - - private static int daysCount = 0; //NOT a calendar day - - private static int days = 1; - private static int months = 1; - private static int years = 1; - - private static int dayOfWeek = 0; //0: Mondag-The first day of weekday - - /** - * 22h - */ - public static transient final int DAY_LENGTH = 79200; //must be the multiple of 3600 - private static int timeDelta = 1; - - private static transient final int HOUR_SEC = 3600; - private static transient final int MINUTE_SEC = 60; - - public static final String[] DAYNAMES = { //daynames are taken from Nynorsk (å -> o) - "Mondag" - ,"Tysdag" - ,"Midtedag" //From Islenska Miðvikudagur - ,"Torsdag" - ,"Fredag" - ,"Laurdag" - ,"Sundag" - ,"Verdag" //From Norsk word 'verd' - }; - public static final String[] DAYNAMES_SHORT = { - "Mon" - ,"Tys" - ,"Mid" - ,"Tor" - ,"Fre" - ,"Lau" - ,"Sun" - ,"Ver" - }; - - public WorldTime() { - } - - /** - * Note: Target FPS must be 60. - */ - public static void update(){ - //time - seconds += timeDelta; - - kickVariables(); - - //calendar (the world calendar) - if (dayOfWeek == 7){ - dayOfWeek = 0; - } - if ((months == 12 || (months == 7 && isLeapYear())) && days == 31){ - dayOfWeek = 7; - } - - if ((months == 12 || (months == 7 && isLeapYear())) && days == 32){ - days = 1; - months = 1; - years++; - } - else if ((months == 1 || months == 4 || months == 7 || months == 10) && days > 31){ - days = 0; - months++; - } - else if (days > 30){ - days = 0; - months++; - } - - if (months > 12){ - months = 1; - years++; - } - } - - /** - * How much time has passed today, in seconds.
- * 0 == 6 AM - * @return - */ - public static int elapsedSeconds(){ - return (HOUR_SEC * hours + MINUTE_SEC * minutes + seconds) % DAY_LENGTH; - } - - /** - * How much time has passed since the beginning, in seconds. - * @return - */ - public static long totalSeconds(){ - return (long)(DAY_LENGTH) * daysCount + HOUR_SEC * hours + MINUTE_SEC * minutes + seconds; - } - - public static boolean isLeapYear(){ - return ((years % 4 == 0) && (years % 100 != 0)) || (years % 400 == 0); - } - - public static void setTime(int t){ - days += t / DAY_LENGTH; - hours = t / HOUR_SEC; - minutes = (t - HOUR_SEC * hours) / MINUTE_SEC; - seconds = t - minutes * MINUTE_SEC; - } - - public static void addTime(int t){ - setTime(elapsedSeconds() + t); - } - - public static void setTimeDelta(int d){ - timeDelta = (d == 0) ? 1 : d; - } - - public static String getDayName(){ - return DAYNAMES[dayOfWeek]; - } - - private static void kickVariables() { - if (seconds >= 60){ - seconds = 0; - minutes++; - } - - if (minutes >= 60){ - minutes = 0; - hours++; - } - - if (hours >= DAY_LENGTH/3600){ - hours = 0; - days++; - daysCount++; - dayOfWeek++; - } - } -} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/GameMap/WorldTime.kt b/src/com/Torvald/Terrarum/GameMap/WorldTime.kt new file mode 100644 index 000000000..d2629dc2c --- /dev/null +++ b/src/com/Torvald/Terrarum/GameMap/WorldTime.kt @@ -0,0 +1,150 @@ +package com.Torvald.Terrarum.GameMap + +/** + * Created by minjaesong on 16-01-24. + */ +class WorldTime { + internal var seconds: Int + internal var minutes: Int + internal var hours: Int + + internal var daysCount: Int //NOT a calendar day + + internal var days: Int + internal var months: Int + internal var years: Int + + internal var dayOfWeek: Int //0: Mondag-The first day of weekday + + internal var timeDelta = 1 + + @Transient private var realMillisec: Int + + val DAYNAMES = arrayOf(//daynames are taken from Nynorsk (å -> o) + "Mondag", "Tysdag", "Midtedag" //From Islenska Miðvikudagur + , "Torsdag", "Fredag", "Laurdag", "Sundag", "Verdag" //From Norsk word 'verd' + ) + val DAYNAMES_SHORT = arrayOf("Mon", "Tys", "Mid", "Tor", "Fre", "Lau", "Sun", "Ver") + + + @Transient val REAL_SEC_IN_MILLI = 1000 + + init { + seconds = 0 + minutes = 0 + hours = 0 + daysCount = 0 + days = 1 + months = 1 + years = 1 + dayOfWeek = 0 + realMillisec = 0 + } + + fun update(delta: Int) { + //time + realMillisec += delta * timeDelta + seconds = Math.round(GAME_MIN_TO_REAL_SEC.toFloat() / REAL_SEC_IN_MILLI.toFloat() * realMillisec.toFloat()) + + if (realMillisec >= REAL_SEC_IN_MILLI) + realMillisec -= REAL_SEC_IN_MILLI + + kickVariables() + } + + /** + * How much time has passed today, in seconds. + * 0 == 6 AM + * @return + */ + fun elapsedSeconds(): Int { + return (HOUR_SEC * hours + MINUTE_SEC * minutes + seconds) % DAY_LENGTH + } + + val isLeapYear: Boolean + get() = years % 4 == 0 && years % 100 != 0 || years % 400 == 0 + + fun setTime(t: Int) { + days += t / DAY_LENGTH + hours = t / HOUR_SEC + minutes = (t - HOUR_SEC * hours) / MINUTE_SEC + seconds = t - minutes * MINUTE_SEC + } + + fun addTime(t: Int) { + setTime(elapsedSeconds() + t) + } + + fun setTimeDelta(d: Int) { + timeDelta = if (d < 0) 0 else d + } + + val dayName: String + get() = DAYNAMES[dayOfWeek] + + private fun kickVariables() { + if (seconds >= MINUTE_SEC) { + seconds = 0 + minutes += 1 + } + + if (minutes >= HOUR_MIN) { + minutes = 0 + hours += 1 + } + + if (hours >= DAY_LENGTH / HOUR_SEC) { + hours = 0 + days += 1 + daysCount += 1 + dayOfWeek += 1 + } + + //calendar (the world calendar) + if (dayOfWeek == 7) { + dayOfWeek = 0 + } + if ((months == 12 || months == 7 && isLeapYear) && days == 31) { + dayOfWeek = 7 + } + + if ((months == 12 || months == 7 && isLeapYear) && days == 32) { + days = 1 + months = 1 + years++ + } + else if ((months == 1 || months == 4 || months == 7 || months == 10) && days > 31) { + days = 0 + months++ + } + else if (days > 30) { + days = 0 + months++ + } + + if (months > 12) { + months = 1 + years++ + } + } + + fun getFormattedTime(): String { + fun formatMin(min: Int): String { + return if (min < 10) "0${min.toString()}" else min.toString() + } + + return "${hours}h${formatMin(minutes)}" + } + + companion object { + /** + * 22h + */ + @Transient val DAY_LENGTH = 79200 //must be the multiple of 3600 + + @Transient val HOUR_SEC: Int = 3600 + @Transient val MINUTE_SEC: Int = 60 + @Transient val HOUR_MIN: Int = 60 + @Transient val GAME_MIN_TO_REAL_SEC: Float = 60f + } +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/ItemProperties/ItemProp.kt b/src/com/Torvald/Terrarum/ItemProperties/ItemProp.kt new file mode 100644 index 000000000..511051468 --- /dev/null +++ b/src/com/Torvald/Terrarum/ItemProperties/ItemProp.kt @@ -0,0 +1,9 @@ +package com.Torvald.Terrarum.ItemProperties + +/** + * Created by minjaesong on 16-03-18. + */ +internal data class ItemProp ( + var baseMass: Float, + var material: Material +) \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/GameItem/ItemPropCodex.kt b/src/com/Torvald/Terrarum/ItemProperties/ItemPropCodex.kt similarity index 84% rename from src/com/Torvald/Terrarum/GameItem/ItemPropCodex.kt rename to src/com/Torvald/Terrarum/ItemProperties/ItemPropCodex.kt index eeb38bd34..111f97511 100644 --- a/src/com/Torvald/Terrarum/GameItem/ItemPropCodex.kt +++ b/src/com/Torvald/Terrarum/ItemProperties/ItemPropCodex.kt @@ -1,6 +1,7 @@ -package com.Torvald.Terrarum.GameItem +package com.Torvald.Terrarum.ItemProperties import com.Torvald.Terrarum.Actors.CanBeStoredAsItem +import com.Torvald.Terrarum.GameItem.InventoryItem import com.Torvald.Terrarum.Terrarum import org.newdawn.slick.GameContainer import java.util.* @@ -30,10 +31,10 @@ object ItemPropCodex { fun getItem(code: Long): InventoryItem { if (code < ITEM_UNIQUE_MAX) - return itemCodex[code as Int]!! + return itemCodex[(code and 0xFFFFFFFF).toInt()] else { for (actor in Terrarum.game.actorContainer) { - if (actor is CanBeStoredAsItem && actor.referenceID!!.equals(code)) + if (actor is CanBeStoredAsItem && actor.referenceID.equals(code)) return actor.itemData } diff --git a/src/com/Torvald/Terrarum/ItemProperties/Material.kt b/src/com/Torvald/Terrarum/ItemProperties/Material.kt new file mode 100644 index 000000000..174cedcfc --- /dev/null +++ b/src/com/Torvald/Terrarum/ItemProperties/Material.kt @@ -0,0 +1,10 @@ +package com.Torvald.Terrarum.ItemProperties + +/** + * Created by minjaesong on 16-03-18. + */ +internal data class Material ( + var maxEdge: Int, + var hardness: Int, + var density: Int +) \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/ItemProperties/MaterialFactory.kt b/src/com/Torvald/Terrarum/ItemProperties/MaterialFactory.kt new file mode 100644 index 000000000..4655052f7 --- /dev/null +++ b/src/com/Torvald/Terrarum/ItemProperties/MaterialFactory.kt @@ -0,0 +1,7 @@ +package com.Torvald.Terrarum.ItemProperties + +/** + * Created by minjaesong on 16-03-19. + */ +object MaterialFactory { +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/ItemProperties/MaterialPropCodex.kt b/src/com/Torvald/Terrarum/ItemProperties/MaterialPropCodex.kt new file mode 100644 index 000000000..085ce9130 --- /dev/null +++ b/src/com/Torvald/Terrarum/ItemProperties/MaterialPropCodex.kt @@ -0,0 +1,9 @@ +package com.Torvald.Terrarum.ItemProperties + +/** + * Created by minjaesong on 16-03-18. + */ +object MaterialPropCodex { + val CSV_PATH = "./src/com/Torvald/Terrarum/ItemProperties/materialprop.csv" + +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/KVHashMap.java b/src/com/Torvald/Terrarum/KVHashMap.java deleted file mode 100644 index f909cef33..000000000 --- a/src/com/Torvald/Terrarum/KVHashMap.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.Torvald.Terrarum; - -import com.google.gson.JsonPrimitive; - -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Set; - -/** - * Created by minjaesong on 15-12-30. - */ -public class KVHashMap { - - private HashMap hashMap; - - public KVHashMap() { - hashMap = new HashMap<>(); - } - - /** - * Add key-value pair to the configuration table. - * If key does not exist on the table, new key will be generated. - * If key already exists, the value will be overwritten. - * - * @param key case insensitive - * @param value - */ - public void set(String key, Object value){ - hashMap.put(key.toLowerCase(), value); - } - - /** - * Get value using key from configuration table. - * - * @param key case insensitive - * @return Object value - */ - public Object get(String key){ - return hashMap.get(key.toLowerCase()); - } - - public int getAsInt(String key) { - return (int) get(key); - } - - public float getAsFloat(String key) { - Object value = get(key); - if (value instanceof Integer) return ((Integer) value).floatValue(); - else if (value instanceof JsonPrimitive) return ((JsonPrimitive) value).getAsFloat(); - return (float) value; - } - - public String getAsString(String key) { - Object value = get(key); - if (value instanceof JsonPrimitive) return ((JsonPrimitive) value).getAsString(); - return (String) value; - } - - public boolean getAsBoolean(String key) { - Object value = get(key); - if (value instanceof JsonPrimitive) return ((JsonPrimitive) value).getAsBoolean(); - return (boolean) value; - } - - public boolean hasKey(String key) { - return hashMap.containsKey(key); - } - - public Set getKeySet() { - return hashMap.keySet(); - } - -} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/KVHashMap.kt b/src/com/Torvald/Terrarum/KVHashMap.kt new file mode 100644 index 000000000..be065ff2a --- /dev/null +++ b/src/com/Torvald/Terrarum/KVHashMap.kt @@ -0,0 +1,72 @@ +package com.Torvald.Terrarum + +import com.google.gson.JsonPrimitive +import java.util.* + +/** + * Created by minjaesong on 16-03-19. + */ +open class KVHashMap { + + private val hashMap: HashMap + + init { + hashMap = HashMap() + } + + /** + * Add key-value pair to the configuration table. + * If key does not exist on the table, new key will be generated. + * If key already exists, the value will be overwritten. + + * @param key case insensitive + * * + * @param value + */ + operator fun set(key: String, value: Any) { + hashMap.put(key.toLowerCase(), value) + } + + /** + * Get value using key from configuration table. + + * @param key case insensitive + * * + * @return Object value + */ + operator fun get(key: String): Any? { + return hashMap[key.toLowerCase()] + } + + fun getAsInt(key: String): Int? { + return get(key) as Int + } + + fun getAsFloat(key: String): Float? { + val value = get(key) + if (value is Int) + return value.toFloat() + else if (value is JsonPrimitive) return value.asFloat + return value as Float + } + + fun getAsString(key: String): String? { + val value = get(key) + if (value is JsonPrimitive) return value.asString + return value as String + } + + fun getAsBoolean(key: String): Boolean? { + val value = get(key) + if (value is JsonPrimitive) return value.asBoolean + return value as Boolean + } + + fun hasKey(key: String): Boolean { + return hashMap.containsKey(key) + } + + val keySet: Set + get() = hashMap.keys + +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/LangPack/Lang.java b/src/com/Torvald/Terrarum/LangPack/Lang.java index 78a77f54a..442671266 100644 --- a/src/com/Torvald/Terrarum/LangPack/Lang.java +++ b/src/com/Torvald/Terrarum/LangPack/Lang.java @@ -52,7 +52,7 @@ public class Lang { public Lang() throws IOException { lang = new Hashtable<>(); - List langPackCSV = CSVFetcher.readCSV(PATH_TO_CSV + CSV_MAIN); + List langPackCSV = CSVFetcher.INSTANCE.readCSV(PATH_TO_CSV + CSV_MAIN); File file = new File(PATH_TO_CSV); FilenameFilter filter = new FilenameFilter() { @@ -62,7 +62,7 @@ public class Lang { } }; for (String csvfilename : file.list(filter)) { - List csv = CSVFetcher.readCSV(PATH_TO_CSV + csvfilename); + List csv = CSVFetcher.INSTANCE.readCSV(PATH_TO_CSV + csvfilename); csv.forEach(langPackCSV::add); } @@ -92,7 +92,7 @@ public class Lang { public static String get(String key) { String value = null; - try { value = lang.get(key).get(Terrarum.gameLocale); } + try { value = lang.get(key).get(Terrarum.Companion.getGameLocale()); } catch (IllegalArgumentException e) { value = key; } return value; } @@ -104,7 +104,7 @@ public class Lang { public static String pluralise(String word, int count) { if (count < 2) return word; - switch (Terrarum.gameLocale) { + switch (Terrarum.Companion.getGameLocale()) { case ("fr"): if (Arrays.binarySearch(FRENCH_WORD_NORMAL_PLURAL, word) >= 0) { return word + "s"; diff --git a/src/com/Torvald/Terrarum/MapDrawer/LightmapLantern.kt b/src/com/Torvald/Terrarum/MapDrawer/LightmapLantern.kt index e6a9a7ab5..bfeed9f52 100644 --- a/src/com/Torvald/Terrarum/MapDrawer/LightmapLantern.kt +++ b/src/com/Torvald/Terrarum/MapDrawer/LightmapLantern.kt @@ -3,4 +3,8 @@ package com.Torvald.Terrarum.MapDrawer /** * Created by minjaesong on 16-03-15. */ -internal data class LightmapLantern(var x: Int, var y: Int, var intensity: Char) \ No newline at end of file +internal data class LightmapLantern( + var x: Int, + var y: Int, + var intensity: Char +) \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/MapDrawer/LightmapRenderer.kt b/src/com/Torvald/Terrarum/MapDrawer/LightmapRenderer.kt index d59b79968..156ca9b69 100644 --- a/src/com/Torvald/Terrarum/MapDrawer/LightmapRenderer.kt +++ b/src/com/Torvald/Terrarum/MapDrawer/LightmapRenderer.kt @@ -12,7 +12,7 @@ import org.newdawn.slick.Graphics import java.util.* /** - * Created by minjaesong on 16-03-15. + * Created by minjaesong on 16-01-25. */ object LightmapRenderer { @@ -38,14 +38,16 @@ object LightmapRenderer { private val TSIZE = MapDrawer.TILE_SIZE // color model related vars - @JvmStatic val MUL = Col40.MUL - @JvmStatic val MUL_2 = Col40.MUL_2 - @JvmStatic val CHANNEL_MAX = Col40.MAX_STEP - @JvmStatic val CHANNEL_MAX_FLOAT = CHANNEL_MAX.toFloat() - @JvmStatic val COLOUR_DOMAIN_SIZE = Col40.COLOUR_DOMAIN_SIZE + const val MUL = Col40.MUL + const val MUL_2 = Col40.MUL_2 + const val CHANNEL_MAX = Col40.MAX_STEP + const val CHANNEL_MAX_FLOAT = CHANNEL_MAX.toFloat() + const val COLOUR_DOMAIN_SIZE = Col40.COLOUR_DOMAIN_SIZE - @Deprecated("") - @JvmStatic + + private const val deprecatedFeatureDebatable = "This feature is debatable. Do not use it yet." + + @Deprecated(deprecatedFeatureDebatable) fun addLantern(x: Int, y: Int, intensity: Char) { val thisLantern = LightmapLantern(x, y, intensity) @@ -63,8 +65,7 @@ object LightmapRenderer { lanterns.add(thisLantern) } - @Deprecated("") - @JvmStatic + @Deprecated(deprecatedFeatureDebatable) fun removeLantern(x: Int, y: Int) { for (i in lanterns.indices.reversed()) { val lantern = lanterns[i] @@ -74,7 +75,6 @@ object LightmapRenderer { } } - @JvmStatic fun renderLightMap() { if (staticLightMap == null) { staticLightMap = Array(Terrarum.game.map.height) { CharArray(Terrarum.game.map.width) } @@ -106,7 +106,7 @@ object LightmapRenderer { purgePartOfLightmap(for_x_start, for_y_start, for_x_end, for_y_end) // if wider purge were not applied, GL changing (sunset, sunrise) will behave incorrectly - // ("leakage" of non-updated sunlight) + // ("leakage" of not updated sunlight) try { // Round 1 @@ -142,7 +142,6 @@ object LightmapRenderer { } - @JvmStatic fun draw(g: Graphics) { val for_x_start = MapCamera.getRenderStartX() - 1 val for_y_start = MapCamera.getRenderStartY() - 1 @@ -155,7 +154,7 @@ object LightmapRenderer { var x = for_x_start while (x < for_x_end) { // smooth - if (Terrarum.game.screenZoom >= 1 && Terrarum.gameConfig.getAsBoolean("smoothlighting")) { + if (Terrarum.game.screenZoom >= 1 && Terrarum.gameConfig.getAsBoolean("smoothlighting") ?: false) { val thisLightLevel = staticLightMap!![y][x] if (y > 0 && x < for_x_end && thisLightLevel.toInt() == 0 && staticLightMap!![y - 1][x].toInt() == 0) { try { @@ -271,9 +270,7 @@ object LightmapRenderer { } - private fun calculate(x: Int, y: Int): Char { - return calculate(x, y, false) - } + private fun calculate(x: Int, y: Int): Char = calculate(x, y, false) private fun calculate(x: Int, y: Int, doNotCalculateAmbient: Boolean): Char { var lightLevelThis: Char = 0.toChar() @@ -288,14 +285,15 @@ object LightmapRenderer { if (thisTerrain == AIR && thisWall == AIR) { lightLevelThis = sunLight } + // luminous tile on top of air else if (thisWall == AIR && thisTileLuminosity.toInt() > 0) { val darkenSunlight = darkenColoured(sunLight, thisTileOpacity) - lightLevelThis = screenBlend(darkenSunlight, thisTileLuminosity) + lightLevelThis = maximiseRGB(darkenSunlight, thisTileLuminosity) } + // opaque wall and luminous tile else if (thisWall != AIR && thisTileLuminosity.toInt() > 0) { lightLevelThis = thisTileLuminosity - }// luminous tile (opaque) - // luminous tile transparent (allows sunlight to pass) + } // END MIX TILE // mix lantern @@ -370,16 +368,16 @@ object LightmapRenderer { /** * Subtract each channel's RGB value. + * * It works like: + * * f(data, darken) = RGB(data.r - darken.r, data.g - darken.g, data.b - darken.b) - - * @param data Raw channel value [0-39] per channel - * * - * @param darken [0-39] per channel - * * - * @return darkened data [0-39] per channel + * + * @param data Raw channel value (0-39) per channel + * @param darken (0-39) per channel + * @return darkened data (0-39) per channel */ - private fun darkenColoured(data: Char, darken: Char): Char { + fun darkenColoured(data: Char, darken: Char): Char { if (darken.toInt() < 0 || darken.toInt() >= COLOUR_DOMAIN_SIZE) { throw IllegalArgumentException("darken: out of " + "range") } @@ -393,15 +391,16 @@ object LightmapRenderer { /** * Darken each channel by 'darken' argument + * * It works like: + * * f(data, darken) = RGB(data.r - darken, data.g - darken, data.b - darken) - * @param data [0-39] per channel - * * - * @param darken [0-1] - * * + * + * @param data (0-39) per channel + * @param darken (0-1) * @return */ - private fun darkenUniformFloat(data: Char, darken: Float): Char { + fun darkenUniformFloat(data: Char, darken: Float): Char { if (darken < 0 || darken > 1f) { throw IllegalArgumentException("darken: out of " + "range") } @@ -415,15 +414,15 @@ object LightmapRenderer { /** * Darken each channel by 'darken' argument + * * It works like: + * * f(data, darken) = RGB(data.r - darken, data.g - darken, data.b - darken) - * @param data [0-39] per channel - * * - * @param darken [0-39] - * * + * @param data (0-39) per channel + * @param darken (0-39) * @return */ - private fun darkenUniformInt(data: Char, darken: Int): Char { + fun darkenUniformInt(data: Char, darken: Int): Char { if (darken < 0 || darken > CHANNEL_MAX) { throw IllegalArgumentException("darken: out of " + "range") } @@ -438,8 +437,10 @@ object LightmapRenderer { /** * Add each channel's RGB value. + * * It works like: - * f(data, brighten) = RGB(data.r + darken.r, data.g + darken.g, data.b + darken.b) + * + * f(data, brighten) = RGB(data.r + brighten.r, data.g + brighten.g, data.b + brighten.b) * @param data Raw channel value [0-39] per channel * * * @param brighten [0-39] per channel @@ -542,7 +543,6 @@ object LightmapRenderer { return constructRGBFromInt(newR, newG, newB) } - @JvmStatic fun constructRGBFromInt(r: Int, g: Int, b: Int): Char { if (r < 0 || r > CHANNEL_MAX) { throw IllegalArgumentException("Red: out of range") @@ -556,7 +556,6 @@ object LightmapRenderer { return (r * MUL_2 + g * MUL + b).toChar() } - @JvmStatic fun constructRGBFromFloat(r: Float, g: Float, b: Float): Char { if (r < 0 || r > 1.0f) { throw IllegalArgumentException("Red: out of range") @@ -607,40 +606,27 @@ object LightmapRenderer { return i[0] } - private fun outOfBounds(x: Int, y: Int): Boolean { - return x < 0 || y < 0 || x >= Terrarum.game.map.width || y >= Terrarum.game.map.height - } + private fun outOfBounds(x: Int, y: Int): Boolean = + x < 0 || y < 0 || x >= Terrarum.game.map.width || y >= Terrarum.game.map.height - private fun outOfMapBounds(x: Int, y: Int): Boolean { - return x < 0 || y < 0 || x >= staticLightMap!![0].size || y >= staticLightMap!!.size - } + private fun outOfMapBounds(x: Int, y: Int): Boolean = + x < 0 || y < 0 || x >= staticLightMap!![0].size || y >= staticLightMap!!.size - private fun clampZero(i: Int): Int { - return if (i < 0) 0 else i - } + private fun clampZero(i: Int): Int = if (i < 0) 0 else i - private fun clampZero(i: Float): Float { - return if (i < 0) 0f else i - } + private fun clampZero(i: Float): Float = if (i < 0) 0f else i - private fun clampByte(i: Int): Int { - return if (i < 0) 0 else if (i > CHANNEL_MAX) CHANNEL_MAX else i - } + private fun clampByte(i: Int): Int = if (i < 0) 0 else if (i > CHANNEL_MAX) CHANNEL_MAX else i - private fun clampFloat(i: Float): Float { - return if (i < 0) 0f else if (i > 1) 1f else i - } + private fun clampFloat(i: Float): Float = if (i < 0) 0f else if (i > 1) 1f else i - @JvmStatic - fun getValueFromMap(x: Int, y: Int): Char { - return staticLightMap!![y][x] - } + fun getValueFromMap(x: Int, y: Int): Char = staticLightMap!![y][x] private fun purgePartOfLightmap(x1: Int, y1: Int, x2: Int, y2: Int) { try { - for (y in y1 - 1..y2 + 1 - 1) { - for (x in x1 - 1..x2 + 1 - 1) { - if (y == y1 - 1 || y == y2 || x == x1 - 1 || x == x2) { + for (y in y1 - 1..y2 + 1) { + for (x in x1 - 1..x2 + 1) { + if (y == y1 - 1 || y == y2 + 1 || x == x1 - 1 || x == x2 + 1) { // fill the rim with (pre) calculation staticLightMap!![y][x] = preCalculateUpdateGLOnly(x, y) } @@ -656,26 +642,49 @@ object LightmapRenderer { } private fun preCalculateUpdateGLOnly(x: Int, y: Int): Char { - val thisWall = Terrarum.game.map.getTileFromWall(x, y) + var lightLevelThis: Char = 0.toChar() val thisTerrain = Terrarum.game.map.getTileFromTerrain(x, y) + val thisWall = Terrarum.game.map.getTileFromWall(x, y) val thisTileLuminosity = TilePropCodex.getProp(thisTerrain).luminosity val thisTileOpacity = TilePropCodex.getProp(thisTerrain).opacity val sunLight = Terrarum.game.map.globalLight - val lightLevelThis: Char - // MIX TILE // open air if (thisTerrain == AIR && thisWall == AIR) { lightLevelThis = sunLight } + // luminous tile on top of air else if (thisWall == AIR && thisTileLuminosity.toInt() > 0) { val darkenSunlight = darkenColoured(sunLight, thisTileOpacity) - lightLevelThis = screenBlend(darkenSunlight, thisTileLuminosity) + lightLevelThis = maximiseRGB(darkenSunlight, thisTileLuminosity) } - else { - lightLevelThis = getValueFromMap(x, y) - }// luminous tile transparent (allows sunlight to pass) + // opaque wall and luminous tile + else if (thisWall != AIR && thisTileLuminosity.toInt() > 0) { + lightLevelThis = thisTileLuminosity + } + // END MIX TILE + + // mix lantern + for (lantern in lanterns) { + if (lantern.x == x && lantern.y == y) { + lightLevelThis = screenBlend(lightLevelThis, lantern.intensity) + break + } + } + + // mix luminous actor + for (actor in Terrarum.game.actorContainer) { + if (actor is Luminous && actor is ActorWithBody) { + val tileX = Math.round(actor.hitbox!!.pointedX / TSIZE) + val tileY = Math.round(actor.hitbox!!.pointedY / TSIZE) - 1 + val actorLuminosity = actor.luminosity + if (x == tileX && y == tileY) { + lightLevelThis = screenBlend(lightLevelThis, actorLuminosity) + } + } + } + return lightLevelThis } @@ -711,7 +720,5 @@ object LightmapRenderer { return Math.round(sum / i.size.toFloat()) } - private fun toTargetColour(raw: Char): Color { - return Col40().createSlickColor(raw.toInt()) - } + private fun toTargetColour(raw: Char): Color = Col40().createSlickColor(raw.toInt()) } diff --git a/src/com/Torvald/Terrarum/MapDrawer/MapCamera.kt b/src/com/Torvald/Terrarum/MapDrawer/MapCamera.kt index aae4d1342..aa43771e9 100644 --- a/src/com/Torvald/Terrarum/MapDrawer/MapCamera.kt +++ b/src/com/Torvald/Terrarum/MapDrawer/MapCamera.kt @@ -14,7 +14,7 @@ import org.newdawn.slick.SpriteSheet import java.util.* /** - * Created by minjaesong on 16-03-15. + * Created by minjaesong on 16-01-19. */ object MapCamera { private val map: GameMap = Terrarum.game.map; diff --git a/src/com/Torvald/Terrarum/MapDrawer/MapDrawer.kt b/src/com/Torvald/Terrarum/MapDrawer/MapDrawer.kt index 9dc3592f1..878c680cb 100644 --- a/src/com/Torvald/Terrarum/MapDrawer/MapDrawer.kt +++ b/src/com/Torvald/Terrarum/MapDrawer/MapDrawer.kt @@ -8,7 +8,7 @@ import com.jme3.math.FastMath import org.newdawn.slick.* /** - * Created by minjaesong on 16-03-15. + * Created by minjaesong on 15-12-31. */ object MapDrawer { @JvmStatic val TILE_SIZE = 16 @@ -69,7 +69,6 @@ object MapDrawer { return Math.round((ENV_COLTEMP_HIGHEST - ENV_COLTEMP_LOWEST) / 2 * FastMath.clamp(x, -1f, 1f) + colTempMedian) } - @JvmStatic fun getColourFromMap(K: Int): Color { return envOverlayColourmap.getColor(colTempToImagePos(K), 0) } diff --git a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslandsPreset.java b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslandsPreset.java deleted file mode 100644 index 3ef121b70..000000000 --- a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslandsPreset.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.Torvald.Terrarum.MapGenerator; - -import com.Torvald.Rand.HQRNG; - -import java.util.Random; - -public class FloatingIslandsPreset { - - public static final int PRESETS = 5; - - static int[][] generatePreset(HQRNG random) { - int index = random.nextInt(PRESETS); - return generatePreset(index, random); - } - - static int[][] generatePreset(int index, Random random){ - if (index == 0){ - return processPreset(random, FloatingIslePreset01.data, FloatingIslePreset01.w, FloatingIslePreset01.h); - } - else if (index == 1){ - return processPreset(random, FloatingIslePreset02.data, FloatingIslePreset02.w, FloatingIslePreset02.h); - } - else if (index == 2){ - return processPreset(random, FloatingIslePreset03.data, FloatingIslePreset03.w, FloatingIslePreset03.h); - } - else if (index == 3){ - return processPreset(random, FloatingIslePreset04.data, FloatingIslePreset04.w, FloatingIslePreset04.h); - } - else if (index == 4){ - return processPreset(random, FloatingIslePreset05.data, FloatingIslePreset05.w, FloatingIslePreset05.h); - } - return null; - } - - private static int[][] processPreset(Random random, int[] preset, int w, int h){ - int[][] temp = new int[h][w]; - int counter = 0; - boolean mirrored = random.nextBoolean(); - - for (int i = 0; i < h; i++){ - for (int j = 0; j < w; j++){ - if (!mirrored){ - if (counter < preset.length - 1){ - temp[i][j] = preset[counter]; - counter++; - } - else{ - temp[i][j] = 0; - } - } - else{ - if (counter < preset.length - 1){ - temp[i][w - 1 - j] = preset[counter]; - counter++; - } - else{ - temp[i][w - 1 - j] = 0; - } - } - } - } - - return temp; - } -} diff --git a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslandsPreset.kt b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslandsPreset.kt new file mode 100644 index 000000000..e429d1665 --- /dev/null +++ b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslandsPreset.kt @@ -0,0 +1,65 @@ +package com.Torvald.Terrarum.MapGenerator + +import com.Torvald.Rand.HQRNG +import com.sun.javaws.exceptions.InvalidArgumentException + +import java.util.Random + +object FloatingIslandsPreset { + + val PRESETS = 5 + + internal fun generatePreset(random: HQRNG): Array { + val index = random.nextInt(PRESETS) + return generatePreset(index, random) + } + + internal fun generatePreset(index: Int, random: Random): Array { + if (index == 0) { + return processPreset(random, FloatingIslePreset01.data, FloatingIslePreset01.w, FloatingIslePreset01.h) + } + else if (index == 1) { + return processPreset(random, FloatingIslePreset02.data, FloatingIslePreset02.w, FloatingIslePreset02.h) + } + else if (index == 2) { + return processPreset(random, FloatingIslePreset03.data, FloatingIslePreset03.w, FloatingIslePreset03.h) + } + else if (index == 3) { + return processPreset(random, FloatingIslePreset04.data, FloatingIslePreset04.w, FloatingIslePreset04.h) + } + else { + return processPreset(random, FloatingIslePreset05.data, FloatingIslePreset05.w, FloatingIslePreset05.h) + } + } + + private fun processPreset(random: Random, preset: IntArray, w: Int, h: Int): Array { + val temp = Array(h) { IntArray(w) } + var counter = 0 + val mirrored = random.nextBoolean() + + for (i in 0..h - 1) { + for (j in 0..w - 1) { + if (!mirrored) { + if (counter < preset.size - 1) { + temp[i][j] = preset[counter] + counter++ + } + else { + temp[i][j] = 0 + } + } + else { + if (counter < preset.size - 1) { + temp[i][w - 1 - j] = preset[counter] + counter++ + } + else { + temp[i][w - 1 - j] = 0 + } + } + } + } + + return temp + } +} diff --git a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset01.java b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset01.java deleted file mode 100644 index 2d8fc71a0..000000000 --- a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset01.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.Torvald.Terrarum.MapGenerator; - -class FloatingIslePreset01{ - public static int w = 100; - public static int h = 50; - public static int[] data = {0,0,0,0,0,3,3,3,3,3,0,0,0,0,0,3,3,3,3,0,0,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,0,0,0,0,0,3,3,2,2,2,2,2,3,3,3,3,3,2,2,2,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,0,0,0,0,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,2,2,2,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,0,0,0,2,2,2,2,2,0,2,2,2,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,2,2,2,0,0,2,2,2,2,2,2,0,0,0,2,2,2,0,0,0,0,2,2,2,2,0,0,2,2,2,0,0,0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,2,2,0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2}; -} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset01.kt b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset01.kt new file mode 100644 index 000000000..1337f14bd --- /dev/null +++ b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset01.kt @@ -0,0 +1,7 @@ +package com.Torvald.Terrarum.MapGenerator + +internal object FloatingIslePreset01 { + var w = 100 + var h = 50 + var data = intArrayOf(0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 0, 0, 0, 0, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2) +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset02.java b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset02.java deleted file mode 100644 index 973bc9f34..000000000 --- a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset02.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.Torvald.Terrarum.MapGenerator; - -class FloatingIslePreset02{ - public static int w = 80; - public static int h = 50; - public static int[] data = {0,0,3,3,0,3,3,3,0,0,0,0,0,0,3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,3,3,3,3,0,0,3,3,3,3,3,3,0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,0,0,3,3,3,3,3,0,0,0,0,0,0,0,0,0,2,2,3,2,2,2,3,3,3,3,3,3,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,3,3,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,3,2,2,2,2,2,3,3,3,3,0,0,0,0,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,0,0,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,2,2,2,2,2,0,2,2,0,0,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,2,2,2,2,2,2,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,2,2,2,2,2,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2}; -} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset02.kt b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset02.kt new file mode 100644 index 000000000..071ad2d57 --- /dev/null +++ b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset02.kt @@ -0,0 +1,7 @@ +package com.Torvald.Terrarum.MapGenerator + +internal object FloatingIslePreset02 { + var w = 80 + var h = 50 + var data = intArrayOf(0, 0, 3, 3, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, 0, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2) +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset03.java b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset03.java deleted file mode 100644 index 22746fe01..000000000 --- a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset03.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.Torvald.Terrarum.MapGenerator; - -class FloatingIslePreset03{ - public static int w = 66; - public static int h = 44; - public static int[] data = {0,0,0,0,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,3,3,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,3,0,0,0,0,0,0,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,0,0,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,2,2,2,2,2,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,0,2,2,2,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2}; -} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset03.kt b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset03.kt new file mode 100644 index 000000000..7ce8b0a69 --- /dev/null +++ b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset03.kt @@ -0,0 +1,7 @@ +package com.Torvald.Terrarum.MapGenerator + +internal object FloatingIslePreset03 { + var w = 66 + var h = 44 + var data = intArrayOf(0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 3, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 0, 0, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2) +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset04.java b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset04.java deleted file mode 100644 index 795465a9c..000000000 --- a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset04.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.Torvald.Terrarum.MapGenerator; - -class FloatingIslePreset04{ - public static int w = 88; - public static int h = 48; - public static int[] data = {0,0,0,3,3,3,3,3,3,3,3,3,3,3,0,0,3,0,0,0,3,3,3,0,0,0,3,3,3,0,0,0,0,0,3,3,3,3,0,0,0,0,0,3,3,3,0,3,3,3,3,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,2,2,2,3,3,3,2,2,2,3,3,3,3,3,2,2,2,2,3,3,3,3,3,2,2,2,3,2,2,2,2,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,0,0,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,2,2,2,2,2,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,2,2,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,2}; -} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset04.kt b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset04.kt new file mode 100644 index 000000000..23ac7d93c --- /dev/null +++ b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset04.kt @@ -0,0 +1,7 @@ +package com.Torvald.Terrarum.MapGenerator + +internal object FloatingIslePreset04 { + var w = 88 + var h = 48 + var data = intArrayOf(0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0, 0, 3, 3, 3, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 3, 3, 3, 0, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 3, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 0, 0, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2) +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset05.java b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset05.java deleted file mode 100644 index a95037647..000000000 --- a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset05.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.Torvald.Terrarum.MapGenerator; - -class FloatingIslePreset05{ - public static int w = 74; - public static int h = 77; - public static int[] data = {0,0,0,0,3,3,3,3,3,3,0,0,0,3,0,0,0,0,3,3,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,0,0,0,0,3,3,3,0,3,3,3,3,3,3,0,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,0,0,0,0,0,0,0,3,3,3,2,2,2,2,2,2,3,3,3,2,3,3,3,3,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,3,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,0,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,2,2,2,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,2,2,2,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,2,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2}; -} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset05.kt b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset05.kt new file mode 100644 index 000000000..9edfb89e8 --- /dev/null +++ b/src/com/Torvald/Terrarum/MapGenerator/FloatingIslePreset05.kt @@ -0,0 +1,7 @@ +package com.Torvald.Terrarum.MapGenerator + +internal object FloatingIslePreset05 { + var w = 74 + var h = 77 + var data = intArrayOf(0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 3, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 0, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2) +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/MapGenerator/MapGenerator.kt b/src/com/Torvald/Terrarum/MapGenerator/MapGenerator.kt index 913068c29..5dc7d11ca 100644 --- a/src/com/Torvald/Terrarum/MapGenerator/MapGenerator.kt +++ b/src/com/Torvald/Terrarum/MapGenerator/MapGenerator.kt @@ -7,9 +7,6 @@ import com.Torvald.Terrarum.TileProperties.TileNameCode import com.jme3.math.FastMath import java.util.* -/** - * Created by minjaesong on 16-03-15. - */ object MapGenerator { private lateinit var map: GameMap @@ -959,9 +956,13 @@ object MapGenerator { /* Post-process */ private fun fillOcean() { - val thisSandList = intArrayOf(TileNameCode.SAND_BEACH, TileNameCode.SAND_BLACK, TileNameCode.SAND_GREEN, TileNameCode.SAND_BEACH, TileNameCode.SAND_BEACH, TileNameCode.SAND_BLACK) + val thisSandList = intArrayOf( + TileNameCode.SAND_BEACH, TileNameCode.SAND_BLACK, TileNameCode.SAND_GREEN, + TileNameCode.SAND_BEACH, TileNameCode.SAND_BEACH, TileNameCode.SAND_BLACK + ) val thisRand = HQRNG(seed!! xor random.nextLong()) val thisSand = thisSandList[thisRand.nextInt(thisSandList.size)] + // val thisSand = TileNameCode.SAND_GREEN val thisSandStr = if (thisSand == TileNameCode.SAND_BLACK) "black" @@ -1060,7 +1061,7 @@ object MapGenerator { * @return */ private fun getTerrainHeightFromHeightMap(x: Int): Int { - return TERRAIN_AVERAGE_HEIGHT - heightMap!![x] + return TERRAIN_AVERAGE_HEIGHT - heightMap[x] } @JvmStatic diff --git a/src/com/Torvald/Terrarum/MapGenerator/RoguelikeRandomiser.kt b/src/com/Torvald/Terrarum/MapGenerator/RoguelikeRandomiser.kt index 95d441fe5..2166fc591 100644 --- a/src/com/Torvald/Terrarum/MapGenerator/RoguelikeRandomiser.kt +++ b/src/com/Torvald/Terrarum/MapGenerator/RoguelikeRandomiser.kt @@ -5,7 +5,7 @@ import com.Torvald.Rand.HQRNG import java.util.* /** - * Created by minjaesong on 16-03-15. + * Created by minjaesong on 16-02-23. */ object RoguelikeRandomiser { diff --git a/src/com/Torvald/Terrarum/MapGenerator/SimplexNoise.java b/src/com/Torvald/Terrarum/MapGenerator/SimplexNoise.java deleted file mode 100644 index d32ff4cab..000000000 --- a/src/com/Torvald/Terrarum/MapGenerator/SimplexNoise.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.Torvald.Terrarum.MapGenerator; - -import com.Torvald.Rand.HQRNG; -import com.jme3.math.FastMath; - -public class SimplexNoise { - - SimplexNoise_octave[] octaves; - float[] frequencys; - float[] amplitudes; - - int largestFeature; - float persistence; - long seed; - - /** - * @param largestFeature - * @param persistence higher the value, rougher the output - * @param seed - */ - public SimplexNoise(int largestFeature, float persistence, long seed) { - this.largestFeature = largestFeature; - this.persistence = persistence; - this.seed = seed; - - //receives a number (e.g. 128) and calculates what power of 2 it is (e.g. 2^7) - int numberOfOctaves = FastMath.intLog2(largestFeature); - - octaves = new SimplexNoise_octave[numberOfOctaves]; - frequencys = new float[numberOfOctaves]; - amplitudes = new float[numberOfOctaves]; - - HQRNG rnd = new HQRNG(seed); - - for (int i = 0; i < numberOfOctaves; i++) { - octaves[i] = new SimplexNoise_octave(rnd.nextInt()); - - frequencys[i] = FastMath.pow(2, i); - amplitudes[i] = FastMath.pow(persistence, octaves.length - i); - - - } - - } - - - public float getNoise(int x, int y) { - - float result = 0; - - for (int i = 0; i < octaves.length; i++) { - //float frequency = FastMath.pow(2,i); - //float amplitude = FastMath.pow(persistence,octaves.length-i); - - result = result + (float) (octaves[i].noise(x / frequencys[i], y / frequencys[i]) * amplitudes[i]); - } - - - return result; - - } - - public float getNoise(int x, int y, int z) { - - float result = 0; - - for (int i = 0; i < octaves.length; i++) { - float frequency = FastMath.pow(2, i); - float amplitude = FastMath.pow(persistence, octaves.length - i); - - result = result + (float) (octaves[i].noise(x / frequency, y / frequency, z / frequency) * amplitude); - } - - - return result; - - } -} diff --git a/src/com/Torvald/Terrarum/MapGenerator/SimplexNoise.kt b/src/com/Torvald/Terrarum/MapGenerator/SimplexNoise.kt new file mode 100644 index 000000000..ef3885360 --- /dev/null +++ b/src/com/Torvald/Terrarum/MapGenerator/SimplexNoise.kt @@ -0,0 +1,75 @@ +package com.Torvald.Terrarum.MapGenerator + +import com.Torvald.Rand.HQRNG +import com.jme3.math.FastMath + +class SimplexNoise +/** + * @param largestFeature + * * + * @param persistence higher the value, rougher the output + * * + * @param seed + */ +(internal var largestFeature: + + Int, internal var persistence: Float, internal var seed: Long) { + + internal var octaves: Array + internal var frequencys: FloatArray + internal var amplitudes: FloatArray + + init { + + //receives a number (e.g. 128) and calculates what power of 2 it is (e.g. 2^7) + val numberOfOctaves = FastMath.intLog2(largestFeature) + val rnd = HQRNG(seed) + + octaves = Array(numberOfOctaves, {i -> SimplexNoise_octave(rnd.nextInt())}) + frequencys = FloatArray(numberOfOctaves) + amplitudes = FloatArray(numberOfOctaves) + + for (i in 0..numberOfOctaves - 1) { + octaves[i] = SimplexNoise_octave(rnd.nextInt()) + + frequencys[i] = FastMath.pow(2f, i.toFloat()) + amplitudes[i] = FastMath.pow(persistence, (octaves.size - i).toFloat()) + + + } + + } + + + fun getNoise(x: Int, y: Int): Float { + + var result = 0f + + for (i in octaves.indices) { + //float frequency = FastMath.pow(2,i); + //float amplitude = FastMath.pow(persistence,octaves.length-i); + + result += (octaves[i].noise((x / frequencys[i]).toDouble(), (y / frequencys[i]).toDouble()) * amplitudes[i]).toFloat() + } + + + return result + + } + + fun getNoise(x: Int, y: Int, z: Int): Float { + + var result = 0f + + for (i in octaves.indices) { + val frequency = FastMath.pow(2f, i.toFloat()) + val amplitude = FastMath.pow(persistence, (octaves.size - i).toFloat()) + + result += (octaves[i].noise((x / frequency).toDouble(), (y / frequency).toDouble(), (z / frequency).toDouble()) * amplitude).toFloat() + } + + + return result + + } +} diff --git a/src/com/Torvald/Terrarum/MapGenerator/SimplexNoise_octave.java b/src/com/Torvald/Terrarum/MapGenerator/SimplexNoise_octave.java deleted file mode 100644 index 3387c3061..000000000 --- a/src/com/Torvald/Terrarum/MapGenerator/SimplexNoise_octave.java +++ /dev/null @@ -1,388 +0,0 @@ -package com.Torvald.Terrarum.MapGenerator; - -/* - * A speed-improved simplex noise algorithm for 2D, 3D and 4D in Java. - * - * Based on example code by Stefan Gustavson (stegu@itn.liu.se). - * Optimisations by Peter Eastman (peastman@drizzle.stanford.edu). - * Better rank ordering method by Stefan Gustavson in 2012. - * - * This could be speeded up even further, but it's useful as it is. - * - * Version 2012-03-09 - * - * This code was placed in the public domain by its original author, - * Stefan Gustavson. You may use it as you see fit, but - * attribution is appreciated. - * - */ - -import com.Torvald.Rand.HQRNG; - -public class SimplexNoise_octave { // Simplex noise in 2D, 3D and 4D - - public static int RANDOMSEED=0; - private static int NUMBEROFSWAPS=400; - - private static Grad grad3[] = {new Grad(1,1,0),new Grad(-1,1,0),new Grad(1,-1,0),new Grad(-1,-1,0), - new Grad(1,0,1),new Grad(-1,0,1),new Grad(1,0,-1),new Grad(-1,0,-1), - new Grad(0,1,1),new Grad(0,-1,1),new Grad(0,1,-1),new Grad(0,-1,-1)}; - - private static Grad grad4[]= {new Grad(0,1,1,1),new Grad(0,1,1,-1),new Grad(0,1,-1,1),new Grad(0,1,-1,-1), - new Grad(0,-1,1,1),new Grad(0,-1,1,-1),new Grad(0,-1,-1,1),new Grad(0,-1,-1,-1), - new Grad(1,0,1,1),new Grad(1,0,1,-1),new Grad(1,0,-1,1),new Grad(1,0,-1,-1), - new Grad(-1,0,1,1),new Grad(-1,0,1,-1),new Grad(-1,0,-1,1),new Grad(-1,0,-1,-1), - new Grad(1,1,0,1),new Grad(1,1,0,-1),new Grad(1,-1,0,1),new Grad(1,-1,0,-1), - new Grad(-1,1,0,1),new Grad(-1,1,0,-1),new Grad(-1,-1,0,1),new Grad(-1,-1,0,-1), - new Grad(1,1,1,0),new Grad(1,1,-1,0),new Grad(1,-1,1,0),new Grad(1,-1,-1,0), - new Grad(-1,1,1,0),new Grad(-1,1,-1,0),new Grad(-1,-1,1,0),new Grad(-1,-1,-1,0)}; - - private static short p_supply[] = {151,160,137,91,90,15, //this contains all the numbers between 0 and 255, these are put in a random order depending upon the seed - 131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23, - 190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33, - 88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166, - 77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244, - 102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196, - 135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123, - 5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42, - 223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9, - 129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228, - 251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107, - 49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254, - 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180}; - - private short p[]=new short[p_supply.length]; - - // To remove the need for index wrapping, double the permutation table length - private short perm[] = new short[512]; - private short permMod12[] = new short[512]; - public SimplexNoise_octave(int seed) { - p=p_supply.clone(); - - if (seed==RANDOMSEED){ - throw new IllegalArgumentException("Seed cannot be zero."); - } - - //the random for the swaps - HQRNG rand=new HQRNG(seed); - - //the seed determines the swaps that occur between the default order and the order we're actually going to use - for(int i=0;iy0) {i1=1; j1=0;} // lower triangle, XY order: (0,0)->(1,0)->(1,1) - else {i1=0; j1=1;} // upper triangle, YX order: (0,0)->(0,1)->(1,1) - // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and - // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where - // c = (3-sqrt(3))/6 - double x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords - double y1 = y0 - j1 + G2; - double x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords - double y2 = y0 - 1.0 + 2.0 * G2; - // Work out the hashed gradient indices of the three simplex corners - int ii = i & 255; - int jj = j & 255; - int gi0 = permMod12[ii+perm[jj]]; - int gi1 = permMod12[ii+i1+perm[jj+j1]]; - int gi2 = permMod12[ii+1+perm[jj+1]]; - // Calculate the contribution from the three corners - double t0 = 0.5 - x0*x0-y0*y0; - if(t0<0) n0 = 0.0; - else { - t0 *= t0; - n0 = t0 * t0 * dot(grad3[gi0], x0, y0); // (x,y) of grad3 used for 2D gradient - } - double t1 = 0.5 - x1*x1-y1*y1; - if(t1<0) n1 = 0.0; - else { - t1 *= t1; - n1 = t1 * t1 * dot(grad3[gi1], x1, y1); - } - double t2 = 0.5 - x2*x2-y2*y2; - if(t2<0) n2 = 0.0; - else { - t2 *= t2; - n2 = t2 * t2 * dot(grad3[gi2], x2, y2); - } - // Add contributions from each corner to get the final noise value. - // The result is scaled to return values in the interval [-1,1]. - return 70.0 * (n0 + n1 + n2); - } - - - // 3D simplex noise - public double noise(double xin, double yin, double zin) { - double n0, n1, n2, n3; // Noise contributions from the four corners - // Skew the input space to determine which simplex cell we're in - double s = (xin+yin+zin)*F3; // Very nice and simple skew factor for 3D - int i = fastfloor(xin+s); - int j = fastfloor(yin+s); - int k = fastfloor(zin+s); - double t = (i+j+k)*G3; - double X0 = i-t; // Unskew the cell origin back to (x,y,z) space - double Y0 = j-t; - double Z0 = k-t; - double x0 = xin-X0; // The x,y,z distances from the cell origin - double y0 = yin-Y0; - double z0 = zin-Z0; - // For the 3D case, the simplex shape is a slightly irregular tetrahedron. - // Determine which simplex we are in. - int i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords - int i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords - if(x0>=y0) { - if(y0>=z0) - { i1=1; j1=0; k1=0; i2=1; j2=1; k2=0; } // X Y Z order - else if(x0>=z0) { i1=1; j1=0; k1=0; i2=1; j2=0; k2=1; } // X Z Y order - else { i1=0; j1=0; k1=1; i2=1; j2=0; k2=1; } // Z X Y order - } - else { // x0 y0) rankx++; else ranky++; - if(x0 > z0) rankx++; else rankz++; - if(x0 > w0) rankx++; else rankw++; - if(y0 > z0) ranky++; else rankz++; - if(y0 > w0) ranky++; else rankw++; - if(z0 > w0) rankz++; else rankw++; - int i1, j1, k1, l1; // The integer offsets for the second simplex corner - int i2, j2, k2, l2; // The integer offsets for the third simplex corner - int i3, j3, k3, l3; // The integer offsets for the fourth simplex corner - // simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order. - // Many values of c will never occur, since e.g. x>y>z>w makes x= 3 ? 1 : 0; - j1 = ranky >= 3 ? 1 : 0; - k1 = rankz >= 3 ? 1 : 0; - l1 = rankw >= 3 ? 1 : 0; - // Rank 2 denotes the second largest coordinate. - i2 = rankx >= 2 ? 1 : 0; - j2 = ranky >= 2 ? 1 : 0; - k2 = rankz >= 2 ? 1 : 0; - l2 = rankw >= 2 ? 1 : 0; - // Rank 1 denotes the second smallest coordinate. - i3 = rankx >= 1 ? 1 : 0; - j3 = ranky >= 1 ? 1 : 0; - k3 = rankz >= 1 ? 1 : 0; - l3 = rankw >= 1 ? 1 : 0; - // The fifth corner has all coordinate offsets = 1, so no need to compute that. - double x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords - double y1 = y0 - j1 + G4; - double z1 = z0 - k1 + G4; - double w1 = w0 - l1 + G4; - double x2 = x0 - i2 + 2.0*G4; // Offsets for third corner in (x,y,z,w) coords - double y2 = y0 - j2 + 2.0*G4; - double z2 = z0 - k2 + 2.0*G4; - double w2 = w0 - l2 + 2.0*G4; - double x3 = x0 - i3 + 3.0*G4; // Offsets for fourth corner in (x,y,z,w) coords - double y3 = y0 - j3 + 3.0*G4; - double z3 = z0 - k3 + 3.0*G4; - double w3 = w0 - l3 + 3.0*G4; - double x4 = x0 - 1.0 + 4.0*G4; // Offsets for last corner in (x,y,z,w) coords - double y4 = y0 - 1.0 + 4.0*G4; - double z4 = z0 - 1.0 + 4.0*G4; - double w4 = w0 - 1.0 + 4.0*G4; - // Work out the hashed gradient indices of the five simplex corners - int ii = i & 255; - int jj = j & 255; - int kk = k & 255; - int ll = l & 255; - int gi0 = perm[ii+perm[jj+perm[kk+perm[ll]]]] % 32; - int gi1 = perm[ii+i1+perm[jj+j1+perm[kk+k1+perm[ll+l1]]]] % 32; - int gi2 = perm[ii+i2+perm[jj+j2+perm[kk+k2+perm[ll+l2]]]] % 32; - int gi3 = perm[ii+i3+perm[jj+j3+perm[kk+k3+perm[ll+l3]]]] % 32; - int gi4 = perm[ii+1+perm[jj+1+perm[kk+1+perm[ll+1]]]] % 32; - // Calculate the contribution from the five corners - double t0 = 0.6 - x0*x0 - y0*y0 - z0*z0 - w0*w0; - if(t0<0) n0 = 0.0; - else { - t0 *= t0; - n0 = t0 * t0 * dot(grad4[gi0], x0, y0, z0, w0); - } - double t1 = 0.6 - x1*x1 - y1*y1 - z1*z1 - w1*w1; - if(t1<0) n1 = 0.0; - else { - t1 *= t1; - n1 = t1 * t1 * dot(grad4[gi1], x1, y1, z1, w1); - } - double t2 = 0.6 - x2*x2 - y2*y2 - z2*z2 - w2*w2; - if(t2<0) n2 = 0.0; - else { - t2 *= t2; - n2 = t2 * t2 * dot(grad4[gi2], x2, y2, z2, w2); - } - double t3 = 0.6 - x3*x3 - y3*y3 - z3*z3 - w3*w3; - if(t3<0) n3 = 0.0; - else { - t3 *= t3; - n3 = t3 * t3 * dot(grad4[gi3], x3, y3, z3, w3); - } - double t4 = 0.6 - x4*x4 - y4*y4 - z4*z4 - w4*w4; - if(t4<0) n4 = 0.0; - else { - t4 *= t4; - n4 = t4 * t4 * dot(grad4[gi4], x4, y4, z4, w4); - } - // Sum up and scale the result to cover the range [-1,1] - return 27.0 * (n0 + n1 + n2 + n3 + n4); - } - - // Inner class to speed upp gradient computations - // (array access is a lot slower than member access) - private static class Grad - { - double x, y, z, w; - - Grad(double x, double y, double z) - { - this.x = x; - this.y = y; - this.z = z; - } - - Grad(double x, double y, double z, double w) - { - this.x = x; - this.y = y; - this.z = z; - this.w = w; - } - } - -} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/MapGenerator/SimplexNoise_octave.kt b/src/com/Torvald/Terrarum/MapGenerator/SimplexNoise_octave.kt new file mode 100644 index 000000000..e856502d6 --- /dev/null +++ b/src/com/Torvald/Terrarum/MapGenerator/SimplexNoise_octave.kt @@ -0,0 +1,457 @@ +package com.Torvald.Terrarum.MapGenerator + +/* + * A speed-improved simplex noise algorithm for 2D, 3D and 4D in Java. + * + * Based on example code by Stefan Gustavson (stegu@itn.liu.se). + * Optimisations by Peter Eastman (peastman@drizzle.stanford.edu). + * Better rank ordering method by Stefan Gustavson in 2012. + * + * This could be speeded up even further, but it's useful as it is. + * + * Version 2012-03-09 + * + * This code was placed in the public domain by its original author, + * Stefan Gustavson. You may use it as you see fit, but + * attribution is appreciated. + * + */ + +import com.Torvald.Rand.HQRNG + +class SimplexNoise_octave(seed: Int) { // Simplex noise in 2D, 3D and 4D + + private var p = ShortArray(p_supply.size) + + // To remove the need for index wrapping, double the permutation table length + private val perm = ShortArray(512) + private val permMod12 = ShortArray(512) + + init { + p = p_supply.clone() + + if (seed == RANDOMSEED) { + throw IllegalArgumentException("Seed cannot be zero.") + } + + //the random for the swaps + val rand = HQRNG(seed.toLong()) + + //the seed determines the swaps that occur between the default order and the order we're actually going to use + for (i in 0..NUMBEROFSWAPS - 1) { + val swapFrom = rand.nextInt(p.size) + val swapTo = rand.nextInt(p.size) + + val temp = p[swapFrom] + p[swapFrom] = p[swapTo] + p[swapTo] = temp + } + + + for (i in 0..511) { + perm[i] = p[i and 255] + permMod12[i] = (perm[i] % 12).toShort() + } + } + + + // 2D simplex noise + fun noise(xin: Double, yin: Double): Double { + val n0: Double + val n1: Double + val n2: Double // Noise contributions from the three corners + // Skew the input space to determine which simplex cell we're in + val s = (xin + yin) * F2 // Hairy factor for 2D + val i = fastfloor(xin + s) + val j = fastfloor(yin + s) + val t = (i + j) * G2 + val X0 = i - t // Unskew the cell origin back to (x,y) space + val Y0 = j - t + val x0 = xin - X0 // The x,y distances from the cell origin + val y0 = yin - Y0 + // For the 2D case, the simplex shape is an equilateral triangle. + // Determine which simplex we are in. + val i1: Int + val j1: Int // Offsets for second (middle) corner of simplex in (i,j) coords + if (x0 > y0) { + i1 = 1 + j1 = 0 + } // lower triangle, XY order: (0,0)->(1,0)->(1,1) + else { + i1 = 0 + j1 = 1 + } // upper triangle, YX order: (0,0)->(0,1)->(1,1) + // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and + // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where + // c = (3-sqrt(3))/6 + val x1 = x0 - i1 + G2 // Offsets for middle corner in (x,y) unskewed coords + val y1 = y0 - j1 + G2 + val x2 = x0 - 1.0 + 2.0 * G2 // Offsets for last corner in (x,y) unskewed coords + val y2 = y0 - 1.0 + 2.0 * G2 + // Work out the hashed gradient indices of the three simplex corners + val ii = i and 255 + val jj = j and 255 + val gi0 = permMod12[ii + perm[jj]].toInt() + val gi1 = permMod12[ii + i1 + perm[jj + j1].toInt()].toInt() + val gi2 = permMod12[ii + 1 + perm[jj + 1].toInt()].toInt() + // Calculate the contribution from the three corners + var t0 = 0.5 - x0 * x0 - y0 * y0 + if (t0 < 0) + n0 = 0.0 + else { + t0 *= t0 + n0 = t0 * t0 * dot(grad3[gi0], x0, y0) // (x,y) of grad3 used for 2D gradient + } + var t1 = 0.5 - x1 * x1 - y1 * y1 + if (t1 < 0) + n1 = 0.0 + else { + t1 *= t1 + n1 = t1 * t1 * dot(grad3[gi1], x1, y1) + } + var t2 = 0.5 - x2 * x2 - y2 * y2 + if (t2 < 0) + n2 = 0.0 + else { + t2 *= t2 + n2 = t2 * t2 * dot(grad3[gi2], x2, y2) + } + // Add contributions from each corner to get the final noise value. + // The result is scaled to return values in the interval [-1,1]. + return 70.0 * (n0 + n1 + n2) + } + + + // 3D simplex noise + fun noise(xin: Double, yin: Double, zin: Double): Double { + val n0: Double + val n1: Double + val n2: Double + val n3: Double // Noise contributions from the four corners + // Skew the input space to determine which simplex cell we're in + val s = (xin + yin + zin) * F3 // Very nice and simple skew factor for 3D + val i = fastfloor(xin + s) + val j = fastfloor(yin + s) + val k = fastfloor(zin + s) + val t = (i + j + k) * G3 + val X0 = i - t // Unskew the cell origin back to (x,y,z) space + val Y0 = j - t + val Z0 = k - t + val x0 = xin - X0 // The x,y,z distances from the cell origin + val y0 = yin - Y0 + val z0 = zin - Z0 + // For the 3D case, the simplex shape is a slightly irregular tetrahedron. + // Determine which simplex we are in. + val i1: Int + val j1: Int + val k1: Int // Offsets for second corner of simplex in (i,j,k) coords + val i2: Int + val j2: Int + val k2: Int // Offsets for third corner of simplex in (i,j,k) coords + if (x0 >= y0) { + if (y0 >= z0) { + i1 = 1 + j1 = 0 + k1 = 0 + i2 = 1 + j2 = 1 + k2 = 0 + } // X Y Z order + else if (x0 >= z0) { + i1 = 1 + j1 = 0 + k1 = 0 + i2 = 1 + j2 = 0 + k2 = 1 + } // X Z Y order + else { + i1 = 0 + j1 = 0 + k1 = 1 + i2 = 1 + j2 = 0 + k2 = 1 + } // Z X Y order + } + else { + // x0 y0) rankx++ else ranky++ + if (x0 > z0) rankx++ else rankz++ + if (x0 > w0) rankx++ else rankw++ + if (y0 > z0) ranky++ else rankz++ + if (y0 > w0) ranky++ else rankw++ + if (z0 > w0) rankz++ else rankw++ + val i1: Int + val j1: Int + val k1: Int + val l1: Int // The integer offsets for the second simplex corner + val i2: Int + val j2: Int + val k2: Int + val l2: Int // The integer offsets for the third simplex corner + val i3: Int + val j3: Int + val k3: Int + val l3: Int // The integer offsets for the fourth simplex corner + // simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order. + // Many values of c will never occur, since e.g. x>y>z>w makes x= 3) 1 else 0 + j1 = if (ranky >= 3) 1 else 0 + k1 = if (rankz >= 3) 1 else 0 + l1 = if (rankw >= 3) 1 else 0 + // Rank 2 denotes the second largest coordinate. + i2 = if (rankx >= 2) 1 else 0 + j2 = if (ranky >= 2) 1 else 0 + k2 = if (rankz >= 2) 1 else 0 + l2 = if (rankw >= 2) 1 else 0 + // Rank 1 denotes the second smallest coordinate. + i3 = if (rankx >= 1) 1 else 0 + j3 = if (ranky >= 1) 1 else 0 + k3 = if (rankz >= 1) 1 else 0 + l3 = if (rankw >= 1) 1 else 0 + // The fifth corner has all coordinate offsets = 1, so no need to compute that. + val x1 = x0 - i1 + G4 // Offsets for second corner in (x,y,z,w) coords + val y1 = y0 - j1 + G4 + val z1 = z0 - k1 + G4 + val w1 = w0 - l1 + G4 + val x2 = x0 - i2 + 2.0 * G4 // Offsets for third corner in (x,y,z,w) coords + val y2 = y0 - j2 + 2.0 * G4 + val z2 = z0 - k2 + 2.0 * G4 + val w2 = w0 - l2 + 2.0 * G4 + val x3 = x0 - i3 + 3.0 * G4 // Offsets for fourth corner in (x,y,z,w) coords + val y3 = y0 - j3 + 3.0 * G4 + val z3 = z0 - k3 + 3.0 * G4 + val w3 = w0 - l3 + 3.0 * G4 + val x4 = x0 - 1.0 + 4.0 * G4 // Offsets for last corner in (x,y,z,w) coords + val y4 = y0 - 1.0 + 4.0 * G4 + val z4 = z0 - 1.0 + 4.0 * G4 + val w4 = w0 - 1.0 + 4.0 * G4 + // Work out the hashed gradient indices of the five simplex corners + val ii = i and 255 + val jj = j and 255 + val kk = k and 255 + val ll = l and 255 + val gi0 = perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32 + val gi1 = perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1].toInt()].toInt()].toInt()] % 32 + val gi2 = perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2].toInt()].toInt()].toInt()] % 32 + val gi3 = perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3].toInt()].toInt()].toInt()] % 32 + val gi4 = perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1].toInt()].toInt()].toInt()] % 32 + // Calculate the contribution from the five corners + var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0 + if (t0 < 0) + n0 = 0.0 + else { + t0 *= t0 + n0 = t0 * t0 * dot(grad4[gi0], x0, y0, z0, w0) + } + var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1 + if (t1 < 0) + n1 = 0.0 + else { + t1 *= t1 + n1 = t1 * t1 * dot(grad4[gi1], x1, y1, z1, w1) + } + var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2 + if (t2 < 0) + n2 = 0.0 + else { + t2 *= t2 + n2 = t2 * t2 * dot(grad4[gi2], x2, y2, z2, w2) + } + var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3 + if (t3 < 0) + n3 = 0.0 + else { + t3 *= t3 + n3 = t3 * t3 * dot(grad4[gi3], x3, y3, z3, w3) + } + var t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4 + if (t4 < 0) + n4 = 0.0 + else { + t4 *= t4 + n4 = t4 * t4 * dot(grad4[gi4], x4, y4, z4, w4) + } + // Sum up and scale the result to cover the range [-1,1] + return 27.0 * (n0 + n1 + n2 + n3 + n4) + } + + // Inner class to speed upp gradient computations + // (array access is a lot slower than member access) + private class Grad { + internal var x: Double = 0.toDouble() + internal var y: Double = 0.toDouble() + internal var z: Double = 0.toDouble() + internal var w: Double = 0.toDouble() + + internal constructor(x: Double, y: Double, z: Double) { + this.x = x + this.y = y + this.z = z + } + + internal constructor(x: Double, y: Double, z: Double, w: Double) { + this.x = x + this.y = y + this.z = z + this.w = w + } + } + + companion object { + + var RANDOMSEED = 0 + private val NUMBEROFSWAPS = 400 + + private val grad3 = arrayOf(Grad(1.0, 1.0, 0.0), Grad(-1.0, 1.0, 0.0), Grad(1.0, -1.0, 0.0), Grad(-1.0, -1.0, 0.0), Grad(1.0, 0.0, 1.0), Grad(-1.0, 0.0, 1.0), Grad(1.0, 0.0, -1.0), Grad(-1.0, 0.0, -1.0), Grad(0.0, 1.0, 1.0), Grad(0.0, -1.0, 1.0), Grad(0.0, 1.0, -1.0), Grad(0.0, -1.0, -1.0)) + + private val grad4 = arrayOf(Grad(0.0, 1.0, 1.0, 1.0), Grad(0.0, 1.0, 1.0, -1.0), Grad(0.0, 1.0, -1.0, 1.0), Grad(0.0, 1.0, -1.0, -1.0), Grad(0.0, -1.0, 1.0, 1.0), Grad(0.0, -1.0, 1.0, -1.0), Grad(0.0, -1.0, -1.0, 1.0), Grad(0.0, -1.0, -1.0, -1.0), Grad(1.0, 0.0, 1.0, 1.0), Grad(1.0, 0.0, 1.0, -1.0), Grad(1.0, 0.0, -1.0, 1.0), Grad(1.0, 0.0, -1.0, -1.0), Grad(-1.0, 0.0, 1.0, 1.0), Grad(-1.0, 0.0, 1.0, -1.0), Grad(-1.0, 0.0, -1.0, 1.0), Grad(-1.0, 0.0, -1.0, -1.0), Grad(1.0, 1.0, 0.0, 1.0), Grad(1.0, 1.0, 0.0, -1.0), Grad(1.0, -1.0, 0.0, 1.0), Grad(1.0, -1.0, 0.0, -1.0), Grad(-1.0, 1.0, 0.0, 1.0), Grad(-1.0, 1.0, 0.0, -1.0), Grad(-1.0, -1.0, 0.0, 1.0), Grad(-1.0, -1.0, 0.0, -1.0), Grad(1.0, 1.0, 1.0, 0.0), Grad(1.0, 1.0, -1.0, 0.0), Grad(1.0, -1.0, 1.0, 0.0), Grad(1.0, -1.0, -1.0, 0.0), Grad(-1.0, 1.0, 1.0, 0.0), Grad(-1.0, 1.0, -1.0, 0.0), Grad(-1.0, -1.0, 1.0, 0.0), Grad(-1.0, -1.0, -1.0, 0.0)) + + private val p_supply = shortArrayOf(151, 160, 137, 91, 90, 15, //this contains all the numbers between 0 and 255, these are put in a random order depending upon the seed + 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180) + + // Skewing and unskewing factors for 2, 3, and 4 dimensions + private val F2 = 0.5 * (Math.sqrt(3.0) - 1.0) + private val G2 = (3.0 - Math.sqrt(3.0)) / 6.0 + private val F3 = 1.0 / 3.0 + private val G3 = 1.0 / 6.0 + private val F4 = (Math.sqrt(5.0) - 1.0) / 4.0 + private val G4 = (5.0 - Math.sqrt(5.0)) / 20.0 + + // This method is a *lot* faster than using (int)Math.floor(x) + private fun fastfloor(x: Double): Int { + val xi = x.toInt() + return if (x < xi) xi - 1 else xi + } + + private fun dot(g: Grad, x: Double, y: Double): Double { + return g.x * x + g.y * y + } + + private fun dot(g: Grad, x: Double, y: Double, z: Double): Double { + return g.x * x + g.y * y + g.z * z + } + + private fun dot(g: Grad, x: Double, y: Double, z: Double, w: Double): Double { + return g.x * x + g.y * y + g.z * z + g.w * w + } + } + +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/NoNegative.java b/src/com/Torvald/Terrarum/NoNegative.java deleted file mode 100644 index 4471df1ce..000000000 --- a/src/com/Torvald/Terrarum/NoNegative.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.Torvald.Terrarum; - -/** - * Created by minjaesong on 16-03-05. - */ -public @interface NoNegative { - String info() default "Only positive number is acceptable."; -} diff --git a/src/com/Torvald/Terrarum/NonZero.java b/src/com/Torvald/Terrarum/NonZero.java deleted file mode 100644 index 54e882d1b..000000000 --- a/src/com/Torvald/Terrarum/NonZero.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.Torvald.Terrarum; - -/** - * Created by minjaesong on 16-03-05. - */ -public @interface NonZero { - String info() default "Non-zero value"; -} diff --git a/src/com/Torvald/Terrarum/NotNull.java b/src/com/Torvald/Terrarum/NotNull.java deleted file mode 100644 index 1e1377862..000000000 --- a/src/com/Torvald/Terrarum/NotNull.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.Torvald.Terrarum; - -/** - * Created by minjaesong on 16-03-05. - */ -public @interface NotNull { - String info() default "Cannot be null."; -} diff --git a/src/com/Torvald/Terrarum/Nullable.java b/src/com/Torvald/Terrarum/Nullable.java deleted file mode 100644 index 8008721de..000000000 --- a/src/com/Torvald/Terrarum/Nullable.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.Torvald.Terrarum; - -/** - * Created by minjaesong on 16-03-05. - */ -public @interface Nullable { - String info() default "Null value is acceptable."; -} diff --git a/src/com/Torvald/Terrarum/SAVE_FORMAT b/src/com/Torvald/Terrarum/SAVE_FORMAT index 5c51e7748..27aa87ba0 100644 --- a/src/com/Torvald/Terrarum/SAVE_FORMAT +++ b/src/com/Torvald/Terrarum/SAVE_FORMAT @@ -14,6 +14,7 @@ Byte[32] hash3 SHA-256 hash of worldinfo3 being stored Byte[32] hash4 SHA-256 hash of worldinfo4 being stored (TEMD data) [32, 214, 42, 3, 76, ...] + Endianness: Big * Actor data - GZip'd GSON @@ -22,17 +23,12 @@ * Prop data - GZip'd CSV - - Filename : worldinfo1 -- tileprop.csv - worldinfo2 -- itemprop.csv - worldinfo3 -- materialprop.csv + - Filename : worldinfo2 -- tileprop.csv + worldinfo3 -- itemprop.csv + worldinfo4 -- materialprop.csv (with no extension) -* Roguelike randomiser data - - GZip'd GSON - - Filename : worldinfo3 - - * Human-readable - Tiles_list.txt -- list of tiles in csv - Items_list.txt -- list of items in csv @@ -52,7 +48,7 @@ --- Items_list.txt Human-readable --- Tiles_list.txt Human-readable --- world save meta - --- worldinfo1 tileprop - --- worldinfo2 itemprop - --- worldinfo3 materialprop - --- worldinfo4 TEMD binary + --- worldinfo1 TEMD binary + --- worldinfo2 tileprop + --- worldinfo3 itemprop + --- worldinfo4 materialprop diff --git a/src/com/Torvald/Terrarum/Terrarum.java b/src/com/Torvald/Terrarum/Terrarum similarity index 100% rename from src/com/Torvald/Terrarum/Terrarum.java rename to src/com/Torvald/Terrarum/Terrarum diff --git a/src/com/Torvald/Terrarum/Terrarum.kt b/src/com/Torvald/Terrarum/Terrarum.kt new file mode 100644 index 000000000..36bde460e --- /dev/null +++ b/src/com/Torvald/Terrarum/Terrarum.kt @@ -0,0 +1,337 @@ +package com.Torvald.Terrarum + +import com.Torvald.ImageFont.GameFontWhite +import com.Torvald.JsonFetcher +import com.Torvald.JsonWriter +import com.Torvald.Terrarum.LangPack.Lang +import org.lwjgl.input.Controllers +import org.newdawn.slick.AppGameContainer +import org.newdawn.slick.Font +import org.newdawn.slick.GameContainer +import org.newdawn.slick.SlickException +import org.newdawn.slick.state.StateBasedGame +import java.io.File +import java.io.IOException +import java.util.logging.Level +import java.util.logging.Logger + +/** + * Created by minjaesong on 15-12-30. + * Kotlin code: Created by minjaesong on 16-03-19. + */ +class Terrarum @Throws(SlickException::class) +constructor(gamename: String) : StateBasedGame(gamename) { + + init { + + gameConfig = GameConfig() + + getDefaultDirectory() + createDirs() + + val readFromDisk = readConfigJson() + if (!readFromDisk) readConfigJson() + + // get locale from config + gameLocale = gameConfig.getAsString("language") ?: sysLang + + // if bad game locale were set, use system locale + if (gameLocale.length < 4) + gameLocale = sysLang + + println("[Terrarum] Locale: " + gameLocale) + } + + @Throws(SlickException::class) + override fun initStatesList(gc: GameContainer) { + gameFontWhite = GameFontWhite() + + try { + Lang() + } + catch (e: IOException) { + e.printStackTrace() + } + + hasController = gc.input.controllerCount > 0 + if (hasController) { + for (c in 0..Controllers.getController(0).axisCount - 1) { + Controllers.getController(0).setDeadZone(c, CONTROLLER_DEADZONE) + } + } + + appgc.input.enableKeyRepeat() + + game = Game() + addState(game) + } + + companion object { + + /** + * To be used with physics simulator + */ + val TARGET_FPS = 50 + + /** + * To be used with render, to achieve smooth frame drawing + + * TARGET_INTERNAL_FPS > TARGET_FPS for smooth frame drawing + + * Must choose a value so that (1000 / VAL) is still integer + */ + val TARGET_INTERNAL_FPS = 100 + + lateinit var appgc: AppGameContainer + + val WIDTH = 1060 + val HEIGHT = 742 // IMAX ratio + var VSYNC = true + val VSYNC_TRIGGER_THRESHOLD = 56 + + lateinit var game: Game + lateinit var gameConfig: GameConfig + + lateinit var OSName: String + lateinit var OSVersion: String + lateinit var OperationSystem: String + lateinit var defaultDir: String + lateinit var defaultSaveDir: String + + var gameLocale = "" // locale override + + lateinit var gameFontWhite: Font + + val SCENE_ID_HOME = 1 + val SCENE_ID_GAME = 3 + + var hasController = false + val CONTROLLER_DEADZONE = 0.1f + + private lateinit var configDir: String + + @JvmStatic fun main(args: Array) { + try { + appgc = AppGameContainer(Terrarum("Terrarum")) + appgc.setDisplayMode(WIDTH, HEIGHT, false) + + appgc.setTargetFrameRate(TARGET_INTERNAL_FPS) + appgc.setVSync(VSYNC) + appgc.setMaximumLogicUpdateInterval(1000 / TARGET_INTERNAL_FPS) + appgc.setMinimumLogicUpdateInterval(1000 / TARGET_INTERNAL_FPS - 1) + + appgc.setShowFPS(false) + appgc.setUpdateOnlyWhenVisible(false) + + appgc.start() + } + catch (ex: SlickException) { + Logger.getLogger(Terrarum::class.java.name).log(Level.SEVERE, null, ex) + } + + } + + private fun getDefaultDirectory() { + OSName = System.getProperty("os.name") + OSVersion = System.getProperty("os.version") + + val OS = System.getProperty("os.name").toUpperCase() + if (OS.contains("WIN")) { + OperationSystem = "WINDOWS" + defaultDir = System.getenv("APPDATA") + "/Terrarum" + } + else if (OS.contains("OS X")) { + OperationSystem = "OSX" + defaultDir = System.getProperty("user.home") + "/Library/Application Support/Terrarum" + } + else if (OS.contains("NUX") || OS.contains("NIX")) { + OperationSystem = "LINUX" + defaultDir = System.getProperty("user.home") + "/.terrarum" + } + else if (OS.contains("SUNOS")) { + OperationSystem = "SOLARIS" + defaultDir = System.getProperty("user.home") + "/.terrarum" + } + else { + OperationSystem = "UNKNOWN" + defaultDir = System.getProperty("user.home") + "/.terrarum" + } + + defaultSaveDir = defaultDir + "/Saves" + configDir = defaultDir + "/config.json" + } + + private fun createDirs() { + val dirs = arrayOf(File(defaultSaveDir)) + + for (d in dirs) { + if (!d.exists()) { + d.mkdirs() + } + } + } + + @Throws(IOException::class) + private fun createConfigJson() { + val configFile = File(configDir) + + if (!configFile.exists() || configFile.length() == 0L) { + JsonWriter.writeToFile(DefaultConfig.fetch(), configDir) + } + } + + private fun readConfigJson(): Boolean { + try { + // read from disk and build config from it + val jsonObject = JsonFetcher.readJson(configDir) + + // make config + jsonObject.entrySet().forEach { entry -> gameConfig[entry.key] = entry.value } + + return true + } + catch (e: IOException) { + // write default config to game dir. Call this method again to read config from it. + try { + createConfigJson() + } + catch (e1: IOException) { + e.printStackTrace() + } + + return false + } + + } + + // exception handling + val sysLang: String + get() { + val lan = System.getProperty("user.language") + var country = System.getProperty("user.country") + if (lan == "en") + country = "US" + else if (lan == "fr") + country = "FR" + else if (lan == "de") + country = "DE" + else if (lan == "ko") country = "KR" + + return lan + country + } + + + /** + * Return config from config set. If the config does not exist, default value will be returned. + * @param key + * * + * @return Config from config set or default config if it does not exist. + * * + * @throws NullPointerException if the specified config simply does not exist. + */ + fun getConfigInt(key: String): Int { + var cfg: Int = 0 + try { + cfg = gameConfig.getAsInt(key)!! + } + catch (e: NullPointerException) { + // if the config set does not have the key, try for the default config + try { + cfg = DefaultConfig.fetch().get(key).asInt + } + catch (e1: NullPointerException) { + e.printStackTrace() + } + } + catch (e: TypeCastException) { + // if the config set does not have the key, try for the default config + try { + cfg = DefaultConfig.fetch().get(key).asInt + } + catch (e1: kotlin.TypeCastException) { + e.printStackTrace() + } + } + + return cfg + } + + /** + * Return config from config set. If the config does not exist, default value will be returned. + * @param key + * * + * @return Config from config set or default config if it does not exist. + * * + * @throws NullPointerException if the specified config simply does not exist. + */ + fun getConfigFloat(key: String): Float { + var cfg = 0f + try { + cfg = gameConfig.getAsFloat(key)!! + } + catch (e: NullPointerException) { + try { + cfg = DefaultConfig.fetch().get(key).asFloat + } + catch (e1: NullPointerException) { + e.printStackTrace() + } + + } + + return cfg + } + + /** + * Return config from config set. If the config does not exist, default value will be returned. + * @param key + * * + * @return Config from config set or default config if it does not exist. + * * + * @throws NullPointerException if the specified config simply does not exist. + */ + fun getConfigString(key: String): String { + var cfg = "" + try { + cfg = gameConfig.getAsString(key)!! + } + catch (e: NullPointerException) { + try { + cfg = DefaultConfig.fetch().get(key).asString + } + catch (e1: NullPointerException) { + e.printStackTrace() + } + + } + + return cfg + } + + /** + * Return config from config set. If the config does not exist, default value will be returned. + * @param key + * * + * @return Config from config set or default config if it does not exist. + * * + * @throws NullPointerException if the specified config simply does not exist. + */ + fun getConfigBoolean(key: String): Boolean { + var cfg = false + try { + cfg = gameConfig.getAsBoolean(key)!! + } + catch (e: NullPointerException) { + try { + cfg = DefaultConfig.fetch().get(key).asBoolean + } + catch (e1: NullPointerException) { + e.printStackTrace() + } + + } + + return cfg + } + } +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/TileProperties/TileNameCode.java b/src/com/Torvald/Terrarum/TileProperties/TileNameCode.java deleted file mode 100644 index 93c0a4fe4..000000000 --- a/src/com/Torvald/Terrarum/TileProperties/TileNameCode.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.Torvald.Terrarum.TileProperties; - -import com.Torvald.Terrarum.Terrarum; - -/** - * Created by minjaesong on 16-02-21. - */ -public class TileNameCode { - - public static final int AIR = 0; - - public static final int STONE = TilePropCodex.indexDamageToArrayAddr(1, 0); - public static final int STONE_QUARRIED = TilePropCodex.indexDamageToArrayAddr(1, 1); - - public static final int DIRT = TilePropCodex.indexDamageToArrayAddr(2, 0); - public static final int GRASS = TilePropCodex.indexDamageToArrayAddr(2, 1); - - public static final int PLANK_NORMAL = TilePropCodex.indexDamageToArrayAddr(3, 0); - public static final int PLANK_EBONY = TilePropCodex.indexDamageToArrayAddr(3, 1); - public static final int PLANK_BIRCH = TilePropCodex.indexDamageToArrayAddr(3, 2); - public static final int PLANK_BLOODROSE = TilePropCodex.indexDamageToArrayAddr(3, 3); - - public static final int TRUNK_NORMAL = TilePropCodex.indexDamageToArrayAddr(4, 0); - public static final int TRUNK_EBONY = TilePropCodex.indexDamageToArrayAddr(4, 1); - public static final int TRUNK_BIRCH = TilePropCodex.indexDamageToArrayAddr(4, 2); - public static final int TRUNK_BLOODROSE = TilePropCodex.indexDamageToArrayAddr(4, 3); - - public static final int SAND = TilePropCodex.indexDamageToArrayAddr(5, 0); - public static final int SAND_BEACH = TilePropCodex.indexDamageToArrayAddr(5, 1); - public static final int SAND_RED = TilePropCodex.indexDamageToArrayAddr(5, 2); - public static final int SAND_DESERT = TilePropCodex.indexDamageToArrayAddr(5, 3); - public static final int SAND_BLACK = TilePropCodex.indexDamageToArrayAddr(5, 4); - public static final int SAND_GREEN = TilePropCodex.indexDamageToArrayAddr(5, 5); - - public static final int GRAVEL = TilePropCodex.indexDamageToArrayAddr(6, 0); - public static final int GRAVEL_GREY = TilePropCodex.indexDamageToArrayAddr(6, 1); - - public static final int ORE_COPPER = TilePropCodex.indexDamageToArrayAddr(7, 0); - public static final int ORE_IRON = TilePropCodex.indexDamageToArrayAddr(7, 1); - public static final int ORE_GOLD = TilePropCodex.indexDamageToArrayAddr(7, 2); - public static final int ORE_SILVER = TilePropCodex.indexDamageToArrayAddr(7, 3); - public static final int ORE_ILMENITE = TilePropCodex.indexDamageToArrayAddr(7, 4); - public static final int ORE_AURICHALCUM = TilePropCodex.indexDamageToArrayAddr(7, 5); - - public static final int RAW_RUBY = TilePropCodex.indexDamageToArrayAddr(8, 0); - public static final int RAW_EMERALD = TilePropCodex.indexDamageToArrayAddr(8, 1); - public static final int RAW_SAPPHIRE = TilePropCodex.indexDamageToArrayAddr(8, 2); - public static final int RAW_TOPAZ = TilePropCodex.indexDamageToArrayAddr(8, 3); - public static final int RAW_DIAMOND = TilePropCodex.indexDamageToArrayAddr(8, 4); - public static final int RAW_AMETHYST = TilePropCodex.indexDamageToArrayAddr(8, 5); - - public static final int SNOW = TilePropCodex.indexDamageToArrayAddr(9, 0); - public static final int ICE_FRAGILE = TilePropCodex.indexDamageToArrayAddr(9, 1); - public static final int ICE_NATURAL = TilePropCodex.indexDamageToArrayAddr(9, 2); - public static final int ICE_MAGICAL = TilePropCodex.indexDamageToArrayAddr(9, 3); - - public static final int PLATFORM_STONE = TilePropCodex.indexDamageToArrayAddr(10, 0); - public static final int PLATFORM_WOODEN = TilePropCodex.indexDamageToArrayAddr(10, 1); - public static final int PLATFORM_EBONY = TilePropCodex.indexDamageToArrayAddr(10, 2); - public static final int PLATFORM_BIRCH = TilePropCodex.indexDamageToArrayAddr(10, 3); - public static final int PLATFORM_BLOODROSE = TilePropCodex.indexDamageToArrayAddr(10, 4); - - public static final int TORCH = TilePropCodex.indexDamageToArrayAddr(11, 0); - public static final int TORCH_FROST = TilePropCodex.indexDamageToArrayAddr(11, 1); - - public static final int TORCH_OFF = TilePropCodex.indexDamageToArrayAddr(12, 0); - public static final int TORCH_FROST_OFF = TilePropCodex.indexDamageToArrayAddr(12, 1); - - public static final int ILLUMINATOR_WHITE = TilePropCodex.indexDamageToArrayAddr(13, 0); - public static final int ILLUMINATOR_YELLOW = TilePropCodex.indexDamageToArrayAddr(13, 1); - public static final int ILLUMINATOR_ORANGE = TilePropCodex.indexDamageToArrayAddr(13, 2); - public static final int ILLUMINATOR_RED = TilePropCodex.indexDamageToArrayAddr(13, 3); - public static final int ILLUMINATOR_FUCHSIA = TilePropCodex.indexDamageToArrayAddr(13, 4); - public static final int ILLUMINATOR_PURPLE = TilePropCodex.indexDamageToArrayAddr(13, 5); - public static final int ILLUMINATOR_BLUE = TilePropCodex.indexDamageToArrayAddr(13, 6); - public static final int ILLUMINATOR_CYAN = TilePropCodex.indexDamageToArrayAddr(13, 7); - public static final int ILLUMINATOR_GREEN = TilePropCodex.indexDamageToArrayAddr(13, 8); - public static final int ILLUMINATOR_GREEN_DARK = TilePropCodex.indexDamageToArrayAddr(13, 9); - public static final int ILLUMINATOR_BROWN = TilePropCodex.indexDamageToArrayAddr(13, 10); - public static final int ILLUMINATOR_TAN = TilePropCodex.indexDamageToArrayAddr(13, 11); - public static final int ILLUMINATOR_GREY_LIGHT = TilePropCodex.indexDamageToArrayAddr(13, 12); - public static final int ILLUMINATOR_GREY_MED = TilePropCodex.indexDamageToArrayAddr(13, 13); - public static final int ILLUMINATOR_GREY_DARK = TilePropCodex.indexDamageToArrayAddr(13, 14); - public static final int ILLUMINATOR_BLACK = TilePropCodex.indexDamageToArrayAddr(13, 15); - - public static final int ILLUMINATOR_WHITE_OFF = TilePropCodex.indexDamageToArrayAddr(14, 0); - public static final int ILLUMINATOR_YELLOW_OFF = TilePropCodex.indexDamageToArrayAddr(14, 1); - public static final int ILLUMINATOR_ORANGE_OFF = TilePropCodex.indexDamageToArrayAddr(14, 2); - public static final int ILLUMINATOR_RED_OFF = TilePropCodex.indexDamageToArrayAddr(14, 3); - public static final int ILLUMINATOR_FUCHSIA_OFF = TilePropCodex.indexDamageToArrayAddr(14, 4); - public static final int ILLUMINATOR_PURPLE_OFF = TilePropCodex.indexDamageToArrayAddr(14, 5); - public static final int ILLUMINATOR_BLUE_OFF = TilePropCodex.indexDamageToArrayAddr(14, 6); - public static final int ILLUMINATOR_CYAN_OFF = TilePropCodex.indexDamageToArrayAddr(14, 7); - public static final int ILLUMINATOR_GREEN_OFF = TilePropCodex.indexDamageToArrayAddr(14, 8); - public static final int ILLUMINATOR_GREEN_DARK_OFF = TilePropCodex.indexDamageToArrayAddr(14, 9); - public static final int ILLUMINATOR_BROWN_OFF = TilePropCodex.indexDamageToArrayAddr(14, 10); - public static final int ILLUMINATOR_TAN_OFF = TilePropCodex.indexDamageToArrayAddr(14, 11); - public static final int ILLUMINATOR_GREY_LIGHT_OFF = TilePropCodex.indexDamageToArrayAddr(14, 12); - public static final int ILLUMINATOR_GREY_MED_OFF = TilePropCodex.indexDamageToArrayAddr(14, 13); - public static final int ILLUMINATOR_GREY_DARK_OFF = TilePropCodex.indexDamageToArrayAddr(14, 14); - public static final int ILLUMINATOR_BLACK_OFF = TilePropCodex.indexDamageToArrayAddr(14, 15); - - public static final int SANDSTONE = TilePropCodex.indexDamageToArrayAddr(15, 0); - public static final int SANDSTONE_WHITE = TilePropCodex.indexDamageToArrayAddr(15, 1); - public static final int SANDSTONE_RED = TilePropCodex.indexDamageToArrayAddr(15, 2); - public static final int SANDSTONE_DESERT = TilePropCodex.indexDamageToArrayAddr(15, 3); - public static final int SANDSTONE_BLACK = TilePropCodex.indexDamageToArrayAddr(15, 4); - public static final int SANDSTONE_GREEN = TilePropCodex.indexDamageToArrayAddr(15, 5); - - public static final int WATER_1 = TilePropCodex.indexDamageToArrayAddr(254, 0); - public static final int WATER_2 = TilePropCodex.indexDamageToArrayAddr(254, 1); - public static final int WATER_3 = TilePropCodex.indexDamageToArrayAddr(254, 2); - public static final int WATER_4 = TilePropCodex.indexDamageToArrayAddr(254, 3); - public static final int WATER_5 = TilePropCodex.indexDamageToArrayAddr(254, 4); - public static final int WATER_6 = TilePropCodex.indexDamageToArrayAddr(254, 5); - public static final int WATER_7 = TilePropCodex.indexDamageToArrayAddr(254, 6); - public static final int WATER_8 = TilePropCodex.indexDamageToArrayAddr(254, 7); - public static final int WATER_9 = TilePropCodex.indexDamageToArrayAddr(254, 8); - public static final int WATER_10 = TilePropCodex.indexDamageToArrayAddr(254, 9); - public static final int WATER_11 = TilePropCodex.indexDamageToArrayAddr(254, 10); - public static final int WATER_12 = TilePropCodex.indexDamageToArrayAddr(254, 11); - public static final int WATER_13 = TilePropCodex.indexDamageToArrayAddr(254, 12); - public static final int WATER_14 = TilePropCodex.indexDamageToArrayAddr(254, 13); - public static final int WATER_15 = TilePropCodex.indexDamageToArrayAddr(254, 14); - public static final int WATER = TilePropCodex.indexDamageToArrayAddr(254, 15); - - public static final int LAVA_1 = TilePropCodex.indexDamageToArrayAddr(255, 0); - public static final int LAVA_2 = TilePropCodex.indexDamageToArrayAddr(255, 1); - public static final int LAVA_3 = TilePropCodex.indexDamageToArrayAddr(255, 2); - public static final int LAVA_4 = TilePropCodex.indexDamageToArrayAddr(255, 3); - public static final int LAVA_5 = TilePropCodex.indexDamageToArrayAddr(255, 4); - public static final int LAVA_6 = TilePropCodex.indexDamageToArrayAddr(255, 5); - public static final int LAVA_7 = TilePropCodex.indexDamageToArrayAddr(255, 6); - public static final int LAVA_8 = TilePropCodex.indexDamageToArrayAddr(255, 7); - public static final int LAVA_9 = TilePropCodex.indexDamageToArrayAddr(255, 8); - public static final int LAVA_10 = TilePropCodex.indexDamageToArrayAddr(255, 9); - public static final int LAVA_11 = TilePropCodex.indexDamageToArrayAddr(255, 10); - public static final int LAVA_12 = TilePropCodex.indexDamageToArrayAddr(255, 11); - public static final int LAVA_13 = TilePropCodex.indexDamageToArrayAddr(255, 12); - public static final int LAVA_14 = TilePropCodex.indexDamageToArrayAddr(255, 13); - public static final int LAVA_15 = TilePropCodex.indexDamageToArrayAddr(255, 14); - public static final int LAVA = TilePropCodex.indexDamageToArrayAddr(255, 15); - -} diff --git a/src/com/Torvald/Terrarum/TileProperties/TileNameCode.kt b/src/com/Torvald/Terrarum/TileProperties/TileNameCode.kt new file mode 100644 index 000000000..f1e744f57 --- /dev/null +++ b/src/com/Torvald/Terrarum/TileProperties/TileNameCode.kt @@ -0,0 +1,144 @@ +package com.Torvald.Terrarum.TileProperties + +import com.Torvald.Terrarum.Terrarum + +/** + * Created by minjaesong on 16-02-21. + */ +object TileNameCode { + + val AIR = 0 + + val STONE = TilePropCodex.indexDamageToArrayAddr(1, 0) + val STONE_QUARRIED = TilePropCodex.indexDamageToArrayAddr(1, 1) + + val DIRT = TilePropCodex.indexDamageToArrayAddr(2, 0) + val GRASS = TilePropCodex.indexDamageToArrayAddr(2, 1) + + val PLANK_NORMAL = TilePropCodex.indexDamageToArrayAddr(3, 0) + val PLANK_EBONY = TilePropCodex.indexDamageToArrayAddr(3, 1) + val PLANK_BIRCH = TilePropCodex.indexDamageToArrayAddr(3, 2) + val PLANK_BLOODROSE = TilePropCodex.indexDamageToArrayAddr(3, 3) + + val TRUNK_NORMAL = TilePropCodex.indexDamageToArrayAddr(4, 0) + val TRUNK_EBONY = TilePropCodex.indexDamageToArrayAddr(4, 1) + val TRUNK_BIRCH = TilePropCodex.indexDamageToArrayAddr(4, 2) + val TRUNK_BLOODROSE = TilePropCodex.indexDamageToArrayAddr(4, 3) + + val SAND = TilePropCodex.indexDamageToArrayAddr(5, 0) + val SAND_BEACH = TilePropCodex.indexDamageToArrayAddr(5, 1) + val SAND_RED = TilePropCodex.indexDamageToArrayAddr(5, 2) + val SAND_DESERT = TilePropCodex.indexDamageToArrayAddr(5, 3) + val SAND_BLACK = TilePropCodex.indexDamageToArrayAddr(5, 4) + val SAND_GREEN = TilePropCodex.indexDamageToArrayAddr(5, 5) + + val GRAVEL = TilePropCodex.indexDamageToArrayAddr(6, 0) + val GRAVEL_GREY = TilePropCodex.indexDamageToArrayAddr(6, 1) + + val ORE_COPPER = TilePropCodex.indexDamageToArrayAddr(7, 0) + val ORE_IRON = TilePropCodex.indexDamageToArrayAddr(7, 1) + val ORE_GOLD = TilePropCodex.indexDamageToArrayAddr(7, 2) + val ORE_SILVER = TilePropCodex.indexDamageToArrayAddr(7, 3) + val ORE_ILMENITE = TilePropCodex.indexDamageToArrayAddr(7, 4) + val ORE_AURICHALCUM = TilePropCodex.indexDamageToArrayAddr(7, 5) + + val RAW_RUBY = TilePropCodex.indexDamageToArrayAddr(8, 0) + val RAW_EMERALD = TilePropCodex.indexDamageToArrayAddr(8, 1) + val RAW_SAPPHIRE = TilePropCodex.indexDamageToArrayAddr(8, 2) + val RAW_TOPAZ = TilePropCodex.indexDamageToArrayAddr(8, 3) + val RAW_DIAMOND = TilePropCodex.indexDamageToArrayAddr(8, 4) + val RAW_AMETHYST = TilePropCodex.indexDamageToArrayAddr(8, 5) + + val SNOW = TilePropCodex.indexDamageToArrayAddr(9, 0) + val ICE_FRAGILE = TilePropCodex.indexDamageToArrayAddr(9, 1) + val ICE_NATURAL = TilePropCodex.indexDamageToArrayAddr(9, 2) + val ICE_MAGICAL = TilePropCodex.indexDamageToArrayAddr(9, 3) + + val PLATFORM_STONE = TilePropCodex.indexDamageToArrayAddr(10, 0) + val PLATFORM_WOODEN = TilePropCodex.indexDamageToArrayAddr(10, 1) + val PLATFORM_EBONY = TilePropCodex.indexDamageToArrayAddr(10, 2) + val PLATFORM_BIRCH = TilePropCodex.indexDamageToArrayAddr(10, 3) + val PLATFORM_BLOODROSE = TilePropCodex.indexDamageToArrayAddr(10, 4) + + val TORCH = TilePropCodex.indexDamageToArrayAddr(11, 0) + val TORCH_FROST = TilePropCodex.indexDamageToArrayAddr(11, 1) + + val TORCH_OFF = TilePropCodex.indexDamageToArrayAddr(12, 0) + val TORCH_FROST_OFF = TilePropCodex.indexDamageToArrayAddr(12, 1) + + val ILLUMINATOR_WHITE = TilePropCodex.indexDamageToArrayAddr(13, 0) + val ILLUMINATOR_YELLOW = TilePropCodex.indexDamageToArrayAddr(13, 1) + val ILLUMINATOR_ORANGE = TilePropCodex.indexDamageToArrayAddr(13, 2) + val ILLUMINATOR_RED = TilePropCodex.indexDamageToArrayAddr(13, 3) + val ILLUMINATOR_FUCHSIA = TilePropCodex.indexDamageToArrayAddr(13, 4) + val ILLUMINATOR_PURPLE = TilePropCodex.indexDamageToArrayAddr(13, 5) + val ILLUMINATOR_BLUE = TilePropCodex.indexDamageToArrayAddr(13, 6) + val ILLUMINATOR_CYAN = TilePropCodex.indexDamageToArrayAddr(13, 7) + val ILLUMINATOR_GREEN = TilePropCodex.indexDamageToArrayAddr(13, 8) + val ILLUMINATOR_GREEN_DARK = TilePropCodex.indexDamageToArrayAddr(13, 9) + val ILLUMINATOR_BROWN = TilePropCodex.indexDamageToArrayAddr(13, 10) + val ILLUMINATOR_TAN = TilePropCodex.indexDamageToArrayAddr(13, 11) + val ILLUMINATOR_GREY_LIGHT = TilePropCodex.indexDamageToArrayAddr(13, 12) + val ILLUMINATOR_GREY_MED = TilePropCodex.indexDamageToArrayAddr(13, 13) + val ILLUMINATOR_GREY_DARK = TilePropCodex.indexDamageToArrayAddr(13, 14) + val ILLUMINATOR_BLACK = TilePropCodex.indexDamageToArrayAddr(13, 15) + + val ILLUMINATOR_WHITE_OFF = TilePropCodex.indexDamageToArrayAddr(14, 0) + val ILLUMINATOR_YELLOW_OFF = TilePropCodex.indexDamageToArrayAddr(14, 1) + val ILLUMINATOR_ORANGE_OFF = TilePropCodex.indexDamageToArrayAddr(14, 2) + val ILLUMINATOR_RED_OFF = TilePropCodex.indexDamageToArrayAddr(14, 3) + val ILLUMINATOR_FUCHSIA_OFF = TilePropCodex.indexDamageToArrayAddr(14, 4) + val ILLUMINATOR_PURPLE_OFF = TilePropCodex.indexDamageToArrayAddr(14, 5) + val ILLUMINATOR_BLUE_OFF = TilePropCodex.indexDamageToArrayAddr(14, 6) + val ILLUMINATOR_CYAN_OFF = TilePropCodex.indexDamageToArrayAddr(14, 7) + val ILLUMINATOR_GREEN_OFF = TilePropCodex.indexDamageToArrayAddr(14, 8) + val ILLUMINATOR_GREEN_DARK_OFF = TilePropCodex.indexDamageToArrayAddr(14, 9) + val ILLUMINATOR_BROWN_OFF = TilePropCodex.indexDamageToArrayAddr(14, 10) + val ILLUMINATOR_TAN_OFF = TilePropCodex.indexDamageToArrayAddr(14, 11) + val ILLUMINATOR_GREY_LIGHT_OFF = TilePropCodex.indexDamageToArrayAddr(14, 12) + val ILLUMINATOR_GREY_MED_OFF = TilePropCodex.indexDamageToArrayAddr(14, 13) + val ILLUMINATOR_GREY_DARK_OFF = TilePropCodex.indexDamageToArrayAddr(14, 14) + val ILLUMINATOR_BLACK_OFF = TilePropCodex.indexDamageToArrayAddr(14, 15) + + val SANDSTONE = TilePropCodex.indexDamageToArrayAddr(15, 0) + val SANDSTONE_WHITE = TilePropCodex.indexDamageToArrayAddr(15, 1) + val SANDSTONE_RED = TilePropCodex.indexDamageToArrayAddr(15, 2) + val SANDSTONE_DESERT = TilePropCodex.indexDamageToArrayAddr(15, 3) + val SANDSTONE_BLACK = TilePropCodex.indexDamageToArrayAddr(15, 4) + val SANDSTONE_GREEN = TilePropCodex.indexDamageToArrayAddr(15, 5) + + val WATER_1 = TilePropCodex.indexDamageToArrayAddr(254, 0) + val WATER_2 = TilePropCodex.indexDamageToArrayAddr(254, 1) + val WATER_3 = TilePropCodex.indexDamageToArrayAddr(254, 2) + val WATER_4 = TilePropCodex.indexDamageToArrayAddr(254, 3) + val WATER_5 = TilePropCodex.indexDamageToArrayAddr(254, 4) + val WATER_6 = TilePropCodex.indexDamageToArrayAddr(254, 5) + val WATER_7 = TilePropCodex.indexDamageToArrayAddr(254, 6) + val WATER_8 = TilePropCodex.indexDamageToArrayAddr(254, 7) + val WATER_9 = TilePropCodex.indexDamageToArrayAddr(254, 8) + val WATER_10 = TilePropCodex.indexDamageToArrayAddr(254, 9) + val WATER_11 = TilePropCodex.indexDamageToArrayAddr(254, 10) + val WATER_12 = TilePropCodex.indexDamageToArrayAddr(254, 11) + val WATER_13 = TilePropCodex.indexDamageToArrayAddr(254, 12) + val WATER_14 = TilePropCodex.indexDamageToArrayAddr(254, 13) + val WATER_15 = TilePropCodex.indexDamageToArrayAddr(254, 14) + val WATER = TilePropCodex.indexDamageToArrayAddr(254, 15) + + val LAVA_1 = TilePropCodex.indexDamageToArrayAddr(255, 0) + val LAVA_2 = TilePropCodex.indexDamageToArrayAddr(255, 1) + val LAVA_3 = TilePropCodex.indexDamageToArrayAddr(255, 2) + val LAVA_4 = TilePropCodex.indexDamageToArrayAddr(255, 3) + val LAVA_5 = TilePropCodex.indexDamageToArrayAddr(255, 4) + val LAVA_6 = TilePropCodex.indexDamageToArrayAddr(255, 5) + val LAVA_7 = TilePropCodex.indexDamageToArrayAddr(255, 6) + val LAVA_8 = TilePropCodex.indexDamageToArrayAddr(255, 7) + val LAVA_9 = TilePropCodex.indexDamageToArrayAddr(255, 8) + val LAVA_10 = TilePropCodex.indexDamageToArrayAddr(255, 9) + val LAVA_11 = TilePropCodex.indexDamageToArrayAddr(255, 10) + val LAVA_12 = TilePropCodex.indexDamageToArrayAddr(255, 11) + val LAVA_13 = TilePropCodex.indexDamageToArrayAddr(255, 12) + val LAVA_14 = TilePropCodex.indexDamageToArrayAddr(255, 13) + val LAVA_15 = TilePropCodex.indexDamageToArrayAddr(255, 14) + val LAVA = TilePropCodex.indexDamageToArrayAddr(255, 15) + +} diff --git a/src/com/Torvald/Terrarum/TileProperties/TileProp.java b/src/com/Torvald/Terrarum/TileProperties/TileProp.java deleted file mode 100644 index 2b169dd92..000000000 --- a/src/com/Torvald/Terrarum/TileProperties/TileProp.java +++ /dev/null @@ -1,161 +0,0 @@ -package com.Torvald.Terrarum.TileProperties; - -/** - * Created by minjaesong on 16-02-16. - */ -public class TileProp { - - private int id; - private int damage; - private String name; - - private char opacity; // colour attenuation - - private int strength; - - private int density; - - private boolean fluid; - private int movementResistance; - - private boolean solid; // transparent or not - - private boolean wallable; - - private char luminosity; - - private int drop; - private int dropDamage; - - private boolean fallable; - - private int friction; - - public int getId() { - return id; - } - - void setId(int id) { - this.id = id; - } - - public int getDamage() { - return damage; - } - - public void setDamage(int damage) { - this.damage = damage; - } - - public String getName() { - return name; - } - - void setName(String name) { - this.name = name; - } - - public char getOpacity() { - return opacity; - } - - void setOpacity(char opacity) { - this.opacity = opacity; - } - - public int getStrength() { - return strength; - } - - void setStrength(int strength) { - this.strength = strength; - } - - public boolean isFluid() { - return fluid; - } - - void setFluid(boolean fluid) { - this.fluid = fluid; - } - - public int getMovementResistance() { - return movementResistance; - } - - void setMovementResistance(int movementResistance) { - this.movementResistance = movementResistance; - } - - public boolean isSolid() { - return solid; - } - - void setSolid(boolean solid) { - this.solid = solid; - } - - public boolean isWallable() { - return wallable; - } - - void setWallable(boolean wallable) { - this.wallable = wallable; - } - - /** - * Raw RGB value, without alpha - * @return - */ - public char getLuminosity() { - return luminosity; - } - - /** - * - * @param luminosity Raw RGB value, without alpha - */ - void setLuminosity(char luminosity) { - this.luminosity = luminosity; - } - - public int getDrop() { - return drop; - } - - void setDrop(int drop) { - this.drop = drop; - } - - public int getDropDamage() { - return dropDamage; - } - - public void setDropDamage(int dropDamage) { - this.dropDamage = dropDamage; - } - - public boolean isFallable() { - return fallable; - } - - void setFallable(boolean fallable) { - this.fallable = fallable; - } - - public int getFriction() { - return friction; - } - - void setFriction(int friction) { - this.friction = friction; - } - - public int getDensity() { - return density; - } - - public void setDensity(int density) { - this.density = density; - } -} diff --git a/src/com/Torvald/Terrarum/TileProperties/TileProp.kt b/src/com/Torvald/Terrarum/TileProperties/TileProp.kt new file mode 100644 index 000000000..43381ff73 --- /dev/null +++ b/src/com/Torvald/Terrarum/TileProperties/TileProp.kt @@ -0,0 +1,41 @@ +package com.Torvald.Terrarum.TileProperties + +/** + * Created by minjaesong on 16-02-16. + */ +class TileProp { + + var id: Int = 0 + + var damage: Int = 0 + var name: String = "" + + /** + * @param opacity Raw RGB value, without alpha + */ + var opacity: Char = ' ' // colour attenuation + + var strength: Int = 0 + + + var density: Int = 0 + + var isFluid: Boolean = false + var movementResistance: Int = 0 + + var isSolid: Boolean = false + + var isWallable: Boolean = false + + /** + * @param luminosity Raw RGB value, without alpha + */ + var luminosity: Char = ' ' + + var drop: Int = 0 + var dropDamage: Int = 0 + + var isFallable: Boolean = false + + var friction: Int = 0 +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/TileProperties/TilePropCodex.java b/src/com/Torvald/Terrarum/TileProperties/TilePropCodex.java deleted file mode 100644 index 86647c591..000000000 --- a/src/com/Torvald/Terrarum/TileProperties/TilePropCodex.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.Torvald.Terrarum.TileProperties; - -import com.Torvald.CSVFetcher; -import com.Torvald.Terrarum.GameMap.MapLayer; -import com.Torvald.Terrarum.GameMap.PairedMapLayer; -import org.apache.commons.csv.CSVRecord; - -import java.io.IOException; -import java.util.List; - -/** - * Created by minjaesong on 16-02-16. - */ -public class TilePropCodex { - - private static TileProp[] tileProps; - - public static final String CSV_PATH = "./src/com/Torvald/Terrarum/TileProperties/tileprop.csv"; - - public TilePropCodex() { - tileProps = new TileProp[MapLayer.RANGE * (PairedMapLayer.RANGE)]; - - for (int i = 0; i < tileProps.length; i++) { - tileProps[i] = new TileProp(); - } - - try { - // todo verify CSV using pre-calculated SHA256 hash - List records = CSVFetcher.readCSV(CSV_PATH); - - System.out.println("[TilePropCodex] Building tile properties table"); - - records.forEach(record -> - setProp(tileProps[indexDamageToArrayAddr - (intVal(record, "id") - , intVal(record, "dmg")) - ], record - )); - } - catch (IOException e) { - e.printStackTrace(); - } - } - - public static TileProp getProp(int index, int damage) { - try { - tileProps[indexDamageToArrayAddr(index, damage)].getId(); - } - catch (NullPointerException e) { - throw new NullPointerException("Tile prop with id " + index - + " and damage " + damage - + " does not exist."); - } - - return tileProps[indexDamageToArrayAddr(index, damage)]; - } - - public static TileProp getProp(int rawIndex) { - try { - tileProps[rawIndex].getId(); - } - catch (NullPointerException e) { - throw new NullPointerException("Tile prop with raw id " + rawIndex - + " does not exist."); - } - - return tileProps[rawIndex]; - } - - private static void setProp(TileProp prop, CSVRecord record) { - prop.setName(record.get("name")); - - prop.setId(intVal(record, "id")); - prop.setDamage(intVal(record, "dmg")); - - prop.setOpacity((char) intVal(record, "opacity")); - prop.setStrength(intVal(record, "strength")); - prop.setDensity(intVal(record, "dsty")); - prop.setLuminosity((char) intVal(record, "lumcolor")); - prop.setDrop(intVal(record, "drop")); - prop.setDropDamage(intVal(record, "ddmg")); - prop.setFriction(intVal(record, "friction")); - - prop.setFluid(boolVal(record, "fluid")); - prop.setSolid(boolVal(record, "solid")); - prop.setWallable(boolVal(record, "wall")); - prop.setFallable(boolVal(record, "fall")); - - if (prop.isFluid()) prop.setMovementResistance(intVal(record, "movr")); - - System.out.print(formatNum3(prop.getId()) + ":" + formatNum2(prop.getDamage())); - System.out.println("\t" + prop.getName()); - } - - private static int intVal(CSVRecord rec, String s) { - int ret = -1; - try { ret = Integer.decode(rec.get(s)); } - catch (NullPointerException e) {} - return ret; - } - - private static boolean boolVal(CSVRecord rec, String s) { - return !(intVal(rec, s) == 0); - } - - public static int indexDamageToArrayAddr(int index, int damage) { - return (index * (PairedMapLayer.RANGE) + damage); - } - - private static String formatNum3(int i) { - if (i < 10) return "00" + i; - else if (i < 100) return "0" + i; - else return String.valueOf(i); - } - - private static String formatNum2(int i) { - if (i < 10) return "0" + i; - else return String.valueOf(i); - } -} diff --git a/src/com/Torvald/Terrarum/TileProperties/TilePropCodex.kt b/src/com/Torvald/Terrarum/TileProperties/TilePropCodex.kt new file mode 100644 index 000000000..9ac51c38a --- /dev/null +++ b/src/com/Torvald/Terrarum/TileProperties/TilePropCodex.kt @@ -0,0 +1,129 @@ +package com.Torvald.Terrarum.TileProperties + +import com.Torvald.CSVFetcher +import com.Torvald.Terrarum.GameMap.MapLayer +import com.Torvald.Terrarum.GameMap.PairedMapLayer +import org.apache.commons.csv.CSVRecord + +import java.io.IOException + +/** + * Created by minjaesong on 16-02-16. + */ +class TilePropCodex { + + init { + tileProps = Array(MapLayer.RANGE * PairedMapLayer.RANGE, + {i -> TileProp() } + ) + + for (i in tileProps.indices) { + tileProps[i] = TileProp() + } + + try { + // todo verify CSV using pre-calculated SHA256 hash + val records = CSVFetcher.readCSV(CSV_PATH) + + println("[TilePropCodex] Building tile properties table") + + records.forEach { record -> setProp( + tileProps[indexDamageToArrayAddr(intVal(record, "id"), intVal(record, "dmg"))] + , record) + } + } + catch (e: IOException) { + e.printStackTrace() + } + + } + + companion object { + + private lateinit var tileProps: Array + + val CSV_PATH = "./src/com/Torvald/Terrarum/TileProperties/tileprop.csv" + + fun getProp(index: Int, damage: Int): TileProp { + try { + tileProps[indexDamageToArrayAddr(index, damage)].id + } + catch (e: NullPointerException) { + throw NullPointerException("Tile prop with id $index and damage $damage does not exist.") + } + + return tileProps[indexDamageToArrayAddr(index, damage)] + } + + fun getProp(rawIndex: Int): TileProp { + try { + tileProps[rawIndex].id + } + catch (e: NullPointerException) { + throw NullPointerException("Tile prop with raw id $rawIndex does not exist.") + } + + return tileProps[rawIndex] + } + + private fun setProp(prop: TileProp, record: CSVRecord) { + prop.name = record.get("name") + + prop.id = intVal(record, "id") + prop.damage = intVal(record, "dmg") + + prop.opacity = intVal(record, "opacity").toChar() + prop.strength = intVal(record, "strength") + prop.density = intVal(record, "dsty") + prop.luminosity = intVal(record, "lumcolor").toChar() + prop.drop = intVal(record, "drop") + prop.dropDamage = intVal(record, "ddmg") + prop.friction = intVal(record, "friction") + + prop.isFluid = boolVal(record, "fluid") + prop.isSolid = boolVal(record, "solid") + prop.isWallable = boolVal(record, "wall") + prop.isFallable = boolVal(record, "fall") + + if (prop.isFluid) prop.movementResistance = intVal(record, "movr") + + print(formatNum3(prop.id) + ":" + formatNum2(prop.damage)) + println("\t" + prop.name!!) + } + + private fun intVal(rec: CSVRecord, s: String): Int { + var ret = -1 + try { + ret = Integer.decode(rec.get(s))!! + } + catch (e: NullPointerException) { + } + + return ret + } + + private fun boolVal(rec: CSVRecord, s: String): Boolean { + return intVal(rec, s) != 0 + } + + fun indexDamageToArrayAddr(index: Int, damage: Int): Int { + return index * PairedMapLayer.RANGE + damage + } + + private fun formatNum3(i: Int): String { + if (i < 10) + return "00" + i + else if (i < 100) + return "0" + i + else + return i.toString() + } + + private fun formatNum2(i: Int): String { + if (i < 10) + return "0" + i + else + return i.toString() + } + } +} diff --git a/src/com/Torvald/Terrarum/TileStat/TileStat.java b/src/com/Torvald/Terrarum/TileStat/TileStat.java deleted file mode 100644 index 6383975c1..000000000 --- a/src/com/Torvald/Terrarum/TileStat/TileStat.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.Torvald.Terrarum.TileStat; - -import com.Torvald.Terrarum.Actors.Player; -import com.Torvald.Terrarum.GameMap.GameMap; -import com.Torvald.Terrarum.GameMap.MapLayer; -import com.Torvald.Terrarum.MapDrawer.MapCamera; -import com.Torvald.Terrarum.MapDrawer.MapDrawer; -import com.Torvald.Terrarum.Terrarum; -import com.jme3.math.FastMath; - -import java.util.Arrays; - -/** - * Created by minjaesong on 16-02-01. - */ -public class TileStat { - - private static short[] tilestat = new short[GameMap.TILES_SUPPORTED]; - - private static final int TSIZE = MapDrawer.getTILE_SIZE(); - - /** - * Update tile stats from tiles on screen - */ - public static void update() { - Arrays.fill(tilestat, (short) 0); - - // Get stats on no-zoomed screen area. In other words, will behave as if screen zoom were 1.0 - // no matter how the screen is zoomed. - GameMap map = Terrarum.game.map; - Player player = Terrarum.game.getPlayer(); - - int renderWidth = FastMath.ceil(Terrarum.WIDTH); - int renderHeight = FastMath.ceil(Terrarum.HEIGHT); - - int noZoomCameraX = Math.round(FastMath.clamp( - player.getHitbox().getCenteredX() - (renderWidth / 2) - , TSIZE, map.width * TSIZE - renderWidth - TSIZE - )); - int noZoomCameraY = Math.round(FastMath.clamp( - player.getHitbox().getCenteredY() - (renderHeight / 2) - , TSIZE, map.height * TSIZE - renderHeight - TSIZE - )); - - int for_x_start = MapCamera.div16(noZoomCameraX); - int for_y_start = MapCamera.div16(noZoomCameraY); - int for_y_end = MapCamera.clampHTile(for_y_start + MapCamera.div16(renderHeight) + 2); - int for_x_end = MapCamera.clampWTile(for_x_start + MapCamera.div16(renderWidth) + 2); - - for (int y = for_y_start; y < for_y_end; y++) { - for (int x = for_x_start; x < for_x_end; x++) { - int tileWall = map.getTileFromWall(x, y); - int tileTerrain = map.getTileFromTerrain(x, y); - tilestat[tileWall] += 1; - tilestat[tileTerrain] += 1; - } - } - } - - public static int getCount(byte... tile) { - int sum = 0; - for (int i = 0; i < tile.length; i++) { - int newArgs = Byte.toUnsignedInt(tile[i]); - sum += Short.toUnsignedInt(tilestat[ newArgs ]); - } - - return sum; - } - - public static int getCount(int... tile) { - int sum = 0; - for (int i = 0; i < tile.length; i++) { - sum += Short.toUnsignedInt(tilestat[ tile[i] ]); - } - return sum; - } - - /** - * - * @return copy of the stat data - */ - public static short[] getStatCopy() { - return Arrays.copyOf(tilestat, MapLayer.RANGE); - } - -} diff --git a/src/com/Torvald/Terrarum/TileStat/TileStat.kt b/src/com/Torvald/Terrarum/TileStat/TileStat.kt new file mode 100644 index 000000000..9174492ae --- /dev/null +++ b/src/com/Torvald/Terrarum/TileStat/TileStat.kt @@ -0,0 +1,81 @@ +package com.Torvald.Terrarum.TileStat + +import com.Torvald.Terrarum.Actors.Player +import com.Torvald.Terrarum.GameMap.GameMap +import com.Torvald.Terrarum.GameMap.MapLayer +import com.Torvald.Terrarum.MapDrawer.MapCamera +import com.Torvald.Terrarum.MapDrawer.MapDrawer +import com.Torvald.Terrarum.Terrarum +import com.jme3.math.FastMath + +import java.util.Arrays + +/** + * Created by minjaesong on 16-02-01. + */ +object TileStat { + + private val tilestat = ShortArray(GameMap.TILES_SUPPORTED) + + private val TSIZE = MapDrawer.TILE_SIZE + + /** + * Update tile stats from tiles on screen + */ + fun update() { + Arrays.fill(tilestat, 0.toShort()) + + // Get stats on no-zoomed screen area. In other words, will behave as if screen zoom were 1.0 + // no matter how the screen is zoomed. + val map = Terrarum.game.map + val player = Terrarum.game.player + + val renderWidth = FastMath.ceil(Terrarum.WIDTH.toFloat()) + val renderHeight = FastMath.ceil(Terrarum.HEIGHT.toFloat()) + + val noZoomCameraX = Math.round(FastMath.clamp( + player.hitbox!!.centeredX - renderWidth / 2, TSIZE.toFloat(), map.width * TSIZE - renderWidth - TSIZE.toFloat())) + val noZoomCameraY = Math.round(FastMath.clamp( + player.hitbox!!.centeredY - renderHeight / 2, TSIZE.toFloat(), map.width * TSIZE - renderHeight - TSIZE.toFloat())) + + val for_x_start = MapCamera.div16(noZoomCameraX) + val for_y_start = MapCamera.div16(noZoomCameraY) + val for_y_end = MapCamera.clampHTile(for_y_start + MapCamera.div16(renderHeight) + 2) + val for_x_end = MapCamera.clampWTile(for_x_start + MapCamera.div16(renderWidth) + 2) + + for (y in for_y_start..for_y_end - 1) { + for (x in for_x_start..for_x_end - 1) { + val tileWall = map.getTileFromWall(x, y) + val tileTerrain = map.getTileFromTerrain(x, y) + ++tilestat[tileWall] + ++tilestat[tileTerrain] + } + } + } + + fun getCount(vararg tile: Byte): Int { + var sum = 0 + for (i in tile.indices) { + val newArgs = java.lang.Byte.toUnsignedInt(tile[i]) + sum += java.lang.Short.toUnsignedInt(tilestat[newArgs]) + } + + return sum + } + + fun getCount(vararg tile: Int): Int { + var sum = 0 + for (i in tile.indices) { + sum += java.lang.Short.toUnsignedInt(tilestat[tile[i]]) + } + return sum + } + + /** + + * @return copy of the stat data + */ + val statCopy: ShortArray + get() = Arrays.copyOf(tilestat, MapLayer.RANGE) + +} diff --git a/src/com/Torvald/Terrarum/UserInterface/BasicDebugInfoWindow b/src/com/Torvald/Terrarum/UserInterface/BasicDebugInfoWindow deleted file mode 100644 index 318abdc41..000000000 --- a/src/com/Torvald/Terrarum/UserInterface/BasicDebugInfoWindow +++ /dev/null @@ -1,220 +0,0 @@ -package com.Torvald.Terrarum.UserInterface; - -import com.Torvald.Terrarum.Actors.PlayerDebugger; -import com.Torvald.Terrarum.Actors.Hitbox; -import com.Torvald.Terrarum.GameMap.PairedMapLayer; -import com.Torvald.Terrarum.LangPack.Lang; -import com.Torvald.Terrarum.MapDrawer.LightmapRenderer; -import com.Torvald.Terrarum.MapDrawer.MapDrawer; -import com.Torvald.Terrarum.Terrarum; -import com.Torvald.Terrarum.MapDrawer.MapCamera; -import org.newdawn.slick.Color; -import org.newdawn.slick.GameContainer; -import org.newdawn.slick.Graphics; -import org.newdawn.slick.Input; - -import java.util.Formatter; - -/** - * Created by minjaesong on 16-01-19. - */ -public class BasicDebugInfoWindow implements UICanvas { - - private static PlayerDebugger playerDbg; - - int width; - int height; - - /** - * Call AFTER player constuction! - */ - public BasicDebugInfoWindow() { - width = Terrarum.WIDTH; - height = Terrarum.HEIGHT; - } - - @Override - public void render(GameContainer gc, Graphics g) { - if (playerDbg == null) { - playerDbg = new PlayerDebugger(Terrarum.game.getPlayer()); - } - - - StringBuilder sb = new StringBuilder(); - Formatter formatter = new Formatter(sb); - - int mouseTileX = (int) ((MapCamera.getCameraX() + gc.getInput().getMouseX() / Terrarum.game.screenZoom) - / MapDrawer.TILE_SIZE); - int mouseTileY = (int) ((MapCamera.getCameraY() + gc.getInput().getMouseY() / Terrarum.game.screenZoom) - / MapDrawer.TILE_SIZE); - - g.setColor(Color.white); - - Hitbox hitbox = playerDbg.hitbox(); - Hitbox nextHitbox = playerDbg.nextHitbox(); - - printLine(g, 1, "posX : " - + String.valueOf(hitbox.getPointedX()) - + " (" - + String.valueOf((int) (hitbox.getPointedX() / MapDrawer.TILE_SIZE)) - + ")" - ); - printLine(g, 2, "posY : " - + String.valueOf(hitbox.getPointedY()) - + " (" - + String.valueOf((int) (hitbox.getPointedY() / MapDrawer.TILE_SIZE)) - + ")" - ); - printLine(g, 3, "veloX : " + String.valueOf(playerDbg.veloX())); - printLine(g, 4, "veloY : " + String.valueOf(playerDbg.veloY())); - printLine(g, 5, "grounded : " + String.valueOf(playerDbg.grounded())); - printLine(g, 6, "noClip : " + String.valueOf(playerDbg.noClip())); - printLine(g, 7, "mass : " + String.valueOf(playerDbg.mass()) + " [kg]"); - - String lightVal; - String mtX = String.valueOf(mouseTileX), mtY = String.valueOf(mouseTileY); - try { - char valRaw = LightmapRenderer.getValueFromMap(mouseTileX, mouseTileY); - int rawR = LightmapRenderer.getRawR(valRaw); - int rawG = LightmapRenderer.getRawG(valRaw); - int rawB = LightmapRenderer.getRawB(valRaw); - lightVal = String.valueOf((int)valRaw) + " (" - + String.valueOf(rawR) + " " - + String.valueOf(rawG) + " " - + String.valueOf(rawB) + ")"; - } - catch (ArrayIndexOutOfBoundsException e) { - lightVal = "out of bounds"; - mtX = "---"; - mtY = "---"; - } - printLine(g, 8, "light at cursor : " + lightVal - ); - - String tileNo; - try { - int tileNumRaw = Terrarum.game.map.getTileFromTerrain(mouseTileX, mouseTileY); - int tilenum = tileNumRaw / PairedMapLayer.RANGE; - int tiledmg = tileNumRaw % PairedMapLayer.RANGE; - tileNo = tilenum + ":" + tiledmg; - } - catch (ArrayIndexOutOfBoundsException e) { - tileNo = "-"; - } - printLine(g, 9, "tile : " + tileNo + " (" + mtX + ", " + mtY + ")"); - - /** - * Second column - */ - - int collisonFlag = playerDbg.eventMoving(); - printLineColumn(g, 2, 1, "Vsync : " + Terrarum.appgc.isVSyncRequested()); - printLineColumn(g, 2, 2, "Env colour temp : " + MapDrawer.getColTemp()); - - /** - * On screen - */ - - // Memory allocation - long memInUse = Terrarum.game.memInUse; - long totalVMMem = Terrarum.game.totalVMMem; - - g.setColor(new Color(0xFF7F00)); - g.drawString( - Lang.get("DEV_MEMORY_SHORT_CAP") - + " : " - + formatter.format( - Lang.get("DEV_MEMORY_A_OF_B") - , memInUse - , totalVMMem - ) - , Terrarum.WIDTH - 200, line(1) - ); - - // Hitbox - float zoom = Terrarum.game.screenZoom; - g.setColor(new Color(0x007f00)); - g.drawRect(hitbox.getHitboxStart().getX() * zoom - - MapCamera.getCameraX() * zoom - , hitbox.getHitboxStart().getY() * zoom - - MapCamera.getCameraY() * zoom - , hitbox.getWidth() * zoom - , hitbox.getHeight() * zoom - ); - // ...and its point - g.fillRect( - (hitbox.getPointedX() - 1) * zoom - - MapCamera.getCameraX() * zoom - , (hitbox.getPointedY() - 1) * zoom - - MapCamera.getCameraY() * zoom - , 3 - , 3 - ); - g.drawString( - Lang.get("DEV_COLOUR_LEGEND_GREEN") - + " : hitbox", Terrarum.WIDTH - 200 - , line(2) - ); - - // Next hitbox - g.setColor(Color.blue); - g.drawRect(nextHitbox.getHitboxStart().getX() * zoom - - MapCamera.getCameraX() * zoom - , nextHitbox.getHitboxStart().getY() * zoom - - MapCamera.getCameraY() * zoom - , nextHitbox.getWidth() * zoom - , nextHitbox.getHeight() * zoom - ); - // ...and its point - g.fillRect( - (nextHitbox.getPointedX() - 1) * zoom - - MapCamera.getCameraX() * zoom - , (nextHitbox.getPointedY() - 1) * zoom - - MapCamera.getCameraY() * zoom - , 3 - , 3 - ); - g.drawString( - Lang.get("DEV_COLOUR_LEGEND_BLUE") - + " : nextHitbox", Terrarum.WIDTH - 200 - , line(3) - ); - } - - private static void printLine(Graphics g, int l, String s) { - g.drawString(s, 20, line(l)); - } - - private static void printLineColumn(Graphics g, int col, int row, String s) { - g.drawString(s, 20 + column(col), line(row)); - } - - private static int line(int i) { - return i * 20; - } - - private static int column(int i) { - return (250 * (i - 1)); - } - - @Override - public void update(GameContainer gc, int delta_t) { - - } - - @Override - public void processInput(Input input) { - - } - - @Override - public int getWidth() { - return width; - } - - @Override - public int getHeight() { - return height; - } - -} diff --git a/src/com/Torvald/Terrarum/UserInterface/BasicDebugInfoWindow.kt b/src/com/Torvald/Terrarum/UserInterface/BasicDebugInfoWindow.kt index 278e08702..d90897ebb 100644 --- a/src/com/Torvald/Terrarum/UserInterface/BasicDebugInfoWindow.kt +++ b/src/com/Torvald/Terrarum/UserInterface/BasicDebugInfoWindow.kt @@ -17,8 +17,10 @@ import java.util.* */ class BasicDebugInfoWindow : UICanvas { - override var width: Int? = Terrarum.WIDTH - override var height: Int? = Terrarum.HEIGHT + override var width: Int = Terrarum.WIDTH + override var height: Int = Terrarum.HEIGHT + + override var openCloseTime: Int = 0 override fun processInput(input: Input) { @@ -45,7 +47,7 @@ class BasicDebugInfoWindow : UICanvas { printLine(g, 1, "posX : " + "${hitbox!!.pointedX.toString()}" + " (" - + "${(hitbox!!.pointedX / MapDrawer.TILE_SIZE).toInt().toString()}" + + "${(hitbox.pointedX / MapDrawer.TILE_SIZE).toInt().toString()}" + ")") printLine(g, 2, "posY : " + hitbox.pointedY.toString() @@ -56,7 +58,6 @@ class BasicDebugInfoWindow : UICanvas { printLine(g, 4, "veloY : ${player.veloY}") printLine(g, 5, "grounded : ${player.grounded}") printLine(g, 6, "noClip : ${player.noClip}") - printLine(g, 7, "mass : ${player.mass} [kg]") val lightVal: String var mtX = mouseTileX.toString() @@ -76,7 +77,7 @@ class BasicDebugInfoWindow : UICanvas { mtY = "---" } - printLine(g, 8, "light at cursor : " + lightVal) + printLine(g, 7, "light at cursor : " + lightVal) val tileNo: String try { @@ -88,7 +89,7 @@ class BasicDebugInfoWindow : UICanvas { tileNo = "-" } - printLine(g, 9, "tile : $tileNo ($mtX, $mtY)") + printLine(g, 8, "tile at cursor : $tileNo ($mtX, $mtY)") /** * Second column @@ -96,6 +97,8 @@ class BasicDebugInfoWindow : UICanvas { printLineColumn(g, 2, 1, "Vsync : " + Terrarum.appgc.isVSyncRequested) printLineColumn(g, 2, 2, "Env colour temp : " + MapDrawer.getColTemp()) + printLineColumn(g, 2, 3, "Time : ${Terrarum.game.map.worldTime.elapsedSeconds()}" + + " (${Terrarum.game.map.worldTime.getFormattedTime()})") /** * On screen @@ -136,7 +139,7 @@ class BasicDebugInfoWindow : UICanvas { , nextHitbox.getHeight() * zoom) // ...and its point g.fillRect( - (nextHitbox!!.getPointedX() - 1) * zoom - MapCamera.cameraX * zoom + (nextHitbox.getPointedX() - 1) * zoom - MapCamera.cameraX * zoom , (nextHitbox.getPointedY() - 1) * zoom - MapCamera.cameraY * zoom , 3f, 3f) g.drawString( @@ -159,4 +162,20 @@ class BasicDebugInfoWindow : UICanvas { private fun column(i: Int): Int { return 250 * (i - 1) } + + override fun doOpening(gc: GameContainer, delta: Int) { + + } + + override fun doClosing(gc: GameContainer, delta: Int) { + + } + + override fun endOpening(gc: GameContainer, delta: Int) { + + } + + override fun endClosing(gc: GameContainer, delta: Int) { + + } } \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/UserInterface/ConsoleWindow.java b/src/com/Torvald/Terrarum/UserInterface/ConsoleWindow.java deleted file mode 100644 index 22e4bf3b6..000000000 --- a/src/com/Torvald/Terrarum/UserInterface/ConsoleWindow.java +++ /dev/null @@ -1,182 +0,0 @@ -package com.Torvald.Terrarum.UserInterface; - -import com.Torvald.Terrarum.LangPack.Lang; -import com.Torvald.Terrarum.Terrarum; -import com.Torvald.Terrarum.ConsoleCommand.CommandInterpreter; -import com.Torvald.Terrarum.GameControl.Key; -import org.jetbrains.annotations.Nullable; -import org.newdawn.slick.Color; -import org.newdawn.slick.GameContainer; -import org.newdawn.slick.Graphics; -import org.newdawn.slick.Input; - -/** - * Created by minjaesong on 15-12-31. - */ -public class ConsoleWindow implements UICanvas, UITypable { - - Color UIColour = new Color(0x90000000); - - private StringBuffer commandInputPool; - private String prevCommand; - - private int inputCursorPos; - - private final int MESSAGES_MAX = 5000; - private String[] messages; - private int messageDisplayPos; - private int messagesCount; - - private final int LINE_HEIGHT = 20; - private final int MESSAGES_DISPLAY_COUNT = 9; - - int width; - int height; - - public ConsoleWindow() { - super(); - reset(); - } - - @Override - public void update(GameContainer gc, int delta_t) { - - } - - @Override - public void render(GameContainer gc, Graphics g) { - g.setColor(UIColour); - g.fillRect(0, 0, width, height); - g.fillRect(0, 0, width, LINE_HEIGHT); - - String input = commandInputPool.toString(); - int inputDrawWidth = g.getFont().getWidth(input); - int inputDrawHeight = g.getFont().getLineHeight(); - - g.setColor(Color.white); - g.drawString(input, 1, 0); - g.fillRect(inputDrawWidth, 0, 2, inputDrawHeight); - - for (int i = 0; i < MESSAGES_DISPLAY_COUNT; i++) { - String message = messages[messageDisplayPos + i]; - if (message != null) { - g.drawString(message, 1, LINE_HEIGHT * (i + 1)); - } - } - } - - - - public void keyPressed(int key, char c) { - // execute - if (key == Key.RET && commandInputPool.length() > 0) { - prevCommand = commandInputPool.toString(); - executeCommand(); - commandInputPool = new StringBuffer(); - } - // backspace - else if (key == Key.BKSP && commandInputPool.length() > 0) { - commandInputPool.deleteCharAt(commandInputPool.length() - 1); - } - // get input - else if ((key >= 2 && key <= 13) - || (key >= 16 && key <= 27) - || (key >= 30 && key <= 40) - || (key >= 44 && key <= 53) - || (commandInputPool.length() > 0 && key == 57)){ - commandInputPool.append(c); - inputCursorPos += 1; - } - // prev command - else if (key == Key.UP) { - commandInputPool = new StringBuffer(); - commandInputPool.append(prevCommand); - } - // scroll up - else if (key == Key.PGUP) { - setDisplayPos(-MESSAGES_DISPLAY_COUNT + 1); - } - // scroll down - else if (key == Key.PGDN) { - setDisplayPos(MESSAGES_DISPLAY_COUNT - 1); - } - } - - @Override - public void keyReleased(int key, char c) { - - } - - @Override - public void processInput(Input input) { - - } - - private void executeCommand() { - sendMessage("> " + commandInputPool.toString()); - CommandInterpreter.execute(commandInputPool.toString()); - } - - public void sendMessage(String msg) { - messages[messagesCount] = new String(msg); - messagesCount += 1; - if (messagesCount > MESSAGES_DISPLAY_COUNT) { - messageDisplayPos = messagesCount - MESSAGES_DISPLAY_COUNT; - } - } - - private void setDisplayPos(int change) { - int lowLim = 0; - int highLim = (messagesCount <= MESSAGES_DISPLAY_COUNT) - ? 0 - : messagesCount - MESSAGES_DISPLAY_COUNT; - int newVal = messageDisplayPos + change; - - if (newVal < lowLim) { - messageDisplayPos = lowLim; - } - else if (newVal > highLim) { - messageDisplayPos = highLim; - } - else { - messageDisplayPos = newVal; - } - - } - - public void reset() { - setWidth(Terrarum.WIDTH); - setHeight(200); - - messages = new String[MESSAGES_MAX]; - messageDisplayPos = 0; - messagesCount = 0; - inputCursorPos = 0; - prevCommand = ""; - commandInputPool = new StringBuffer(); - - if (Terrarum.game.auth.b()) sendMessage(Lang.get("DEV_MESSAGE_CONSOLE_CODEX")); - } - - @Nullable - @Override - public Integer getWidth() { - return width; - } - - @Override - public void setWidth(@Nullable Integer integer) { - width = integer; - } - - @Nullable - @Override - public Integer getHeight() { - return height; - } - - @Override - public void setHeight(@Nullable Integer integer) { - height = integer; - } -} diff --git a/src/com/Torvald/Terrarum/UserInterface/ConsoleWindow.kt b/src/com/Torvald/Terrarum/UserInterface/ConsoleWindow.kt new file mode 100644 index 000000000..6d57dd72d --- /dev/null +++ b/src/com/Torvald/Terrarum/UserInterface/ConsoleWindow.kt @@ -0,0 +1,182 @@ +package com.Torvald.Terrarum.UserInterface + +import com.Torvald.Terrarum.LangPack.Lang +import com.Torvald.Terrarum.Terrarum +import com.Torvald.Terrarum.ConsoleCommand.CommandInterpreter +import com.Torvald.Terrarum.GameControl.Key +import com.jme3.math.FastMath +import org.newdawn.slick.Color +import org.newdawn.slick.GameContainer +import org.newdawn.slick.Graphics +import org.newdawn.slick.Input + +/** + * Created by minjaesong on 15-12-31. + */ +class ConsoleWindow : UICanvas, UITypable { + + internal var UIColour = Color(0xB0000000.toInt()) + + private var commandInputPool: StringBuffer? = null + private var prevCommand: String? = null + + private var inputCursorPos: Int = 0 + + private val MESSAGES_MAX = 5000 + private var messages = Array(MESSAGES_MAX, {""}) + private var messageDisplayPos: Int = 0 + private var messagesCount: Int = 0 + + private val LINE_HEIGHT = 20 + private val MESSAGES_DISPLAY_COUNT = 9 + + override var width: Int = Terrarum.WIDTH + override var height: Int = 200 + + override var openCloseTime: Int = 0 + + private var drawOffX: Float = 0f + private var drawOffY: Float = -height.toFloat() + private var openingTimeCounter = 0 + + init { + reset() + } + + override fun update(gc: GameContainer, delta_t: Int) { + + } + + override fun render(gc: GameContainer, g: Graphics) { + // background + g.color = UIColour + g.fillRect(drawOffX, drawOffY, width.toFloat(), height.toFloat()) + g.fillRect(drawOffX, drawOffY, width.toFloat(), LINE_HEIGHT.toFloat()) + + val input = commandInputPool!!.toString() + val inputDrawWidth = g.font.getWidth(input) + val inputDrawHeight = g.font.lineHeight + + // text and cursor + g.color = Color.white + g.drawString(input, 1f + drawOffX, drawOffY) + g.fillRect(inputDrawWidth.toFloat() + drawOffX, drawOffY, 2f, inputDrawHeight.toFloat()) + + // messages + for (i in 0..MESSAGES_DISPLAY_COUNT - 1) { + val message = messages[messageDisplayPos + i] + g.drawString(message, 1f + drawOffX, (LINE_HEIGHT * (i + 1)).toFloat() + drawOffY) + } + } + + + override fun keyPressed(key: Int, c: Char) { + // execute + if (key == Key.RET && commandInputPool!!.length > 0) { + prevCommand = commandInputPool!!.toString() + executeCommand() + commandInputPool = StringBuffer() + } + else if (key == Key.BKSP && commandInputPool!!.length > 0) { + commandInputPool!!.deleteCharAt(commandInputPool!!.length - 1) + } + else if (key >= 2 && key <= 13 + || key >= 16 && key <= 27 + || key >= 30 && key <= 40 + || key >= 44 && key <= 53 + || commandInputPool!!.length > 0 && key == 57) { + commandInputPool!!.append(c) + inputCursorPos += 1 + } + else if (key == Key.UP) { + commandInputPool = StringBuffer() + commandInputPool!!.append(prevCommand) + } + else if (key == Key.PGUP) { + setDisplayPos(-MESSAGES_DISPLAY_COUNT + 1) + } + else if (key == Key.PGDN) { + setDisplayPos(MESSAGES_DISPLAY_COUNT - 1) + }// scroll down + // scroll up + // prev command + // get input + // backspace + } + + override fun keyReleased(key: Int, c: Char) { + + } + + override fun processInput(input: Input) { + + } + + private fun executeCommand() { + sendMessage("> " + commandInputPool!!.toString()) + CommandInterpreter.execute(commandInputPool!!.toString()) + } + + fun sendMessage(msg: String) { + messages[messagesCount] = msg + messagesCount += 1 + if (messagesCount > MESSAGES_DISPLAY_COUNT) { + messageDisplayPos = messagesCount - MESSAGES_DISPLAY_COUNT + } + } + + private fun setDisplayPos(change: Int) { + val lowLim = 0 + val highLim = if (messagesCount <= MESSAGES_DISPLAY_COUNT) + 0 + else + messagesCount - MESSAGES_DISPLAY_COUNT + val newVal = messageDisplayPos + change + + if (newVal < lowLim) { + messageDisplayPos = lowLim + } + else if (newVal > highLim) { + messageDisplayPos = highLim + } + else { + messageDisplayPos = newVal + } + + } + + fun reset() { + messages = Array(MESSAGES_MAX, {""}) + messageDisplayPos = 0 + messagesCount = 0 + inputCursorPos = 0 + prevCommand = "" + commandInputPool = StringBuffer() + + if (Terrarum.game.auth.b()) sendMessage(Lang.get("DEV_MESSAGE_CONSOLE_CODEX")) + } + + override fun doOpening(gc: GameContainer, delta: Int) { + /*openingTimeCounter += delta + drawOffY = MovementInterpolator.fastPullOut(openingTimeCounter.toFloat() / openCloseTime.toFloat(), + -height.toFloat(), 0f + )*/ + } + + override fun doClosing(gc: GameContainer, delta: Int) { + /*openingTimeCounter += delta + drawOffY = MovementInterpolator.fastPullOut(openingTimeCounter.toFloat() / openCloseTime.toFloat(), + 0f, -height.toFloat() + )*/ + } + + override fun endOpening(gc: GameContainer, delta: Int) { + drawOffY = 0f + openingTimeCounter = 0 + } + + override fun endClosing(gc: GameContainer, delta: Int) { + drawOffY = -height.toFloat() + openingTimeCounter = 0 + } +} diff --git a/src/com/Torvald/Terrarum/UserInterface/Message.java b/src/com/Torvald/Terrarum/UserInterface/Message.java deleted file mode 100644 index f9a1196e6..000000000 --- a/src/com/Torvald/Terrarum/UserInterface/Message.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.Torvald.Terrarum.UserInterface; - -import com.Torvald.ImageFont.GameFontWhite; -import org.jetbrains.annotations.Nullable; -import org.newdawn.slick.*; - -/** - * Created by minjaesong on 16-01-27. - */ -public class Message implements UICanvas { - - private Image segmentLeft, segmentRight, segmentBody; - - private String[] messagesList; - // private int messagesShowingIndex = 0; - private static final int MESSAGES_DISPLAY = 2; - - private int width; - private int height; - private int messageWindowRadius; - - private Font uiFont; - private final int GLYPH_HEIGHT = 20; - - public Message(int width, boolean isBlackVariant) throws SlickException { - if (!isBlackVariant) { - //segmentLeft = new Image("./res/graphics/gui/message_twoline_white_left.png"); - //segmentRight = new Image("./res/graphics/gui/message_twoline_white_right.png"); - //segmentBody = new Image("./res/graphics/gui/message_twoline_white_body.png"); - //uiFont = new GameFontBlack(); - throw new SlickException("Black font not supported for now"); - } - else { - segmentLeft = new Image("./res/graphics/gui/message_twoline_black_left.png"); - segmentRight = new Image("./res/graphics/gui/message_twoline_black_right.png"); - segmentBody = new Image("./res/graphics/gui/message_twoline_black_body.png"); - uiFont = new GameFontWhite(); - } - - this.width = width; - height = segmentLeft.getHeight(); - messageWindowRadius = segmentLeft.getWidth(); - } - - public void setMessage(String[] messagesList) { - this.messagesList = messagesList; - } - - @Override - public void update(GameContainer gc, int delta_t) { - - } - - @Override - public void render(GameContainer gc, Graphics g) { - g.drawImage(segmentLeft, 0, 0); - Image scaledSegCentre = segmentBody.getScaledCopy( - width - (segmentRight.getWidth() + segmentLeft.getWidth()) - , segmentLeft.getHeight() - ); - g.drawImage(scaledSegCentre, segmentLeft.getWidth(), 0); - g.drawImage(segmentRight, width - segmentRight.getWidth(), 0); - - g.setFont(uiFont); - //g.setDrawMode(Graphics.MODE_NORMAL); - for (int i = 0; i < Math.min(messagesList.length, MESSAGES_DISPLAY); i++) { - g.drawString(messagesList[i] - , messageWindowRadius + 4 - , messageWindowRadius + (GLYPH_HEIGHT * i) - ); - } - //g.setDrawMode(Graphics.MODE_NORMAL); - } - - @Override - public void processInput(Input input) { - - } - - @Nullable - @Override - public Integer getWidth() { - return width; - } - - @Override - public void setWidth(@Nullable Integer integer) { - width = integer; - } - - @Nullable - @Override - public Integer getHeight() { - return height; - } - - @Override - public void setHeight(@Nullable Integer integer) { - height = integer; - } -} diff --git a/src/com/Torvald/Terrarum/UserInterface/MessageWindow.kt b/src/com/Torvald/Terrarum/UserInterface/MessageWindow.kt new file mode 100644 index 000000000..c1b385913 --- /dev/null +++ b/src/com/Torvald/Terrarum/UserInterface/MessageWindow.kt @@ -0,0 +1,121 @@ +package com.Torvald.Terrarum.UserInterface + +import com.Torvald.ImageFont.GameFontWhite +import com.jme3.math.FastMath +import org.lwjgl.opengl.GL11 +import org.newdawn.slick.* + +/** + * Created by minjaesong on 16-01-27. + */ +class MessageWindow @Throws(SlickException::class) +constructor(override var width: Int, isBlackVariant: Boolean) : UICanvas { + + private var segmentLeft: Image? = null + private var segmentRight: Image? = null + private var segmentBody: Image? = null + + private lateinit var messagesList: Array + override var height: Int = 0 + private val messageWindowRadius: Int + + private var uiFont: Font? = null + private val GLYPH_HEIGHT = 20 + + override var openCloseTime: Int = OPEN_CLOSE_TIME + + internal var opacity = 0f + internal var openCloseCounter = 0 + + private lateinit var uidrawCanvas: Image // render all the images and fonts here; will be faded + + init { + if (!isBlackVariant) { + //segmentLeft = new Image("./res/graphics/gui/message_twoline_white_left.png"); + //segmentRight = new Image("./res/graphics/gui/message_twoline_white_right.png"); + //segmentBody = new Image("./res/graphics/gui/message_twoline_white_body.png"); + //uiFont = new GameFontBlack(); + TODO("Black font not supported for now") + } + else { + segmentLeft = Image("./res/graphics/gui/message_twoline_black_left.png") + segmentRight = Image("./res/graphics/gui/message_twoline_black_right.png") + segmentBody = Image("./res/graphics/gui/message_twoline_black_body.png") + uiFont = GameFontWhite() + } + height = segmentLeft!!.height + messageWindowRadius = segmentLeft!!.width + messagesList = arrayOf("", "") + uidrawCanvas = Image(FastMath.nearestPowerOfTwo(width), FastMath.nearestPowerOfTwo(height)) + } + + fun setMessage(messagesList: Array) { + this.messagesList = messagesList + } + + override fun update(gc: GameContainer, delta_t: Int) { + + } + + override fun render(gc: GameContainer, g: Graphics) { + val canvasG = uidrawCanvas.graphics + + canvasG.setDrawMode(Graphics.MODE_NORMAL) + drawSegments(canvasG) + canvasG.setDrawMode(Graphics.MODE_ALPHA_MAP) + drawSegments(canvasG) + + canvasG.font = uiFont + + canvasG.setDrawMode(Graphics.MODE_NORMAL) + for (i in 0..Math.min(messagesList.size, MESSAGES_DISPLAY) - 1) { + canvasG.drawString(messagesList[i], (messageWindowRadius + 4).toFloat(), (messageWindowRadius + GLYPH_HEIGHT * i).toFloat()) + } + + g.drawImage(uidrawCanvas, 0f, 0f, Color(1f,1f,1f,opacity)) + + canvasG.clear() + } + + override fun processInput(input: Input) { + + } + + override fun doOpening(gc: GameContainer, delta: Int) { + openCloseCounter += delta + opacity = FastMath.interpolateLinear(openCloseCounter.toFloat() / openCloseTime.toFloat(), + 0f, 1f + ) + } + + override fun doClosing(gc: GameContainer, delta: Int) { + openCloseCounter += delta + opacity = FastMath.interpolateLinear(openCloseCounter.toFloat() / openCloseTime.toFloat(), + 1f, 0f + ) + } + + override fun endOpening(gc: GameContainer, delta: Int) { + opacity = 1f + openCloseCounter = 0 + } + + override fun endClosing(gc: GameContainer, delta: Int) { + opacity = 0f + openCloseCounter = 0 + } + + private fun drawSegments(g: Graphics) { + g.drawImage(segmentLeft, 0f, 0f) + val scaledSegCentre = segmentBody!!.getScaledCopy( + width - (segmentRight!!.width + segmentLeft!!.width), segmentLeft!!.height) + g.drawImage(scaledSegCentre, segmentLeft!!.width.toFloat(), 0f) + g.drawImage(segmentRight, (width - segmentRight!!.width).toFloat(), 0f) + } + + companion object { + // private int messagesShowingIndex = 0; + val MESSAGES_DISPLAY = 2 + val OPEN_CLOSE_TIME = 200 + } +} diff --git a/src/com/Torvald/Terrarum/UserInterface/MovementInterpolator.kt b/src/com/Torvald/Terrarum/UserInterface/MovementInterpolator.kt new file mode 100644 index 000000000..96cfd4a82 --- /dev/null +++ b/src/com/Torvald/Terrarum/UserInterface/MovementInterpolator.kt @@ -0,0 +1,30 @@ +package com.Torvald.Terrarum.UserInterface + +import com.jme3.math.FastMath + +/** + * Created by minjaesong on 16-03-22. + */ +object MovementInterpolator { + /** + * Pretty fast at the beginning, getting slow over time. + */ + fun fastPullOut(scale: Float, start: Float = 0f, end: Float = 1f): Float = + if (scale < 0f) start + else if (scale > 1f) end + else (start - end) * FastMath.sqr(scale - 1) + end + + /** + * Slow at the beginning, getting fast over time. + */ + fun dropDown(scale: Float, start: Float = 0f, end: Float = 1f): Float = + if (scale < 0f) start + else if (scale > 1f) end + else (end - start) * FastMath.sqr(scale) + start + + fun sinusoid(scale: Float, start: Float = 0f, end: Float = 1f): Float = + if (scale < 0f) start + else if (scale > 1f) end + else (start - end) * FastMath.cos2(0.5f * FastMath.PI * scale) + end + +} \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/UserInterface/Notification.java b/src/com/Torvald/Terrarum/UserInterface/Notification.java deleted file mode 100644 index c1e155588..000000000 --- a/src/com/Torvald/Terrarum/UserInterface/Notification.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.Torvald.Terrarum.UserInterface; - -import com.Torvald.Terrarum.Terrarum; -import org.jetbrains.annotations.Nullable; -import org.newdawn.slick.*; -import org.newdawn.slick.geom.RoundedRectangle; - -/** - * Created by minjaesong on 16-01-23. - */ -public class Notification implements UICanvas { - - int width; - int height; - - int visibleTime; - int showupTimeConuter = 0; - - boolean isShowing = false; - String[] message; - - Message msgUI; - - public Notification() throws SlickException { - width = 400; - msgUI = new Message(width, true); - height = msgUI.getHeight(); - visibleTime = Terrarum.getConfigInt("notificationshowuptime"); - } - - @Override - public void update(GameContainer gc, int delta_t) { - if (showupTimeConuter >= visibleTime) { - isShowing = false; - } - - if (isShowing) { - showupTimeConuter += delta_t; - } - } - - @Override - public void render(GameContainer gc, Graphics g) { - if (isShowing) { - msgUI.render(gc, g); - } - } - - @Override - public void processInput(Input input) { - - } - - @Nullable - @Override - public Integer getWidth() { - return width; - } - - @Override - public void setWidth(@Nullable Integer integer) { - width = integer; - } - - @Nullable - @Override - public Integer getHeight() { - return height; - } - - @Override - public void setHeight(@Nullable Integer integer) { - height = integer; - } - - public void sendNotification(String[] message) { - isShowing = true; - this.message = message; - showupTimeConuter = 0; - msgUI.setMessage(this.message); - } -} diff --git a/src/com/Torvald/Terrarum/UserInterface/Notification.kt b/src/com/Torvald/Terrarum/UserInterface/Notification.kt new file mode 100644 index 000000000..9428ece2b --- /dev/null +++ b/src/com/Torvald/Terrarum/UserInterface/Notification.kt @@ -0,0 +1,87 @@ +package com.Torvald.Terrarum.UserInterface + +import com.Torvald.Terrarum.Terrarum +import org.newdawn.slick.GameContainer +import org.newdawn.slick.Graphics +import org.newdawn.slick.Input +import org.newdawn.slick.SlickException + +/** + * Created by minjaesong on 16-01-23. + */ +class Notification @Throws(SlickException::class) +constructor() : UICanvas { + + override var width: Int = 0 + override var height: Int = 0 + internal var visibleTime: Int + internal var showupTimeConuter = 0 + + internal var isShowing = false + internal var message: Array = Array(MessageWindow.MESSAGES_DISPLAY, { i -> ""}) + + internal var msgUI: MessageWindow + + override var openCloseTime: Int = MessageWindow.OPEN_CLOSE_TIME + + private val SHOWUP_MAX = 15000 + + init { + width = 500 + msgUI = MessageWindow(width, true) + height = msgUI.height + visibleTime = Math.min( + Terrarum.getConfigInt("notificationshowuptime"), + SHOWUP_MAX + ) + } + + override fun update(gc: GameContainer, delta: Int) { + if (showupTimeConuter >= visibleTime && isShowing) { + // invoke closing mode + doClosing(gc, delta) + // check if msgUI is fully fade out + if (msgUI.opacity <= 0.001f) { + endClosing(gc, delta) + isShowing = false + } + } + + if (isShowing) { + showupTimeConuter += delta + } + } + + override fun render(gc: GameContainer, g: Graphics) { + if (isShowing) { + msgUI.render(gc, g) + } + } + + override fun doOpening(gc: GameContainer, delta: Int) { + msgUI.doOpening(gc, delta) + } + + override fun doClosing(gc: GameContainer, delta: Int) { + msgUI.doClosing(gc, delta) + } + + override fun endOpening(gc: GameContainer, delta: Int) { + msgUI.endOpening(gc, delta) + } + + override fun endClosing(gc: GameContainer, delta: Int) { + msgUI.endClosing(gc, delta) + } + + override fun processInput(input: Input) { + + } + + fun sendNotification(gc: GameContainer, delta: Int, message: Array) { + isShowing = true + this.message = message + msgUI.setMessage(this.message) + showupTimeConuter = 0 + } +} diff --git a/src/com/Torvald/Terrarum/UserInterface/UICanvas.kt b/src/com/Torvald/Terrarum/UserInterface/UICanvas.kt index 07e105666..cf6652970 100644 --- a/src/com/Torvald/Terrarum/UserInterface/UICanvas.kt +++ b/src/com/Torvald/Terrarum/UserInterface/UICanvas.kt @@ -5,17 +5,28 @@ import org.newdawn.slick.Graphics import org.newdawn.slick.Input /** - * Created by minjaesong on 16-03-14. + * Created by minjaesong on 15-12-31. */ interface UICanvas { - var width: Int? - var height: Int? + var width: Int + var height: Int + /** + * In milliseconds + */ + var openCloseTime: Int - fun update(gc: GameContainer, delta_t: Int) + fun update(gc: GameContainer, delta: Int) fun render(gc: GameContainer, g: Graphics) fun processInput(input: Input) + fun doOpening(gc: GameContainer, delta: Int) + + fun doClosing(gc: GameContainer, delta: Int) + + fun endOpening(gc: GameContainer, delta: Int) + + fun endClosing(gc: GameContainer, delta: Int) } \ No newline at end of file diff --git a/src/com/Torvald/Terrarum/UserInterface/UIClickable.kt b/src/com/Torvald/Terrarum/UserInterface/UIClickable.kt index 2d24eb925..814ffad94 100644 --- a/src/com/Torvald/Terrarum/UserInterface/UIClickable.kt +++ b/src/com/Torvald/Terrarum/UserInterface/UIClickable.kt @@ -1,7 +1,7 @@ package com.Torvald.Terrarum.UserInterface /** - * Created by minjaesong on 16-03-14. + * Created by minjaesong on 16-03-06. */ interface UIClickable { fun mouseMoved(oldx: Int, oldy: Int, newx: Int, newy: Int) diff --git a/src/com/Torvald/Terrarum/UserInterface/UIHandler.java b/src/com/Torvald/Terrarum/UserInterface/UIHandler.java deleted file mode 100644 index 2a24b4481..000000000 --- a/src/com/Torvald/Terrarum/UserInterface/UIHandler.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.Torvald.Terrarum.UserInterface; - -import com.Torvald.Terrarum.MapDrawer.MapCamera; -import com.Torvald.Terrarum.Terrarum; -import com.Torvald.Terrarum.Game; -import com.jme3.math.FastMath; -import com.sun.istack.internal.Nullable; -import org.newdawn.slick.*; - -/** - * Created by minjaesong on 15-12-31. - */ -public class UIHandler { - - private UICanvas ui; - - // X/Y Position to the game window. - private int posX; - private int posY; - private boolean visible = false; - - private boolean alwaysVisible = false; - - private Graphics UIGraphicInstance; - private Image UIDrawnCanvas; - - private boolean opening = false; - private boolean closing = false; - - /** - * Construct new UIHandler with given UI attached. - * Invisible in default. - * @param ui - * @throws SlickException - */ - public UIHandler(UICanvas ui) throws SlickException{ - System.out.println(("[UIHandler] Creating UI '" + ui.getClass().getTypeName()) + "'"); - - this.ui = ui; - - UIDrawnCanvas = new Image( - FastMath.nearestPowerOfTwo(ui.getWidth()) - , FastMath.nearestPowerOfTwo(ui.getHeight()) - ); - - UIGraphicInstance = UIDrawnCanvas.getGraphics(); - - visible = false; - } - - - - public void update(GameContainer gc, int delta_t){ - if (visible || alwaysVisible) { - ui.update(gc, delta_t); - } - } - - public void render(GameContainer gc, Graphics gameGraphicInstance) { - if (visible || alwaysVisible) { - UIGraphicInstance.clear(); - UIGraphicInstance.setFont(Terrarum.gameFontWhite); - - ui.render(gc, UIGraphicInstance); - gameGraphicInstance.drawImage(UIDrawnCanvas - // compensate for screenZoom AND camera translation - // (see Game.render -> g.translate()) - , posX + MapCamera.getCameraX() * Terrarum.game.screenZoom - , posY + MapCamera.getCameraY() * Terrarum.game.screenZoom - ); - } - } - - public void setPosition(int x, int y){ - posX = x; - posY = y; - } - - public void setVisibility(boolean b){ - if (alwaysVisible) { - throw new RuntimeException("[UIHandler] Tried to 'set visibility of' constant UI"); - } - visible = b; - } - - - - public int getPosX() { - return posX; - } - - public int getPosY() { - return posY; - } - - public boolean isVisible() { - if (alwaysVisible) { - return true; - } else { - return visible; - } - } - - public void setAsAlwaysVisible() { - alwaysVisible = true; - visible = true; - } - - - - public void setAsOpening(){ - if (alwaysVisible) { - throw new RuntimeException("[UIHandler] Tried to 'open' constant UI"); - } - visible = true; - } - - public void setAsClosing(){ - if (alwaysVisible) { - throw new RuntimeException("[UIHandler] Tried to 'close' constant UI"); - } - visible = false; - } - - public void toggleOpening() { - if (alwaysVisible) { - throw new RuntimeException("[UIHandler] Tried to 'toggle opening of' constant UI"); - } - if (visible) { - if (!closing) { - setAsClosing(); - } - } - else { - if (!opening) { - setAsOpening(); - } - } - } - - public void processInput(Input input) { - if (visible) { ui.processInput(input); } - } - - public void keyPressed(int key, char c) { - if (visible && ui instanceof UITypable) { ((UITypable) (ui)).keyPressed(key, c); } - } - - public void keyReleased(int key, char c) { - if (visible && ui instanceof UITypable) { ((UITypable) (ui)).keyReleased(key, c); } - } - - public void mouseMoved(int oldx, int oldy, int newx, int newy) { - if (visible && ui instanceof UIClickable) { ((UIClickable) (ui)).mouseMoved(oldx, oldy, newx, newy); } - } - - public void mouseDragged(int oldx, int oldy, int newx, int newy) { - if (visible && ui instanceof UIClickable) { ((UIClickable) (ui)).mouseDragged(oldx, oldy, newx, newy); } - } - - public void mousePressed(int button, int x, int y) { - if (visible && ui instanceof UIClickable) { ((UIClickable) (ui)).mousePressed(button, x, y); } - } - - public void mouseReleased(int button, int x, int y) { - if (visible && ui instanceof UIClickable) { ((UIClickable) (ui)).mouseReleased(button, x, y); } - } - - public void mouseWheelMoved(int change) { - if (visible && ui instanceof UIClickable) { ((UIClickable) (ui)).mouseWheelMoved(change); } - } - - public void controllerButtonPressed(int controller, int button) { - if (visible && ui instanceof UIClickable) { ((UIClickable) (ui)).controllerButtonPressed(controller, button); } - } - - public void controllerButtonReleased(int controller, int button) { - if (visible && ui instanceof UIClickable) { ((UIClickable) (ui)).controllerButtonReleased(controller, button); } - } - - public boolean isTakingControl() { - if (alwaysVisible) { - return false; // constant UI can't take control - } - return (visible && !opening); - } - - public UICanvas getUI() { - return ui; - } -} diff --git a/src/com/Torvald/Terrarum/UserInterface/UIHandler.kt b/src/com/Torvald/Terrarum/UserInterface/UIHandler.kt new file mode 100644 index 000000000..d8eba8b2a --- /dev/null +++ b/src/com/Torvald/Terrarum/UserInterface/UIHandler.kt @@ -0,0 +1,235 @@ +package com.Torvald.Terrarum.UserInterface + +import com.Torvald.Terrarum.MapDrawer.MapCamera +import com.Torvald.Terrarum.Terrarum +import com.jme3.math.FastMath +import org.newdawn.slick.* + +/** + * Created by minjaesong on 15-12-31. + */ +class UIHandler +/** + * Construct new UIHandler with given UI attached. + * Invisible in default. + * @param UI + * * + * @throws SlickException + */ +@Throws(SlickException::class) +constructor(val UI: UICanvas) { + + // X/Y Position to the game window. + var posX: Int = 0 + private set + var posY: Int = 0 + private set + + private var alwaysVisible = false + + private val UIGraphicInstance: Graphics + private val UIDrawnCanvas: Image + + private var opening = false + private var closing = false + private var opened = false // fully opened + private var visible = false + + var openCloseCounter = 0 + + init { + println("[UIHandler] Creating UI '${UI.javaClass.simpleName}'") + + UIDrawnCanvas = Image( + FastMath.nearestPowerOfTwo(UI.width), FastMath.nearestPowerOfTwo(UI.height)) + + UIGraphicInstance = UIDrawnCanvas.graphics + } + + + fun update(gc: GameContainer, delta: Int) { + if (visible || alwaysVisible) { + UI.update(gc, delta) + } + + if (opening) { + visible = true + openCloseCounter += delta + + // println("UI ${UI.javaClass.simpleName} (open)") + // println("-> timecounter $openCloseCounter / ${UI.openCloseTime} timetakes") + + if (openCloseCounter < UI.openCloseTime) { + UI.doOpening(gc, delta) + // println("UIHandler.opening ${UI.javaClass.simpleName}") + } + else { + UI.endOpening(gc, delta) + opening = false + opened = true + openCloseCounter = 0 + } + } + else if (closing) { + openCloseCounter += delta + + // println("UI ${UI.javaClass.simpleName} (close)") + // println("-> timecounter $openCloseCounter / ${UI.openCloseTime} timetakes") + + if (openCloseCounter < UI.openCloseTime) { + UI.doClosing(gc, delta) + // println("UIHandler.closing ${UI.javaClass.simpleName}") + } + else { + UI.endClosing(gc, delta) + closing = false + opened = false + visible = false + openCloseCounter = 0 + } + } + } + + fun render(gc: GameContainer, gameGraphicInstance: Graphics) { + if (visible || alwaysVisible) { + UIGraphicInstance.clear() + UIGraphicInstance.font = Terrarum.gameFontWhite + + UI.render(gc, UIGraphicInstance) + gameGraphicInstance.drawImage(UIDrawnCanvas, posX + MapCamera.getCameraX() * Terrarum.game.screenZoom, posY + MapCamera.getCameraY() * Terrarum.game.screenZoom)// compensate for screenZoom AND camera translation + // (see Game.render -> g.translate()) + } + } + + fun setPosition(x: Int, y: Int) { + posX = x + posY = y + } + + fun setVisibility(b: Boolean) { + if (alwaysVisible) { + throw RuntimeException("[UIHandler] Tried to 'set visibility of' constant UI") + } + visible = b + } + + val isVisible: Boolean + get() { + if (alwaysVisible) { + return true + } + else { + return visible + } + } + + fun setAsAlwaysVisible() { + alwaysVisible = true + visible = true + opened = true + opening = false + closing = false + } + + + fun setAsOpening() { + if (alwaysVisible) { + throw RuntimeException("[UIHandler] Tried to 'open' constant UI") + } + opened = false + opening = true + } + + fun setAsClosing() { + if (alwaysVisible) { + throw RuntimeException("[UIHandler] Tried to 'close' constant UI") + } + opened = false + closing = true + } + + fun toggleOpening() { + if (alwaysVisible) { + throw RuntimeException("[UIHandler] Tried to 'toggle opening of' constant UI") + } + if (visible) { + if (!closing) { + setAsClosing() + } + } + else { + if (!opening) { + setAsOpening() + } + } + } + + fun processInput(input: Input) { + if (visible) { + UI.processInput(input) + } + } + + fun keyPressed(key: Int, c: Char) { + if (visible && UI is UITypable) { + UI.keyPressed(key, c) + } + } + + fun keyReleased(key: Int, c: Char) { + if (visible && UI is UITypable) { + UI.keyReleased(key, c) + } + } + + fun mouseMoved(oldx: Int, oldy: Int, newx: Int, newy: Int) { + if (visible && UI is UIClickable) { + UI.mouseMoved(oldx, oldy, newx, newy) + } + } + + fun mouseDragged(oldx: Int, oldy: Int, newx: Int, newy: Int) { + if (visible && UI is UIClickable) { + UI.mouseDragged(oldx, oldy, newx, newy) + } + } + + fun mousePressed(button: Int, x: Int, y: Int) { + if (visible && UI is UIClickable) { + UI.mousePressed(button, x, y) + } + } + + fun mouseReleased(button: Int, x: Int, y: Int) { + if (visible && UI is UIClickable) { + UI.mouseReleased(button, x, y) + } + } + + fun mouseWheelMoved(change: Int) { + if (visible && UI is UIClickable) { + UI.mouseWheelMoved(change) + } + } + + fun controllerButtonPressed(controller: Int, button: Int) { + if (visible && UI is UIClickable) { + UI.controllerButtonPressed(controller, button) + } + } + + fun controllerButtonReleased(controller: Int, button: Int) { + if (visible && UI is UIClickable) { + UI.controllerButtonReleased(controller, button) + } + } + + // constant UI can't take control + val isTakingControl: Boolean + get() { + if (alwaysVisible) { + return false + } + return visible && !opening + } +} diff --git a/src/com/Torvald/Terrarum/UserInterface/UIItem.java b/src/com/Torvald/Terrarum/UserInterface/UIItem.java deleted file mode 100644 index 5ee8ae1c2..000000000 --- a/src/com/Torvald/Terrarum/UserInterface/UIItem.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.Torvald.Terrarum.UserInterface; - -/** - * Created by minjaesong on 15-12-31. - */ -public class UIItem { - - // X/Y Position relative to the containing canvas - int posX; - int posY; - - - -} diff --git a/src/com/Torvald/Terrarum/UserInterface/UIItem.kt b/src/com/Torvald/Terrarum/UserInterface/UIItem.kt new file mode 100644 index 000000000..860697517 --- /dev/null +++ b/src/com/Torvald/Terrarum/UserInterface/UIItem.kt @@ -0,0 +1,13 @@ +package com.Torvald.Terrarum.UserInterface + +/** + * Created by minjaesong on 15-12-31. + */ +class UIItem { + + // X/Y Position relative to the containing canvas + internal var posX: Int = 0 + internal var posY: Int = 0 + + +} diff --git a/src/com/Torvald/Terrarum/UserInterface/UITypable.kt b/src/com/Torvald/Terrarum/UserInterface/UITypable.kt index 1a62bc206..f27ec1253 100644 --- a/src/com/Torvald/Terrarum/UserInterface/UITypable.kt +++ b/src/com/Torvald/Terrarum/UserInterface/UITypable.kt @@ -1,7 +1,7 @@ package com.Torvald.Terrarum.UserInterface /** - * Created by minjaesong on 16-03-14. + * Created by minjaesong on 16-03-06. */ interface UITypable { fun keyPressed(key: Int, c: Char) diff --git a/src/com/Torvald/spriteAnimation/SpriteAnimation.java b/src/com/Torvald/spriteAnimation/SpriteAnimation.java index 51b8fec3e..b5080d7ec 100644 --- a/src/com/Torvald/spriteAnimation/SpriteAnimation.java +++ b/src/com/Torvald/spriteAnimation/SpriteAnimation.java @@ -14,21 +14,21 @@ import org.newdawn.slick.SlickException; import org.newdawn.slick.SpriteSheet; public class SpriteAnimation { - - private SpriteSheet spriteImage; - private Image[][] sprites; - private int height; - private int width; - private int currentFrame = 1; - private int currentRow = 1; - private int nFrames; - private int nRows; - private int delay = 200; - private int delta = 0; - private boolean looping = true; - private boolean animationRunning = true; - private boolean flipHorizontal = false; - private boolean flipVertical = false; + + private SpriteSheet spriteImage; + private Image[][] sprites; + private int height; + private int width; + private int currentFrame = 1; + private int currentRow = 1; + private int nFrames; + private int nRows; + private int delay = 200; + private int delta = 0; + private boolean looping = true; + private boolean animationRunning = true; + private boolean flipHorizontal = false; + private boolean flipVertical = false; private boolean visible = false; private int offsetX = 0; @@ -37,9 +37,9 @@ public class SpriteAnimation { private float prevScale = 1f; private Image currentImage; - public SpriteAnimation() throws SlickException{ + public SpriteAnimation() throws SlickException{ - } + } /** * Sets spritesheet. @@ -47,7 +47,7 @@ public class SpriteAnimation { * @param imagePath path to the sprite sheet image. * @throws SlickException */ - public void setSpriteImage(String imagePath) throws SlickException { + public void setSpriteImage(String imagePath) throws SlickException { spriteImage = new SpriteSheet(imagePath, this.width, this.height); } @@ -105,23 +105,23 @@ public class SpriteAnimation { visible = false; } - public void update(int delta){ - if (animationRunning){//skip this if animation is stopped - this.delta += delta; - - //check if it's time to advance the frame - if ( this.delta >= ( this.delay ) ){ - //if set to not loop, keep the frame at the last frame - if ( this.currentFrame == this.nFrames && !(this.looping) ){ - this.currentFrame = this.nFrames - 1; - } - - //advance one frame, then reset delta counter - this.currentFrame = (this.currentFrame % this.nFrames) + 1; - this.delta = 0; - } - } - } + public void update(int delta){ + if (animationRunning){//skip this if animation is stopped + this.delta += delta; + + //check if it's time to advance the frame + if ( this.delta >= ( this.delay ) ){ + //if set to not loop, keep the frame at the last frame + if ( this.currentFrame == this.nFrames && !(this.looping) ){ + this.currentFrame = this.nFrames - 1; + } + + //advance one frame, then reset delta counter + this.currentFrame = (this.currentFrame % this.nFrames) + 1; + this.delta = 0; + } + } + } /** * Render to specific coordinates. Will assume bottom-center point as image position. @@ -131,8 +131,8 @@ public class SpriteAnimation { * @param posY bottom-center point * @param scale */ - public void render(Graphics g, float posX, float posY, float scale){ - scale *= Terrarum.game.screenZoom; + public void render(Graphics g, float posX, float posY, float scale){ + scale *= Terrarum.game.getScreenZoom(); // Null checking if (currentImage == null) { @@ -150,93 +150,93 @@ public class SpriteAnimation { flippedImage.startUse(); flippedImage.drawEmbedded( - Math.round(posX * Terrarum.game.screenZoom) - , Math.round(posY * Terrarum.game.screenZoom) + Math.round(posX * Terrarum.game.getScreenZoom()) + , Math.round(posY * Terrarum.game.getScreenZoom()) , FastMath.floor(width * scale) , FastMath.floor(height * scale) ); flippedImage.endUse(); } - } - - public void render(Graphics g, float posX, float posY){ - render(g, posX, posY, 1); } - - public void switchSprite(int newRow){ - currentRow = newRow; - - //if beyond the frame index then reset - if (currentFrame > nFrames){ - reset(); - } - } - - public void switchSprite(int newRow, int newMax){ - if (newMax > 0){ - nFrames = newMax; - } - - currentRow = newRow; - - //if beyond the frame index then reset - if (currentFrame > nFrames){ - reset(); - } - } - - public void switchSpriteDelay(int newDelay){ - if (newDelay > 0){ - delay = newDelay; - } - } - - public void switchSprite(int newRow, int newMax, int newDelay){ - if (newMax > 0){ - nFrames = newMax; - } - - if (newDelay > 0){ - delay = newDelay; - } - - currentRow = newRow; - - //if beyond the frame index then reset - if (currentFrame > nFrames){ - reset(); - } - } - - public void reset(){ - currentFrame = 1; - } - - public void start(){ //starts the animation - animationRunning = true; - } - - public void start(int selectFrame){ //starts the animation - animationRunning = true; - - //optional: seleft the frame no which to start the animation - currentFrame = selectFrame; - } - - public void stop(){ - animationRunning = false; - } - - public void stop(int selectFrame){ - animationRunning = false; - - currentFrame = selectFrame; - } - - public void flip(boolean horizontal, boolean vertical){ - flipHorizontal = horizontal; - flipVertical = vertical; - } + + public void render(Graphics g, float posX, float posY){ + render(g, posX, posY, 1); + } + + public void switchSprite(int newRow){ + currentRow = newRow; + + //if beyond the frame index then reset + if (currentFrame > nFrames){ + reset(); + } + } + + public void switchSprite(int newRow, int newMax){ + if (newMax > 0){ + nFrames = newMax; + } + + currentRow = newRow; + + //if beyond the frame index then reset + if (currentFrame > nFrames){ + reset(); + } + } + + public void switchSpriteDelay(int newDelay){ + if (newDelay > 0){ + delay = newDelay; + } + } + + public void switchSprite(int newRow, int newMax, int newDelay){ + if (newMax > 0){ + nFrames = newMax; + } + + if (newDelay > 0){ + delay = newDelay; + } + + currentRow = newRow; + + //if beyond the frame index then reset + if (currentFrame > nFrames){ + reset(); + } + } + + public void reset(){ + currentFrame = 1; + } + + public void start(){ //starts the animation + animationRunning = true; + } + + public void start(int selectFrame){ //starts the animation + animationRunning = true; + + //optional: seleft the frame no which to start the animation + currentFrame = selectFrame; + } + + public void stop(){ + animationRunning = false; + } + + public void stop(int selectFrame){ + animationRunning = false; + + currentFrame = selectFrame; + } + + public void flip(boolean horizontal, boolean vertical){ + flipHorizontal = horizontal; + flipVertical = vertical; + } public boolean flippedHorizontal() { return flipHorizontal; @@ -246,13 +246,13 @@ public class SpriteAnimation { return flipVertical; } - public int getWidth(){ - return width; - } - - public int getHeight(){ - return height; - } + public int getWidth(){ + return width; + } + + public int getHeight(){ + return height; + } private Image getScaledSprite(float scale) { Image selectedImage = sprites[currentRow - 1][currentFrame - 1]; diff --git a/work_files/DataFormats/Map data format.numbers b/work_files/DataFormats/Map data format.numbers index f623c74f10cc69e2d1bff6de46151701774bfc51..006363586d15a796b620ab50cf504218c1f15e0e 100644 GIT binary patch delta 87317 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 z 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

KU(CXsL7{xq&2`WLtOm*9h_eqxI# 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 delta 86996 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

hs)j|dVVFhg%sgC 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 diff --git a/work_files/UI_fast_pull_out.gcx b/work_files/UI_fast_pull_out.gcx new file mode 100644 index 0000000000000000000000000000000000000000..4031173b7b218f7de66fc66fa421239f78f85ff7 GIT binary patch literal 240820 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�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�XIQV5A?U4wNUZRjZ=dk2$YKxU8;7zyb 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 BK7RlJ literal 0 HcmV?d00001 diff --git a/work_files/UI_sinusoid.gcx b/work_files/UI_sinusoid.gcx new file mode 100644 index 0000000000000000000000000000000000000000..25e00663607b537b7c75ebddf8de26abb67dfc27 GIT binary patch literal 190008 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

s+88=H9PaN4k=(B@>^p@v4}_QG zroRk@6-$Gq#$bfIm!ltyhb`MXNUoa-Z*EARjTfJ6FS%wOJijBo(+Wr2YA3mB1)NV$ zC#{9Iya|%rcQagV96e+E)fi-_y zNPg3&5Vki99h?t7T!=na2zIRslp3`^{H+qbxg7j^XLHH@tH56x(TO$T2Pc|IuBZ_mND??wT&eIWr8nMp^ekwqPrSO{(Kf3*_e(@gp*D*kUV_}oQ6k`!`hYb zmn-$f``5#zBItmvaMQ>2Bww==?mmQ8?t=$?P)nY07>=7jXPtzn{;ex{?0IxmHP5@pbH+qt+wR$mvC%dy7D`Cz@b`_Cx3>+ThV?$;E)S7B{wSy zV_e;p{*nt;->D(FAwOKXAN`;RT=G?Q$#tb*muLSMe8ZNfJs^n8Tz?G}fp3bmlcNNKF!r<;r=#1X*n3I(y5A6@H>_Ddu zfzMy9BzeP;@XrW3B@WiODoS2vGCa*dTW7%Oo(hutSm4SNY12Y@RyH~_3HHoYNsWFr zJh(7@a|7&NRbKMo6gaLDeQXz;e`h(#)d%3c4e8BC;h5uPCHFrKS8h)yrokVtl#yI< z6;6+!<8HwRU8N;=--qo(>8Pi$<5MZgoo@KrWIE^r{L_bae1#h=EGad$e!=Dvv@LrP z?8`QP$&2QJyVRg91!3pD5|aNa1`ldM8_U22FBF&jc||x~M@LqN*WD{7d3s$qA%@mA zhRyGbO1?i3USgsH+QLV&(`!QD?}EAA@o@JDI&dl+@wA}i_IP;w2)gn-*q&8D@?s#W+!2g`#8W^_;?){u=W1^^| z*Bq`FN>7I){^dF%?G3o-4X!oXe;01>ookQ+T=2p2^qQCO+V)(hqMiX37_HB z%eby7>pQ&vIM+VKDvAZgH+;!8QLbEY*@ARfet4vY>!#9*z%>SNJyl>SxLYFES=m+a zvx8iVRk<4c{4UY-ox-w0FIL5^FW;=(#m$q>onrbAxi|d zT!W{-1^X7~+PvVW@Uhukv#0(5Py3!Oul4^0_Z-PJeu_NBgW@~9xG1^17~DIWYXY4W z;iY%aOYW!(XN8{=+X7+h?K5Ia2;497wAdI9$393EM-GIK4>&2-8sUhy$Hf6t;a201 ziIwx+O0 z@SluzV#QYY*kV{uncdFB5C?!>;;C;($_cY~iJ1Wi|Nim&M|&2JpapR>eh*c@@yRmb`z6anR z6K0D&r{G%CXNfbez_aHjh*R&wekzKThlz3fImaC$^1; z#}6MPw#37u?i+ap#Sa0uS~XqZ@e79L<6D$a7kpL`8s z*F(5>%3yKY8+cupL1Ozi`0USt;$)vv7z^zlAT}3*FAeK2Hk5<+*V2o1HQ}VM(PE7T z9(k^>Sk(@0za~oT+a0bnsgKwb4d?FHTbwZ*{?@UVIMoDawTKj_%!2(i5n}5SxM|aH zv1vU#vvp6gekc4^7bXrq3{M!+L##dz*O=8^?0*B!y`!60;erd_)`{JjaF;x^^E-T^ zZCA-1xk}?0JFAP>Rs?Q$rL)+gg8P@FjkV$9<3c5mYzFta*-5PJ0JmsH2ZX_cwsn+T z*&n`Ln$8*lFJ2KMxoZ-Frru?e1k ziMH9{U%zR~arlCU{}nZ`eH_&O7;eI9fUD)fvRg&oBmaxX3-<`P=ylfL~h=iLr=69_d1P3^2%^0}XXl@&- z>G0)}+-7_e;i(sCPcj^9<~EkG1x{+oZ7+2%{5c1=$&{1uY$t6^hdXZOHf*{J2Ttd< zt$zte_UASq{25-|k^6#LQ4V9O=G;g8^TU?<+;Z7jDrWh z5FYDv*~{bKJvTyfO+olr2Ob+$W#Gq7qvXET;lp|!OFfO?*5AfTp3w%5OX9INwJRK= z;W0TS3O@Rj$7<_P`0P?1!%gGis7^e#>*L{Rd3ekZw!#&!@LZr?3vWp0Il_MjJp2I9 z9g0Knhz&faxX(z9mFF6#6V4USbCBa9yxcTPKAY_g+;#M9vE>_Fd&C^E(MN^vG1elE zEChELIajPL2TvY5PaIGaJ~w&3SgCx9q$@ z99$c=FWM+pH-qor+$8qz06WTT5i7#rpdnkuZaq9{|2DC61RUnGUF?_y|1W%p*fs}# z^3OkFOA9Z2KaQ}UE;`H@T?=d#oD9rm6ChJ0cr4x$$Q1hTk!qI`@~sK;H35k z#IE=7iQNaqX+Poar5$3sZ$*sF=5mahTnyg){fOk|if}~iF|na8-0#V8u`Uok7|AiP zCIk+@o+`O29B$g>wAgnb+&le@*fR>=A9_xlF$HdQ^}INBE}YdPO`NhEzH{%Q*t!Y6 zJ@B&FWQRY#PZ#Tt!>TD)#KD)~e)*hY^&NQYnrmYJ=dh>l4YA@Q+~nL%vHLe17j;|g z%v%Y+4Sl^Mc9ejRTJMT$m4kmr-xJ#^!-s0$7ZcLCWA4vYI3A|^`L$R?X z95mvQ_<0Z<+VZhDvJ;$E&?Qdq1|NDtYa`(j`=3a@KN@~L`>8l!5L~nOGx3_?@PpdC zrc;iAe`k9kd4dT}yiI3KgXjG7Qu5eY@CWlNv1>kjCfqF!TLNdV{aT!s4DZPCMjW^v zK6a0`Z-E={eJgq8ov{DBOmXsFxc`86V!y+1!RGJ9=96%xq94Rx&cUnS(S~$*`~{EX z53a-eH+&T9?!sYHK8ephhI>YQ7HeL@2kUjp|s)cXW>CKbi@XDOS@t*r`#Ekdh4G-w&PvE{f&Y?xRVa-`O{XJY?!#OwYSGeO&djC(@tl}J9 zK=vv@@i&s_HNJ4$Je<>07KEKs>4aji=@Xq*8g4O!bAz!J;W7_sR{&hR8|McTb8 zd*>J%!M&Pu?lCYBw%KWW8#r54&Q(?pfhVn|le@zC3UO}JFC5-Kn>I(malhy<1K^Hh zI4^1#3O8}n4@SYwqB*Ck8xQxmNuQkpn>%t2Rud1ON~L$sg-bNyoUO_V&-j;4S`PoN z#5rEyweW&f^ps6-okE-w_H2ir&Y@%M@YX+c#zA<>IL;@B9)|~J(y3?QUIRH7-S86J z?;f4vgyXt#?z+q!I5~~BK7=o|;#{}Sb2#rI+VlpFsKdGOOb@(g3$6bK``&yH8b|bNy7DW6TRLiKo?t;Hp3A%_ZQoV=8ctu^b%xhEA*ummN@1az#xz<1QUn z4_?)+lH~3t@SuxyR7&lWlgJ9)hI;a!;L0v_1M>qIZ3SBD_KBcNExh)#rn@krS z1aDJTliV^K-e94BjfU4N0wgz@V4I14J`LXDp(AI({}`%EP5OLzzl+u`flo%(kbHkK zeA!6{tcULe*OYwC7WjE8t=tKJ)YOtZVK4mKPG>pb+|_GK9(xilw1IY=gZ)d^kvuFN zF1wgcyAGGnQ&;l9yKuP~wEZz$@;hDmC9E8+mYU>DIQwhb?=$>CUr%!LcldS&{pBxw zNLOESL#}H0PSfZIe(+#z1Icwo;Q9{wY)SZA-G-8DRPerS^v~;yG>cg)jALC;6`eu>V!sSPbqQ)L!!ErD4NiIv`z=f(*xkHn`muaxRige z7&eOB2 zn{ewhi~nqb#^$Qd^gF@9)!ae)0*S3K1X-ScbqbiMQx4v|o;Fp6YZUAyd1ehbVH&Nk2k(7H z-)sW!i|Q>k!7brAXj%#%3xex3>mycog14s7o4diD;!%?ON5X!y=)`C^>l3XQ1Rv1% zm72KWaGNW%do;YRd9>tFCir3s?VJXmE!I!+pjmL@OxiIYuJnPfwFI8iM=v$DWY}?m zF1j8**r31UmMyS(J^kw+xOlz+k{kEJrt$Q12fXD89eEO76FN|8($B%shiGj&{H8*T zgyKvwC=rxbwApIbzQNDyfU!)T<;b9F1OP=)!-oA#8{SNQSIYe^TUwHCJ zIxJTW%yrzM)BNDUtqf8VSOiYkM%zomhJr&SudITV6X@is@RUciUv2o`cEhB`+yJ)i zqzzj5+Qi|K>pH`J?PJB7-f-taBgCp9@RIwqZycPld8FhXGhAxKC~?LDIHI9ZoVp55 z{6VK|gAbe>ExC0+d^LWI*mMfcXg^l0zXJcyH%=UUAKr11R=eR5bH_>U{}nD0JYKBG zUK8sLa!wGt3&6il(azFv)2SxO9RYBcCKJWBMzF?1TiU>%w@s4V*cF}{Jy{$X1>Y<( zMXVhPf4x8ljE5ggnku<69=6n)CeB(UH4kXl8n|NObjj1U!#T^E#rA`6_*gpm44mU4 zZFa(W%gvA)!$WxJ7+UuRu5g~#e1q$joGCRbpIZ3)52t+#!6C`(lL2%e_+S(0X(u{Y0bEMw#7*3c-8#ATmBpvx3_T;cgjW$

%FyE4;#Be7Zp4E4G`6Ikw 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%0AACC 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�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 Zl{Z)Q2*yw1k6`@#(zSR&aI%>CzW`e4!%F}F literal 0 HcmV?d00001 diff --git a/work_files/sky colour.numbers b/work_files/sky colour.numbers index 12c19978ebc2063824c5bba21585357b820acb66..a53712c0fcfbd1d9f6c157d5c725f99a1c8b2f07 100644 GIT binary patch delta 44236 zcmafb2UrwKv*^q&3(Jz0u;dNooR%OUl5@^Vl#B=h5)>3&B!eUY0}>>OBozcDh?0|J z34$OwNDxUT1bo9e|Ns7b?!E7O^HI~)HQhDcRn^tiYmH0wh~ME9BvS)8853}F-A)bC zHGRa5`#=W(C%^#F^nBgiLnJi)T!SyU`v!@7U3CUV=zvA(ZC4&7$bg3c4gv_)22hx> z5kE_q#(%=k;b-ybRqzG;JRSu{HsZPA$T_?)9Jzoe!jbcM^~)$(Zf0-4^9JUsuFgJp zZer0yEWpVQ^Y(*UegX}*z3w~}LXaUL9(O)U>j^PHA$E)uLa(OU(AL- zZh^nSx8mFIqdd*{xA+!33b}bZ`%6L{L5cy69OYpkLqe^fJJbQXKW<4k15HRwZTLJ8 z;6!*)Gb7)y2qiRkfx?I+=E4>@5k`kbDWmWx6pe?6oEoOT&qIR&MFRlp8W;d*R%3

csz?HYfIP?!M0Dq) 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 K2~}WaA^!s<**dNO delta 19331 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≶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 literal 0 HcmV?d00001 diff --git a/work_files/sky colour.gcx b/work_files/sky colour.gcx new file mode 100644 index 0000000000000000000000000000000000000000..ccd026927a62a3c8bd43d8c19da0186060694e51 GIT binary patch literal 516675 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%0D4nKZbL-t7!)}eW&@%IEw?;Z1)K@{%$>Hp=7 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