Modding N++: Level Format & Tile Data

Discussion about mapping and userlevels.
Pure
Posts: 9
Joined: 2016.08.31 (01:20)

Postby OnGle » 2016.08.31 (02:49)

G'day everyone, I'm OnGle, long time N Game fan and first time poster (minus a little mispost on the wrong board over at Nv2),

Here I'll be dumping information from user level analysis, hopefully including a full format description for N++.
If you want to see if I have more information than I've currently posted, check the gist I'm using for notes.

What I Do Have:
  • Level Name Offset (+0x26 padded to 128bytes)
  • Game Mode Offset (+0x0C, I think it's only 1 byte but could be an integer)
    • 0: Single
    • 1: Coop
    • 2: Race
    • 4: Unset
  • Tile Map section (from 0xB8 to 0x47D), tiles appear left to right, top to bottom, (one bytes per tile),
  • Tile IDs
    • 0x0 - Nothing
    • 0x1 - Full Block
    • 0x2 - top half block
    • 0x3 - right half block
    • 0x4 - bottom half block
    • 0x5 - left half block
    • 0x6 - Lower Right Diagonal
    • 0x7 - Lower Left Diagonal
    • 0x8 - Upper Left Diagonal
    • 0x9 - Upper Right Diagonal
    • 0x0A - Top left outer curve
    • 0x0B - Top right outer curve
    • 0x0C - Bottom right outer curve
    • 0x0D - Bottom left outer curve
    • 0x0E - Top left inner curve
    • 0x0F - Top right inner curve
    • 0x10 - Bottom right inner curve
    • 0x11 - Bottom left inner curve
    • 0x12 - (Mid left to top right diagonal) Thin variant
    • 0x13 - (Upper left to mid right diagonal) Big variant
    • 0x14 - (Bottom left to mid right diagonal) Thin variant
    • 0x15 - (Mid left to bottom right diagonal) Big variant
    • 0x16 - (Mid right bottom left diagonal) Big variant
    • 0x17 - (Mid left to bottom right diagonal) Thin variant
    • 0x18 - (Mid left to top right diagonal) Big variant
    • 0x19 - (Upper left to mid right diagonal) Thin variant
    • 0x1A - (Bottom left to mid top diagonal) Big variant
    • 0x1B - (Mid top to bottom right diagonal) Thin variant
    • 0x1C - (Mid bottom to top right diagonal) Big variant
    • 0x1D - (Top Left to mid bottom diagonal) Thin variant
    • 0x1E - (Mid bottom to top right diagonal) Thin variant
    • 0x1F - (Mid bottom to top left diagonal) Big variant
    • 0x20 - (Bottom left to mid top diagonal) Thin variant
    • 0x21 - (Mid top to bottom right diagonal) Big variant
What I Don't Have
  • - Ninja Location
  • - Entity Location
  • - Any real understanding of the user level's header


Feel free to correct me, ask me about something, contribute, use information, etc, etc.
Last edited by OnGle on 2016.08.31 (05:37), edited 1 time in total.

Raigan and the Horse-Woman
Raigan and the Horse-Woman
Posts: 182
Joined: 2008.09.27 (02:14)
NUMA Profile: www.nmaps.net/user/sidke
Steam: www.steamcommunity.com/id/shagdish
Location: ⑨ 
Contact:

Postby sidke » 2016.08.31 (03:23)

i don't have the structure i parsed out at the moment, i will be more specific later

the map data structure is basically identical to n2. the only difference is the addition of more objects

there is a UInt32 for the header, and 966 UInt8 tiles, followed by the object blocks. each object block starts with a UInt16 as the number of objects in that block. each object has a specific number of UInt8 parameters that represent it.

in pseudo code

Code: Select all

read the header
for 966 times
	read a tile
for each object type
	read how many objects there are
	for each number of object
		for each parameter of object type
			read a parameter for this object
spoiler

辻菜摘が好きじゃー ヽ(´ー`)ノ sig by peking duck


Pure
Posts: 9
Joined: 2016.08.31 (01:20)

Postby OnGle » 2016.08.31 (04:34)

Awesome, thanks tons for the info, I'll update the post and maybe make a wiki page when I next get the time. Also I perhaps a little python parser library to get the ball rolling?

Pure
Posts: 9
Joined: 2016.08.31 (01:20)

Postby OnGle » 2016.08.31 (05:46)

Ok I said 2 bytes, you said a UInt8 and you're absolutely right. (I'm gonna stop saying byte and start saying octet or I'm just gonna confuse myself)

Now, You say the tiles start after Uint32 header, did you mean directly? Because from where I am it seems as if level metadata of some form takes up space between the header and the tile section. Is that the case for you?

I'm going to try and figure out the entities this afternoon.

Pure
Posts: 9
Joined: 2016.08.31 (01:20)

Postby OnGle » 2016.08.31 (07:49)

Spent a while checking entity data, the "IDs" were extrapolated by checking the "object count" relative location from the end of the Tile data with a level each with only a single type of object in it, however I haven't checked any of the parameters though.

(IDs technically start at 0x47D, directly after the tile block, as you already noted).

On top of that, I havn't been able to find instances of 0x7, 0x9 or 0x1B being nonzero (reserved for special states maybe?)

Admittedly that was quite rushed, so it is possible that the entity IDs are incorrect.
Once I can confirm they're either correct or not I'll edit the post again.

Raigan and the Horse-Woman
Raigan and the Horse-Woman
Posts: 182
Joined: 2008.09.27 (02:14)
NUMA Profile: www.nmaps.net/user/sidke
Steam: www.steamcommunity.com/id/shagdish
Location: ⑨ 
Contact:

Postby sidke » 2016.08.31 (09:04)

here i wrote a thing to help anybody that may want to analyze how the data is formatted

https://github.com/sidke/nppy
spoiler

辻菜摘が好きじゃー ヽ(´ー`)ノ sig by peking duck


Pure
Posts: 9
Joined: 2016.08.31 (01:20)

Postby OnGle » 2016.08.31 (09:48)

Beat me to the punch, nice one! All the params too! :D

(edit), for me that code raises ValueError, non hexadecimal value found in fromhex, are their multiple level formats or are you using base16 encoded levels or am I missing something?

Raigan and the Horse-Woman
Raigan and the Horse-Woman
Posts: 182
Joined: 2008.09.27 (02:14)
NUMA Profile: www.nmaps.net/user/sidke
Steam: www.steamcommunity.com/id/shagdish
Location: ⑨ 
Contact:

Postby sidke » 2016.09.01 (01:19)

OnGle wrote:for me that code raises ValueError, non hexadecimal value found in fromhex
what is the level format you are using, it should look like

Code: Select all

000000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010106000000000000000000000000000000000000000000000701010101010101010101010101010101010600000000000000000000000000000000000000000000000001010101010101010101010101010101010000000000000000000000000000000000000000000000000001010101010101010101010101010101010000000000000000000000000000000000000000000000000001010101010101010101010101010101010101010100000000000000000000000000000000000000000001010101010101010101010101010101010101010100000000000000000000000000000000000000000001010101010101010101010101010101010101010100000000000000000000000000000000000000000001010101010101010101010101010101010101010100000000000000000000000000000000000000000001010101010101010101010101010101010101010600000000000000000000000000000000000000000001010101010101010101010101010101010101060000000000000000000000000000000000000000000001010101010101010101010101010101010106000000000000000000000000000000000000000000000001010101010101010101010101010101010600000000000000000000000000000000000000000000000001010101010101010101010101010101010000000000000000000000000000000000000000000000000001010101010101010101010101010101010000000000000000000000000000000000000000000000000001010101010101010101010101010101010000000000000000000000000000000000000000000000000007010101010101010101010101010101010000000000000000000000000000000000000000000000000000000000010101010101010101010101010101010101010101090000000000000000000000000000000000000000010101010101010101010101010101010101010101010900000000000000000000000000000000000000010101010101010101010101010101010101010101010109000000000000000000000000000000000000010101010101010101010101010101010101010101010101090000000000000000000000000000000000010101010101010101010101010101010101010101010101010101010101010101000000000101010101010101010101010101010101010101010101010101010101010101010101010101000000000101010101010101010100010c261005142a342e34224426443a143e1432243628823886388a388e38822886288a288e2886188a188e1882188e000f0690569e469c4e405e4e4e4c4c7a5c7e5c7c5e7a5e7c5e7e5a7e5a7c5a7a500102364e86400000000004028c520c20308e500c20367c520c20387e500c2030000000000000000004067e52010a7a5601028e52000e7a560000000000000000000000000000030e706c706a706000000000000000000000000000000000000
spoiler

辻菜摘が好きじゃー ヽ(´ー`)ノ sig by peking duck


Pure
Posts: 9
Joined: 2016.08.31 (01:20)

Postby OnGle » 2016.09.02 (01:48)

Ahh there's the confusion, I was talking about the user levels, which seem to be just c-style binary structures.

For the record, here is an example of the files I was talking about (encoded in base64 for the sake of copy paste).

Code: Select all

BAAAANMEAAD/////AgAAACUAAAD/////AAAAAAAAAAAAAAAAAABVbnRpdGxlZC0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGjNLAAA=
It seems the two have remarkably similar structure just encoded in different ways.

The user levels seem to have the object params defined in a separate section from the object index, and each object's set of params begins with the `id` of the object although I can't confirm this as I havn't been able to parse it properly yet (not all objects atleast). It also seems as if even gold has 4 params or perhaps padding? See image below.

Image

Raigan and the Horse-Woman
Raigan and the Horse-Woman
Posts: 182
Joined: 2008.09.27 (02:14)
NUMA Profile: www.nmaps.net/user/sidke
Steam: www.steamcommunity.com/id/shagdish
Location: ⑨ 
Contact:

Postby sidke » 2016.09.02 (06:52)

yeah i spent a bit last night and tonight looking into it. the structure is, as you say, similar

what i got from it is

38 bytes of unknown things
128 chars of title
18 bytes of unknown things
966 bytes of tiles

then after this, you are also right in that it seems the numbers of the objects are listed first as shorts, then the objects. but i've noticed an issue that the numbers don't stay in the same place. i was not patient enough to try to figure anything about their random placement out, maybe you can find something out.

it's very annoying all this work is necessary to use the map data...
spoiler

辻菜摘が好きじゃー ヽ(´ー`)ノ sig by peking duck


Pure
Posts: 9
Joined: 2016.08.31 (01:20)

Postby OnGle » 2016.09.02 (08:28)

This is my current understanding of it's structure from what I have done last night and today:

Code: Select all

12 bytes of unknown things
1 byte of gamemode (0-single, 1-coop, 2-race, anything else - unset)
19 bytes of unknown things
128 chars of title
18 bytes of unknown things
966 bytes of tiles
80 unknown bytes
27 * 2 bytes of entity index (position determines id, value determines count)

for each object (in no particular order)
  1 byte determines id
  4 bytes determine args (may be 5 for some, however as above it seems most have 4)
Also any objects not explicitly set with params will be included with 0 for each param in the next save.
however the legal map range for objects is 4 <= x <= 172 and 4 <= y <= 96 making the objects appear out of the map.


The main thing blocking my progress at the moment is that I can't get a concrete definition on map object params. I can get early entities correctly (gold, mines, ninja, etc.) but the further down the list it goes the less reliable it seems.

It is a bit annoying but interests me enough to enjoy myself as well :)

