• Content Count

  • Joined

  • Last visited

Posts posted by Darkregis

  1. I have some idea how to handle maps larger than memory installed on your server, both for single and multiplayer games. Now I have to do some additional calculations, but it looks promissing. It is possible to play Wurm (Wurm 2.0?) in the future even on maps 128kx128k and more. Here the number of players is a reasonable limit not a map size.  --- Stay tuned :)


    TLDR: Soon I write a post dealing with concepts of multilevel mines, vein layers (not vertical axis), new prospecting model and iron acquiring (small amount and low quality for newbies, different from rummaging), and last but not least multithreaded Streamer object for the purpose of loading map chunks (underworld or surface). Maybe also synchronous (Iterator, standard queue of execution) and asynchronous (Locator, event driven execution, triggers) concepts of animations for streamed parts of the Wurmworld.

  2. Ad "wurmonline" libraries etc.: Right click "Libraries" in your project tree (NetBeans) and "Add Library...", click "Create", change name for something like "wurmies" ;), click "Add Jar/Folder..." and navigate to any common.jar in your WU folder (SteamLibrary).


    Ad Eclipse in the project: For Java NetBeans users: You don't need to install all Eclipse. You just need this class:


    package org.eclipse.wb.swing;

    import java.awt.Component;
    import java.awt.Container;
    import java.awt.FocusTraversalPolicy;

    public class FocusTraversalOnArray extends FocusTraversalPolicy {
       private final Component m_Components[];

       public FocusTraversalOnArray(Component components[]) {
          m_Components = components;

       private int indexCycle(int index, int delta) {
          int size = m_Components.length;
          int next = (index + delta + size) % size;
          return next;

       private Component cycle(Component currentComponent, int delta) {
          int index = -1;
          loop : for (int i = 0; i < m_Components.length; i++) {
             Component component = m_Components[i];
             for (Component c = currentComponent; c != null; c = c.getParent()) {
                if (component == c) {
                   index = i;
                   break loop;

          // try to find enabled component in "delta" direction
          int initialIndex = index;
          while (true) {
             int newIndex = indexCycle(index, delta);
             if (newIndex == initialIndex) {
             index = newIndex;

             Component component = m_Components[newIndex];
             if (component.isEnabled() && component.isVisible() && component.isFocusable()) {
                return component;
          // not found
          return currentComponent;

       public Component getComponentAfter(Container container, Component component) {
          return cycle(component, 1);

       public Component getComponentBefore(Container container, Component component) {
          return cycle(component, -1);

       public Component getFirstComponent(Container container) {
          return m_Components[0];

       public Component getLastComponent(Container container) {
          return m_Components[m_Components.length - 1];

       public Component getDefaultComponent(Container container) {
          return getFirstComponent(container);

  3. Simpler way lol:


    1) Install DB Browser for SQLite from the web page http://sqlitebrowser.org

    2) Run sqlitebrowser.exe

    3) Open the .db file from X:\SteamLibrary\SteamApps\common\Wurm Unlimited\WurmServerLauncher\[YOUR SERVER]\sqlite\

    4) Click "Browse Data" and find SERVERS table

    5) Find WORLDTIME and set you favourite time

    6) Click "Write changes"

  4. @Nazrael

    If you change only top_layer.map file in your server, you will have everything on the new map. Your avatar will have actual skills levels, logs and piles will lay on a ground. You lost pavements, fields and probably some structures, because you can't build houses with trees inside, on marsh tiles, or fences under water etc.

    If you change rock_layer.map, and heights in top_layer.map are at least 1 dirt above rock layer and rock tiles in both maps are on the same level, nothing happens. Of course if you have no mine entrances and tunnels.

    Changing map_cave.map file is also rather safe.l This is veins map and ore quantities in them (rock wall is also "ore" in Wurm). In worse case (if you have a mine)  you just lost your exposed veins and will have odd things in tunnels. But if your map is brand new and you have played on the surface only, then nothing bad happens.


    There is better idea than exchanging entire files. If you want to add some veins, add Trader, fast build some structure or change tiles you may create a player with Game Master (5) privileges and use Ebony Wand. All changes you do will write to map files and you get modified maps.

  5. @BadLuckBurt: ad. 8-bit height map.... Yes, it is accurately what I need. This is kind of voxelization. Ready to sculpturing, adding new objects by some brushes in any editor and then smoothing to 16-bit format. I need only 4 smooth mountains in specified plots on my map not all the random bias. I need also specified hand made see coastline.


    @yarnevk: ^^^ I have used GIMP 2.8.6 "Export" to PNG and "Replace..." options. I got 8-bit result from 16-bit source. But I try 2.8.14.


    Just tested: GIMP 2.8.14 does 8-bit grayscale too. Also in native file format. (30 MB -> 4 MB or 12 MB in XCF). GIMP cuts pallete to 8-bit when opens PNG image - look at histogram.


    Many thanks @Eitr. It has solved 1/3 of my actual problems. Next two problems are with smooth mountain adding in specified place and protecting shoreline from random bias.


    BTW errors: 1.06 GB of memory used, Java 64-bit. So this is not Windows memory broblem but java memory problems.


    Exception in thread "Thread-5" java.lang.OutOfMemoryError: Java heap space

    at com.wurmonline.wurmapi.api.MapData.createMapDump(MapData.java:465)

    at net.buddat.wgenerator.MainWindow.updateMapView(MainWindow.java:2050)

    at net.buddat.wgenerator.MainWindow.actionDropDirt(MainWindow.java:1561)

    at net.buddat.wgenerator.MainWindow$32$1.run(MainWindow.java:1322)


  6. Yes I know, but 16-bit grayscale PNG doesn't allow to make a single mountain. I mean there are no convenient tolls to edit height map inside WGenerator, on the other side 99% of graphics editors doesn't write files in such format, so heightmap.png file is for fun only.

  7. Why don't you use any normal image file format to let people making their own HeightMaps in normal graphics programs? The map is not 16-bit gray scale but only 8-bit: R=80,G=80,B=80. Probably program to convert any image file to the 16-bit gray scale PNG exists only in closed Oracle's java cosmos.


    Yes, it is easy to read the file into java program, but is not easy programming all useful graphics filters and effects as GIMP gives us for free.

  8. Hmmm multi threading sounds good and is very promising. But I think that problems with heap are genereted by java controlls not by a map itself. I use my own command line program to edit maps 4096 and over and have no memory issues. For most simple modifications my code uses only two map rows. Of course dropping dirt is much more complicated question. I stay tuned for more news.

  9. @MamaDarkness

    Yyy... yes. I have made modification of 4096x4096 Dark Island map. There are no inner lakes and bays around continent. Every water tile in rectangle (501,4096-501)x(501,4096-501) is now land 1 dirt over water level. I also have removed everything from land tiles and changed tiles with height -1, 0, 1 to 50% Marsh (23) and rest to Olives (108) and Reed (33) - my swamp. Every tile except rock and special tiles is now very old Olive (108,193). Special tiles are Sand (1), Clay (6), Peat (18), Moss (20), Tar (24) spots. They are 2x2 and rare (20 in map). Even more rare are trees and bushes - 5 of any type per map. Now I am working on sculpturing terrain, so I wrote about removing and restoring of map "coloring".


    Of course it is my favourite Wurm map, Indie size Darklands, with valuable plants extremely rare as mythical shiny Pokemons (Catch them all!) and tons of spiders and trolls everywhere beneath trees (90% aggressive creatures). High percent of aggressive creatures causes that horses etc. are also rare and I will rejoice wholeheartedly with every horse I manage to find as Gollum finding small spoiled fish on a forest road  :rolleyes: ..... Ah, my stats I set at 10 and skills at 1, field vegetation 24, breeding 1, action speed 1. In mid-march I plan to be near central mountains of the continent with all hatchets quality 1.0  :blink: LOL



    The game has no option "Hide <anything>". To do that you have to rewrite renderer, ie. entire game concept. For example, Tree it is not a tree object on a Grass tile, but Tree tile completely different from grassy one. Above I said about possibility of map editing and future wurm maps editor working similar to Photoshop, with markers, global and area filters, special effects, and brushes. Interractive toolbox for visualization and detailed map edition. Working on game files offline not ingame objects, but who knows..... I personally think that editing map in game as a GM is also possible, so believe in the future and our moders.  :)

  10. I am just testing very simple command line program to create rock layer, drop dirt and planting biomes. I plan to use such code snippets as a filters, effects or brushes in my generator. Similar to Photoshop or Gimp structure. All is based on rewriting of disk files, so I have no problem with low memory, heap exceptions and Swing interface.

  11. I have very simple program to remove all trees and bushes from any map. So far it is not window version, but is very useful. In no time even young programmer can write additional code to secure trees coords of entire forest in temporary file, in order to restore it after landscape ediion.

  12. "File 'C:\...\top_layer.map' is too large to load into memory. Please use 64-bit java, increase your heap space, or load a smaller map"


    Similar problem as in WGenerator. I understand that not loading entire map file into memory is very complicated in java.

  13. Ad. dropping dirt: Why not drop all dirt at once, ie. "If rock_layer[i,j] = N Then  top_layer[i,j] = N + dirt_per_tile for every Tile[i,j].height below Max_dirt_height-dirt_per_tileor something like that and then do postprocessing? Set fifty-fifty line L at rock_layer slope 55 for example and probability distribution on set [0..Max_slope] may looks like half of Gauss. The higher slope (edge/edges and/or diagonal) is the bigger is probability of removing some dirt. Below L, (for rock slopes below 55) the higher is distance from L the smaller is probability of adding some dirt. Next you may distort or sculpture dirt layer a bit using filters. Do smoothing etc. Last step may be dropping down all dirt that not fullfill 40/56 rule starting  from upper tiles to down. Coin flipping, where probability od heads (tails) depends on rock slope.


    Ad. "EDIT 2: ...":


    C:\...\WGenerator>java -Xm4096x -jar WGenerator.jar

    Unrecognized option: -Xm4096x

    Error: Could not create the Java Virtual Machine.

    Error: A fatal exception has occurred. Program will exit.



    Usage: java [-options] class [args...]

               (to execute a class)

       or  java [-options] -jar jarfile [args...]

               (to execute a jar file)

    where options include:

        -d32          use a 32-bit data model if available

        -d64          use a 64-bit data model if available

        -client       to select the "client" VM

        -server       to select the "server" VM

                      The default VM is client.


        -cp <class search path of directories and zip/jar files>

        -classpath <class search path of directories and zip/jar files>

                      A ; separated list of directories, JAR archives,

                      and ZIP archives to search for class files.


                      set a system property


                      enable verbose output

        -version      print product version and exit


                      Warning: this feature is deprecated and will be removed

                      in a future release.

                      require the specified version to run

        -showversion  print product version and continue

        -jre-restrict-search | -no-jre-restrict-search

                      Warning: this feature is deprecated and will be removed

                      in a future release.

                      include/exclude user private JREs in the version search

        -? -help      print this help message

        -X            print help on non-standard options



                      enable assertions with specified granularity



                      disable assertions with specified granularity

        -esa | -enablesystemassertions

                      enable system assertions

        -dsa | -disablesystemassertions

                      disable system assertions


                      load native agent library <libname>, e.g. -agentlib:hprof

                      see also, -agentlib:jdwp=help and -agentlib:hprof=help


                      load native agent library by full pathname


                      load Java programming language agent, see java.lang.instrument


                      show splash screen with specified image

  14. Yes, you are right Jerico. I said "previous version" of the file map_cave.map, that is v.1.0, where is "CA00 0000". In version 1.1 of the file map_cave.map is "CA00 FF9C". I don't know what the SMALL difference means, but without doubt it must be very funny fragment in Wurm source code. ;)


    BTW you don't need any generator to create or edit such map file. Just simple application in style "open input and create output files, read N bytes to a buffer from input file, read (d)word from buffer, edit it, write (d)word to output file, close files". The same is with rock_layer.map and top_layer.map. Having any bitmap in grey scale, black around near borders, you can in one stream generate these both files even for 32kx32k maps. In the method there is no "lack of memory" problems. Dropping down dirt on slopes bigger than 40/56 is also very easy, but you need buffer for 10..20 entire map lines (dwords) what depends on how big mountains you want to create.


    So.... generating WU maps is not a real problem. The problem is in generator structure and constants like "iron vein" or "olive tree, overaged" etc. But the second problem is still SMALL. Generate map with 255x255 flat isle in the middle and make top layer (just add 1 to rock layer value) in a loop for index from 0100 to FF00, and you have all. Simple.

  15. WGnerator has problem with memory on many many maps. On maps 4096x4096 this problem is persistent for me. Win 10 64bit, 4 GB, java uses only 86MB (heights), 112 MB (erode), 280MB (drop dirt) of memory (with other processes, system, browsers, editors, hexviewer - 67%) for 2048x2048 map. So.... it looks like problem with inner memory of  java/swing controlls.

    Probably I must start using old good buffering, to create my demonic 4096x4096 project of Dark Zone. :rolleyes:

  16. You still have something like "0400 FE0C 0400 FE0C ..." in the rock_layer.map file instead of "0000 FE0C 0000 FE0C ...." as in Creative or Adventure standard maps. I think 0400 doesn't mean "Rock" id in the context.

    Your previous map can kill avatars because mine entrance opens at water level :P - there was "CA00 0000 ..." as a rock tile etc. instead of "CA00 FF9C ...". Also content of the file resouces.map is different than standard: FFFF FFFF and somewhere FFFF 0000. But keep going, I like your job :)