Giter Site home page Giter Site logo

dgengine's People

Contributors

dgcor avatar grantramsay avatar mewmew avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dgengine's Issues

Normalize line endings

To facilitate contributions from developers working on different platforms, one thing to consider is the normalization of line endings.

TL;DR: Windows uses a two character sequence for line endings (CRLF - Carriage Return, Line Feed), while Linux and Mac uses a one character sequence for line endings. In order to make this consistent, we may leverage git commit hooks to normalize line endings for us. See further details below.

(Copied more or less verbatim from quixotic-cynic/open-diablo-editor#1)

GitHub suggests that the line feed character (LF, 0x0A, '\n') should be used instead of the carriage return, line feed character sequence (CRLF, 0x0D, 0x0A, "\r\n").

The reason for this is that Window, Linux and Mac all uses different character sequences to signal line endings. CRLF on Windows, CR on Mac and LF on Linux. Fortunately, git may be configured to automatically change these line endings to a uniform format (LF was chosen for this) on commit. This way, all three operating systems may use their line endings locally, while the code repository uses a single format for line endings.

To configure Git to automatically convert CRLF on Windows to LF, before commits; simply run the following command:

# Configure Git on Windows to properly handle line endings
git config --global core.autocrlf true

As the repository already contains code which has CRLF line endings instead of LF line endings, it has to be resubmitted; as explained by the following Stack Overflow answer: http://stackoverflow.com/a/1889699

The gist of which is summarized below:

# Remove everything from the index
$ git rm --cached -r .

# Re-add all the deleted files to the index
# You should get lots of messages like: "warning: CRLF will be replaced by LF in <file>."
$ git diff --cached --name-only -z | xargs -0 git add

# Commit
$ git commit -m "Fix CRLF"

Crash when walking in town

Compiled the latest revision 6268b90 and that worked well. Tried running the game, and it works perfectly in the menus, plays sounds, and loads the game world. However, after a few steps in any direction, either walking up towards Griswold or down, results in a crash.

Let me know if there is some further information that can assist troubleshooting.

Happy to see the TMX additions in this latest version! Would love to play around with them a bit.

Cheers!
/u

u@x220 ~/D/d/DGEngine> coredumpctl gdb 27406
           PID: 27406 (DGEngine)
           UID: 1000 (u)
           GID: 100 (users)
        Signal: 11 (SEGV)
     Timestamp: Sun 2018-01-07 23:16:25 CET (32s ago)
  Command Line: ./DGEngine ./gamefilesd
    Executable: /home/u/Desktop/diablo/DGEngine/DGEngine
 Control Group: /user.slice/user-1000.slice/session-c1.scope
          Unit: session-c1.scope
         Slice: user-1000.slice
       Session: c1
     Owner UID: 1000 (u)
       Boot ID: b470d7a5add24cfba5fc1629e3eae483
    Machine ID: 28a33732c4064f1791505da65cf095d5
      Hostname: x220
       Storage: /var/lib/systemd/coredump/core.DGEngine.1000.b470d7a5add24cfba5fc1629e3eae483.27406.1515363385000000.lz4
       Message: Process 27406 (DGEngine) of user 1000 dumped core.
                
                Stack trace of thread 27406:
                #0  0x0000561d206cdf7d n/a (/home/u/Desktop/diablo/DGEngine/DGEngine)
                #1  0x0000561d206da208 n/a (/home/u/Desktop/diablo/DGEngine/DGEngine)
                #2  0x0000561d206da37d n/a (/home/u/Desktop/diablo/DGEngine/DGEngine)
                #3  0x0000561d206da57c n/a (/home/u/Desktop/diablo/DGEngine/DGEngine)
                #4  0x0000561d206d562a n/a (/home/u/Desktop/diablo/DGEngine/DGEngine)
                #5  0x0000561d206d48bd n/a (/home/u/Desktop/diablo/DGEngine/DGEngine)
                #6  0x0000561d2070cee4 n/a (/home/u/Desktop/diablo/DGEngine/DGEngine)
                #7  0x0000561d20798fc9 n/a (/home/u/Desktop/diablo/DGEngine/DGEngine)
                #8  0x0000561d2079968e n/a (/home/u/Desktop/diablo/DGEngine/DGEngine)
                #9  0x0000561d206519e4 n/a (/home/u/Desktop/diablo/DGEngine/DGEngine)
                #10 0x0000561d2064ebae n/a (/home/u/Desktop/diablo/DGEngine/DGEngine)
                #11 0x0000561d2064db9f n/a (/home/u/Desktop/diablo/DGEngine/DGEngine)
                #12 0x0000561d2062e097 n/a (/home/u/Desktop/diablo/DGEngine/DGEngine)
                #13 0x00007fccc0d48f4a __libc_start_main (libc.so.6)
                #14 0x0000561d2062dbda n/a (/home/u/Desktop/diablo/DGEngine/DGEngine)

GNU gdb (GDB) 8.0.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /home/u/Desktop/diablo/DGEngine/DGEngine...(no debugging symbols found)...done.
[New LWP 27406]
[New LWP 27412]
[New LWP 27413]
[New LWP 27459]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
Core was generated by `./DGEngine ./gamefilesd'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0000561d206cdf7d in LevelCell::Passable() const ()
[Current thread is 1 (Thread 0x7fccc5160880 (LWP 27406))]
(gdb) bt
#0  0x0000561d206cdf7d in LevelCell::Passable() const ()
#1  0x0000561d206da208 in MapSearchNode::IsPassable(short, short) const ()
#2  0x0000561d206da37d in MapSearchNode::addSuccessor(AStarSearch<MapSearchNode>*, short, short, short, short) ()
#3  0x0000561d206da57c in MapSearchNode::GetSuccessors(AStarSearch<MapSearchNode>*, MapSearchNode*) ()
#4  0x0000561d206d562a in AStarSearch<MapSearchNode>::SearchStep() ()
#5  0x0000561d206d48bd in LevelMap::getPath(PairXY<unsigned short> const&, PairXY<unsigned short> const&) const ()
#6  0x0000561d2070cee4 in ActPlayerMoveToClick::execute(Game&) ()
#7  0x0000561d20798fc9 in ActIfCondition::ifCondition(Game&, bool) ()
#8  0x0000561d2079968e in ActIfCondition::execute(Game&) ()
#9  0x0000561d206519e4 in EventManager::update(Game&) ()
#10 0x0000561d2064ebae in Game::updateEvents() ()
#11 0x0000561d2064db9f in Game::play() ()
#12 0x0000561d2062e097 in main ()

Diablo 2 COF animation drawing order

Diablo 2's COF animations aren't drawing the shield in the right order.

Diablo 2 sorceress
Diablo 2 sorceress 2

This is either a bug in my COF decoder, or in the texturePack order in the configuration files for each player:

https://github.com/dgengin/DGEngine/blob/master/gamefilesd2/level/player/Sorceress/textures.json

This issue is to track the proper way to draw all of the COF animations of Diablo 2.

Can COF file layers be missing and be skipped when drawing (for instance, if the shield isn't equipped, you use a COF with a shield, but don't draw that layer)?

The order of the layers in the COF file isn't always the same, does this affect drawing?

I'm assuming the layers should be loaded in this order:
HD, TR, LG, RA, LA, RH, LH, SH, S1, S2, S3, S4, S5, S6, S7, S8
And then the order indexes apply to these.

error: ‘fabsf’ was not declared in this scope

When compiling rev 40afab3 the following error is reported.

/home/u/Desktop/DGEngine/src/Game/PathFinder.cpp: In member function ‘float MapSearchNode::GoalDistanceEstimate(MapSearchNode&)’:
/home/u/Desktop/DGEngine/src/Game/PathFinder.cpp:20:29: error: ‘fabsf’ was not declared in this scope
  return fabsf(x - nodeGoal.x) + fabsf(y - nodeGoal.y);

This was reported on a system running Arch Linux, with GCC version 6.1.1.

Fix D2 tiles offsets and other D2 maps issues

Now that diablo 2 maps can be loaded, there are a few remaining issues with maps.

if you walk to the edge of the map, the player should be on the edge of the map and not outside it.
This is probably because of the offsets being applied right now to DT1 tiles.

d2_offsets

The roofs in Act2/Town are not showing correctly as well.

d2_offsets2

Some other points:

  • in maps that can have multiple tile layers, you can load all of the tile layers textures that the IDs won't conflict with each other, so you can switch the order of this texturePack and the map will always draw the same:
  "texturePack": [
    {
      "id": "town",
      "texturePacks": [
        "treegroups",
        "stonewall",
        "floor",
        "warp",
        "river",
        "objects",
        "fence",
        "objects2"
      ]
    }
  ],
  • Right now, DGEngine is using DT1 tiles that are composed of 5x5 tiles of 32x16 pixels in size. flags are loaded for each of the subTiles so you won't walk through walls. if you walk around, you'll notice that the player is going around empty areas. this is because the offsets are wrong.

  • Tiles in D1 are 64x32 in size, but in D2 they're 32x16, but the DS1 file is loading a tile on every 5th position, since they're bigger. Visually it's the same but it renders faster since there are fewer drawing calls. in my tests it renders faster than D1, even though there are more layers.

  • D2 maps of the same type (ex: Act1's town) can load a different number of layers (floors, roofs, etc). This makes it a bit annoying to set the layer for each map on which to draw level objects (so that they don't apear above roofs or behind floors). Can a DS1 map have 1 floor and 10 types of pillar layers and another have 10 types of floors and no pillars? I was thinking that if we knew there can't be more than, say, 3 floor layers, we could always load the pillars starting on the 4th layer, regardless of how many floors are used and then always draw level objects at a specific layer.

Diablo 2 game files

Right now, DGEngine can load all of Diablo 2's game assets that are of any use. Diablo 2 is a much bigger game than Diablo. I would like to make gamefilesd2 load all of its assets from Diablo 2's. Right now it's reverting to Diablo's gamefilesd and DIABDAT.

This can be done entirely by manipulating json files. Some things probably would require code changes, but for the most part, one should be able to get away with a lot with just json.

I created this issue to see if anyone might be interested in taking this on. I would provide assistance and tips on how certain parts can be done.

Compile error for v0.3.0

I just tried to build the v0.3.0 release of DGEngine, and got the follow compile time error:

u@x1 ~/D/d/DGEngine> mkdir build
u@x1 ~/D/d/DGEngine> cd build
u@x1 ~/D/d/D/build> cmake ..
-- The C compiler identification is GNU 8.2.1
-- The CXX compiler identification is GNU 8.2.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
--  Found avcodec: /usr/include /usr/lib/libavcodec.so
--  Found avdevice: /usr/include /usr/lib/libavdevice.so
--  Found avfilter: /usr/include /usr/lib/libavfilter.so
--  Found avformat: /usr/include /usr/lib/libavformat.so
--  Found avutil: /usr/include /usr/lib/libavutil.so
--  Found swresample: /usr/include /usr/lib/libswresample.so
--  Found swscale: /usr/include /usr/lib/libswscale.so
-- Found FFmpeg: /usr/include  found components:  avcodec avformat avutil swscale 
-- Found PhysFS: /usr/lib/libphysfs.so  
-- Found SFML 2.5.1 in /usr/include
-- Configuring done
-- Generating done
-- Build files have been written to: /home/u/Desktop/diablo/DGEngine/build
u@x1 ~/D/d/D/build> make
Scanning dependencies of target DGEngine
[  0%] Building CXX object CMakeFiles/DGEngine.dir/src/Main.cpp.o
/home/u/Desktop/diablo/DGEngine/src/Main.cpp: In function ‘int main(int, char**)’:
/home/u/Desktop/diablo/DGEngine/src/Main.cpp:31:24: warning: catching polymorphic type ‘class std::exception’ by value [-Wcatch-value=]
  catch (std::exception ex)
                        ^~
[  1%] Building CXX object CMakeFiles/DGEngine.dir/src/Animation.cpp.o
In file included from /home/u/Desktop/diablo/DGEngine/src/Animation.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.cpp:1:
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:13:12: error: ‘size_t’ was not declared in this scope
  std::pair<size_t, size_t> textureIndexRange;
            ^~~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:13:12: note: suggested alternative:
In file included from /usr/include/c++/8.2.1/utility:68,
                 from /home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:8,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.cpp:1:
/usr/include/c++/8.2.1/x86_64-pc-linux-gnu/bits/c++config.h:238:26: note:   ‘std::size_t’
   typedef __SIZE_TYPE__  size_t;
                          ^~~~~~
In file included from /home/u/Desktop/diablo/DGEngine/src/Animation.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.cpp:1:
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:13:20: error: ‘size_t’ was not declared in this scope
  std::pair<size_t, size_t> textureIndexRange;
                    ^~~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:13:20: note: suggested alternative:
In file included from /usr/include/c++/8.2.1/utility:68,
                 from /home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:8,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.cpp:1:
/usr/include/c++/8.2.1/x86_64-pc-linux-gnu/bits/c++config.h:238:26: note:   ‘std::size_t’
   typedef __SIZE_TYPE__  size_t;
                          ^~~~~~
In file included from /home/u/Desktop/diablo/DGEngine/src/Animation.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.cpp:1:
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:13:26: error: template argument 1 is invalid
  std::pair<size_t, size_t> textureIndexRange;
                          ^
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:13:26: error: template argument 2 is invalid
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:14:2: error: ‘size_t’ does not name a type
  size_t currentTextureIdx{ 0 };
  ^~~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:14:2: note: ‘size_t’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:9:1:
+#include <cstddef>
 
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:14:2:
  size_t currentTextureIdx{ 0 };
  ^~~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:27:32: error: ‘size_t’ was not declared in this scope
  BaseAnimation(const std::pair<size_t, size_t>& textureIndexRange_,
                                ^~~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:27:32: note: suggested alternative:
In file included from /usr/include/c++/8.2.1/utility:68,
                 from /home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:8,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.cpp:1:
/usr/include/c++/8.2.1/x86_64-pc-linux-gnu/bits/c++config.h:238:26: note:   ‘std::size_t’
   typedef __SIZE_TYPE__  size_t;
                          ^~~~~~
In file included from /home/u/Desktop/diablo/DGEngine/src/Animation.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.cpp:1:
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:27:40: error: ‘size_t’ was not declared in this scope
  BaseAnimation(const std::pair<size_t, size_t>& textureIndexRange_,
                                        ^~~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:27:40: note: suggested alternative:
In file included from /usr/include/c++/8.2.1/utility:68,
                 from /home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:8,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.cpp:1:
/usr/include/c++/8.2.1/x86_64-pc-linux-gnu/bits/c++config.h:238:26: note:   ‘std::size_t’
   typedef __SIZE_TYPE__  size_t;
                          ^~~~~~
In file included from /home/u/Desktop/diablo/DGEngine/src/Animation.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.cpp:1:
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:27:46: error: template argument 1 is invalid
  BaseAnimation(const std::pair<size_t, size_t>& textureIndexRange_,
                                              ^
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:27:46: error: template argument 2 is invalid
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h: In constructor ‘BaseAnimation::BaseAnimation(const int&, const sf::Time&, AnimationType, bool)’:
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:29:44: error: class ‘BaseAnimation’ does not have any field named ‘currentTextureIdx’
   : textureIndexRange(textureIndexRange_), currentTextureIdx(textureIndexRange_.first),
                                            ^~~~~~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:29:81: error: request for member ‘first’ in ‘textureIndexRange_’, which is of non-class type ‘const int’
   : textureIndexRange(textureIndexRange_), currentTextureIdx(textureIndexRange_.first),
                                                                                 ^~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h: In member function ‘void BaseAnimation::clear()’:
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:34:21: error: request for member ‘first’ in ‘((BaseAnimation*)this)->BaseAnimation::textureIndexRange’, which is of non-class type ‘int’
   textureIndexRange.first = 0;
                     ^~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:35:21: error: request for member ‘second’ in ‘((BaseAnimation*)this)->BaseAnimation::textureIndexRange’, which is of non-class type ‘int’
   textureIndexRange.second = 0;
                     ^~~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h: In member function ‘void BaseAnimation::reset()’:
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:40:3: error: ‘currentTextureIdx’ was not declared in this scope
   currentTextureIdx = textureIndexRange.first;
   ^~~~~~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:40:3: note: suggested alternative: ‘currentTime’
   currentTextureIdx = textureIndexRange.first;
   ^~~~~~~~~~~~~~~~~
   currentTime
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:40:41: error: request for member ‘first’ in ‘((BaseAnimation*)this)->BaseAnimation::textureIndexRange’, which is of non-class type ‘int’
   currentTextureIdx = textureIndexRange.first;
                                         ^~~~~
In file included from /home/u/Desktop/diablo/DGEngine/src/Game/Item.h:4,
                 from /home/u/Desktop/diablo/DGEngine/src/Game/LevelCell.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Game/LevelMap.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Game/Level.h:8,
                 from /home/u/Desktop/diablo/DGEngine/src/ResourceManager.h:7,
                 from /home/u/Desktop/diablo/DGEngine/src/Game.h:11,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.cpp:2:
/home/u/Desktop/diablo/DGEngine/src/Game/BaseLevelObject.h: In constructor ‘BaseLevelObject::BaseLevelObject(const TexturePack&, const std::pair<long unsigned int, long unsigned int>&, const sf::Time&, AnimationType)’:
/home/u/Desktop/diablo/DGEngine/src/Game/BaseLevelObject.h:53:84: error: no matching function for call to ‘BaseAnimation::BaseAnimation(const std::pair<long unsigned int, long unsigned int>&, const sf::Time&, AnimationType&, bool)’
   : texturePack(&texturePack_), animation(textureIndexRange, frameTime, type, false) {}
                                                                                    ^
In file included from /home/u/Desktop/diablo/DGEngine/src/Animation.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.cpp:1:
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:27:2: note: candidate: ‘BaseAnimation::BaseAnimation(const int&, const sf::Time&, AnimationType, bool)’
  BaseAnimation(const std::pair<size_t, size_t>& textureIndexRange_,
  ^~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:27:2: note:   no known conversion for argument 1 from ‘const std::pair<long unsigned int, long unsigned int>’ to ‘const int&’
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:26:2: note: candidate: ‘BaseAnimation::BaseAnimation()’
  BaseAnimation() {}
  ^~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:26:2: note:   candidate expects 0 arguments, 4 provided
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:10:7: note: candidate: ‘constexpr BaseAnimation::BaseAnimation(const BaseAnimation&)’
 class BaseAnimation
       ^~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:10:7: note:   candidate expects 1 argument, 4 provided
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:10:7: note: candidate: ‘constexpr BaseAnimation::BaseAnimation(BaseAnimation&&)’
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:10:7: note:   candidate expects 1 argument, 4 provided
/home/u/Desktop/diablo/DGEngine/src/Animation.cpp: In constructor ‘Animation::Animation(const std::shared_ptr<TexturePack>&, const std::pair<long unsigned int, long unsigned int>&, const sf::Time&, AnimationType, bool)’:
/home/u/Desktop/diablo/DGEngine/src/Animation.cpp:7:48: error: no matching function for call to ‘BaseAnimation::BaseAnimation(const std::pair<long unsigned int, long unsigned int>&, const sf::Time&, AnimationType&, bool&)’
  base(textureIndexRange, frameTime, type, pause)
                                                ^
In file included from /home/u/Desktop/diablo/DGEngine/src/Animation.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Animation.cpp:1:
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:27:2: note: candidate: ‘BaseAnimation::BaseAnimation(const int&, const sf::Time&, AnimationType, bool)’
  BaseAnimation(const std::pair<size_t, size_t>& textureIndexRange_,
  ^~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:27:2: note:   no known conversion for argument 1 from ‘const std::pair<long unsigned int, long unsigned int>’ to ‘const int&’
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:26:2: note: candidate: ‘BaseAnimation::BaseAnimation()’
  BaseAnimation() {}
  ^~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:26:2: note:   candidate expects 0 arguments, 4 provided
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:10:7: note: candidate: ‘constexpr BaseAnimation::BaseAnimation(const BaseAnimation&)’
 class BaseAnimation
       ^~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:10:7: note:   candidate expects 1 argument, 4 provided
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:10:7: note: candidate: ‘constexpr BaseAnimation::BaseAnimation(BaseAnimation&&)’
/home/u/Desktop/diablo/DGEngine/src/BaseAnimation.h:10:7: note:   candidate expects 1 argument, 4 provided
/home/u/Desktop/diablo/DGEngine/src/Animation.cpp: In member function ‘void Animation::updateTexture()’:
/home/u/Desktop/diablo/DGEngine/src/Animation.cpp:19:28: error: ‘class BaseAnimation’ has no member named ‘currentTextureIdx’; did you mean ‘currentTime’?
  if (texturePack->get(base.currentTextureIdx, ti) == true)
                            ^~~~~~~~~~~~~~~~~
                            currentTime
make[2]: *** [CMakeFiles/DGEngine.dir/build.make:76: CMakeFiles/DGEngine.dir/src/Animation.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:73: CMakeFiles/DGEngine.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

I'm using dgengin/physfs from the Arch Linux AUR: https://aur.archlinux.org/packages/dgengine-physfs-git

And I have the following versions installed for build dependencies:

u@x1 ~> cmake --version
cmake version 3.12.4

u@x1 ~> pacman -Q sfml
sfml 2.5.1-1

u@x1 ~> gcc --version
gcc (GCC) 8.2.1 20180831

Let me know if any further info may help the troubleshooting.

Cheers,
/u

Compilation error

OS: Ubuntu 16.04 64bit
GCC 5.4.0

In file included from /home/eugene/Development/dlang/DGEngine/src/StringText.cpp:1:0:
/home/eugene/Development/dlang/DGEngine/src/StringText.h: In member function ‘virtual void StringText::setColor(const sf::Color&)’:
/home/eugene/Development/dlang/DGEngine/src/StringText.h:59:55: error: ‘class sf::Text’ has no member named ‘setFillColor’
  virtual void setColor(const sf::Color& color) { text.setFillColor(color); }
                                                       ^

/home/eugene/Development/dlang/DGEngine/src/StringText.h: In member function ‘void StringText::setOutlineColor(const sf::Color&)’:
/home/eugene/Development/dlang/DGEngine/src/StringText.h:60:54: error: ‘class sf::Text’ has no member named ‘setOutlineColor’
  void setOutlineColor(const sf::Color& color) { text.setOutlineColor(color); }
                                                      ^

/home/eugene/Development/dlang/DGEngine/src/StringText.h: In member function ‘void StringText::setOutlineThickness(float)’:
/home/eugene/Development/dlang/DGEngine/src/StringText.h:61:51: error: ‘class sf::Text’ has no member named ‘setOutlineThickness’
  void setOutlineThickness(float thickness) { text.setOutlineThickness(thickness
                                                   ^

/home/eugene/Development/dlang/DGEngine/src/StringText.h: In member function ‘const sf::Color& StringText::getColor() const’:
/home/eugene/Development/dlang/DGEngine/src/StringText.h:67:50: error: ‘const class sf::Text’ has no member named ‘getFillColor’
  const sf::Color& getColor() const { return text.getFillColor(); }
                                                  ^

/home/eugene/Development/dlang/DGEngine/src/StringText.h: In member function ‘const sf::Color& StringText::getOutlineColor() const’:
/home/eugene/Development/dlang/DGEngine/src/StringText.h:68:57: error: ‘const class sf::Text’ has no member named ‘getOutlineColor’
  const sf::Color& getOutlineColor() const { return text.getOutlineColor(); }
                                                         ^

/home/eugene/Development/dlang/DGEngine/src/StringText.h: In member function ‘float StringText::getOutlineThickness() const’:
/home/eugene/Development/dlang/DGEngine/src/StringText.h:69:50: error: ‘const class sf::Text’ has no member named ‘getOutlineThickness’
  float getOutlineThickness() const { return text.getOutlineThickness(); }

Warning: comparison between signed and unsigned integer expressions

When compiling with GCC 6.2.1, the following warnings are identified for rev b98b54f:

[  6%] Building CXX object CMakeFiles/DGEngine.dir/src/Cel.cpp.o
/home/u/Desktop/diablo/DGEngine/src/Cel.cpp: In function ‘int32_t normalDecode(const std::vector<unsigned char>&, size_t, const Palette&, std::vector<sf::Color>&, bool)’:
/home/u/Desktop/diablo/DGEngine/src/Cel.cpp:172:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (j = 1; j < frame[i] + 1 && i + j < frame.size(); j++)
                ~~^~~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/Cel.cpp:177:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (index > frame.size() - 1) {
         ~~~~~~^~~~~~~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/Cel.cpp:189:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (size_t j = 0; j < 256 - frame[i]; j++) {

/home/u/Desktop/diablo/DGEngine/src/Cel.cpp: In function ‘int32_t cl2Decode(const std::vector<unsigned char>&, const Palette&, std::vector<sf::Color>&)’:
/home/u/Desktop/diablo/DGEngine/src/Cel.cpp:254:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (j = 1; j < val + 1 && i + j < frame.size(); j++)
                 ~~^~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/Cel.cpp:259:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
      if (index > frame.size() - 1) {
          ~~~~~~^~~~~~~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/Cel.cpp: In function ‘void fillTransparent(size_t, std::vector<sf::Color>&)’:
/home/u/Desktop/diablo/DGEngine/src/Cel.cpp:354:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int px = 0; px < pixels; px++) {
                   ~~~^~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/Cel.cpp: In function ‘void decodeGreaterLessThan(const std::vector<unsigned char>&, const Palette&, std::vector<sf::Color>&, bool)’:
/home/u/Desktop/diablo/DGEngine/src/Cel.cpp:408:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (framePos = 256; framePos < frame.size(); framePos++) {
                        ~~~~~~~~~^~~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/Cel.cpp: In function ‘size_t decodeRaw32(const std::vector<unsigned char>&, const Palette&, std::vector<sf::Color>&)’:
/home/u/Desktop/diablo/DGEngine/src/Cel.cpp:426:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < frame.size(); i++)
                  ~~^~~~~~~~~~~~~~
...
[ 50%] Building CXX object CMakeFiles/DGEngine.dir/src/Game/PathFinder.cpp.o
/home/u/Desktop/diablo/DGEngine/src/Game/PathFinder.cpp: In member function ‘bool MapSearchNode::IsPassableIgnoreObject()’:
/home/u/Desktop/diablo/DGEngine/src/Game/PathFinder.cpp:7:8: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if (x < map->Width() && y < map->Height())
      ~~^~~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/Game/PathFinder.cpp:7:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if (x < map->Width() && y < map->Height())
                          ~~^~~~~~~~~~~~~~~

The fix should be easy. Would you prefer changing the return type of frame.size(), map->Width() and map->Height() to signed integers, change the type of i, x, and y to unsigned integers, or cast the return value from frame.size(), map->Width() and map->Height() to signed integers?

Diablo 2 DT1 image decoder

To finish loading all of Diablo 2's game assets (that matter) a DT1 image decoder needs to be written that implements the ImageContainer interface, similar to the CEL, CL2, DC6 and DCC decoders already implemented.

From what I read, DT1 contains sub images that are used to create bigger images, sort of a mix between Diablo's CEL files and MIN files.

This issue is to track progress on such a decoder to add to DGEngine. To load Diablo 2 maps, you need a DS1 decoder too, but we don't really need one, since once DGEngine can load level tiles, we can create maps using Tiled (The Diablo maps currently in the repo were done using Tiled).

I'm not in a hurry to implement this myself, but if someone feels they can write one based on one of the few existing implementations out there (Riiablo, win_ds1edit), please do :)

Writing a decoder without having a clean implemantation available in C++ takes too much time, since it requires reading the various technical documents on the format and testing to verify it's working correctly for all tiles.

Once a working decoder is written, I'll make the necessary changes to have maps loaded.

[Newbie question] How do you implement the GUI of the game?

Hi! I found your project when searching for open source Diablo engines. Because I'm learning programming and writing my own 2d game engine (a very simple one as I'm just a newbie) so I dug a bit into the codes. This project is too complex for me so I'm only focusing on the part that you implement gui (e.g. how do you implement the onClick event of a button)

From what I read, the gui part seems to be scattering around "ActButton.h", "Button.h/cpp" as well as "BitmapButton.h/cpp":

In the ActButtonClick class, you have the execute() function that calls the click() function of a button (as a resource of the game), and in BitmapButton class we will addback the action to the EventManager. Then I was lost, as I couldn't find how the game will execute the actions because in the Eventmanager class I didn't find much relating code. Could you please give me a hint about this? (e.g. if I click the Inv button the inventory screen should be brought up, I'm trying to locate the code about this specific action under the "Action" directory, without success so far)

Thanks in advance! BTW if you need my email it's [email protected]

I'm really new to large projects, so I'm sorry if this is too newbie or too much of nuisance. Please ignore the message if it's bothering. I'm going to spend more time reading your code anyway.

Dungeon generation of Cathedral

Now that DGEngine supports TMX maps, it would be interesting to hook the engine up to make use of the original dungeon generation algorithms of Diablo 1.

@7i and I wrote a stand-alone tool which outputs the tiles of a Cathedral map based on its dungeon level, seed and active quest.

For dungeon level 1 with seed 123, the dynamic random layout generation algorithm of Diablo 1 produces the following map.

Dungeon level 1, seed 123

To produce the above map, run the following commands:

# Download Go (https://golang.org/doc/install)
$ export GOPATH=/tmp/go
$ export PATH=$GOPATH/bin:$PATH

$ mkdir /tmp/foo
$ cd /tmp/foo

# Extract DIABDAT.MPQ to the diabdat/ directory (files should have lowercase filenames).
$ go get github.com/sanctuary/mpq
$ cp /path/to/diabdat.mpq diabdat.mpq
$ mpq -dir diabdat -m diabdat.mpq

# Get the l1 tool
$ go get github.com/sanctuary/djavul/cmd/l1

# Copy Diablo.exe version 1.09b to the current working directory.
# The l1 tools reads tables for tile shadows from the executable.
$ cp /path/to/diablo-v1.09b.exe diablo.exe

# Output the dungeon pieces of the map with dungeon level 1 and seed 123.
$ l1 -seed 123 -dpieces
40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,9,6,5,6,5,6,41,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,9,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,41,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,7,4,39,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,7,4,7,4,7,4,7,4,7,4,7,4,7,4,39,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,350,351,23,2,30,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,23,2,286,287,346,347,262,263,23,2,346,347,346,347,216,217,30,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,352,353,7,4,32,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,288,289,348,349,264,265,7,4,348,349,348,349,218,219,32,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,224,225,350,351,30,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,350,351,350,351,346,347,23,2,124,290,262,263,23,2,350,351,30,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,226,4,352,353,32,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,352,353,352,353,348,349,7,4,291,292,264,265,7,4,352,353,32,33,36,33,36,33,40,31,40,31,9,6,5,6,197,198,5,6,5,6,241,242,245,246,448,438,40,31,40,31,40,31,40,31,319,2,300,2,300,2,30,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,350,351,350,351,23,2,216,217,350,351,346,347,346,347,346,347,30,31,40,31,40,31,36,33,36,33,3,4,7,4,199,200,7,4,7,4,7,4,7,4,446,440,36,33,36,33,36,33,36,33,320,302,301,302,301,302,32,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,352,353,352,353,7,4,218,219,352,353,348,349,348,349,348,349,32,33,36,33,36,33,40,31,40,31,1,2,346,347,23,2,23,2,224,225,262,263,350,351,9,6,5,6,9,6,5,6,5,6,20,11,22,11,22,11,30,31,40,31,40,31,40,31,40,31,9,6,5,6,243,244,237,238,5,6,5,6,28,2,350,351,262,263,220,221,346,347,124,290,23,2,23,2,216,217,437,438,40,31,40,31,36,33,36,33,3,4,348,349,7,4,7,4,226,4,264,265,352,353,3,4,7,4,3,4,7,4,7,4,3,4,7,4,7,4,32,33,36,33,36,33,36,33,36,33,3,4,7,4,7,4,7,4,7,4,7,4,7,4,352,353,264,265,222,223,348,349,291,292,7,4,7,4,218,219,439,440,36,33,36,33,40,31,40,31,1,2,284,285,346,347,220,221,350,351,23,2,296,297,1,2,312,2,1,2,346,347,312,2,1,2,262,263,312,2,437,438,40,31,40,31,40,31,40,31,1,2,286,287,262,263,346,347,293,2,23,2,23,2,346,347,23,2,284,285,346,347,9,6,45,46,5,6,445,442,37,31,40,31,40,31,36,33,36,33,3,4,7,4,348,349,222,223,352,353,7,4,298,299,3,4,313,314,3,4,348,349,313,314,3,4,264,265,313,314,439,440,36,33,36,33,36,33,36,33,3,4,288,289,264,265,348,349,294,295,7,4,7,4,348,349,7,4,7,4,348,349,3,4,7,4,7,4,446,440,36,33,36,33,36,33,40,31,40,31,1,2,224,225,346,347,350,351,216,217,346,347,296,297,21,2,307,308,28,2,350,351,307,308,28,2,23,2,307,308,14,15,41,31,40,31,40,31,40,31,1,2,346,347,346,347,346,347,350,351,350,351,350,351,216,217,262,263,350,351,23,2,1,2,350,351,23,2,30,31,40,31,40,31,40,31,36,33,36,33,3,4,226,4,348,349,352,353,218,219,348,349,298,299,12,4,7,4,7,4,352,353,7,4,7,4,7,4,7,4,7,4,39,33,36,33,36,33,36,33,3,4,348,349,348,349,348,349,352,353,352,353,352,353,218,219,264,265,352,353,7,4,3,4,352,353,7,4,32,33,36,33,36,33,36,33,40,31,40,31,1,2,350,351,224,225,350,351,346,347,23,2,216,217,1,2,23,2,346,347,350,351,346,347,23,2,293,2,23,2,220,221,437,438,40,31,40,31,40,31,1,2,346,347,346,347,346,347,23,2,23,2,350,351,23,2,262,263,350,351,346,347,1,2,350,351,350,351,30,31,40,31,40,31,40,31,36,33,36,33,3,4,352,353,226,4,352,353,348,349,7,4,218,219,3,4,7,4,348,349,352,353,348,349,7,4,294,295,7,4,222,223,439,440,36,33,36,33,36,33,3,4,348,349,348,349,348,349,7,4,7,4,352,353,7,4,264,265,352,353,348,349,3,4,352,353,352,353,32,33,36,33,36,33,36,33,40,31,40,31,42,35,34,35,34,35,34,35,441,442,13,2,350,351,207,2,300,2,300,2,300,2,300,2,220,221,293,2,350,351,346,347,9,6,5,6,5,6,41,31,1,2,350,351,346,347,350,351,220,221,300,2,300,2,300,2,300,2,300,2,300,2,1,2,23,2,350,351,437,438,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,443,440,3,4,352,353,208,4,301,302,301,302,301,302,301,302,222,223,294,295,352,353,348,349,3,4,7,4,7,4,39,33,3,4,352,353,348,349,352,353,222,223,301,302,301,302,301,302,301,302,301,302,301,302,3,4,7,4,352,353,439,440,36,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,42,35,34,35,34,35,441,442,47,48,45,46,64,48,445,442,34,35,34,35,441,442,13,2,224,225,224,225,437,438,42,35,441,442,9,6,45,46,197,198,445,442,20,11,22,11,22,11,22,11,22,11,38,35,34,35,441,442,37,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,443,440,49,4,7,4,7,4,446,440,36,33,36,33,443,440,3,4,226,4,226,4,439,440,36,33,443,440,3,4,7,4,199,200,446,440,3,4,7,4,7,4,7,4,7,4,39,33,36,33,443,440,36,33,36,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,9,6,29,2,262,263,23,2,9,6,5,6,241,242,203,204,28,2,220,221,350,351,9,6,5,6,5,6,28,2,350,351,23,2,30,31,1,2,346,347,216,217,350,351,350,351,30,31,40,31,40,31,40,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,264,265,7,4,3,4,7,4,7,4,7,4,7,4,222,223,352,353,3,4,7,4,7,4,7,4,352,353,7,4,32,33,3,4,348,349,218,219,352,353,352,353,32,33,36,33,36,33,36,33,36,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,235,2,346,347,346,347,346,347,1,2,346,347,346,347,346,347,350,351,350,351,296,297,1,2,262,263,220,221,216,217,346,347,350,351,30,31,1,2,350,351,350,351,346,347,23,2,30,31,40,31,40,31,40,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,236,4,348,349,348,349,348,349,3,4,348,349,348,349,348,349,352,353,352,353,298,299,3,4,264,265,222,223,218,219,348,349,352,353,32,33,3,4,352,353,352,353,348,349,7,4,32,33,36,33,36,33,36,33,36,33,36,33,36,33,9,6,5,6,203,204,5,6,5,6,5,6,5,6,41,31,40,31,40,31,207,2,23,2,220,221,282,283,43,2,346,347,23,2,346,347,300,2,300,2,296,297,21,2,282,283,300,2,300,2,300,2,300,2,30,31,235,2,350,351,346,347,350,351,350,351,437,438,40,31,40,31,40,31,40,31,40,31,40,31,3,4,7,4,7,4,7,4,7,4,7,4,7,4,39,33,36,33,36,33,208,4,7,4,222,223,7,4,44,4,348,349,7,4,348,349,301,302,301,302,298,299,12,4,7,4,301,302,301,302,301,302,301,302,32,33,236,4,352,353,348,349,352,353,352,353,439,440,36,33,36,33,36,33,36,33,36,33,36,33,1,2,350,351,350,351,23,2,23,2,293,2,23,2,30,31,40,31,40,31,449,442,9,6,245,246,45,46,445,442,34,35,34,35,441,442,9,6,22,11,5,6,445,442,34,35,441,442,20,11,22,11,22,11,30,31,42,35,34,35,34,35,34,35,441,442,37,31,40,31,40,31,40,31,40,31,40,31,40,31,3,4,352,353,352,353,7,4,7,4,294,295,7,4,32,33,36,33,36,33,443,440,3,4,7,4,7,4,446,440,36,33,36,33,443,440,3,4,7,4,7,4,446,440,36,33,443,440,3,4,7,4,7,4,32,33,36,33,36,33,36,33,36,33,443,440,36,33,36,33,36,33,36,33,36,33,36,33,36,33,1,2,23,2,262,263,23,2,23,2,23,2,296,297,437,438,40,31,40,31,40,31,1,2,124,290,23,2,9,6,5,6,5,6,5,6,28,2,124,2,346,347,14,15,5,6,5,6,28,2,350,351,23,2,437,438,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,3,4,7,4,264,265,7,4,7,4,7,4,298,299,439,440,36,33,36,33,36,33,3,4,291,292,7,4,3,4,7,4,7,4,7,4,7,4,273,274,348,349,7,4,7,4,7,4,7,4,352,353,7,4,439,440,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,239,2,262,263,220,221,346,347,350,351,23,2,303,304,65,15,237,238,5,6,5,6,13,2,346,347,346,347,1,2,124,2,106,107,110,111,124,2,275,276,270,271,220,221,350,351,350,351,350,351,38,35,441,442,37,31,40,31,40,31,40,31,40,31,40,31,40,31,9,6,247,242,5,6,41,31,40,31,40,31,240,4,264,265,222,223,348,349,352,353,7,4,305,306,58,4,7,4,7,4,7,4,3,4,348,349,348,349,3,4,125,126,108,109,112,113,273,274,7,277,272,4,222,223,352,353,352,353,352,353,39,33,443,440,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,7,4,39,33,36,33,36,33,1,2,23,2,23,2,346,347,286,287,282,283,303,304,62,2,350,351,23,2,312,2,1,2,350,351,346,347,1,2,122,123,114,115,118,119,275,276,270,271,350,351,124,2,262,263,346,347,216,217,30,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,350,351,350,351,30,31,40,31,40,31,3,4,7,4,7,4,348,349,288,289,7,4,305,306,63,4,352,353,7,4,313,314,3,4,352,353,348,349,3,4,7,4,116,117,120,121,7,277,272,4,352,353,273,274,264,265,348,349,218,219,32,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,352,353,352,353,32,33,36,33,36,33,256,2,346,347,346,347,346,347,346,347,23,2,303,304,62,2,220,221,350,351,307,308,28,2,350,351,346,347,1,2,124,2,23,2,315,316,23,2,23,2,315,316,275,276,270,271,346,347,346,347,30,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,23,2,350,351,30,31,40,31,40,31,257,4,348,349,348,349,348,349,348,349,7,4,305,306,63,4,222,223,352,353,7,4,7,4,352,353,348,349,3,4,273,274,7,4,317,318,7,4,7,4,317,318,7,277,272,4,348,349,348,349,32,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,352,353,32,33,36,33,36,33,1,2,23,2,262,263,346,347,262,263,346,347,303,304,62,2,262,263,346,347,350,351,350,351,23,2,23,2,1,2,275,276,270,271,307,308,25,26,216,217,307,308,25,26,346,347,346,347,293,2,30,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,124,290,350,351,30,31,40,31,40,31,3,4,7,4,264,265,348,349,264,265,348,349,305,306,63,4,264,265,348,349,352,353,352,353,7,4,7,4,3,4,7,277,272,4,7,4,27,4,218,219,7,4,27,4,348,349,348,349,294,295,32,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,291,292,352,353,32,33,36,33,36,33,42,35,441,442,9,6,5,6,201,202,13,2,303,304,62,2,350,351,350,351,350,351,346,347,346,347,23,2,1,2,23,2,350,351,23,2,220,221,350,351,282,283,124,2,23,2,350,351,23,2,30,31,40,31,40,31,40,31,40,31,40,31,137,138,448,438,40,31,1,2,346,347,282,283,30,31,40,31,40,31,36,33,443,440,3,4,7,4,7,4,3,4,305,306,63,4,352,353,352,353,352,353,348,349,348,349,7,4,3,4,7,4,352,353,7,4,222,223,352,353,7,4,273,274,7,4,352,353,7,4,32,33,36,33,36,33,36,33,36,33,36,33,139,140,446,440,36,33,3,4,348,349,7,4,32,33,36,33,36,33,40,31,40,31,1,2,350,351,312,2,1,2,296,297,43,2,346,347,350,351,350,351,23,2,350,351,224,225,1,2,293,2,23,2,315,316,350,351,346,347,315,316,275,276,270,271,346,347,23,2,30,31,40,31,40,31,40,31,9,6,5,127,129,130,133,134,5,6,9,6,5,6,45,46,30,31,40,31,40,31,36,33,36,33,3,4,352,353,313,314,3,4,298,299,44,4,348,349,352,353,352,353,7,4,352,353,226,4,3,4,294,295,7,4,317,318,352,353,348,349,317,318,7,277,272,4,348,349,7,4,32,33,36,33,36,33,36,33,3,4,7,128,131,132,135,136,7,4,3,4,7,4,7,4,32,33,36,33,36,33,9,6,5,6,28,2,23,2,307,308,28,2,303,304,62,2,23,2,346,347,346,347,350,351,445,442,441,442,13,2,23,2,224,225,307,308,25,26,23,2,307,308,25,26,23,2,350,351,216,217,30,31,40,31,40,31,40,31,1,2,262,263,141,142,143,2,23,2,1,2,350,351,23,2,30,31,40,31,40,31,3,4,7,4,7,4,7,4,7,4,7,4,305,306,63,4,7,4,348,349,348,349,352,353,446,440,443,440,3,4,7,4,226,4,7,4,27,4,7,4,7,4,27,4,7,4,352,353,218,219,32,33,36,33,36,33,36,33,3,4,264,265,7,4,7,4,7,4,3,4,352,353,7,4,32,33,36,33,36,33,1,2,350,351,23,2,350,351,216,217,220,221,303,304,62,2,23,2,350,351,346,347,445,442,40,31,40,31,1,2,124,290,224,225,23,2,346,347,350,351,220,221,350,351,350,351,346,347,220,221,30,31,40,31,40,31,40,31,1,2,350,351,350,351,350,351,23,2,1,2,23,2,282,283,30,31,40,31,40,31,3,4,352,353,7,4,352,353,218,219,222,223,305,306,63,4,7,4,352,353,348,349,446,440,36,33,36,33,3,4,291,292,226,4,7,4,348,349,352,353,222,223,352,353,352,353,348,349,222,223,32,33,36,33,36,33,36,33,3,4,352,353,352,353,352,353,7,4,3,4,7,4,7,4,32,33,36,33,36,33,1,2,350,351,346,347,346,347,293,2,346,347,303,304,62,2,23,2,282,283,346,347,9,6,201,202,5,6,13,2,350,351,346,347,124,290,220,221,346,347,284,285,346,347,220,221,350,351,346,347,437,438,40,31,40,31,40,31,1,2,350,351,23,2,23,2,346,347,227,2,350,351,350,351,30,31,40,31,40,31,3,4,352,353,348,349,348,349,294,295,348,349,305,306,63,4,7,4,7,4,348,349,3,4,7,4,7,4,3,4,352,353,348,349,291,292,222,223,348,349,7,4,348,349,222,223,352,353,348,349,439,440,36,33,36,33,36,33,3,4,352,353,7,4,7,4,348,349,228,4,352,353,352,353,32,33,36,33,36,33,42,35,441,442,9,6,45,46,5,6,38,35,34,35,34,35,34,35,34,35,441,442,13,2,346,347,284,285,1,2,216,217,23,2,300,2,300,2,300,2,300,2,23,2,346,347,346,347,350,351,9,6,5,6,322,323,448,438,1,2,346,347,23,2,346,347,23,2,1,2,23,2,23,2,30,31,40,31,40,31,36,33,443,440,3,4,7,4,7,4,39,33,36,33,36,33,36,33,36,33,443,440,3,4,348,349,7,4,3,4,218,219,7,4,301,302,301,302,301,302,301,302,7,4,348,349,348,349,352,353,3,4,7,4,298,299,446,440,3,4,348,349,7,4,348,349,7,4,3,4,7,4,7,4,32,33,36,33,36,33,40,31,40,31,1,2,23,2,23,2,437,438,40,31,40,31,40,31,40,31,40,31,239,2,23,2,23,2,9,6,245,246,5,6,445,442,47,48,45,46,64,48,38,35,34,35,34,35,441,442,13,2,346,347,296,297,24,6,28,2,346,347,23,2,346,347,346,347,1,2,346,347,284,285,30,31,40,31,40,31,36,33,36,33,3,4,7,4,7,4,439,440,36,33,36,33,36,33,36,33,36,33,240,4,7,4,7,4,3,4,7,4,7,4,446,440,49,4,7,4,7,4,39,33,36,33,36,33,443,440,3,4,348,349,298,299,12,4,7,4,348,349,7,4,348,349,348,349,3,4,348,349,7,4,32,33,36,33,36,33,40,31,40,31,42,35,34,35,441,442,37,31,40,31,40,31,40,31,40,31,40,31,1,2,350,351,312,2,1,2,23,2,23,2,30,31,1,2,23,2,23,2,30,31,40,31,40,31,40,31,207,2,350,351,296,297,21,2,23,2,262,263,346,347,350,351,312,2,1,2,23,2,312,2,437,438,40,31,40,31,36,33,36,33,36,33,36,33,443,440,36,33,36,33,36,33,36,33,36,33,36,33,3,4,352,353,313,314,3,4,7,4,7,4,32,33,3,4,7,4,7,4,32,33,36,33,36,33,36,33,208,4,352,353,298,299,12,4,7,4,264,265,348,349,352,353,313,314,3,4,7,4,313,314,439,440,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,9,6,29,2,346,347,307,308,28,2,224,225,350,351,30,31,1,2,350,351,350,351,30,31,9,6,5,6,5,6,13,2,224,225,312,2,21,2,124,290,350,351,350,351,350,351,307,308,28,2,346,347,307,308,14,15,41,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,348,349,7,4,7,4,226,4,352,353,32,33,3,4,352,353,352,353,32,33,3,4,7,4,7,4,3,4,226,4,313,314,12,4,291,292,352,353,352,353,352,353,7,4,7,4,348,349,7,4,7,4,39,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,23,2,350,351,23,2,23,2,23,2,262,263,30,31,256,2,350,351,350,351,30,31,1,2,350,351,23,2,28,2,350,351,307,308,14,15,13,2,23,2,23,2,23,2,23,2,346,347,262,263,23,2,346,347,30,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,352,353,7,4,7,4,7,4,264,265,32,33,257,4,352,353,352,353,32,33,3,4,352,353,7,4,7,4,352,353,7,4,7,4,3,4,7,4,7,4,7,4,7,4,348,349,264,265,7,4,348,349,32,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,284,285,23,2,23,2,220,221,350,351,350,351,437,438,1,2,346,347,312,2,437,438,1,2,124,290,350,351,23,2,346,347,23,2,346,347,1,2,224,225,346,347,23,2,220,221,346,347,350,351,284,285,346,347,30,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,7,4,7,4,222,223,352,353,352,353,439,440,3,4,348,349,313,314,439,440,3,4,291,292,352,353,7,4,348,349,7,4,348,349,3,4,226,4,348,349,7,4,222,223,348,349,352,353,7,4,348,349,32,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,42,35,34,35,34,35,441,442,9,6,229,230,45,46,9,6,29,2,350,351,307,308,14,15,13,2,346,347,312,2,350,351,23,2,23,2,350,351,319,2,300,2,300,2,300,2,300,2,300,2,300,2,300,2,300,2,30,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,443,440,3,4,7,4,7,4,3,4,7,4,352,353,7,4,7,4,3,4,348,349,313,314,352,353,7,4,7,4,352,353,320,302,301,302,301,302,301,302,301,302,301,302,301,302,301,302,301,302,32,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,9,6,29,2,216,217,124,2,28,2,220,221,220,221,23,2,346,347,28,2,350,351,307,308,14,15,38,35,34,35,441,442,20,11,22,11,22,11,22,11,22,11,22,11,22,11,22,11,248,249,30,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,218,219,273,274,7,4,222,223,222,223,7,4,348,349,7,4,352,353,7,4,7,4,39,33,36,33,443,440,3,4,7,4,7,4,7,4,7,4,7,4,7,4,7,4,7,4,32,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,350,351,23,2,275,276,270,271,350,351,23,2,350,351,23,2,346,347,216,217,286,287,23,2,30,31,40,31,40,31,1,2,350,351,23,2,346,347,224,225,23,2,350,351,286,287,346,347,30,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,352,353,7,4,7,277,272,4,352,353,7,4,352,353,7,4,348,349,218,219,288,289,7,4,32,33,36,33,36,33,3,4,352,353,7,4,348,349,226,4,7,4,352,353,288,289,348,349,32,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,346,347,346,347,350,351,350,351,23,2,220,221,220,221,300,2,300,2,300,2,300,2,346,347,437,438,40,31,40,31,42,35,34,35,34,35,441,442,13,2,346,347,350,351,23,2,23,2,437,438,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,348,349,348,349,352,353,352,353,7,4,222,223,222,223,301,302,301,302,301,302,301,302,348,349,439,440,36,33,36,33,36,33,36,33,36,33,443,440,3,4,348,349,352,353,7,4,7,4,439,440,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,42,35,34,35,34,35,441,442,13,2,350,351,350,351,286,287,350,351,20,11,22,11,22,11,65,15,14,15,5,6,203,204,41,31,40,31,40,31,40,31,42,35,34,35,34,35,34,35,441,442,37,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,443,440,3,4,352,353,352,353,288,289,352,353,3,4,7,4,7,4,58,4,7,4,7,4,7,4,39,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,443,440,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,42,35,34,35,34,35,34,35,441,442,13,2,23,2,296,297,43,2,350,351,293,2,346,347,30,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,443,440,3,4,7,4,298,299,44,4,352,353,294,295,348,349,32,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,350,351,303,304,62,2,293,2,23,2,262,263,437,438,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,352,353,305,306,63,4,294,295,7,4,264,265,439,440,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,262,263,350,351,445,442,34,35,34,35,441,442,37,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,264,265,352,353,446,440,36,33,36,33,443,440,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,42,35,34,35,441,442,37,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,443,440,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33

Note that the TMX map is 80x80 in size.

Screenshot from within DGEngine

{
...
 "height":80,
 "width":80
 "layers":[
        {
         "data":[40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,9,6,5,6,5,6,41,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,9,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,41,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,7,4,39,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,7,4,7,4,7,4,7,4,7,4,7,4,7,4,39,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,350,351,23,2,30,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,23,2,286,287,346,347,262,263,23,2,346,347,346,347,216,217,30,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,352,353,7,4,32,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,288,289,348,349,264,265,7,4,348,349,348,349,218,219,32,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,224,225,350,351,30,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,350,351,350,351,346,347,23,2,124,290,262,263,23,2,350,351,30,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,226,4,352,353,32,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,352,353,352,353,348,349,7,4,291,292,264,265,7,4,352,353,32,33,36,33,36,33,40,31,40,31,9,6,5,6,197,198,5,6,5,6,241,242,245,246,448,438,40,31,40,31,40,31,40,31,319,2,300,2,300,2,30,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,350,351,350,351,23,2,216,217,350,351,346,347,346,347,346,347,30,31,40,31,40,31,36,33,36,33,3,4,7,4,199,200,7,4,7,4,7,4,7,4,446,440,36,33,36,33,36,33,36,33,320,302,301,302,301,302,32,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,352,353,352,353,7,4,218,219,352,353,348,349,348,349,348,349,32,33,36,33,36,33,40,31,40,31,1,2,346,347,23,2,23,2,224,225,262,263,350,351,9,6,5,6,9,6,5,6,5,6,20,11,22,11,22,11,30,31,40,31,40,31,40,31,40,31,9,6,5,6,243,244,237,238,5,6,5,6,28,2,350,351,262,263,220,221,346,347,124,290,23,2,23,2,216,217,437,438,40,31,40,31,36,33,36,33,3,4,348,349,7,4,7,4,226,4,264,265,352,353,3,4,7,4,3,4,7,4,7,4,3,4,7,4,7,4,32,33,36,33,36,33,36,33,36,33,3,4,7,4,7,4,7,4,7,4,7,4,7,4,352,353,264,265,222,223,348,349,291,292,7,4,7,4,218,219,439,440,36,33,36,33,40,31,40,31,1,2,284,285,346,347,220,221,350,351,23,2,296,297,1,2,312,2,1,2,346,347,312,2,1,2,262,263,312,2,437,438,40,31,40,31,40,31,40,31,1,2,286,287,262,263,346,347,293,2,23,2,23,2,346,347,23,2,284,285,346,347,9,6,45,46,5,6,445,442,37,31,40,31,40,31,36,33,36,33,3,4,7,4,348,349,222,223,352,353,7,4,298,299,3,4,313,314,3,4,348,349,313,314,3,4,264,265,313,314,439,440,36,33,36,33,36,33,36,33,3,4,288,289,264,265,348,349,294,295,7,4,7,4,348,349,7,4,7,4,348,349,3,4,7,4,7,4,446,440,36,33,36,33,36,33,40,31,40,31,1,2,224,225,346,347,350,351,216,217,346,347,296,297,21,2,307,308,28,2,350,351,307,308,28,2,23,2,307,308,14,15,41,31,40,31,40,31,40,31,1,2,346,347,346,347,346,347,350,351,350,351,350,351,216,217,262,263,350,351,23,2,1,2,350,351,23,2,30,31,40,31,40,31,40,31,36,33,36,33,3,4,226,4,348,349,352,353,218,219,348,349,298,299,12,4,7,4,7,4,352,353,7,4,7,4,7,4,7,4,7,4,39,33,36,33,36,33,36,33,3,4,348,349,348,349,348,349,352,353,352,353,352,353,218,219,264,265,352,353,7,4,3,4,352,353,7,4,32,33,36,33,36,33,36,33,40,31,40,31,1,2,350,351,224,225,350,351,346,347,23,2,216,217,1,2,23,2,346,347,350,351,346,347,23,2,293,2,23,2,220,221,437,438,40,31,40,31,40,31,1,2,346,347,346,347,346,347,23,2,23,2,350,351,23,2,262,263,350,351,346,347,1,2,350,351,350,351,30,31,40,31,40,31,40,31,36,33,36,33,3,4,352,353,226,4,352,353,348,349,7,4,218,219,3,4,7,4,348,349,352,353,348,349,7,4,294,295,7,4,222,223,439,440,36,33,36,33,36,33,3,4,348,349,348,349,348,349,7,4,7,4,352,353,7,4,264,265,352,353,348,349,3,4,352,353,352,353,32,33,36,33,36,33,36,33,40,31,40,31,42,35,34,35,34,35,34,35,441,442,13,2,350,351,207,2,300,2,300,2,300,2,300,2,220,221,293,2,350,351,346,347,9,6,5,6,5,6,41,31,1,2,350,351,346,347,350,351,220,221,300,2,300,2,300,2,300,2,300,2,300,2,1,2,23,2,350,351,437,438,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,443,440,3,4,352,353,208,4,301,302,301,302,301,302,301,302,222,223,294,295,352,353,348,349,3,4,7,4,7,4,39,33,3,4,352,353,348,349,352,353,222,223,301,302,301,302,301,302,301,302,301,302,301,302,3,4,7,4,352,353,439,440,36,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,42,35,34,35,34,35,441,442,47,48,45,46,64,48,445,442,34,35,34,35,441,442,13,2,224,225,224,225,437,438,42,35,441,442,9,6,45,46,197,198,445,442,20,11,22,11,22,11,22,11,22,11,38,35,34,35,441,442,37,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,443,440,49,4,7,4,7,4,446,440,36,33,36,33,443,440,3,4,226,4,226,4,439,440,36,33,443,440,3,4,7,4,199,200,446,440,3,4,7,4,7,4,7,4,7,4,39,33,36,33,443,440,36,33,36,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,9,6,29,2,262,263,23,2,9,6,5,6,241,242,203,204,28,2,220,221,350,351,9,6,5,6,5,6,28,2,350,351,23,2,30,31,1,2,346,347,216,217,350,351,350,351,30,31,40,31,40,31,40,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,264,265,7,4,3,4,7,4,7,4,7,4,7,4,222,223,352,353,3,4,7,4,7,4,7,4,352,353,7,4,32,33,3,4,348,349,218,219,352,353,352,353,32,33,36,33,36,33,36,33,36,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,235,2,346,347,346,347,346,347,1,2,346,347,346,347,346,347,350,351,350,351,296,297,1,2,262,263,220,221,216,217,346,347,350,351,30,31,1,2,350,351,350,351,346,347,23,2,30,31,40,31,40,31,40,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,236,4,348,349,348,349,348,349,3,4,348,349,348,349,348,349,352,353,352,353,298,299,3,4,264,265,222,223,218,219,348,349,352,353,32,33,3,4,352,353,352,353,348,349,7,4,32,33,36,33,36,33,36,33,36,33,36,33,36,33,9,6,5,6,203,204,5,6,5,6,5,6,5,6,41,31,40,31,40,31,207,2,23,2,220,221,282,283,43,2,346,347,23,2,346,347,300,2,300,2,296,297,21,2,282,283,300,2,300,2,300,2,300,2,30,31,235,2,350,351,346,347,350,351,350,351,437,438,40,31,40,31,40,31,40,31,40,31,40,31,3,4,7,4,7,4,7,4,7,4,7,4,7,4,39,33,36,33,36,33,208,4,7,4,222,223,7,4,44,4,348,349,7,4,348,349,301,302,301,302,298,299,12,4,7,4,301,302,301,302,301,302,301,302,32,33,236,4,352,353,348,349,352,353,352,353,439,440,36,33,36,33,36,33,36,33,36,33,36,33,1,2,350,351,350,351,23,2,23,2,293,2,23,2,30,31,40,31,40,31,449,442,9,6,245,246,45,46,445,442,34,35,34,35,441,442,9,6,22,11,5,6,445,442,34,35,441,442,20,11,22,11,22,11,30,31,42,35,34,35,34,35,34,35,441,442,37,31,40,31,40,31,40,31,40,31,40,31,40,31,3,4,352,353,352,353,7,4,7,4,294,295,7,4,32,33,36,33,36,33,443,440,3,4,7,4,7,4,446,440,36,33,36,33,443,440,3,4,7,4,7,4,446,440,36,33,443,440,3,4,7,4,7,4,32,33,36,33,36,33,36,33,36,33,443,440,36,33,36,33,36,33,36,33,36,33,36,33,36,33,1,2,23,2,262,263,23,2,23,2,23,2,296,297,437,438,40,31,40,31,40,31,1,2,124,290,23,2,9,6,5,6,5,6,5,6,28,2,124,2,346,347,14,15,5,6,5,6,28,2,350,351,23,2,437,438,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,3,4,7,4,264,265,7,4,7,4,7,4,298,299,439,440,36,33,36,33,36,33,3,4,291,292,7,4,3,4,7,4,7,4,7,4,7,4,273,274,348,349,7,4,7,4,7,4,7,4,352,353,7,4,439,440,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,239,2,262,263,220,221,346,347,350,351,23,2,303,304,65,15,237,238,5,6,5,6,13,2,346,347,346,347,1,2,124,2,106,107,110,111,124,2,275,276,270,271,220,221,350,351,350,351,350,351,38,35,441,442,37,31,40,31,40,31,40,31,40,31,40,31,40,31,9,6,247,242,5,6,41,31,40,31,40,31,240,4,264,265,222,223,348,349,352,353,7,4,305,306,58,4,7,4,7,4,7,4,3,4,348,349,348,349,3,4,125,126,108,109,112,113,273,274,7,277,272,4,222,223,352,353,352,353,352,353,39,33,443,440,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,7,4,39,33,36,33,36,33,1,2,23,2,23,2,346,347,286,287,282,283,303,304,62,2,350,351,23,2,312,2,1,2,350,351,346,347,1,2,122,123,114,115,118,119,275,276,270,271,350,351,124,2,262,263,346,347,216,217,30,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,350,351,350,351,30,31,40,31,40,31,3,4,7,4,7,4,348,349,288,289,7,4,305,306,63,4,352,353,7,4,313,314,3,4,352,353,348,349,3,4,7,4,116,117,120,121,7,277,272,4,352,353,273,274,264,265,348,349,218,219,32,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,352,353,352,353,32,33,36,33,36,33,256,2,346,347,346,347,346,347,346,347,23,2,303,304,62,2,220,221,350,351,307,308,28,2,350,351,346,347,1,2,124,2,23,2,315,316,23,2,23,2,315,316,275,276,270,271,346,347,346,347,30,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,23,2,350,351,30,31,40,31,40,31,257,4,348,349,348,349,348,349,348,349,7,4,305,306,63,4,222,223,352,353,7,4,7,4,352,353,348,349,3,4,273,274,7,4,317,318,7,4,7,4,317,318,7,277,272,4,348,349,348,349,32,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,352,353,32,33,36,33,36,33,1,2,23,2,262,263,346,347,262,263,346,347,303,304,62,2,262,263,346,347,350,351,350,351,23,2,23,2,1,2,275,276,270,271,307,308,25,26,216,217,307,308,25,26,346,347,346,347,293,2,30,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,124,290,350,351,30,31,40,31,40,31,3,4,7,4,264,265,348,349,264,265,348,349,305,306,63,4,264,265,348,349,352,353,352,353,7,4,7,4,3,4,7,277,272,4,7,4,27,4,218,219,7,4,27,4,348,349,348,349,294,295,32,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,291,292,352,353,32,33,36,33,36,33,42,35,441,442,9,6,5,6,201,202,13,2,303,304,62,2,350,351,350,351,350,351,346,347,346,347,23,2,1,2,23,2,350,351,23,2,220,221,350,351,282,283,124,2,23,2,350,351,23,2,30,31,40,31,40,31,40,31,40,31,40,31,137,138,448,438,40,31,1,2,346,347,282,283,30,31,40,31,40,31,36,33,443,440,3,4,7,4,7,4,3,4,305,306,63,4,352,353,352,353,352,353,348,349,348,349,7,4,3,4,7,4,352,353,7,4,222,223,352,353,7,4,273,274,7,4,352,353,7,4,32,33,36,33,36,33,36,33,36,33,36,33,139,140,446,440,36,33,3,4,348,349,7,4,32,33,36,33,36,33,40,31,40,31,1,2,350,351,312,2,1,2,296,297,43,2,346,347,350,351,350,351,23,2,350,351,224,225,1,2,293,2,23,2,315,316,350,351,346,347,315,316,275,276,270,271,346,347,23,2,30,31,40,31,40,31,40,31,9,6,5,127,129,130,133,134,5,6,9,6,5,6,45,46,30,31,40,31,40,31,36,33,36,33,3,4,352,353,313,314,3,4,298,299,44,4,348,349,352,353,352,353,7,4,352,353,226,4,3,4,294,295,7,4,317,318,352,353,348,349,317,318,7,277,272,4,348,349,7,4,32,33,36,33,36,33,36,33,3,4,7,128,131,132,135,136,7,4,3,4,7,4,7,4,32,33,36,33,36,33,9,6,5,6,28,2,23,2,307,308,28,2,303,304,62,2,23,2,346,347,346,347,350,351,445,442,441,442,13,2,23,2,224,225,307,308,25,26,23,2,307,308,25,26,23,2,350,351,216,217,30,31,40,31,40,31,40,31,1,2,262,263,141,142,143,2,23,2,1,2,350,351,23,2,30,31,40,31,40,31,3,4,7,4,7,4,7,4,7,4,7,4,305,306,63,4,7,4,348,349,348,349,352,353,446,440,443,440,3,4,7,4,226,4,7,4,27,4,7,4,7,4,27,4,7,4,352,353,218,219,32,33,36,33,36,33,36,33,3,4,264,265,7,4,7,4,7,4,3,4,352,353,7,4,32,33,36,33,36,33,1,2,350,351,23,2,350,351,216,217,220,221,303,304,62,2,23,2,350,351,346,347,445,442,40,31,40,31,1,2,124,290,224,225,23,2,346,347,350,351,220,221,350,351,350,351,346,347,220,221,30,31,40,31,40,31,40,31,1,2,350,351,350,351,350,351,23,2,1,2,23,2,282,283,30,31,40,31,40,31,3,4,352,353,7,4,352,353,218,219,222,223,305,306,63,4,7,4,352,353,348,349,446,440,36,33,36,33,3,4,291,292,226,4,7,4,348,349,352,353,222,223,352,353,352,353,348,349,222,223,32,33,36,33,36,33,36,33,3,4,352,353,352,353,352,353,7,4,3,4,7,4,7,4,32,33,36,33,36,33,1,2,350,351,346,347,346,347,293,2,346,347,303,304,62,2,23,2,282,283,346,347,9,6,201,202,5,6,13,2,350,351,346,347,124,290,220,221,346,347,284,285,346,347,220,221,350,351,346,347,437,438,40,31,40,31,40,31,1,2,350,351,23,2,23,2,346,347,227,2,350,351,350,351,30,31,40,31,40,31,3,4,352,353,348,349,348,349,294,295,348,349,305,306,63,4,7,4,7,4,348,349,3,4,7,4,7,4,3,4,352,353,348,349,291,292,222,223,348,349,7,4,348,349,222,223,352,353,348,349,439,440,36,33,36,33,36,33,3,4,352,353,7,4,7,4,348,349,228,4,352,353,352,353,32,33,36,33,36,33,42,35,441,442,9,6,45,46,5,6,38,35,34,35,34,35,34,35,34,35,441,442,13,2,346,347,284,285,1,2,216,217,23,2,300,2,300,2,300,2,300,2,23,2,346,347,346,347,350,351,9,6,5,6,322,323,448,438,1,2,346,347,23,2,346,347,23,2,1,2,23,2,23,2,30,31,40,31,40,31,36,33,443,440,3,4,7,4,7,4,39,33,36,33,36,33,36,33,36,33,443,440,3,4,348,349,7,4,3,4,218,219,7,4,301,302,301,302,301,302,301,302,7,4,348,349,348,349,352,353,3,4,7,4,298,299,446,440,3,4,348,349,7,4,348,349,7,4,3,4,7,4,7,4,32,33,36,33,36,33,40,31,40,31,1,2,23,2,23,2,437,438,40,31,40,31,40,31,40,31,40,31,239,2,23,2,23,2,9,6,245,246,5,6,445,442,47,48,45,46,64,48,38,35,34,35,34,35,441,442,13,2,346,347,296,297,24,6,28,2,346,347,23,2,346,347,346,347,1,2,346,347,284,285,30,31,40,31,40,31,36,33,36,33,3,4,7,4,7,4,439,440,36,33,36,33,36,33,36,33,36,33,240,4,7,4,7,4,3,4,7,4,7,4,446,440,49,4,7,4,7,4,39,33,36,33,36,33,443,440,3,4,348,349,298,299,12,4,7,4,348,349,7,4,348,349,348,349,3,4,348,349,7,4,32,33,36,33,36,33,40,31,40,31,42,35,34,35,441,442,37,31,40,31,40,31,40,31,40,31,40,31,1,2,350,351,312,2,1,2,23,2,23,2,30,31,1,2,23,2,23,2,30,31,40,31,40,31,40,31,207,2,350,351,296,297,21,2,23,2,262,263,346,347,350,351,312,2,1,2,23,2,312,2,437,438,40,31,40,31,36,33,36,33,36,33,36,33,443,440,36,33,36,33,36,33,36,33,36,33,36,33,3,4,352,353,313,314,3,4,7,4,7,4,32,33,3,4,7,4,7,4,32,33,36,33,36,33,36,33,208,4,352,353,298,299,12,4,7,4,264,265,348,349,352,353,313,314,3,4,7,4,313,314,439,440,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,9,6,29,2,346,347,307,308,28,2,224,225,350,351,30,31,1,2,350,351,350,351,30,31,9,6,5,6,5,6,13,2,224,225,312,2,21,2,124,290,350,351,350,351,350,351,307,308,28,2,346,347,307,308,14,15,41,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,348,349,7,4,7,4,226,4,352,353,32,33,3,4,352,353,352,353,32,33,3,4,7,4,7,4,3,4,226,4,313,314,12,4,291,292,352,353,352,353,352,353,7,4,7,4,348,349,7,4,7,4,39,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,23,2,350,351,23,2,23,2,23,2,262,263,30,31,256,2,350,351,350,351,30,31,1,2,350,351,23,2,28,2,350,351,307,308,14,15,13,2,23,2,23,2,23,2,23,2,346,347,262,263,23,2,346,347,30,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,352,353,7,4,7,4,7,4,264,265,32,33,257,4,352,353,352,353,32,33,3,4,352,353,7,4,7,4,352,353,7,4,7,4,3,4,7,4,7,4,7,4,7,4,348,349,264,265,7,4,348,349,32,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,284,285,23,2,23,2,220,221,350,351,350,351,437,438,1,2,346,347,312,2,437,438,1,2,124,290,350,351,23,2,346,347,23,2,346,347,1,2,224,225,346,347,23,2,220,221,346,347,350,351,284,285,346,347,30,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,7,4,7,4,222,223,352,353,352,353,439,440,3,4,348,349,313,314,439,440,3,4,291,292,352,353,7,4,348,349,7,4,348,349,3,4,226,4,348,349,7,4,222,223,348,349,352,353,7,4,348,349,32,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,42,35,34,35,34,35,441,442,9,6,229,230,45,46,9,6,29,2,350,351,307,308,14,15,13,2,346,347,312,2,350,351,23,2,23,2,350,351,319,2,300,2,300,2,300,2,300,2,300,2,300,2,300,2,300,2,30,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,443,440,3,4,7,4,7,4,3,4,7,4,352,353,7,4,7,4,3,4,348,349,313,314,352,353,7,4,7,4,352,353,320,302,301,302,301,302,301,302,301,302,301,302,301,302,301,302,301,302,32,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,9,6,29,2,216,217,124,2,28,2,220,221,220,221,23,2,346,347,28,2,350,351,307,308,14,15,38,35,34,35,441,442,20,11,22,11,22,11,22,11,22,11,22,11,22,11,22,11,248,249,30,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,7,4,218,219,273,274,7,4,222,223,222,223,7,4,348,349,7,4,352,353,7,4,7,4,39,33,36,33,443,440,3,4,7,4,7,4,7,4,7,4,7,4,7,4,7,4,7,4,32,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,350,351,23,2,275,276,270,271,350,351,23,2,350,351,23,2,346,347,216,217,286,287,23,2,30,31,40,31,40,31,1,2,350,351,23,2,346,347,224,225,23,2,350,351,286,287,346,347,30,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,352,353,7,4,7,277,272,4,352,353,7,4,352,353,7,4,348,349,218,219,288,289,7,4,32,33,36,33,36,33,3,4,352,353,7,4,348,349,226,4,7,4,352,353,288,289,348,349,32,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,346,347,346,347,350,351,350,351,23,2,220,221,220,221,300,2,300,2,300,2,300,2,346,347,437,438,40,31,40,31,42,35,34,35,34,35,441,442,13,2,346,347,350,351,23,2,23,2,437,438,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,348,349,348,349,352,353,352,353,7,4,222,223,222,223,301,302,301,302,301,302,301,302,348,349,439,440,36,33,36,33,36,33,36,33,36,33,443,440,3,4,348,349,352,353,7,4,7,4,439,440,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,42,35,34,35,34,35,441,442,13,2,350,351,350,351,286,287,350,351,20,11,22,11,22,11,65,15,14,15,5,6,203,204,41,31,40,31,40,31,40,31,42,35,34,35,34,35,34,35,441,442,37,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,443,440,3,4,352,353,352,353,288,289,352,353,3,4,7,4,7,4,58,4,7,4,7,4,7,4,39,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,443,440,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,42,35,34,35,34,35,34,35,441,442,13,2,23,2,296,297,43,2,350,351,293,2,346,347,30,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,443,440,3,4,7,4,298,299,44,4,352,353,294,295,348,349,32,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,350,351,303,304,62,2,293,2,23,2,262,263,437,438,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,352,353,305,306,63,4,294,295,7,4,264,265,439,440,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,1,2,262,263,350,351,445,442,34,35,34,35,441,442,37,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,3,4,264,265,352,353,446,440,36,33,36,33,443,440,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,42,35,34,35,441,442,37,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,443,440,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,40,31,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33,36,33],
         "height":80,
         "width":80,
...

Note: The l1 tool has extensive tests to ensure that it implements the drlg algorithms correctly. At current, one edge case has been discovered where the output of l1 differs from the original output of Diablo 1. Compare for instance the output of the original and the reimplementation for seed 2588. Notice, that in the original map, there exist an area that is unreachable by players. This area is not reproduced in the reimplementation (but probably should be?). Therefore, the seed changes, and subsequent randomization of floor tiles etc change in the map. The reason for this oddity is that the original drlg algorithm contained a couple of out-of-bounds errors, which we decided to fix in the rewrite. However, the intention is to make it possible to also generate these broken maps, so that the output is identical to the original. At that point, we will run the original drlg algorithm for each of the 2^32 unique seeds and compare its output with that of the rewrite. Once they are identical for all seeds, the l1 tools is considered done.

Final note: The default output of the l1 tool is tile ID numbers (sometimes referred to as squares). Given the -dpieces flag, the l1 tool outputs dungeon piece ID numbers (sometimes referred to as pillars).

Cheers!
/u & i

Game speed, character teleports rather than walking

With A* implemented, exploring town is now possible. However, the character seems to be teleporting rather than walking since the game speed is so high. Are you also experiencing this issue?

Note, the following recording was done on rev 40afab3.

Game speed

Discord?

@dgengin do you have a discord to talk about this project. I would be very interested in helping out.

any demo or screenshot?

Hi I just notice your work.
What is the difference from freediablo?
Any video demo or screenshot could show us how the project is going.
Or at least give us a discription .
Thanks

Crash when walking on dungeon level 1

core dump

on revision 4df29d1

https://media.giphy.com/media/l4FGIY0BFuqi7i8UM/giphy.gif

           PID: 28778 (DGEngine)
           UID: 1000 (u)
           GID: 100 (users)
        Signal: 11 (SEGV)
     Timestamp: Wed 2017-04-26 21:53:54 CEST (39s ago)
  Command Line: ./DGEngine gamefiles/
    Executable: /home/u/Desktop/diablo/DGEngine/DGEngine
 Control Group: /user.slice/user-1000.slice/session-c1.scope
          Unit: session-c1.scope
         Slice: user-1000.slice
       Session: c1
     Owner UID: 1000 (u)
       Boot ID: 800fc8d91bef42cfb8c89618ac4cd02c
    Machine ID: 28a33732c4064f1791505da65cf095d5
      Hostname: x220
       Storage: /var/lib/systemd/coredump/core.DGEngine.1000.800fc8d91bef42cfb8c89618ac4cd02c.28778.1493236434000000000000.lz4
       Message: Process 28778 (DGEngine) of user 1000 dumped core.
                
                Stack trace of thread 28778:
                #0  0x0000000000812cc5 _ZN20ActPlayerMoveToClick7executeER4Game (DGEngine)
                #1  0x0000000000891325 _ZN14ActIfCondition11ifConditionER4Gameb (DGEngine)
                #2  0x00000000008914bd _ZN14ActIfCondition7executeER4Game (DGEngine)
                #3  0x0000000000777c27 _ZN5Event6updateER4Game (DGEngine)
                #4  0x000000000077ed09 _ZN12EventManager6updateER4Game (DGEngine)
                #5  0x000000000077c2ea _ZN4Game12updateEventsEv (DGEngine)
                #6  0x000000000077b756 _ZN4Game4playEv (DGEngine)
                #7  0x0000000000759e58 main (DGEngine)
                #8  0x00007fc6cc45d511 __libc_start_main (libc.so.6)
                #9  0x00000000007599ea _start (DGEngine)
                
                Stack trace of thread 28783:
                #0  0x00007fc6cc015756 pthread_cond_wait@@GLIBC_2.3.2 (libpthread.so.0)
                #1  0x00007fc6bf7cb4c8 pa_threaded_mainloop_wait (libpulse.so.0)
                #2  0x00007fc6caea8429 n/a (libopenal.so.1)
                #3  0x00007fc6caead6c7 n/a (libopenal.so.1)
                #4  0x00007fc6cc00f2e7 start_thread (libpthread.so.0)
                #5  0x00007fc6cc52954f __clone (libc.so.6)
                
                Stack trace of thread 28782:
                #0  0x00007fc6cc51f67d poll (libc.so.6)
                #1  0x00007fc6bf7caee1 n/a (libpulse.so.0)
                #2  0x00007fc6bf7bc6f1 pa_mainloop_poll (libpulse.so.0)
                #3  0x00007fc6bf7bcd8e pa_mainloop_iterate (libpulse.so.0)
                #4  0x00007fc6bf7bce40 pa_mainloop_run (libpulse.so.0)
                #5  0x00007fc6bf7cae29 n/a (libpulse.so.0)
                #6  0x00007fc6bf568fe8 n/a (libpulsecommon-10.0.so)
                #7  0x00007fc6cc00f2e7 start_thread (libpthread.so.0)
                #8  0x00007fc6cc52954f __clone (libc.so.6)
                
                Stack trace of thread 28794:
                #0  0x00007fc6cc4f742d __nanosleep (libc.so.6)
                #1  0x00007fc6cd949190 n/a (libsfml-system.so.2.4)
                #2  0x00007fc6cd0a2063 _ZN2sf11SoundStream10streamDataEv (libsfml-audio.so.2.4)
                #3  0x00007fc6cd9491e8 n/a (libsfml-system.so.2.4)
                #4  0x00007fc6cc00f2e7 start_thread (libpthread.so.0)
                #5  0x00007fc6cc52954f __clone (libc.so.6)

GNU gdb (GDB) 7.12.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /home/u/Desktop/diablo/DGEngine/DGEngine...(no debugging symbols found)...done.
[New LWP 28778]
[New LWP 28783]
[New LWP 28782]
[New LWP 28794]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
Core was generated by `./DGEngine gamefiles/'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0000000000812cc5 in ActPlayerMoveToClick::execute(Game&) ()
[Current thread is 1 (Thread 0x7fc6cdf3a740 (LWP 28778))]
(gdb) bt
#0  0x0000000000812cc5 in ActPlayerMoveToClick::execute(Game&) ()
#1  0x0000000000891325 in ActIfCondition::ifCondition(Game&, bool) ()
#2  0x00000000008914bd in ActIfCondition::execute(Game&) ()
#3  0x0000000000777c27 in Event::update(Game&) ()
#4  0x000000000077ed09 in EventManager::update(Game&) ()
#5  0x000000000077c2ea in Game::updateEvents() ()
#6  0x000000000077b756 in Game::play() ()
#7  0x0000000000759e58 in main ()

setColor and getColor deprecated in SFML version 2.4.0

From http://www.sfml-dev.org/documentation/2.4.0/deprecated.php

Member sf::Text::getColor () const

There is now fill and outline colors instead of a single global color. Use getFillColor() or getOutlineColor() instead.

Member sf::Text::setColor (const Color &color)

There is now fill and outline colors instead of a single global color. Use setFillColor() or setOutlineColor() instead.

Warnings from compiling rev 40afab3.

In file included from /home/u/Desktop/DGEngine/src/StringText.cpp:1:0:
/home/u/Desktop/DGEngine/src/StringText.h: In member function ‘virtual void StringText::setColor(const sf::Color&)’:
/home/u/Desktop/DGEngine/src/StringText.h:43:69: warning: ‘void sf::Text::setColor(const sf::Color&)’ is deprecated [-Wdeprecated-declarations]
  virtual void setColor(const sf::Color& color) { text.setColor(color); }
                                                                     ^
In file included from /usr/include/SFML/Graphics.hpp:51:0,
                 from /home/u/Desktop/DGEngine/src/StringText.h:3,
                 from /home/u/Desktop/DGEngine/src/StringText.cpp:1:
/usr/include/SFML/Graphics/Text.hpp:177:26: note: declared here
     SFML_DEPRECATED void setColor(const Color& color);
                          ^~~~~~~~
In file included from /home/u/Desktop/DGEngine/src/StringText.cpp:1:0:
/home/u/Desktop/DGEngine/src/StringText.h: In member function ‘const sf::Color& StringText::getColor() const’:
/home/u/Desktop/DGEngine/src/StringText.h:49:59: warning: ‘const sf::Color& sf::Text::getColor() const’ is deprecated [-Wdeprecated-declarations]
  const sf::Color& getColor() const { return text.getColor(); }
                                                           ^
In file included from /usr/include/SFML/Graphics.hpp:51:0,
                 from /home/u/Desktop/DGEngine/src/StringText.h:3,
                 from /home/u/Desktop/DGEngine/src/StringText.cpp:1:
/usr/include/SFML/Graphics/Text.hpp:285:34: note: declared here
     SFML_DEPRECATED const Color& getColor() const;
                                  ^~~~~~~~

List of files using getColor and/or setColor:

  • src/Parser/ParseAction.cpp
  • src/Parser/ParseButton.cpp
  • src/Parser/ParseMenu.cpp
  • src/Parser/ParseMenuButton.cpp
  • src/Parser/ParseText.cpp
  • src/StringText.cpp

Original font sizes

From the Contributing wiki page:

Font char sizes

Some CEL fonts use .bin files that say the number of pixels each char takes when drawing and another that maps each CEL frame to each ASCII char.
These files are in res/level

The bigtgoldSize.bin file specifies the size for the font used in the quest's scrolling texts.
These sizes are not correct and that's why the texts are truncated when displayed in game.

The first 2 bytes in this file are for line break and space size. Then comes the size for each ASCII letter (256). The tedious work to be done here is to compare the scrolling texts in the original game and make sure each char has the exact same size. One can use a hex editor to edit bigtgoldSize.bin.

For each font, there exist a dedicated array which maps from frame number to character width (note, the character width may be distinct from the frame width, which is 13 for every smaltext.cel frame, 22 for every medtexts.cel frame, and 46 for every bigtgold.cel frame).

These arrays are contained within the Diablo executable, and for version 1.09 and 1.09b, the virtual addresses of these arrays are 0x4794a4, 0x47f0f8, and 0x47a50c for smaltext.cel, medtexts.cel and bigtgold.cel, respectively.

I hope this may help resolve the font rendering issues. Let us know if anything remains unclear, in which case we'll make sure to update the notes on sanctuary.

Cheers /u

Loading... message never fades

If you start a new game, and enter the game menu to press Load, the "Loading..." text is displayed, and this text never goes away. You can still walk around in town and the game works well, just that the text never fades.

2019-05-15-205141_800x600_scrot

Fix lighting

A new lighting implementation was added that uses shaders. An array is passed to the shader with the position of the light, intensity and radius (with the closest lights to the player). It's working well for just 1 light (the player's, which is always centered in the texture) but not for floor lights, such as the ones in D1's caves:

