├── resources
├── D1GraphicsTool.rc
├── icon.ico
├── null.trn
├── default.pal
├── demo001.gif
├── D1GraphicsTool.qss
├── d1files.qrc
└── black.trn
├── source
├── .clang-format
├── d1formats
│ ├── d1image.h
│ ├── d1cel.h
│ ├── d1celtileset.h
│ ├── d1celframe.h
│ ├── d1cl2.h
│ ├── d1amp.h
│ ├── d1sol.h
│ ├── d1til.h
│ ├── d1trn.h
│ ├── d1min.h
│ ├── d1image.cpp
│ ├── d1celtilesetframe.h
│ ├── d1trn.cpp
│ ├── d1gfx.h
│ ├── d1sol.cpp
│ ├── d1amp.cpp
│ ├── d1til.cpp
│ ├── d1celtileset.cpp
│ ├── d1celframe.cpp
│ ├── d1min.cpp
│ └── d1gfx.cpp
├── config
│ ├── config.h
│ └── config.cpp
├── views
│ ├── view.h
│ ├── view.cpp
│ ├── celview.h
│ └── levelcelview.h
├── undostack
│ ├── command.h
│ ├── command.cpp
│ ├── undostack.h
│ ├── framecmds.cpp
│ ├── framecmds.h
│ ├── undomacro.cpp
│ ├── undomacro.h
│ └── undostack.cpp
├── dialogs
│ ├── settingsdialog.h
│ ├── importdialog.h
│ ├── openasdialog.h
│ ├── exportdialog.h
│ ├── settingsdialog.cpp
│ ├── importdialog.cpp
│ ├── settingsdialog.ui
│ └── openasdialog.cpp
├── widgets
│ ├── leveltabframewidget.h
│ ├── leveltabsubtilewidget.h
│ ├── leveltabtilewidget.h
│ ├── leveltabframewidget.ui
│ ├── leveltabsubtilewidget.ui
│ ├── leveltabsubtilewidget.cpp
│ ├── leveltabtilewidget.cpp
│ ├── leveltabtilewidget.ui
│ └── palettewidget.h
├── main.cpp
├── palette
│ ├── d1palhits.h
│ ├── d1pal.h
│ ├── d1palhits.cpp
│ └── d1pal.cpp
├── .clang-tidy
└── mainwindow.h
├── debian
└── usr
│ └── share
│ └── applications
│ └── D1GraphicsTool.desktop
├── .github
└── workflows
│ ├── linux-qt5.yml
│ ├── linux.yml
│ ├── clang-format-check.yml
│ ├── windows.yml
│ └── windows-32.yml
├── TODO.md
├── .gitignore
├── .editorconfig
├── README.md
├── LICENSE.md
├── CMakeLists.txt
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
└── CHANGELOG.md
/resources/D1GraphicsTool.rc:
--------------------------------------------------------------------------------
1 | IDI_ICON1 ICON DISCARDABLE "icon.ico"
2 |
--------------------------------------------------------------------------------
/resources/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/diasurgical/d1-graphics-tool/HEAD/resources/icon.ico
--------------------------------------------------------------------------------
/resources/null.trn:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/diasurgical/d1-graphics-tool/HEAD/resources/null.trn
--------------------------------------------------------------------------------
/resources/default.pal:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/diasurgical/d1-graphics-tool/HEAD/resources/default.pal
--------------------------------------------------------------------------------
/resources/demo001.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/diasurgical/d1-graphics-tool/HEAD/resources/demo001.gif
--------------------------------------------------------------------------------
/resources/D1GraphicsTool.qss:
--------------------------------------------------------------------------------
1 | QLineEdit[readOnly="true"] {
2 | color: #808080;
3 | background-color: #F0F0F0;
4 | }
5 |
6 | QMessageBox {
7 | messagebox-text-interaction-flags: 5;
8 | }
9 |
--------------------------------------------------------------------------------
/resources/d1files.qrc:
--------------------------------------------------------------------------------
1 |
2 |
3 | null.trn
4 | default.pal
5 | D1GraphicsTool.qss
6 |
7 |
8 |
--------------------------------------------------------------------------------
/resources/black.trn:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/source/.clang-format:
--------------------------------------------------------------------------------
1 | BasedOnStyle: webkit
2 | AlignTrailingComments: true
3 | AllowShortBlocksOnASingleLine: true
4 | AllowShortFunctionsOnASingleLine: None
5 | PointerAlignment: Right
6 | TabWidth: 4
7 | UseTab: Never
8 | SortIncludes: true
9 | NamespaceIndentation: None
10 | FixNamespaceComments: true
11 |
--------------------------------------------------------------------------------
/debian/usr/share/applications/D1GraphicsTool.desktop:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Type=Application
3 | Name=Diablo 1 Graphics Tool
4 | Comment=Work with Diablo 1 graphics files
5 | Keywords=Diablo;graphic;
6 | Exec=D1GraphicsTool
7 | Icon=/opt/d1-graphics-tool/icon.svg
8 | Terminal=false
9 | Categories=Graphics;2DGraphics;RasterGraphics;
10 | StartupNotify=true
11 |
--------------------------------------------------------------------------------
/source/d1formats/d1image.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 | #include
5 |
6 | #include "d1gfx.h"
7 | #include "palette/d1pal.h"
8 |
9 | // alpha value under which the color is considered as transparent
10 | #define COLOR_ALPHA_LIMIT 128
11 |
12 | class D1ImageFrame {
13 | public:
14 | static bool load(D1GfxFrame &frame, const QImage &image, D1Pal *pal);
15 | };
16 |
--------------------------------------------------------------------------------
/source/config/config.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 |
5 | class Config {
6 | public:
7 | static void loadConfiguration();
8 | static void storeConfiguration();
9 | static QJsonValue value(const QString &name);
10 | static void insert(const QString &key, const QJsonValue &value);
11 |
12 | private:
13 | static bool createDirectoriesOnPath();
14 |
15 | static QString dirPath;
16 | };
17 |
--------------------------------------------------------------------------------
/source/views/view.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 | #include
5 | #include
6 |
7 | class View : public QGraphicsView {
8 | Q_OBJECT
9 |
10 | public:
11 | View(QWidget *parent = nullptr);
12 |
13 | private slots:
14 | void mouseReleaseEvent(QMouseEvent *event);
15 | void mousePressEvent(QMouseEvent *event);
16 | void leaveEvent(QEvent *event) override;
17 | };
18 |
--------------------------------------------------------------------------------
/source/undostack/command.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | class Command {
4 | public:
5 | virtual void undo() = 0;
6 | virtual void redo() = 0;
7 |
8 | void setObsolete(bool isObsolete);
9 | bool isObsolete() const;
10 | void setMacroID(unsigned int macroID);
11 | unsigned int macroID() const;
12 |
13 | virtual ~Command() = default;
14 |
15 | private:
16 | unsigned int m_macroID { 0 };
17 | bool m_isObsolete = false;
18 | };
19 |
--------------------------------------------------------------------------------
/source/d1formats/d1cel.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 | #include
5 |
6 | #include "d1gfx.h"
7 | #include "dialogs/openasdialog.h"
8 |
9 | class D1Cel {
10 | public:
11 | static bool load(D1Gfx &gfx, QString celFilePath, const OpenAsParam ¶ms);
12 | static bool save(D1Gfx &gfx, const QString &gfxPath);
13 |
14 | private:
15 | static bool writeFileData(D1Gfx &gfx, QFile &outFile);
16 | static bool writeCompFileData(D1Gfx &gfx, QFile &outFile);
17 | };
18 |
--------------------------------------------------------------------------------
/source/d1formats/d1celtileset.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include