Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
bff1076
added test map with all props
Vegita2 Apr 17, 2026
bb2021a
added "File > export PNG" to save the whole map into a pixel perfect …
Vegita2 Apr 17, 2026
917e3fb
added test map with all itemDestruct entities
Vegita2 Apr 17, 2026
96847ed
updated test maps
Vegita2 Apr 17, 2026
2e7f1b4
moved common graphics rendering to "DefaultEntity". Npc and Enemy are…
Vegita2 Apr 17, 2026
860f537
defaultEntity can now handle sheets based on mapStyle
Vegita2 Apr 17, 2026
bad1811
added WaterBubblePanel
Vegita2 Apr 17, 2026
ba4c066
added BounceBlock
Vegita2 Apr 17, 2026
caa9bd9
added flipy to default entity
Vegita2 Apr 17, 2026
fa84529
added BallChanger
Vegita2 Apr 17, 2026
4320d77
added WaterBlock
Vegita2 Apr 17, 2026
12ee963
simplified code
Vegita2 Apr 17, 2026
31f6cd4
added KeyPanel
Vegita2 Apr 17, 2026
58f98b4
added ElementPole
Vegita2 Apr 17, 2026
0ce1790
added ElementPoleDest
Vegita2 Apr 17, 2026
1b5506d
fixed slope Props having wrong y offset
Vegita2 Apr 17, 2026
b544893
fixed flat entities not scaling properly in y direction
Vegita2 Apr 17, 2026
a204b3e
add GlowingLine sprites
Vegita2 Apr 17, 2026
f108e11
added missing map styles
Vegita2 Apr 18, 2026
054085f
added Door entity
Vegita2 Apr 18, 2026
fe281a0
added OneTimeSwitch
Vegita2 Apr 18, 2026
30242ab
added SteamPipe
Vegita2 Apr 18, 2026
8be8f96
simplified EventTrigger
Vegita2 Apr 18, 2026
8791f5a
added graphics for BounceSwitch
Vegita2 Apr 18, 2026
696f456
removed "boxColor" of entities that shouldn't have one
Vegita2 Apr 18, 2026
d5920c8
updated input-with-button component to use signals
Vegita2 Apr 18, 2026
0c46921
fixed icon not beeing centered
Vegita2 Apr 18, 2026
6cd9f25
added simple maps widget that allows directly loading the target map
Vegita2 Apr 18, 2026
e5ce1f3
added TeleportStairs
Vegita2 Apr 18, 2026
cad2a9a
show door mats as active if they have no condition
Vegita2 Apr 18, 2026
ac0807f
added RegenDestruct
Vegita2 Apr 18, 2026
6d292ef
added sprites to FloorSwitch
Vegita2 Apr 18, 2026
22fe79a
removed deprecated base size overrides
Vegita2 Apr 18, 2026
f44f468
add default properties when generating new entities
Vegita2 Apr 18, 2026
0981263
removed WallBlocker entity, is only used as base for other wall entities
Vegita2 Apr 18, 2026
28f80f1
added WallHorizontal
Vegita2 Apr 18, 2026
942fd6a
added WallVertical
Vegita2 Apr 18, 2026
7928b88
refactored wall entity classes
Vegita2 Apr 18, 2026
e7226ba
fixed SteamPipe rendering slightly wrong
Vegita2 Apr 18, 2026
31b71fc
added SteamTurnout
Vegita2 Apr 18, 2026
6604916
updated changelog
Vegita2 Apr 18, 2026
9707b2f
added Switch sprites
Vegita2 Apr 19, 2026
20ff763
added QuicksandHole sprites
Vegita2 Apr 19, 2026
6418dab
formatting
Vegita2 Apr 19, 2026
a4fb80d
fixed scalable entities sometimes behaving wrong
Vegita2 Apr 19, 2026
a9456a2
added base size to GlowingLine
Vegita2 Apr 19, 2026
3947049
fixed scalable prop not matching the game exactly
Vegita2 Apr 19, 2026
17ca8ee
added Chest
Vegita2 Apr 19, 2026
e040052
added shadows to entities
Vegita2 Apr 19, 2026
223d558
refactored default entity a bit
Vegita2 Apr 19, 2026
765a99f
updated entityFinder so it doesn't crash when parsing fails, instead …
Vegita2 Apr 19, 2026
c5abd88
cache json promise to avoid repeated requests
Vegita2 Apr 21, 2026
f6b42c3
fixed entities snapping to size 1x1 once selected if they have no siz…
Vegita2 Apr 21, 2026
286654d
selecting entities with grid enabled doesn't snap them to the grid be…
Vegita2 Apr 21, 2026
303f8b4
fixed preview image rendering not causing reflow when selecting scala…
Vegita2 Apr 21, 2026
2bc771b
increased string widget dropdown size
Vegita2 Apr 21, 2026
da93950
added graphics for JumpPanel
Vegita2 Apr 21, 2026
eee0a1e
added graphics for TeleportField
Vegita2 Apr 21, 2026
419479b
added EnemyCounter
Vegita2 Apr 21, 2026
0dd8ed2
added Lorry
Vegita2 Apr 21, 2026
30e500c
fixed size widget not reloading when entity scalable settings change
Vegita2 Apr 21, 2026
09cb412
tried to fix size again
Vegita2 Apr 21, 2026
55d1546
added LorryRail
Vegita2 Apr 21, 2026
49ae1e1
render water bubble for WaterBubblePanel
Vegita2 Apr 21, 2026
9497ea4
added PushPullBlock and WavePushPullBlock
Vegita2 Apr 21, 2026
26618bb
added AntiCompressor
Vegita2 Apr 21, 2026
6a50007
added TeslaCoil
Vegita2 Apr 21, 2026
1573861
added Compressor
Vegita2 Apr 21, 2026
e2e29ac
added Block
Vegita2 Apr 21, 2026
bea1258
added Blocker
Vegita2 Apr 21, 2026
684368c
added DynamicPlatform
Vegita2 Apr 21, 2026
57b1ce6
added Magnet
Vegita2 Apr 21, 2026
0e4ed1c
removed wallY because i don't understand it
Vegita2 Apr 22, 2026
7996abd
use string widget for Face, because it's just a dropdown
Vegita2 Apr 22, 2026
d7c3dd7
added CompressorBouncer
Vegita2 Apr 22, 2026
ce4033f
added wallY back, required for Prop
Vegita2 Apr 22, 2026
11c0748
added graphics for BombPanel
Vegita2 Apr 22, 2026
7f45e8a
update BossPlatform colors
Vegita2 Apr 22, 2026
b389c5b
added ElementShield
Vegita2 Apr 22, 2026
0ca509d
updated enemy rendering to use default entity rendering functions and…
Vegita2 Apr 22, 2026
ba4eba9
fixed Prop sometimes not rendering
Vegita2 Apr 22, 2026
94d1929
added MultiHitSwitch
Vegita2 Apr 22, 2026
29686ad
added Elevator
Vegita2 Apr 22, 2026
83dd1ed
added support for "useStyleSheet" in default entity
Vegita2 Apr 22, 2026
3044d6e
added ExtractPlatform
Vegita2 Apr 22, 2026
da4f16f
added GlowingGround
Vegita2 Apr 22, 2026
e310949
fixed some Props not working because of missing xCount
Vegita2 Apr 22, 2026
98ccf8d
added graphics for GroupSwitch
Vegita2 Apr 22, 2026
6e7ae0c
added boxColor back to LocationEvent
Vegita2 Apr 22, 2026
84fd020
made ConditionalLight smaller like in the source
Vegita2 Apr 22, 2026
8bf8485
added JumpPanelFar
Vegita2 Apr 22, 2026
9347655
fixed some Props not beeing rendered properly
Vegita2 Apr 22, 2026
0550dc1
added JumpPanelFloat
Vegita2 Apr 22, 2026
ced381c
added PushPullDest
Vegita2 Apr 22, 2026
1fc9eea
added RotateBlocker
Vegita2 Apr 22, 2026
3dddec4
added graphics to WaveTeleport
Vegita2 Apr 22, 2026
caf8681
added graphics for SlidingBlock
Vegita2 Apr 23, 2026
c8d4ce6
updated changelog
Vegita2 Apr 23, 2026
90a76c1
added "exclude" fitler to entities
Vegita2 Apr 23, 2026
06c8f8e
use baseSize for entities that can't scale
Vegita2 Apr 23, 2026
2dbcc41
fixed issue with some entities with mapStyle not rendering
Vegita2 Apr 23, 2026
3e2326f
added steam pipe types through json
Vegita2 Apr 23, 2026
82a1f19
fixed mapStyle rendering again
Vegita2 Apr 23, 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
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,21 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