d1_lighting

The shader is loaded from ShaderManager.cpp - the Level shader levelText. and the primitives passed to it are set in Level.cpp's draw function:

	sf::RenderStates states(sf::RenderStates::Default);
	if (shader != nullptr)
	{
		states.shader = shader;
		shader->setUniform("elapsedTime", game.getTotalElapsedTime().asSeconds());
		if (hasMouseInside == true)
		{
			shader->setUniform("mousePosition", sf::Glsl::Vec2(
				(game.MousePositionf().x - surface.Position().x) /
				surface.Size().x,
				(game.MousePositionf().y - surface.Position().y) /
				surface.Size().y
			));
		}
		shader->setUniform("textureSize", sf::Glsl::Vec2(
			surface.Size().x,
			surface.Size().y
		));

		shader->setUniform("visibleRect", sf::Glsl::Vec4(
			surface.visibleRect.left,
			surface.visibleRect.top,
			surface.visibleRect.width,
			surface.visibleRect.height
		));

		shader->setUniform("numberOfLights", (int)map.lightArray.size());
		shader->setUniformArray("lights", map.lightArray.data(), map.lightArray.size());
		shader->setUniform("defaultLight", ((float)map.getDefaultLight() / 255.f));
		shader->setUniform("radiusSize", (float)(std::max(map.MapSizef().x, map.MapSizef().y)));
	}
	surface.draw(target, states);