(edit)

I'm pretty sure I've figured it out, enough to parse atleast, it seems the ids are not necessarily the same as the order you parse them from the index. Also door/button pairs (in param definitions) are either 2 seperate objects or (object_id, 'x', 'y', 'dir', '?1' , 'button_type', 'px', 'py', '?2', '?3'). The bit that confuses me is `button type` (or id if it's it's own object) for locked door is 7 and trap door is 9 (which would fill in some of the gaps in the known entities) however there doesn't seem to be any way to determine which button is for which door except the appropriate buttons params are usually immediately after the door (everytime I've tested it atleast).

(edit)

I see what you mean about values jumping around. The index "seems" to be reliable however everytime I think I have it, I'll test a map filled with entities, and one object's references in the object section doesn't match it's count in the index but does match the count of another, then I swap those two in the object IDs and they are correct but another two are out of whack.

Also door/door_button object pairs do not appear in pairs in the object section, they appear as "door1, door2,... door_button1, door_button2,..." I believe that door1 would correspond to door_button1.

Raigan and the Horse-Woman
Raigan and the Horse-Woman
Posts: 182
Joined: 2008.09.27 (02:14)
NUMA Profile: www.nmaps.net/user/sidke
Steam: www.steamcommunity.com/id/shagdish
Location: ⑨ 
Contact:

Postby sidke » 2016.09.13 (06:19)

edit: you had so many edits on your post, i didn't see you basically already solved it. whooooooops

edit 2: i'm very late to the party, there's already stuff up on the npp reddit. (ps reddit: there's a forum)

----

hiya, sorry for the delay. i figured it out this evening. the jumping around happened because of what you said of the doors having their own object
also something neat is we don't actually have to use those counts

here is a gist:
https://gist.github.com/sidke/a949a879a ... 18d068d1b2

and here is the gist:

Code: Select all

38 bytes of unknown things
128 chars of title
18 bytes of unknown things
966 bytes of titles
80 bytes of we don't care (the counts are in here)
X 5-byte packets of object parameters until the end of the file
the counts are for each of the objects, and panel switches count as their own object which threw me off. but i realized i could ignore them
in the object parameters, though, instead of the panels being counted in their own area, they are each listed right after the object they belong to
so while the counts are

(assume a is ninja, b is gold, c is door, d is door panel)

Code: Select all

1233
ABCD
they show up as

Code: Select all

abbcdcdcd
so for reading the file, just pull the rest of the file after the counts by 5's and you have all your objects as parameters. and the switches belong to the doors right before them
each parameter has the object type as the first element, the list being:

Code: Select all

0: ninja
1: mine
2: gold
3: exit
4: exit_switch
5: regular_door
6: locked_door
7: locked_door_switch
8: trap_door
9: trap_door_switch
10: launcher
11: oneway
12: chaingun_drone
13: laser_drone
14: zap_drone
15: chase_drone
16: floorguard
17: bounce
18: rocket_turret
19: gauss_turret
20: thwump
21: toggle_mine
22: evil_ninja
23: laser_turret
24: boost
25: deathball
26: microdrone
27: mini
28: shove_thwump
disclaimer: the numbers might be off

anyways, next steps will be making a parser that is easy to use to convert to and from, and maybe we can have the basis for third party app integration for mapping in place


-----


here is an example tiny map:

Image

and here is the json output:

Code: Select all

{"objects": [[0, 74, 38, 0, 0], [2, 82, 54, 0, 0], [2, 90, 54, 0, 0], [2, 78, 58, 0, 0], [2, 86, 58, 0, 0], [2, 94, 58, 0, 0], [3, 98, 62, 0, 0], [4, 74, 62, 0, 0], [8, 76, 42, 0, 3], [9, 96, 42, 0, 0], [8, 76, 46, 0, 3], [9, 96, 46, 0, 0]], "tiles": [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, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], "title": "test"}
spoiler

辻菜摘が好きじゃー ヽ(´ー`)ノ sig by peking duck


Pure
Posts: 9
Joined: 2016.08.31 (01:20)

Postby OnGle » 2016.10.07 (06:05)

Sorry for the really late reply, havn't been on the forums at all lately. Cheers for filling in the last few details, ignoring the counts does make the whole thing a lot easier.

Now as far as the rest of that stuff goes it sounds awesome. I think json should be a serious candidate as an intermediate format between versions as it's pretty readable and pretty simple to parse.

Something along the lines of

Code: Select all

{
    'gamemode': '',
    'title': '',
    'tiles': [],
    'objects': [
        ['gold', p1, p2, p3, p4],
        ['door', p1, p2, p3 p4, bp1, bp2, bp3, bp4],
    ],
}
Being able to specify names instead of id's seems like it would be nice to me, especially for tweaking a level by hand quickly in json.

Also storing doors and their buttons in the same entry could potentially reduce dramas with buttons being in the right place . (It's got it's own drawbacks though since then the button id must be known for each door when exporting back to n++ level format)

Almost as Bad as One
Posts: 2
Joined: 2017.12.28 (09:43)

Postby judithjames » 2018.04.11 (20:19)

Thanks for that information. Very useful response
Hi! I just have visited monaco race track and that was really great. It is always interesting to spend time with friends


Who is online

Users browsing this forum: No registered users and 5 guests