## [Unreleased]
### Added
- Added "File > Export PNG" to export the current map as a pixel perfect PNG image.
- Added "Maps" widget which shows a button to load the target map directly
- Generating new entities now adds default properties to it
- All entities with graphics should render correctly now
- improved enemy rendering and respects face direction
- Added "exclude" filter to entities

### Changed
- Increased dropdown size for String widget

### Fixed
- Selecting an entity with the grid enabled no longer snaps it automatically until the user actually drags it.
- Fixed rendering of preview image in ScalableProp causing layout jumps

## [2.2.0] 2026-04-03
### Changed
- Moved "vanilla maps" toggle from settings into the map loading dialog to allow quick switching between mod and vanilla maps [#347](https://github.com/CCDirectLink/crosscode-map-editor/issues/347)
Expand Down
6 changes: 5 additions & 1 deletion backend/src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,11 @@ app.get('/api/allFilesInFolder', async (req, res) => res.json(await api.getAllFi
app.get('/api/allMods', async (_, res) => res.json(await api.getAllMods(config.pathToCrosscode)));
app.get('/api/allModMapEditorConfigs', async (_, res) => res.json(await api.getAllModMapEditorConfigs(config.pathToCrosscode)));
app.post('/api/get', async (req, res) => {
res.json(await api.get(config.pathToCrosscode, req.body.path));
try {
res.json(await api.get(config.pathToCrosscode, req.body.path));
} catch (err) {
res.status(404).json(err);
}
});
app.post('/api/resolve', async (req, res) => {
try {
Expand Down
1 change: 1 addition & 0 deletions test-maps/test-all-props.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions test-maps/test-item-destruct.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"name":"tests/test-item-destruct","levels":[{"height":0}],"mapWidth":37,"mapHeight":28,"masterLevel":0,"attributes":{"saveMode":"ENABLED","volume":1,"bgm":"cargoShip","cameraInBounds":false,"map-sounds":"CARGO_SHIP_OUTSIDE","mapStyle":"default","weather":"BERGEN_SUNNY","area":"autumn-area","npcRunners":"CROSSCENTRAL"},"screen":{"x":0,"y":0},"entities":[{"type":"Marker","x":87,"y":71,"level":0,"settings":{"name":"start","dir":"SOUTH","mapId":1,"size":{"x":16,"y":16,"z":0}}},{"type":"ItemDestruct","x":28,"y":40,"level":0,"settings":{"desType":"Autumn-Fall-Ground-1","mapId":2}},{"type":"ItemDestruct","x":58,"y":40,"level":0,"settings":{"desType":"Autumn-Fall-Ground-2","mapId":3}},{"type":"ItemDestruct","x":88,"y":40,"level":0,"settings":{"desType":"Autumn-Fall-Special","mapId":4}},{"type":"ItemDestruct","x":118,"y":40,"level":0,"settings":{"desType":"Autumn-Fall-Water-1","mapId":5}},{"type":"ItemDestruct","x":148,"y":40,"level":0,"settings":{"desType":"Autumn-Fall-Water-2","mapId":6}},{"type":"ItemDestruct","x":178,"y":40,"level":0,"settings":{"desType":"Autumn-Fall-Water-Special","mapId":7}},{"type":"ItemDestruct","x":208,"y":40,"level":0,"settings":{"desType":"Autumn-Ground-1","mapId":8}},{"type":"ItemDestruct","x":238,"y":40,"level":0,"settings":{"desType":"Autumn-Ground-2","mapId":9}},{"type":"ItemDestruct","x":268,"y":40,"level":0,"settings":{"desType":"Autumn-Special","mapId":10}},{"type":"ItemDestruct","x":298,"y":40,"level":0,"settings":{"desType":"Autumn-Water-1","mapId":11}},{"type":"ItemDestruct","x":328,"y":40,"level":0,"settings":{"desType":"Autumn-Water-2","mapId":12}},{"type":"ItemDestruct","x":358,"y":40,"level":0,"settings":{"desType":"Autumn-Water-Special","mapId":13}},{"type":"ItemDestruct","x":388,"y":40,"level":0,"settings":{"desType":"AutumnPlantA","mapId":14}},{"type":"ItemDestruct","x":24,"y":82,"level":0,"settings":{"desType":"Bakii-Vase","mapId":15}},{"type":"ItemDestruct","x":28,"y":116,"level":0,"settings":{"desType":"Bergen-PlantA-1","mapId":16}},{"type":"ItemDestruct","x":58,"y":116,"level":0,"settings":{"desType":"Bergen-PlantA-1-Snow","mapId":17}},{"type":"ItemDestruct","x":88,"y":116,"level":0,"settings":{"desType":"Bergen-PlantA-2","mapId":18}},{"type":"ItemDestruct","x":118,"y":116,"level":0,"settings":{"desType":"Bergen-PlantA-2-Snow","mapId":19}},{"type":"ItemDestruct","x":148,"y":116,"level":0,"settings":{"desType":"Bergen-PlantA-Rare","mapId":20}},{"type":"ItemDestruct","x":178,"y":116,"level":0,"settings":{"desType":"Bergen-PlantA-Snow-Rare","mapId":21}},{"type":"ItemDestruct","x":208,"y":116,"level":0,"settings":{"desType":"Bergen-PlantB-1","mapId":22}},{"type":"ItemDestruct","x":238,"y":116,"level":0,"settings":{"desType":"Bergen-PlantB-1-Snow","mapId":23}},{"type":"ItemDestruct","x":268,"y":116,"level":0,"settings":{"desType":"Bergen-PlantB-2","mapId":24}},{"type":"ItemDestruct","x":298,"y":116,"level":0,"settings":{"desType":"Bergen-PlantB-2-Snow","mapId":25}},{"type":"ItemDestruct","x":328,"y":116,"level":0,"settings":{"desType":"Bergen-PlantB-Rare","mapId":26}},{"type":"ItemDestruct","x":358,"y":116,"level":0,"settings":{"desType":"Bergen-PlantB-Snow-Rare","mapId":27}},{"type":"ItemDestruct","x":388,"y":116,"level":0,"settings":{"desType":"Bergen-Snow-Crystal","mapId":28}},{"type":"ItemDestruct","x":414,"y":118,"level":0,"settings":{"desType":"Bergen-Vase-1","mapId":29}},{"type":"ItemDestruct","x":25,"y":154,"level":0,"settings":{"desType":"Cold-Dng-Egg-1","mapId":30}},{"type":"ItemDestruct","x":47,"y":154,"level":0,"settings":{"desType":"Cold-Dng-Egg-2","mapId":31}},{"type":"ItemDestruct","x":69,"y":154,"level":0,"settings":{"desType":"Cold-Dng-Egg-3","mapId":32}},{"type":"ItemDestruct","x":94,"y":154,"level":0,"settings":{"desType":"Cold-Dng-Egg-4","mapId":33}},{"type":"ItemDestruct","x":130,"y":162,"level":0,"settings":{"desType":"Cold-Dng-Egg-Special-A","mapId":34}},{"type":"ItemDestruct","x":176,"y":162,"level":0,"settings":{"desType":"Cold-Dng-Egg-Special-B","mapId":35}},{"type":"ItemDestruct","x":28,"y":208,"level":0,"settings":{"desType":"Heat-Bones-1","mapId":36}},{"type":"ItemDestruct","x":58,"y":208,"level":0,"settings":{"desType":"Heat-Bones-2","mapId":37}},{"type":"ItemDestruct","x":88,"y":208,"level":0,"settings":{"desType":"Heat-Bones-Special","mapId":38}},{"type":"ItemDestruct","x":118,"y":208,"level":0,"settings":{"desType":"Heat-Cactus-1","mapId":39}},{"type":"ItemDestruct","x":148,"y":208,"level":0,"settings":{"desType":"Heat-Cactus-2","mapId":40}},{"type":"ItemDestruct","x":178,"y":208,"level":0,"settings":{"desType":"Heat-Cactus-Special","mapId":41}},{"type":"ItemDestruct","x":208,"y":208,"level":0,"settings":{"desType":"Heat-Dry-Bush-1","mapId":42}},{"type":"ItemDestruct","x":238,"y":208,"level":0,"settings":{"desType":"Heat-Dry-Bush-2","mapId":43}},{"type":"ItemDestruct","x":268,"y":208,"level":0,"settings":{"desType":"Heat-Dry-Bush-Special","mapId":44}},{"type":"ItemDestruct","x":298,"y":208,"level":0,"settings":{"desType":"Heat-Dry-Cactus-1","mapId":45}},{"type":"ItemDestruct","x":328,"y":208,"level":0,"settings":{"desType":"Heat-Dry-Cactus-2","mapId":46}},{"type":"ItemDestruct","x":358,"y":208,"level":0,"settings":{"desType":"Heat-Hill-1","mapId":47}},{"type":"ItemDestruct","x":388,"y":208,"level":0,"settings":{"desType":"Heat-Hill-2","mapId":48}},{"type":"ItemDestruct","x":418,"y":208,"level":0,"settings":{"desType":"Heat-Hill-Special","mapId":49}},{"type":"ItemDestruct","x":448,"y":208,"level":0,"settings":{"desType":"Heat-Palmapple-1","mapId":50}},{"type":"ItemDestruct","x":478,"y":208,"level":0,"settings":{"desType":"Heat-Palmapple-2","mapId":51}},{"type":"ItemDestruct","x":508,"y":208,"level":0,"settings":{"desType":"Heat-Palmapple-Special","mapId":52}},{"type":"ItemDestruct","x":28,"y":246,"level":0,"settings":{"desType":"Jungle-Bees-1","mapId":53}},{"type":"ItemDestruct","x":58,"y":246,"level":0,"settings":{"desType":"Jungle-Bees-2","mapId":54}},{"type":"ItemDestruct","x":88,"y":246,"level":0,"settings":{"desType":"Jungle-Bees-3","mapId":55}},{"type":"ItemDestruct","x":118,"y":246,"level":0,"settings":{"desType":"Jungle-Flower-1","mapId":56}},{"type":"ItemDestruct","x":148,"y":246,"level":0,"settings":{"desType":"Jungle-Flower-2","mapId":57}},{"type":"ItemDestruct","x":178,"y":246,"level":0,"settings":{"desType":"Jungle-Flower-Dotted-1","mapId":58}},{"type":"ItemDestruct","x":208,"y":246,"level":0,"settings":{"desType":"Jungle-Flower-Dotted-2","mapId":59}},{"type":"ItemDestruct","x":238,"y":246,"level":0,"settings":{"desType":"Jungle-Flower-Dotted-Special","mapId":60}},{"type":"ItemDestruct","x":268,"y":246,"level":0,"settings":{"desType":"Jungle-Flower-Special","mapId":61}},{"type":"ItemDestruct","x":298,"y":246,"level":0,"settings":{"desType":"Jungle-Shroom-1","mapId":62}},{"type":"ItemDestruct","x":328,"y":246,"level":0,"settings":{"desType":"Jungle-Shroom-2","mapId":63}},{"type":"ItemDestruct","x":358,"y":246,"level":0,"settings":{"desType":"Jungle-Shroom-Special","mapId":64}},{"type":"ItemDestruct","x":388,"y":246,"level":0,"settings":{"desType":"Jungle-Waterplant-1","mapId":65}},{"type":"ItemDestruct","x":418,"y":246,"level":0,"settings":{"desType":"Jungle-Waterplant-2","mapId":66}},{"type":"ItemDestruct","x":448,"y":246,"level":0,"settings":{"desType":"Jungle-Waterplant-Closed-1","mapId":67}},{"type":"ItemDestruct","x":478,"y":246,"level":0,"settings":{"desType":"Jungle-Waterplant-Closed-2","mapId":68}},{"type":"ItemDestruct","x":508,"y":246,"level":0,"settings":{"desType":"Jungle-Waterplant-Special","mapId":69}},{"type":"ItemDestruct","x":28,"y":284,"level":0,"settings":{"desType":"Sapphire-Bamboo-1","mapId":70}},{"type":"ItemDestruct","x":58,"y":284,"level":0,"settings":{"desType":"Sapphire-Bamboo-2","mapId":71}},{"type":"ItemDestruct","x":88,"y":284,"level":0,"settings":{"desType":"Sapphire-Bamboo-Special","mapId":72}},{"type":"ItemDestruct","x":118,"y":284,"level":0,"settings":{"desType":"Sapphire-Bush-1","mapId":73}},{"type":"ItemDestruct","x":148,"y":284,"level":0,"settings":{"desType":"Sapphire-Bush-2","mapId":74}},{"type":"ItemDestruct","x":178,"y":284,"level":0,"settings":{"desType":"Sapphire-Bush-Special","mapId":75}},{"type":"ItemDestruct","x":208,"y":284,"level":0,"settings":{"desType":"Sapphire-Cobalt-1","mapId":76}},{"type":"ItemDestruct","x":238,"y":284,"level":0,"settings":{"desType":"Sapphire-Cobalt-2","mapId":77}},{"type":"ItemDestruct","x":268,"y":284,"level":0,"settings":{"desType":"Sapphire-Cobalt-Special","mapId":78}},{"type":"ItemDestruct","x":28,"y":322,"level":0,"settings":{"desType":"StoneOfAges","mapId":79}},{"type":"ItemDestruct","x":58,"y":322,"level":0,"settings":{"desType":"StoneOfNothing","mapId":80}},{"type":"ItemDestruct","x":88,"y":322,"level":0,"settings":{"desType":"StoneOfSpace","mapId":81}},{"type":"ItemDestruct","x":118,"y":322,"level":0,"settings":{"desType":"StoneOfSpirit","mapId":82}},{"type":"ItemDestruct","x":148,"y":322,"level":0,"settings":{"desType":"StoneOfTruth","mapId":83}},{"type":"ItemDestruct","x":178,"y":322,"level":0,"settings":{"desType":"StoneOfValor","mapId":84}},{"type":"ItemDestruct","x":24,"y":360,"level":0,"settings":{"desType":"TrashBag1","mapId":85}},{"type":"ItemDestruct","x":62,"y":360,"level":0,"settings":{"desType":"TrashBag2","mapId":86}},{"type":"ItemDestruct","x":100,"y":368,"level":0,"settings":{"desType":"TrashBag3","mapId":87}},{"type":"ItemDestruct","x":138,"y":368,"level":0,"settings":{"desType":"TrashBag4","mapId":88}}],"layer":[{"id":1,"type":"Background","name":"Ground","level":0,"width":37,"height":28,"visible":1,"tilesetName":"media/map/autumn-outside.png","repeat":false,"distance":1,"tilesize":16,"moveSpeed":{"x":0,"y":0},"data":[[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,754,1,1,1,1,754,1,1,754,1,1,1,754,1,1,1,1,754,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,754,1,1,1,1,754,1,754,754,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,754,1,1,1,1,1,1,1],[1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,754,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,754,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,21,1,1,1,1,1,754,1,1,754,1,754,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,754,1,754,1,754,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,754,754,1,1,1],[1,1,1,754,1,1,754,1,1,1,1,1,1,1,1,1,754,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,754,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,754,1,1,1,1,1,1,1],[1,1,1,1,754,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,754,1,1,1,1,754,1,1,754,1,1,1,754,1,1,1,1,754,1,1,754,1,1,1,1,754,1,1,754,1,754,1,1,1,1,1],[1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,754,1,754,1,754,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,754,1,1,1,754,1,1,1,1,754,1,1,754,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,754,754,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,754,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,754,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],"lighter":false},{"type":"Collision","name":"Coll","level":0,"width":37,"height":28,"visible":1,"tilesetName":"media/map/collisiontiles-16x16.png","repeat":false,"distance":1,"tilesize":16,"moveSpeed":{"x":0,"y":0},"data":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],"lighter":false}]}
2 changes: 1 addition & 1 deletion test-maps/test-scale-prop.json

Large diffs are not rendered by default.

131 changes: 68 additions & 63 deletions tools/entityFinder.html
Original file line number Diff line number Diff line change
@@ -1,54 +1,54 @@
<html>
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr {
background-color: rgba(0, 0, 0, 0.1);
}
tr:first-child {
background-color: rgba(0, 0, 0, 0.34);
}
body {
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
background-color: #def;
font-family: Roboto, sans-serif;
color: white;
}
.container1 {
overflow: hidden;
flex: 0 1 auto;
padding: 20px;
background-color: #e6594c;
}
.container2 {
flex: 1 1 0;
padding: 20px;
background-color: #419932;
}
#listing {
flex: 1 1 0;
max-height: 300px;
min-height: 0;
overflow-y: auto;
}
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}

td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}

tr {
background-color: rgba(0, 0, 0, 0.1);
}

tr:first-child {
background-color: rgba(0, 0, 0, 0.34);
}

body {
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
background-color: #def;
font-family: Roboto, sans-serif;
color: white;
}

.container1 {
overflow: hidden;
flex: 0 1 auto;
padding: 20px;
background-color: #e6594c;
}

.container2 {
flex: 1 1 0;
padding: 20px;
background-color: #419932;
}

#listing {
flex: 1 1 0;
max-height: 300px;
min-height: 0;
overflow-y: auto;
}
</style>
<body>
<div class="container1">
Expand All @@ -69,13 +69,13 @@
let out;

function showEntity(out) {
let output = document.getElementById("output");
let output = document.getElementById('output');
while (output.firstChild) {
output.removeChild(output.firstChild);
}
console.log(out);
Object.keys(out).forEach(key => {
let item = document.createElement("li");
let item = document.createElement('li');
item.innerHTML = key + ': ' + out[key];
output.appendChild(item);
});
Expand Down Expand Up @@ -131,12 +131,12 @@
function generate() {
out = {};
out['file'] = new Set();
let input = document.getElementById("fileinput").files;
let entity = document.getElementById("entity").value;
let input = document.getElementById('fileinput').files;
let entity = document.getElementById('entity').value;
let parsed = 0;
const reader = new FileReader();
reader.onload = evt => {
readFile(evt.target.result, entity);
readFile(evt.target.result, entity, input[parsed]);
parsed++;
if (parsed % 10 === 0) {
console.log(parsed);
Expand All @@ -153,28 +153,35 @@
}

function fileInputChange() {
let output = document.getElementById("listing");
let output = document.getElementById('listing');
while (output.firstChild) {
output.removeChild(output.firstChild);
}

let files = event.target.files;

for (let i = 0; i < files.length; i++) {
let item = document.createElement("li");
let item = document.createElement('li');
item.innerHTML = files[i].webkitRelativePath;
output.appendChild(item);
}
}

function readFile(file, entity) {
file = JSON.parse(file);
function readFile(file, entity, fileObj) {
try {
file = JSON.parse(file);
} catch (e) {
console.log(`file: ${fileObj.name} - ${fileObj.webkitRelativePath}`);
console.error(e);
return;
}
const entities = file.entities.filter(e => e.type === entity);


entities.forEach(e => {
if (!e.settings)
if (!e.settings) {
return
}
Object.keys(e.settings).forEach(key => {
if (!out[key]) {
out[key] = new Set();
Expand All @@ -183,8 +190,6 @@
out[key].add(JSON.stringify(e.settings[key], null, 2));
})
})


}
</script>

Expand Down
Loading
Loading