There must be something I'm missing. I can't get the lights to draw over the water.

PS: zoom kind of breaks light because of how it's drawn. try first to get it working on 100% zoom only.

unable to create character when using gamefilesd2

I tried running DGEngine with the Diablo II game files, however I can't seem to get it working quite right.

I've tried both rev 6c499d9 and v0.3.7 (as mentioned in the Wiki that Diablo II support was added in this version).

As of v0.3.7, DGEngine can run using Diablo 2 gamefiles.

The game launches fine, and does display graphics from Diablo II, however, I seem to get stuck at the character selection screen, where I cannot enter a character name or get further.

After launching the game with ./DGEngine gamefilesd2, no fonts are displayed in the main menu.

screenshot_2019-11-06_14:49:13

Also once you click on the character selection screen, I can't seem to get any further. I've tried to use the mouse, to click Enter and to enter random characters as to give a character name, but to no success thus far.

screenshot_2019-11-06_14:49:20

This is what my DGEngine directory looks like with the extracted Diablo 2 MPQs.

.editorconfig*
.git/
.gitattributes*
.gitignore*
android/
build/
BUILD.txt*
cmake_modules/
CMakeLists.txt*
d2char/
d2data/
d2exp/
d2music/
d2sfx/
d2speech/
d2video/
d2xmusic/
d2xtalk/
d2xvideo/
DGEngine*
DGEngine.sln*
DGEngine.vcxproj*
DIABDAT.MPQ
fantasycore/
fantasycore.zip
gamefilesd/
gamefilesd2/
gamefilesdex/
gamefilesflare/
gamefileshf/
LICENSE.GPL3.txt*
LICENSE.txt*
LICENSE.Zlib.txt*
main.json*
README.md*
src/

