Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
57dacff
Loads of new features
AdAstra-LD Dec 31, 2020
117767c
Update README.md
AdAstra-LD Dec 31, 2020
c97653e
Update PDSMS_2_1.png
AdAstra-LD Dec 31, 2020
d224776
Merge branch 'master' of https://github.com/AdAstra-LD/Pokemon-DS-Map…
AdAstra-LD Dec 31, 2020
c0fc85b
Update PDSMS_2_1.png
AdAstra-LD Dec 31, 2020
c9c5509
Update README.md
AdAstra-LD Dec 31, 2020
57c1ae0
Renamred 2_1 to 2_1_1
AdAstra-LD Dec 31, 2020
230559b
Merge branch 'master' of https://github.com/AdAstra-LD/Pokemon-DS-Map…
AdAstra-LD Dec 31, 2020
b3a00c6
Restored camera settings in BDHCAM editor
AdAstra-LD Dec 31, 2020
107ae69
Added new BDHCam configurations
AdAstra-LD Dec 31, 2020
fda8b0a
Fixed exportgroups map centering and mousewheel block bug
AdAstra-LD Jan 16, 2021
ff89739
Minor GUI fixes + export group improvements
AdAstra-LD Feb 8, 2021
0a00f11
Update README.md
AdAstra-LD Feb 13, 2021
823f56b
Improved screen layout for lower res
AdAstra-LD Feb 14, 2021
1da05e9
Update README.md
AdAstra-LD Feb 19, 2021
f248cb0
Minor fixes
AdAstra-LD Mar 15, 2021
b39d03b
Almost finished export groups center feature
AdAstra-LD Mar 16, 2021
67f455f
Improved widecam mode choice and OBJ Export for map groups
AdAstra-LD Mar 21, 2021
c71aee8
BDHC plate duplication
AdAstra-LD Apr 14, 2021
b2b69c3
Update BdhcEditorDialog.java
AdAstra-LD Apr 14, 2021
6efd23b
Fixed BDHCAM display
AdAstra-LD Apr 14, 2021
e01ff67
Fixed BDHC plate shift-up
AdAstra-LD Apr 14, 2021
1c66375
fixed typo that prevented BDHC shift-up from working correctly
AdAstra-LD Apr 14, 2021
2ed8ea3
Fixed BDHC plate slope not being copied correctly
AdAstra-LD Apr 14, 2021
dea81f7
More user control over material settings
AdAstra-LD Jun 2, 2021
cc76f58
Fixed IMD light tags
AdAstra-LD Jun 3, 2021
a6c1a3b
Added tile Z offset feature
AdAstra-LD Jun 4, 2021
8c1dcaf
Version update + tile editor gui improvements
AdAstra-LD Jun 4, 2021
70566dc
Imported changes from official 2.2
AdAstra-LD Jun 23, 2021
8040e9d
version update
AdAstra-LD Jul 6, 2021
0a1d57a
Fixed background image [again]
AdAstra-LD Jul 14, 2021
aae90e5
Swapped Y Z axes in BDHCAM display and editor
AdAstra-LD Jul 24, 2021
261f785
Added "Move material to top" and "move material to bottom" buttons
AdAstra-LD Aug 7, 2021
572dbfd
Fixed PDSMAP splitter not working when map at (0, 0) is null
AdAstra-LD Aug 8, 2021
306a508
Fixed CopyIcon name and added Soundplates DuplicatePlate code
AdAstra-LD Nov 1, 2021
b8b148a
Refactored BuildAnimations --> GlobalAnimationsList
AdAstra-LD Jan 16, 2022
da4deb0
Minor optimization of GlobalAnimationsList
AdAstra-LD Jan 16, 2022
a6a3783
Layer up-down shifting
AdAstra-LD Feb 3, 2022
9196e9d
Update autonaming of ExportGroups maps
AdAstra-LD Feb 28, 2022
600e394
Fixed duplicated dot of exportgroups naming
AdAstra-LD Mar 13, 2022
6c4b26f
Output map filename improvement
AdAstra-LD May 15, 2022
c6b8bdb
Fixed indexOutOfBounds exception
AdAstra-LD May 16, 2022
791c9b9
Fixed typo
AdAstra-LD Aug 16, 2022
9b786d8
Minor code improvements
AdAstra-LD Aug 16, 2022
ae0a216
Fixed null pointer exceptions when opening BLD editor
AdAstra-LD Aug 16, 2022
2fd36fd
Added NSBVA support [no playback]
AdAstra-LD Aug 16, 2022
453a2f9
Disabled play animation button of BldEditor for NSBMA/VA
AdAstra-LD Aug 16, 2022
74fb5c4
Fixed "replace only palette" button in NSBTX editor
AdAstra-LD Mar 26, 2024
bf17c19
Update README.md
AdAstra-LD Mar 26, 2024
3d09eed
Version update
AdAstra-LD Mar 26, 2024
917f322
Update Jogamp to recent version
Nov 4, 2024
cc62fe0
Pointed linux install script at adastra version 2.2.1
LowriJenkins Oct 4, 2025
0a9c7cc
Update Java version requirement to 21
AdAstra-LD Nov 9, 2025
4830fa3
fix IndexOutOfBounds exception when importing objs made from certain …
PoeticRainbow Feb 18, 2026
d203b62
Add GameFolder to abstract DS tool vs DSROM
AdAstra-LD Apr 30, 2026
debee95
Version update [2.2.2]
AdAstra-LD Apr 30, 2026
952d85e
Refactor MainFrame to delegate actions to modules
AdAstra-LD Apr 30, 2026
7fca96b
Reload textures safely; fix IO write; seed RNG
AdAstra-LD Apr 30, 2026
fc05107
Make animation editor match Platinum fldtanime format
AdAstra-LD May 14, 2026
107ea6f
Fix animation editor frame selection UI
AdAstra-LD May 15, 2026
f606db6
Refactor utils, state handling, and thumbnails
AdAstra-LD May 15, 2026
c675b99
Update build.gradle
AdAstra-LD May 15, 2026
e1b0c6e
Refactor export group logic into MapMatrix
AdAstra-LD May 15, 2026
8f4b13f
Reworked Export groups and GUI
AdAstra-LD May 15, 2026
2b9a489
Update pdsms-linux.sh
LowriJenkins Jun 21, 2026
2be7cf2
Update pdsms-linux.sh
LowriJenkins Jun 21, 2026
5df71d0
Update pdsms-linux.sh
LowriJenkins Jun 21, 2026
4c713ed
Clarify backsound names
Pixelstyx Jul 6, 2026
e077be9
Add enhanced selection tools and tile folder organization
Trinsic64 Jul 9, 2026
76e51e4
Add smart drawing and portable tile folder workflows
Trinsic64 Jul 11, 2026
4f4aa8d
Organize smart drawings with portable tile folders
Trinsic64 Jul 11, 2026
89837be
Fix pinned tile navigation and converter discovery
Trinsic64 Jul 11, 2026
23dd62a
Refine folder selection pinning and collision defaults
Trinsic64 Jul 11, 2026
8ec0c5f
Add collision defaults workspace to tileset editor
Trinsic64 Jul 16, 2026
82e8909
Refine tile folder layout and navigation
Trinsic64 Jul 17, 2026
c009fb8
Merge pull request #1 from Trinsic64/enhanced-tools
Trinsic64 Jul 17, 2026
53a5980
Prepare v2.3.0 release
Trinsic64 Jul 17, 2026
2af5715
Merge v2.3.0 release
Trinsic64 Jul 17, 2026
87692a1
Document v2.4 format and DSPRE capabilities
Trinsic64 Jul 17, 2026
2c9fcff
Add safe map replace and remap workflow
Trinsic64 Jul 17, 2026
3d1cd78
Prepare PDSMS 2.3.1 release packages
Trinsic64 Jul 19, 2026
67e47a2
Impl modern file browser dialogs
AsteroidPizza39 Jul 20, 2026
f764300
Merge pull request #8 from Pixelstyx/master
AdAstra-LD Jul 21, 2026
6070051
Update generated UI code with corrected backsound names (#8)
AdAstra-LD Jul 21, 2026
fd0c05f
Merge pull request #4 from rene589/upgrade/jogamp
AdAstra-LD Jul 21, 2026
68ca87e
Merge pull request #6 from LowriJenkins/Fix_Linux_install
AdAstra-LD Jul 21, 2026
0a31d9a
Fix linux install script paths and parameterize version
AdAstra-LD Jul 21, 2026
b5c659a
Merge pull request #7 from PoeticRainbow/master
AdAstra-LD Jul 21, 2026
6d3f718
Log skipped face groups on OBJ import
AdAstra-LD Jul 21, 2026
74f8bef
Merge pull request #9 from AsteroidPizza39/master
AdAstra-LD Jul 21, 2026
8d7b000
Credits udpate
AdAstra-LD Jul 21, 2026
d2e2ba6
Merge Trinsic64/master: QOL features, remap workflow, build moderniza…
AdAstra-LD Jul 21, 2026
be9fea4
Bump version to 2.4 and clean up build
AdAstra-LD Jul 21, 2026
3b6e34c
Rework toolbar layout and 2D view modifiers
AdAstra-LD Jul 21, 2026
14b6a3e
Restrict middle-click flood fill to the current selection
AdAstra-LD Jul 21, 2026
ee2c4b0
Animate selection outline and lighten fill while moving
AdAstra-LD Jul 21, 2026
b4a416d
Name collision default layers Type and Collision
AdAstra-LD Jul 21, 2026
20f22f2
Add group drag and Shift selection to the tile list
AdAstra-LD Jul 21, 2026
107a6fe
Release all selections when opening or creating a map
AdAstra-LD Jul 21, 2026
2c25411
Show a selection hint glyph next to the pointer
AdAstra-LD Jul 21, 2026
89296c9
Compact the View group into a two column grid
AdAstra-LD Jul 21, 2026
a5915c6
Separate exclusive button groups in the View grid
AdAstra-LD Jul 21, 2026
55678ca
Move Deselect next to the selection tools group
AdAstra-LD Jul 21, 2026
8e740e9
Add visual area export dialogs with shared scaffolding and progress t…
AdAstra-LD Jul 22, 2026
6181d31
Add Trinsic to credits
AdAstra-LD Jul 22, 2026
3b1c9ce
Overhaul move permission labels for all supported games
AdAstra-LD Jul 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
root = true

[*]
charset = utf-8
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true

[*.{bat,cmd}]
end_of_line = crlf

[*.sh]
end_of_line = lf

[gradlew]
end_of_line = lf

[*.md]
trim_trailing_whitespace = false
11 changes: 11 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
*.bat text eol=crlf
*.cmd text eol=crlf
*.sh text eol=lf
gradlew text eol=lf

*.jar binary
*.png binary
*.gif binary
*.ico binary
*.pdsts binary
*.pdsmap binary
22 changes: 7 additions & 15 deletions .github/workflows/gradle.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
# This workflow will build a Java project with Gradle
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle

name: Java CI with Gradle

on:
Expand All @@ -11,26 +8,21 @@ on:

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Cache Gradle packages
uses: actions/cache@v2
- uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: ${{ runner.os }}-gradle
distribution: temurin
java-version: 21
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v4
with:
name: Package
path: build/libs
76 changes: 76 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: Release

on:
push:
tags:
- 'v*'
workflow_dispatch:

permissions:
contents: write

jobs:
build-portable:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 21
cache: gradle
- run: chmod +x gradlew
- run: ./gradlew clean test portableZip
- uses: actions/upload-artifact@v4
with:
name: portable-release
path: build/release/*.zip

build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 21
cache: gradle
- name: Build application JAR
shell: pwsh
run: .\gradlew.bat clean test jar
- name: Build self-contained Windows application
shell: pwsh
run: |
$version = (Select-String -Path build.gradle -Pattern "version '([^']+)'" ).Matches[0].Groups[1].Value
$destination = Join-Path $PWD 'build\windows'
New-Item -ItemType Directory -Force -Path $destination | Out-Null
jpackage --type app-image --name 'Pokemon DS Map Studio' --app-version $version --input 'build\libs' --main-jar "Pokemon DS Map Studio-$version.jar" --main-class editor.MainFrame --dest $destination
$app = Join-Path $destination 'Pokemon DS Map Studio'
Copy-Item -Recurse -Force converter (Join-Path $app 'converter')
Copy-Item README.md,RELEASE_NOTES.md $app
$archive = Join-Path $PWD "build\release\Pokemon.DS.Map.Studio-$version-Windows.zip"
New-Item -ItemType Directory -Force -Path (Split-Path $archive) | Out-Null
Compress-Archive -Path $app -DestinationPath $archive -CompressionLevel Optimal
- uses: actions/upload-artifact@v4
with:
name: windows-release
path: build/release/*.zip

publish:
if: startsWith(github.ref, 'refs/tags/')
needs: [build-portable, build-windows]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: release
merge-multiple: true
- name: Generate checksums
run: cd release && sha256sum *.zip > SHA256SUMS.txt
- uses: softprops/action-gh-release@v2
with:
body_path: RELEASE_NOTES.md
files: |
release/*.zip
release/SHA256SUMS.txt
Binary file removed PDSMS_2_1.png
Binary file not shown.
Binary file added PDSMS_2_1_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
24 changes: 14 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
# Pokemon DS Map Studio
![Java CI with Gradle](https://github.com/Trifindo/Pokemon-DS-Map-Studio/workflows/Java%20CI%20with%20Gradle/badge.svg?branch=master)

Pokemon DS Map Studio is a tool for creating gen 4 and gen 5 Pokémon games' maps, designed to be used alongside SDSME.
Pokemon DS Map Studio is a tool for creating NDS Pokémon maps, designed to be used alongside SDSME.

It doesn't require 3D modeling, instead it provides a tilemap-like interface that is automatically converted in a 3D model.
Note that this tool **DOES NOT** import maps from the original games, neither it can modify them.
It doesn't require 3D modeling knowledge. Rather, it provides a tilemap-like interface that is automatically converted to a 3D model. Please note that this tool **DOES NOT** allow modification of maps from official games.



### WARNING !
As soon as you resave your existing PDSMAP files with this new version, backward compatibility with other PDSMS versions (including Trifindo's vanilla PDSMS) will most likely be lost.
This is due to the additional 3D layer, and the new "exportgroup" and "egcenter" keywords in PDSMAP files, necessary to make Export Groups work.

![Screenshot of PDSMS](PDSMS_2_1.png)

### Supported games:
- Pokemon Diamond/Pearl
Expand All @@ -16,21 +20,21 @@ Note that this tool **DOES NOT** import maps from the original games, neither it
- Pokemon Black 2/ White 2

## Running
For running Pokemon DS Map Studio, Java 8 must be installed in the computer.
Pokemon DS Map Studio has been tested under Windows, Linux and MacOS.
The Windows release includes a Java runtime and can be started with `Pokemon DS Map Studio.exe` without installing Java. The portable release requires Java 11 or newer.
Pokemon DS Map Studio can be executed by double clicking the "PokemonDsMapStudio.jar" file.
The program is tested under Windows, macOS and Linux.

If it doesn't open, try to open by opening a terminal and typing
If it doesn't open, try typing the following command in a terminal:
```shell
java -jar PokemonDSMapStudio.jar
```
and look at the output.
If you can't understand that, please open an issue in the appropriate section of this repository.
If you don't fully understand that, please open an issue in the appropriate section of this repository.

On Linux, the installation can be done directly in an automated way, just open a terminal and type:
```shell
sh -c "$(wget -O- https://raw.githubusercontent.com/Trifindo/Pokemon-DS-Map-Studio/master/pdsms-linux.sh)"
sh -c "$(wget -O- https://raw.githubusercontent.com/AdAstra-LD/Pokemon-DS-Map-Studio/master/pdsms-linux.sh)"
```

## Notes
For exporting `.nsbmd` files, `g3dcvtr.exe` and `xerces-c_2_5_0.dll` must be placed int the `bin/converter` folder.
If you wish to export `.nsbmd` files, place your legally obtained `g3dcvtr.exe` in the release's `converter` folder. The release creates this folder and includes the supporting DLL and setup instructions, but cannot redistribute `g3dcvtr.exe`.
115 changes: 115 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# Pokemon DS Map Studio 2.3.1 - Enhanced Tools Release

## Download and Packaging Improvements

- Added a ready-to-run Windows package with its own Java runtime and `.exe` launcher.
- Added a portable ZIP with Windows and Linux/macOS launch scripts.
- Included the expected root-level `converter` folder, supporting DLL, and setup instructions.
- Included README and release notes inside each distribution.
- Added automated tagged releases and SHA-256 checksum generation.
- `g3dcvtr.exe` remains user-supplied and is not redistributed.

This release expands Pokemon DS Map Studio with new map-selection tools, Smart Drawing workflows, tile organization, portable metadata, and collision-default editing.

## New Map Selection Tools

- Rectangle selection
- Lasso selection
- Wand selection
- Move selected tiles
- Copy, cut, paste, duplicate, and delete selections
- Rotate and flip selections
- Fill a selection with the currently selected tile
- Selection operations across map boundaries
- Undo support for selection edits

### Selection Shortcuts

| Action | Shortcut |
| --- | --- |
| Select all | `Ctrl+A` |
| Copy | `Ctrl+C` |
| Cut | `Ctrl+X` |
| Paste | `Ctrl+V` |
| Fill selection | `Ctrl+F` |
| Deselect | `Ctrl+D` |
| Delete selection | `Delete` |

Choose a selection tool from the main toolbar, select the required tiles, and then use the toolbar actions, keyboard shortcuts, or selection context menu.

## Smart Tools

- Smart freehand drawing with automatic edges and corners
- Smart line drawing
- Smart rectangle drawing
- Smart circle drawing
- Smart wand selection
- Smart rotation and flipping
- Inverted Smart Drawing shapes using the right mouse button
- Smart Drawing templates generated from arranged folder tiles

Select a Smart Drawing reference, enable **Smart Tools**, and use the normal drawing or shape tools on the map. Draw with the left mouse button for the standard form or the right mouse button for its inverted form.

## Tile Folders

- Create folders and nested subfolders
- Arrange tiles in custom grid layouts
- Keep empty layout spaces without creating placeholder tile IDs
- Drag and drop tiles between folders
- Move or remove tiles using the tile context menu
- Pin folders for access while browsing long tilesets
- Expand, collapse, resize, reorder, and scroll folders
- Give folder tiles independent display sizes without changing game tile dimensions
- Duplicate tile groups while preserving their folder arrangement
- Organize Smart Drawing templates into expandable groups
- Keep folder order independent from the game-facing **All Tiles** order

Right-click a folder or tile in the Tile List to access its organization, layout, display-size, movement, import, and export commands. Folder layouts are available in both the main window and the Tileset Editor.

## Portable Tile Metadata

- Export individual folders as portable bundles
- Import folders without replacing existing folder structures
- Import bundles containing tiles that are not already in the destination tileset
- Preserve folder hierarchy and layout slots
- Preserve tile names and folder display sizes
- Preserve collision defaults
- Preserve Smart Drawing organization

Use the folder context menu to export a folder bundle. Import the bundle into another compatible tileset to add its folder structure and included metadata.

## Collision Defaults

- Define collision defaults for both collision layers
- Create collision footprints larger than a tile's game dimensions
- Use folder display size as the collision-footprint reference
- Paint or clear collision values one cell at a time
- Fill or clear an entire collision layer
- Copy and paste one collision layer
- Copy and paste complete collision defaults
- Edit collision defaults from tile context menus
- Dedicated Collision Defaults workspace in the Tileset Editor
- Automatically apply defaults while drawing with **Auto Coll.**

Open the **Collision Defaults** tab in the Tileset Editor and select a tile from the Tile Selector. Choose a collision value, then left-click or drag to paint cells. Right-click a footprint cell to sample its collision value. Use **Copy Layer**, **Paste Layer**, **Copy All**, and **Paste All** to reuse settings efficiently.

Enable **Auto Coll.** in the main map tools when collision defaults should be applied automatically as tiles are painted.

## Tileset Editor Enhancements

- Multi-tile selection follows the visible folder layout order
- Move and organize folder tiles without changing **All Tiles** ordering
- Duplicate selected tile arrangements into new layout space
- Create Smart Drawing templates from selected folder layouts
- Assign and remove multiple selected tiles from folders
- Edit collision defaults while browsing the tileset

Use the Tile Selector to choose one or more tiles. Folder-based selection and movement operate on the folder arrangement, while **All Tiles** continues to represent the tileset's game-data order.

## Credits

- **Pokemon DS Map Studio:** [AdAstra-LD](https://github.com/AdAstra-LD/Pokemon-DS-Map-Studio) and the original PDSMS contributors
- **Enhanced tools and feature design:** [Trinsic64](https://github.com/Trinsic64)
- **Development assistance:** Claude Code and OpenAI Codex

Pokemon is a trademark of Nintendo, Creatures Inc., and GAME FREAK inc. This is an unofficial community project and is not affiliated with or endorsed by those companies.
Loading