Note, this is what is reported to the terminal:

$ ./DGEngine gamefilesd2
Uniform "elapsedTime" not found in shader
Uniform "loading" not found in shader
Uniform "mousePosition" not found in shader
Uniform "textureSize" not found in shader
Uniform "pixelSize" not found in shader

Any idea what I may need to do to get this working?

Cheers,
Robin

Blending Modes

DGEngine now allows defining a BlendMode. This is used mainly to draw composite textures (textures that are created by drawing multiple textures on top of each other). These are used for Flare's hero textures (overlaying weapons, chlothes) and Diablo 2's textures (for nearly all visible elements).

The code that makes it happen is here:
https://github.com/dgengin/DGEngine/blob/master/src/BlendMode.h
https://github.com/dgengin/DGEngine/blob/master/src/SFML/SFMLUtils.cpp

Diablo 2's game assets are currently loaded correctly, but I don't think all required BlendModes exist. The "screen" blend mode is what's used in Diablo 2, which I read is similar to the "add" blend mode.

SFML's blendMode documentation:
https://www.sfml-dev.org/documentation/2.5.1/structsf_1_1BlendMode.php

This issue is to track the missing BlendModes required to properly draw all of Diablo 2's texturers.

Understanding Flare's level object's drawing offsets

Currently, DGEngine is loading Flare's animations using the original texture rects and offsets converted to DGEngine's format.

examples:

Warrior animation:

https://github.com/dgengin/DGEngine/blob/master/gamefilesflare/level/player/Warrior/cel.json
https://github.com/clintbellanger/flare-game/blob/branch1.08/mods/fantasycore/animations/enemies/skeleton.txt

item drop textures:

https://github.com/dgengin/DGEngine/blob/master/gamefilesflare/level/item/dropTextures.json
https://github.com/clintbellanger/flare-game/blob/branch1.08/mods/fantasycore/animations/loot/

Town tileset:

https://github.com/dgengin/DGEngine/blob/master/gamefilesflare/level/data/grassland.json
https://github.com/clintbellanger/flare-game/blob/branch1.08/mods/fantasycore/tilesetdefs/tileset_grassland.txt

Level tilesets are rendered correctly with the same code that draws Diablo's tilesets.

Level objects aren't. The reason is simply that I don't quite understand how they're applied in Flare so that I can figure out the best way to update DGEngine's code to support it.

Flare's drawing code is in (I think):

https://github.com/clintbellanger/flare-engine/blob/branch1.08/src/MapRenderer.cpp

One difference between Flare and DGEngine is that we add offsets and they subtract offsets. I added the following property to invert the offsets when loading Flare's resources so as to keep the code the same for both:

"invertOffsets": true

DGEngine's code that positions level objects is here:

https://github.com/dgengin/DGEngine/blob/master/src/Game/LevelObject.cpp

void LevelObject::updateDrawPosition(const LevelMap& map, const sf::Vector2f& drawPos)
{
	basePosition.x = drawPos.x + map.DefaultBlockWidth();
	basePosition.y = drawPos.y + map.DefaultBlockHeight();

	const auto& texSize = sprite.getTextureRect();

	originalPosition.x = basePosition.x - (texSize.width / 2);
	originalPosition.y = drawPos.y - texSize.height + map.DefaultTileHeight();

	sprite.setPosition(originalPosition + positionOffset);
}

This code will make it closer to what I think flare is doing:

void LevelObject::updateDrawPosition(const LevelMap& map, const sf::Vector2f& drawPos)
{
	basePosition.x = drawPos.x + map.DefaultBlockWidth();
	basePosition.y = drawPos.y + map.DefaultBlockHeight();

	const auto& texSize = sprite.getTextureRect();

	originalPosition = basePosition;

	//originalPosition.x = basePosition.x - (texSize.width / 2);
	//originalPosition.y = drawPos.y - texSize.height + map.DefaultTileHeight();

	sprite.setPosition(originalPosition + positionOffset);
}

This issue is to help figure out how the above function should be changed to make flare's game objects animate correctly.

With the correct code in place, the Skeleton's feet shouldn't move when animating the player.

building on linux

Hi there,
I've just tried to build on my Fedora 32 and have it:

/home/username/git/d2/DGEngine/src/sfeMovie/AudioStream.cpp:31:10: fatal error: libswresample/swresample.h: No such file or directory
   31 | #include <libswresample/swresample.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/DGEngine.dir/build.make:1968: CMakeFiles/DGEngine.dir/src/sfeMovie/AudioStream.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:96: CMakeFiles/DGEngine.dir/all] Error 2
make: *** [Makefile:104: all] Error 2

Any updates?

Curious to see DGEngine continue to develop, especially as it has a very clean data-driven approach; which is thus far lacking from other engine re-implementations.

I know you posted a road-map earlier on, is this still the rough course of the project? Is there anything that the community could be invited to contribute on?

  • make engine generic enough to load levels / game assets other than Diablo's (done)
  • do the same for player textures (next - not major as most of the work was done for levels)
  • add some hardcoded levels + quests to test the game
  • implement enemy AI (for swords/enemies that don't throw missiles)
  • Another thing I want to do is create a gamefiles folder that uses freely available game assets but is still Diablo (same quests, town folk, enemies). Was thinking of adding some of flare's game assets as a proof of concept.

Happy coding!
Robin

Diablo 2 Font drawing

Diablo 2's fonts aren't drawn exactly like in the original.

This issue is to track all of the different ways to properly draw all of Diablo 2 's fonts. What blending modes to use, which palettes, which palette transformations, which colors to blend with the font texture, etc.

A detailed list of which fonts are used to draw all of the different menus (and controls in those menus) in the game would also be nice to have for reference.

How to Complile the project

I try to compile the engine,but I failed.
I think This project is difficulity to compile. I must download the dependents myself. Also ,the compile of sfeMovie is hard beacuse it based on ffmpeg. I don't know how to do. I installed MSYS2 on my windows10 and I use USE_SFML_MOVIE_STUB macro for fix,but the sfeMovie-d.lib always needed.

Is there anyone can help me? I have tried many times,but always got errors.

Mismatch of tile IDs when using FLARE resources

For of all, hats off to the work you've put into making the game engine generic enough to work with FLARE resources as well! It's really great to follow the progress and evolution of the DGEngine.

I tried to use the FLARE resources from fantasycore by cloning https://github.com/clintbellanger/flare-game and creating a zip file named fantasycore.zip containing the contents of the directory flare-game/mods/fantasycore.

u@x220 ~/D/d/D/f/m/fantasycore> zip -r ../fantasycore.zip *
  adding: animations/ (stored 0%)
  adding: animations/powers/ (stored 0%)
  adding: animations/powers/stone.txt (deflated 20%)
  adding: animations/powers/plasmaball.txt (deflated 37%)
  adding: animations/powers/cleave.txt (deflated 62%)
  adding: animations/powers/spark_red.txt (deflated 42%)
  adding: animations/powers/spark_red_loop.txt (deflated 40%)
  adding: animations/powers/icicle.txt (deflated 60%)
  adding: animations/powers/fireball.txt (deflated 57%)
  adding: animations/powers/thunderstrike.txt (deflated 21%)
  adding: animations/powers/quake.txt (deflated 58%)
  adding: animations/powers/shield.txt (deflated 19%)
  adding: animations/powers/channel.txt (deflated 56%)
  adding: animations/powers/spark_blue.txt (deflated 42%)
  adding: animations/powers/throw_axe.txt (deflated 63%)
  adding: animations/powers/lightning.txt (deflated 63%)

The I tried to place the fantasycore.zip file in the root directory of the DGEngine repository (alongside DIABDAT.MPQ), and it worked well to start DGEngine with ./DGEngine ./gamefilesflare, the menus showed up well and the sound effects and background music works.

However, upon starting a new game, the town is rendered very strangely. It seems like the tile IDs have been mixed up? For reference, I'm using rev clintbellanger/flare-game@0b7ad2e. I've been using rev b68b61f of DGEngine.

dgengine_using_flare

Does it work locally for you, if so with what revision of the game assets from the flare-game repo?

Cheers,
/u

Implement maps

When you click on the map button in a dungeon, you get these yellow dots that describe the map.
If someone knows how this is implemented or can point me where to look at to do this, let me know.

I'm guessing maybe these are read from the sol flags for each pillar.
How are these dots drawn? Which cel file is used to draw the doors/wall lines?

build error: Dun.cpp, error: storage class specifiers invalid in friend function

I tried to build the latest release of DGEngine (v0.5, rev 7467db8), but got the following build error:

[  7%] Building CXX object CMakeFiles/DGEngine.dir/src/Dun.cpp.o
In file included from /home/u/life/projects/diablo/DGEngine/src/Dun.h:5,
                 from /home/u/life/projects/diablo/DGEngine/src/Dun.cpp:1:
/home/u/life/projects/diablo/DGEngine/src/Utils/Vector2D.h:31:11: error: declaration of template parameter ‘T’ shadows template parameter
   31 |  template<std::integral T>
      |           ^~~
/home/u/life/projects/diablo/DGEngine/src/Utils/Vector2D.h:16:10: note: template parameter ‘T’ declared here
   16 | template<std::integral T>
      |          ^~~
/home/u/life/projects/diablo/DGEngine/src/Utils/Vector2D.h:32:2: error: storage class specifiers invalid in friend function declarations
   32 |  static friend T& get(size_t x, size_t y, Vector2D<T>& vec)
      |  ^~~~~~
/home/u/life/projects/diablo/DGEngine/src/Utils/Vector2D.h:37:11: error: declaration of template parameter ‘T’ shadows template parameter
   37 |  template<std::integral T>
      |           ^~~
/home/u/life/projects/diablo/DGEngine/src/Utils/Vector2D.h:16:10: note: template parameter ‘T’ declared here
   16 | template<std::integral T>
      |          ^~~
/home/u/life/projects/diablo/DGEngine/src/Utils/Vector2D.h:38:2: error: storage class specifiers invalid in friend function declarations
   38 |  static friend const T& get(size_t x, size_t y, const Vector2D<T>& vec)
      |  ^~~~~~
make[2]: *** [CMakeFiles/DGEngine.dir/build.make:225: CMakeFiles/DGEngine.dir/src/Dun.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:95: CMakeFiles/DGEngine.dir/all] Error 2
make: *** [Makefile:103: all] Error 2

Build environment:

u@x1 ~/l/p/d/D/build (master)> gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++,d --with-isl --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-install-libiberty --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-libunwind-exceptions --disable-werror gdc_include_dir=/usr/include/dlang/gdc
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.2.0 (GCC) 

u@x1 ~/l/p/d/D/build (master)> clang -v
clang version 11.0.0
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-pc-linux-gnu/10.2.0
Found candidate GCC installation: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/10.2.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0
Found candidate GCC installation: /usr/lib64/gcc/x86_64-pc-linux-gnu/10.2.0
Selected GCC installation: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/10.2.0
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Selected multilib: .;@m64

u@x1 ~/l/p/d/D/build (master)> uname -a
Linux x1 5.10.4-arch2-1 #1 SMP PREEMPT Fri, 01 Jan 2021 05:29:53 +0000 x86_64 GNU/Linux

Steam Deck packaging request

Simple request to package a version compatible with steam deck (glibc 2.33)
I understand this may not be a priority, but if its not overly difficult it would be appreciated

(1)(deck@NullDeck DGEngine)$ ldd --version
ldd (GNU libc) 2.33
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
(deck@NullDeck DGEngine)$ ./DGEngine*.AppImage
./DGEngine-x86_64.AppImage: /usr/lib/libc.so.6: version `GLIBC_2.34' not found (required by ./DGEngine-x86_64.AppImage)
./DGEngine-x86_64.AppImage: /usr/lib/libc.so.6: version `GLIBC_2.34' not found (required by /tmp/.mount_DGEngi2VByV8/usr/bin/../lib/libsfml-window.so.2.6)
./DGEngine-x86_64.AppImage: /usr/lib/libc.so.6: version `GLIBC_2.34' not found (required by /tmp/.mount_DGEngi2VByV8/usr/bin/../lib/libsfml-system.so.2.6)
./DGEngine-x86_64.AppImage: /usr/lib/libc.so.6: version `GLIBC_2.34' not found (required by /tmp/.mount_DGEngi2VByV8/usr/bin/../lib/libopenal.so.1)
./DGEngine-x86_64.AppImage: /usr/lib/libc.so.6: version `GLIBC_2.34' not found (required by /tmp/.mount_DGEngi2VByV8/usr/bin/../lib/libudev.so.1)
(1)(deck@NullDeck DGEngine)$ 

Compilation warnings in release v0.3.6

Happy to see the latest release. It compiles and runs just fine. However, there are a few warnings reported during compilation.

With GCC 8.3.0, the following warnings are reported during build:

$ make
Scanning dependencies of target DGEngine
[ 36%] Building CXX object CMakeFiles/DGEngine.dir/src/Game/LevelMap.cpp.o
In file included from /home/u/Desktop/diablo/DGEngine/src/Game/stlastar.h:43,
                 from /home/u/Desktop/diablo/DGEngine/src/Game/PathFinder.h:4,
                 from /home/u/Desktop/diablo/DGEngine/src/Game/LevelMap.cpp:2:
/home/u/Desktop/diablo/DGEngine/src/Game/fsa.h: In instantiation of ‘FixedSizeAllocator<USER_TYPE>::FixedSizeAllocator(unsigned int) [with USER_TYPE = AStarSearch<MapSearchNode>::Node]’:
/home/u/Desktop/diablo/DGEngine/src/Game/stlastar.h:139:26:   required from ‘AStarSearch<UserState>::AStarSearch(int) [with UserState = MapSearchNode]’
/home/u/Desktop/diablo/DGEngine/src/Game/PathFinder.h:16:75:   required from ‘AStarMapSearch<T>::AStarMapSearch(const LevelMap*) [with T = MapSearchNode]’
/home/u/Desktop/diablo/DGEngine/src/Game/LevelMap.cpp:482:28:   required from here
/home/u/Desktop/diablo/DGEngine/src/Game/fsa.h:87:9: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct FixedSizeAllocator<AStarSearch<MapSearchNode>::Node>::FSA_ELEMENT’; use assignment or value-initialization instead [-Wclass-memaccess]
   memset( m_pMemory, 0, sizeof( FSA_ELEMENT ) * m_MaxElements );
   ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/Game/fsa.h:64:9: note: ‘struct FixedSizeAllocator<AStarSearch<MapSearchNode>::Node>::FSA_ELEMENT’ declared here
  struct FSA_ELEMENT
         ^~~~~~~~~~~
[ 51%] Building CXX object CMakeFiles/DGEngine.dir/src/Json/JsonUtils.cpp.o
In file included from /home/u/Desktop/diablo/DGEngine/src/Json/JsonParser.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Json/JsonUtils.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Json/JsonUtils.cpp:1:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h: In instantiation of ‘void rapidjson::GenericValue<Encoding, Allocator>::SetObjectRaw(rapidjson::GenericValue<Encoding, Allocator>::Member*, rapidjson::SizeType, Allocator&) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; rapidjson::GenericValue<Encoding, Allocator>::Member = rapidjson::GenericMember<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<> >; rapidjson::SizeType = unsigned int]’:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2363:9:   required from ‘bool rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::EndObject(rapidjson::SizeType) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::SizeType = unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/reader.h:1736:18:   required from ‘rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParsingState rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::Transit(rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParsingState, rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::Token, rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParsingState, InputStream&, Handler&) [with unsigned int parseFlags = 0; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/reader.h:1832:58:   required from ‘rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParse(InputStream&, Handler&) [with unsigned int parseFlags = 0; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/reader.h:487:46:   required from ‘rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::Parse(InputStream&, Handler&) [with unsigned int parseFlags = 0; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2159:22:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::ParseStream(InputStream&) [with unsigned int parseFlags = 0; SourceEncoding = rapidjson::UTF8<>; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2248:48:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Parse(const typename SourceEncoding::Ch*, std::size_t) [with unsigned int parseFlags = 0; SourceEncoding = rapidjson::UTF8<>; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; typename SourceEncoding::Ch = char; std::size_t = long unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2254:43:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Parse(const Ch*, std::size_t) [with unsigned int parseFlags = 0; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Ch = char; std::size_t = long unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2258:41:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Parse(const Ch*, std::size_t) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Ch = char; std::size_t = long unsigned int]’
/home/u/Desktop/diablo/DGEngine/src/Json/JsonUtils.cpp:391:45:   required from here
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:1952:24: warning: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of type ‘rapidjson::GenericValue<rapidjson::UTF8<> >::Member’ {aka ‘struct rapidjson::GenericMember<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<> >’} with no trivial copy-assignment; use copy-assignment instead [-Wclass-memaccess]
             std::memcpy(m, members, count * sizeof(Member));
             ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/u/Desktop/diablo/DGEngine/src/Json/JsonParser.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Json/JsonUtils.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Json/JsonUtils.cpp:1:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:71:8: note: ‘rapidjson::GenericValue<rapidjson::UTF8<> >::Member’ {aka ‘struct rapidjson::GenericMember<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<> >’} declared here
 struct GenericMember {
        ^~~~~~~~~~~~~
In file included from /home/u/Desktop/diablo/DGEngine/src/Json/JsonParser.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Json/JsonUtils.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Json/JsonUtils.cpp:1:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h: In instantiation of ‘void rapidjson::GenericValue<Encoding, Allocator>::SetArrayRaw(rapidjson::GenericValue<Encoding, Allocator>*, rapidjson::SizeType, Allocator&) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; rapidjson::SizeType = unsigned int]’:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2371:9:   required from ‘bool rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::EndArray(rapidjson::SizeType) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::SizeType = unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/reader.h:1766:18:   required from ‘rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParsingState rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::Transit(rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParsingState, rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::Token, rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParsingState, InputStream&, Handler&) [with unsigned int parseFlags = 0; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/reader.h:1832:58:   required from ‘rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParse(InputStream&, Handler&) [with unsigned int parseFlags = 0; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/reader.h:487:46:   required from ‘rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::Parse(InputStream&, Handler&) [with unsigned int parseFlags = 0; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2159:22:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::ParseStream(InputStream&) [with unsigned int parseFlags = 0; SourceEncoding = rapidjson::UTF8<>; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2248:48:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Parse(const typename SourceEncoding::Ch*, std::size_t) [with unsigned int parseFlags = 0; SourceEncoding = rapidjson::UTF8<>; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; typename SourceEncoding::Ch = char; std::size_t = long unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2254:43:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Parse(const Ch*, std::size_t) [with unsigned int parseFlags = 0; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Ch = char; std::size_t = long unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2258:41:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Parse(const Ch*, std::size_t) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Ch = char; std::size_t = long unsigned int]’
/home/u/Desktop/diablo/DGEngine/src/Json/JsonUtils.cpp:391:45:   required from here
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:1939:24: warning: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of type ‘class rapidjson::GenericValue<rapidjson::UTF8<> >’ with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
             std::memcpy(e, values, count * sizeof(GenericValue));
             ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:540:7: note: ‘class rapidjson::GenericValue<rapidjson::UTF8<> >’ declared here
 class GenericValue {
       ^~~~~~~~~~~~
[ 58%] Building CXX object CMakeFiles/DGEngine.dir/src/Parser/ParseFile.cpp.o
In file included from /home/u/Desktop/diablo/DGEngine/./src/Json/JsonParser.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/ParseFile.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/ParseFile.cpp:1:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h: In instantiation of ‘void rapidjson::GenericValue<Encoding, Allocator>::SetObjectRaw(rapidjson::GenericValue<Encoding, Allocator>::Member*, rapidjson::SizeType, Allocator&) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; rapidjson::GenericValue<Encoding, Allocator>::Member = rapidjson::GenericMember<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<> >; rapidjson::SizeType = unsigned int]’:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2363:9:   required from ‘bool rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::EndObject(rapidjson::SizeType) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::SizeType = unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:1784:50:   required from ‘bool rapidjson::GenericValue<Encoding, Allocator>::Accept(Handler&) const [with Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2414:13:   required from ‘rapidjson::GenericValue<Encoding, Allocator>::GenericValue(const rapidjson::GenericValue<Encoding, SourceAllocator>&, Allocator&) [with SourceAllocator = rapidjson::MemoryPoolAllocator<>; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]’
/home/u/Desktop/diablo/DGEngine/src/Parser/ParseFile.cpp:164:34:   required from here
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:1952:24: warning: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of type ‘rapidjson::GenericValue<rapidjson::UTF8<> >::Member’ {aka ‘struct rapidjson::GenericMember<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<> >’} with no trivial copy-assignment; use copy-assignment instead [-Wclass-memaccess]
             std::memcpy(m, members, count * sizeof(Member));
             ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/u/Desktop/diablo/DGEngine/./src/Json/JsonParser.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/ParseFile.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/ParseFile.cpp:1:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:71:8: note: ‘rapidjson::GenericValue<rapidjson::UTF8<> >::Member’ {aka ‘struct rapidjson::GenericMember<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<> >’} declared here
 struct GenericMember {
        ^~~~~~~~~~~~~
In file included from /home/u/Desktop/diablo/DGEngine/./src/Json/JsonParser.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/ParseFile.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/ParseFile.cpp:1:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h: In instantiation of ‘void rapidjson::GenericValue<Encoding, Allocator>::SetArrayRaw(rapidjson::GenericValue<Encoding, Allocator>*, rapidjson::SizeType, Allocator&) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; rapidjson::SizeType = unsigned int]’:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2371:9:   required from ‘bool rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::EndArray(rapidjson::SizeType) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::SizeType = unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:1792:49:   required from ‘bool rapidjson::GenericValue<Encoding, Allocator>::Accept(Handler&) const [with Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2414:13:   required from ‘rapidjson::GenericValue<Encoding, Allocator>::GenericValue(const rapidjson::GenericValue<Encoding, SourceAllocator>&, Allocator&) [with SourceAllocator = rapidjson::MemoryPoolAllocator<>; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]’
/home/u/Desktop/diablo/DGEngine/src/Parser/ParseFile.cpp:164:34:   required from here
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:1939:24: warning: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of type ‘class rapidjson::GenericValue<rapidjson::UTF8<> >’ with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
             std::memcpy(e, values, count * sizeof(GenericValue));
             ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:540:7: note: ‘class rapidjson::GenericValue<rapidjson::UTF8<> >’ declared here
 class GenericValue {
       ^~~~~~~~~~~~
[ 64%] Building CXX object CMakeFiles/DGEngine.dir/src/Parser/ParseMenu.cpp.o
In file included from /home/u/Desktop/diablo/DGEngine/./src/Json/JsonParser.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/ParseMenu.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/ParseMenu.cpp:1:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h: In instantiation of ‘void rapidjson::GenericValue<Encoding, Allocator>::SetObjectRaw(rapidjson::GenericValue<Encoding, Allocator>::Member*, rapidjson::SizeType, Allocator&) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; rapidjson::GenericValue<Encoding, Allocator>::Member = rapidjson::GenericMember<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<> >; rapidjson::SizeType = unsigned int]’:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2363:9:   required from ‘bool rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::EndObject(rapidjson::SizeType) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::SizeType = unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:1784:50:   required from ‘bool rapidjson::GenericValue<Encoding, Allocator>::Accept(Handler&) const [with Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2414:13:   required from ‘rapidjson::GenericValue<Encoding, Allocator>::GenericValue(const rapidjson::GenericValue<Encoding, SourceAllocator>&, Allocator&) [with SourceAllocator = rapidjson::MemoryPoolAllocator<>; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]’
/home/u/Desktop/diablo/DGEngine/src/Parser/ParseMenu.cpp:240:34:   required from here
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:1952:24: warning: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of type ‘rapidjson::GenericValue<rapidjson::UTF8<> >::Member’ {aka ‘struct rapidjson::GenericMember<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<> >’} with no trivial copy-assignment; use copy-assignment instead [-Wclass-memaccess]
             std::memcpy(m, members, count * sizeof(Member));
             ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/u/Desktop/diablo/DGEngine/./src/Json/JsonParser.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/ParseMenu.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/ParseMenu.cpp:1:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:71:8: note: ‘rapidjson::GenericValue<rapidjson::UTF8<> >::Member’ {aka ‘struct rapidjson::GenericMember<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<> >’} declared here
 struct GenericMember {
        ^~~~~~~~~~~~~
In file included from /home/u/Desktop/diablo/DGEngine/./src/Json/JsonParser.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/ParseMenu.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/ParseMenu.cpp:1:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h: In instantiation of ‘void rapidjson::GenericValue<Encoding, Allocator>::SetArrayRaw(rapidjson::GenericValue<Encoding, Allocator>*, rapidjson::SizeType, Allocator&) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; rapidjson::SizeType = unsigned int]’:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2371:9:   required from ‘bool rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::EndArray(rapidjson::SizeType) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::SizeType = unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:1792:49:   required from ‘bool rapidjson::GenericValue<Encoding, Allocator>::Accept(Handler&) const [with Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2414:13:   required from ‘rapidjson::GenericValue<Encoding, Allocator>::GenericValue(const rapidjson::GenericValue<Encoding, SourceAllocator>&, Allocator&) [with SourceAllocator = rapidjson::MemoryPoolAllocator<>; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]’
/home/u/Desktop/diablo/DGEngine/src/Parser/ParseMenu.cpp:240:34:   required from here
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:1939:24: warning: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of type ‘class rapidjson::GenericValue<rapidjson::UTF8<> >’ with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
             std::memcpy(e, values, count * sizeof(GenericValue));
             ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:540:7: note: ‘class rapidjson::GenericValue<rapidjson::UTF8<> >’ declared here
 class GenericValue {
       ^~~~~~~~~~~~
[ 69%] Building CXX object CMakeFiles/DGEngine.dir/src/Parser/Parser.cpp.o
In file included from /home/u/Desktop/diablo/DGEngine/./src/Json/JsonParser.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/ParseFile.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/Parser.cpp:4:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h: In instantiation of ‘void rapidjson::GenericValue<Encoding, Allocator>::SetObjectRaw(rapidjson::GenericValue<Encoding, Allocator>::Member*, rapidjson::SizeType, Allocator&) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; rapidjson::GenericValue<Encoding, Allocator>::Member = rapidjson::GenericMember<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<> >; rapidjson::SizeType = unsigned int]’:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2363:9:   required from ‘bool rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::EndObject(rapidjson::SizeType) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::SizeType = unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/reader.h:1736:18:   required from ‘rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParsingState rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::Transit(rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParsingState, rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::Token, rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParsingState, InputStream&, Handler&) [with unsigned int parseFlags = 0; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/reader.h:1832:58:   required from ‘rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParse(InputStream&, Handler&) [with unsigned int parseFlags = 0; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/reader.h:487:46:   required from ‘rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::Parse(InputStream&, Handler&) [with unsigned int parseFlags = 0; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2159:22:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::ParseStream(InputStream&) [with unsigned int parseFlags = 0; SourceEncoding = rapidjson::UTF8<>; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2248:48:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Parse(const typename SourceEncoding::Ch*, std::size_t) [with unsigned int parseFlags = 0; SourceEncoding = rapidjson::UTF8<>; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; typename SourceEncoding::Ch = char; std::size_t = long unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2254:43:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Parse(const Ch*, std::size_t) [with unsigned int parseFlags = 0; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Ch = char; std::size_t = long unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2258:41:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Parse(const Ch*, std::size_t) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Ch = char; std::size_t = long unsigned int]’
/home/u/Desktop/diablo/DGEngine/src/Parser/Parser.cpp:19:49:   required from here
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:1952:24: warning: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of type ‘rapidjson::GenericValue<rapidjson::UTF8<> >::Member’ {aka ‘struct rapidjson::GenericMember<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<> >’} with no trivial copy-assignment; use copy-assignment instead [-Wclass-memaccess]
             std::memcpy(m, members, count * sizeof(Member));
             ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/u/Desktop/diablo/DGEngine/./src/Json/JsonParser.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/ParseFile.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/Parser.cpp:4:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:71:8: note: ‘rapidjson::GenericValue<rapidjson::UTF8<> >::Member’ {aka ‘struct rapidjson::GenericMember<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<> >’} declared here
 struct GenericMember {
        ^~~~~~~~~~~~~
In file included from /home/u/Desktop/diablo/DGEngine/./src/Json/JsonParser.h:5,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/ParseFile.h:3,
                 from /home/u/Desktop/diablo/DGEngine/src/Parser/Parser.cpp:4:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h: In instantiation of ‘void rapidjson::GenericValue<Encoding, Allocator>::SetArrayRaw(rapidjson::GenericValue<Encoding, Allocator>*, rapidjson::SizeType, Allocator&) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; rapidjson::SizeType = unsigned int]’:
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2371:9:   required from ‘bool rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::EndArray(rapidjson::SizeType) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::SizeType = unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/reader.h:1766:18:   required from ‘rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParsingState rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::Transit(rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParsingState, rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::Token, rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParsingState, InputStream&, Handler&) [with unsigned int parseFlags = 0; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/reader.h:1832:58:   required from ‘rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::IterativeParse(InputStream&, Handler&) [with unsigned int parseFlags = 0; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/reader.h:487:46:   required from ‘rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, StackAllocator>::Parse(InputStream&, Handler&) [with unsigned int parseFlags = 0; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Handler = rapidjson::GenericDocument<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2159:22:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::ParseStream(InputStream&) [with unsigned int parseFlags = 0; SourceEncoding = rapidjson::UTF8<>; InputStream = rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::MemoryStream>; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2248:48:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Parse(const typename SourceEncoding::Ch*, std::size_t) [with unsigned int parseFlags = 0; SourceEncoding = rapidjson::UTF8<>; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; typename SourceEncoding::Ch = char; std::size_t = long unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2254:43:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Parse(const Ch*, std::size_t) [with unsigned int parseFlags = 0; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Ch = char; std::size_t = long unsigned int]’
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:2258:41:   required from ‘rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>& rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Parse(const Ch*, std::size_t) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator; rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::Ch = char; std::size_t = long unsigned int]’
/home/u/Desktop/diablo/DGEngine/src/Parser/Parser.cpp:19:49:   required from here
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:1939:24: warning: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of type ‘class rapidjson::GenericValue<rapidjson::UTF8<> >’ with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
             std::memcpy(e, values, count * sizeof(GenericValue));
             ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/./src/rapidjson/document.h:540:7: note: ‘class rapidjson::GenericValue<rapidjson::UTF8<> >’ declared here
 class GenericValue {
       ^~~~~~~~~~~~
[ 95%] Building CXX object CMakeFiles/DGEngine.dir/src/sfeMovie/Demuxer.cpp.o
/home/u/Desktop/diablo/DGEngine/src/sfeMovie/Demuxer.cpp: In lambda function:
/home/u/Desktop/diablo/DGEngine/src/sfeMovie/Demuxer.cpp:46:47: warning: ‘void av_register_all()’ is deprecated [-Wdeprecated-declarations]
   std::call_once(flag1, []() {av_register_all(); });
                                               ^
In file included from /home/u/Desktop/diablo/DGEngine/src/sfeMovie/Demuxer.cpp:27:
/usr/include/libavformat/avformat.h:2043:6: note: declared here
 void av_register_all(void);
      ^~~~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/sfeMovie/Demuxer.cpp:46:47: warning: ‘void av_register_all()’ is deprecated [-Wdeprecated-declarations]
   std::call_once(flag1, []() {av_register_all(); });
                                               ^
In file included from /home/u/Desktop/diablo/DGEngine/src/sfeMovie/Demuxer.cpp:27:
/usr/include/libavformat/avformat.h:2043:6: note: declared here
 void av_register_all(void);
      ^~~~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/sfeMovie/Demuxer.cpp: In lambda function:
/home/u/Desktop/diablo/DGEngine/src/sfeMovie/Demuxer.cpp:47:52: warning: ‘void avcodec_register_all()’ is deprecated [-Wdeprecated-declarations]
   std::call_once(flag2, []() {avcodec_register_all(); });
                                                    ^
In file included from /home/u/Desktop/diablo/DGEngine/src/sfeMovie/Demuxer.cpp:26:
/usr/include/libavcodec/avcodec.h:4102:6: note: declared here
 void avcodec_register_all(void);
      ^~~~~~~~~~~~~~~~~~~~
/home/u/Desktop/diablo/DGEngine/src/sfeMovie/Demuxer.cpp:47:52: warning: ‘void avcodec_register_all()’ is deprecated [-Wdeprecated-declarations]
   std::call_once(flag2, []() {avcodec_register_all(); });
                                                    ^
In file included from /home/u/Desktop/diablo/DGEngine/src/sfeMovie/Demuxer.cpp:26:
/usr/include/libavcodec/avcodec.h:4102:6: note: declared here
 void avcodec_register_all(void);
      ^~~~~~~~~~~~~~~~~~~~
[100%] Built target DGEngine

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.