Tower of Babel Forum - A New Tower in the Making

Tower Conversion Tool

Re: Tower Conversion Tool

Zitat: Artinum
Gosh, what violent imagery. Isn't there a friendly way to say that you've completed the first, essential part of a task and that the rest will be considerably less difficult?But that's not the point. The "rest" will probably be a lot more difficult than what I've done yet. The point is that, after pushing the task ahead of me (shelving the task?) for quite a while, I somehow managed to enjoy the challenge, and now I just don't want to stop...


Re: Tower Conversion Tool

Zitat: Fawlty
... after pushing the task ahead of me (shelving the task?) ...Shelving a task means putting it to one side, leaving it alone so you can get on with other things instead. I'm not sure if that's what you mean by pushing it ahead, which is a phrase I've never heard of...

English is horrific with this sort of thing. Take "put down", for instance. In one sense it means to place something down on the floor, or a desk, or some such. In a second sense, a put-down is an insult or cutting remark, often as a response to a chat-up line. And thirdly, if you take your cat or dog to the vet they can be put down (usually by lethal injection).

This is to say nothing of such wonderful English metaphors (or lies, as I think of them) such as "it's raining cats and dogs" or such witticisms as "it's better than a poke in the eye with a blunt stick".

Sometimes I feel that I live in a bizarre country.

Andrew.


Re: Tower Conversion Tool

*lollollol*
Man, I just love your postings....

Zitat: Artinum
Shelving a task means putting it to one side, leaving it alone so you can get on with other things instead. I'm not sure if that's what you mean by pushing it ahead, which is a phrase I've never heard of...I quite literally (and obviously uncorrectly) translated the phrase from German. Is there any equivalent for "anglicism", by the way?
Anyway, what I meant was more or less what you described. But not exactly. It's rather "putting it to one side, leaving it alone so you can avoid it and do nothing instead"...

Re: Tower Conversion Tool

Ah. That's called "management".


Re: Tower Conversion Tool

HA!
I just played a couple of levels I created on the Amiga in the Remake!
Conversion works pretty well, though I still have to do an intermediate step. If I load a converted tower library directy in the remake, I get an error message. If I load the file into Mayo's editor, save it again, and then load it in the remake, it works. Mayo, what are the bytes 4 and 5 in the library format for? Some kind of checksum apparently. How do I calculate the correct value??

Another thing still missing is the mapping from the original effects and colours setting to the RToB settings. Mayo, can you give me something like default values for the settings in the remake? And what colour format do you use?

Plus, of course, conversion of groups, highscores and savegames to RToB format isn't possible, as RToB doesn't support them yet.

Anyway, I'm quite pleased with the tool so far, and I'm going to upload the latest version tomorrow.


Re: Tower Conversion Tool

Oh yes, and it's also possible to use Mayo's Editor to create towers for the Amiga and Atari versions of ToB!
Simply create a tower library with the editor (using the CENTRAL 8x8 field of the LOWER 4 levels (leave empty: 4 columns west and east, 4 rows north and south, and the upper 4 levels of course), save it, convert it to ADF or ST, and load it with the emulated game.
Not really a useful feature still, as all colours will be black...

Much more useful:
Convert your ADF or ST towers to RToB format and open them in Mayo's Editor to quickly and conveniently browse through the towers.
I will implement a feature to the conversion tool that extracts towers from groups, so you can also see towers that you don't possess as single tower files.
I'm still thinking about excluding password protected towers from conversion though...

Re: Tower Conversion Tool

Zitat: Artinum
Sometimes I feel that I live in a bizarre country.(Chortle)

To quote William of Baskerville, from the Name of the Rose:

"Looking fondly at the book, he said "Yes, the people in my island are all a bit mad.""

(quoted from memory)


So the tool is finished? Congratulations, Fawlty!
(bows)

("Blut lecken" is, I think, "tasting blood", by the way.
(sings)
"I've tasted blood and I want more (more more more)"
Right, that's enough.)


--
Das Lemsche Gesetz:
Niemand liest etwas; wenn er etwas liest, versteht er es nicht; wenn er es versteht, vergißt er es sofort.

Re: Tower Conversion Tool

I'm also very pleased to see, you worked on ADF/ST<->RToB conversion very cool...

@fawlty:
Oh stimmt *batsch* in der _TWR_loadLibrary() sind ja nicht die ersten 6 bytes beschrieben, urgs.
Ich mache das ganze Format hier nochmal jetzt ordentlich auch für vielleicht andere Interessierte
(auch das mit den Farben)...


FAQ RTob tower library file format:
-----------------------------------

Important:

colors are 4 bytes format -> BGRA (B: blue=0-255, G: green=0-255, R: red=0-255, A: alway 255 here
using little endian order

RToB tower library header:

$0000-$0001: signature ($54 $54 = ASCII TT for "TobTowers")
$0002-$0005: size of file in bytes (little endian order, like all integers here)
$0006-$0009: number of towers in library
$000a-$0109: name of library file (0 terminated ASCII string, max. 255 chars)
$0110-$03ff: (unused yet...)

$0400-$17ff: Tower 1
$1800-$2c00: Tower 2
...

One RToB tower (5120 bytes):

$0000-$0003: index of tower in library file (starting with 1)
$0004-$0103: tower title (0 terminated ASCII string, max. 255 chars)
$0104-$0203: tower author (0 terminated ASCII string, max. 255 chars)
$0204-$0207: time limit in seconds
$0208-$020b: number of klondikes to collect
$020c-$020f: number of robots to destroy
$0210-$0213: external cameras enabled? (FALSE=0, TRUE not 0)
$0214-$0217: mine destroys floor?
$0218-$021b: timebomb speed (0: slow / 1: medium / 2: fast)
$021c-$021f: sky color 1 (top)
$0220-$0223: sky color 2 (horizont)
$0224-$0227: sun color
$0228-$022b: sun size (0-10)
$022c-$022f: ground color 1 (ground)
$0230-$0233: ground height (0-10)
$0234-$0237: number of moons (0-3)
$0238-$023b: number of stars (0-100)
$023c-$023f: FX
bit0: lightnings
bit1: meteors
bit2: blue pulse
bit3: clouds
bit4: heavy clouds)
$0240-$0243: floor/box color pattern
0: crossed (original)
1: line by line (original)
2: crossed in half (original)
3: one in four (original)
4: alternated (original)
5: cross faded by level (new)
6: cross faded by line (new)
7: cross faded by radius (new)
$0244-$0247: theme pack (design) (unused yet...)
$0248-$024b: pattern color 1
$024c-$024f: pattern color 2
$0250-$0253: lift color
$0254-$0257: ground color 2 (mountains)

$0260-$027f: demo sequences (max 32 entries)
one byte per demo sequence
bit 0-3: Action (0-15)
0: no action
1: FIRE action
2: UP action
3: DOWN action
4: LEFT action
5: RIGHT action
6: ZAPPER select action
7: PUSHER select action
8: GRABBER select action
9: PROG FIRE action
10: PROG UP action
11: PROG DOWN action
12: PROG LEFT action
13: PROG RIGHT action
14: PROG RUN action
15: PROG CLEAR action
bit 4-7: Pause in seconds (0-15)

$0280-$03ff: tower messages -> 8 messages (48 bytes per message)
$00: Action
0: no action
1: show message on briefing
2: show message in game
3: wait seconds
4: on destroyed (see value parm byte)
5: on activated (see value parm byte)
$01: Value (optional arg for action, maybe element index)
$02-2f: (0 terminated ASCII string, max. 45 chars)

$0400-$13ff: tower elemnts data (4096 bytes)

tower elements data: 16 columns x 16 rows x 8 levels = 2048 elements ( x 2 bytes per element = 4096 bytes)
element in NW of tower (bottom level) is offset: $0400
element in NE of tower (bottom level) is offset: $05e0
element in SW of tower (bottom level) is offset: $041e
element in SE of tower (bottom level) is offset: $05fe

one element is seqerated in two bytes
first byte is index for BASIS ELEMENT (static elements):

TWR_ELEMENT_ID_SPC 0 // (NOTHING)
TWR_ELEMENT_ID_FLR 1 // [BASIS] FLOOR
TWR_ELEMENT_ID_BOX 2 // [BASIS] BOX
TWR_ELEMENT_ID_LFU 3 // [BASIS] LIFT (UP)
TWR_ELEMENT_ID_LFD 4 // [BASIS] LIFT (DOWN)
TWR_ELEMENT_ID_PIL 50 // [BASIS] PILLAR

second byte is index for normal ELEMENT (dynamic elements):

TWR_ELEMENT_ID_ZAP 5 // PLAYERS ZAPPER
TWR_ELEMENT_ID_GRB 6 // PLAYERS GRABBER
TWR_ELEMENT_ID_PSH 7 // PLAYERS PUSHER
TWR_ELEMENT_ID_FZN 8 // FACING ZAPPER (N)
TWR_ELEMENT_ID_FZE 9 // FACING ZAPPER (E)
TWR_ELEMENT_ID_FZS 10 // FACING ZAPPER (S)
TWR_ELEMENT_ID_FZW 11 // FACING ZAPPER (W)
TWR_ELEMENT_ID_FPN 12 // FACING PUSHER (N)
TWR_ELEMENT_ID_FPE 13 // FACING PUSHER (E)
TWR_ELEMENT_ID_FPS 14 // FACING PUSHER (S)
TWR_ELEMENT_ID_FPW 15 // FACING PUSHER (W)
TWR_ELEMENT_ID_RZN 16 // ROTATING ZAPPER (STARTING N)
TWR_ELEMENT_ID_RPN 17 // ROTATING PUSHER (STARTING N)
TWR_ELEMENT_ID_WOE 18 // WORM (STARTING E)
TWR_ELEMENT_ID_WON 19 // WORM (STARTING N)
TWR_ELEMENT_ID_WAT 20 // WATCHER (STARTING N)
TWR_ELEMENT_ID_HOP 21 // HOPPER (STARTING N)
TWR_ELEMENT_ID_PRM 22 // PROXIMITY MINE
TWR_ELEMENT_ID_TMB 23 // TIMEBOMB
TWR_ELEMENT_ID_BLK 24 // BLOCK
TWR_ELEMENT_ID_REL 25 // REFLECTOR
TWR_ELEMENT_ID_PNW 26 // PRISM (N/W)
TWR_ELEMENT_ID_PNE 27 // PRISM (N/E)
TWR_ELEMENT_ID_PSE 28 // PRISM (S/E)
TWR_ELEMENT_ID_PSW 29 // PRISM (S/W)
TWR_ELEMENT_ID_LZE 30 // LIZARD (STARTING E)
TWR_ELEMENT_ID_LZN 31 // LIZARD (STARTING N)
TWR_ELEMENT_ID_KLD 32 // KLONDIKE
TWR_ELEMENT_ID_BFL 33 // BONUS FLAG
TWR_ELEMENT_ID_CVN 34 // CONVERTER (N/S)
TWR_ELEMENT_ID_CVE 35 // CONVERTER (E/W)
TWR_ELEMENT_ID_FCU 36 // FORCER (UP)
TWR_ELEMENT_ID_FCD 37 // FORCER (DOWN)
TWR_ELEMENT_ID_FRZ 38 // FREEZER
TWR_ELEMENT_ID_WIP 39 // WIPER
TWR_ELEMENT_ID_EXC 40 // EXCHANGER
TWR_ELEMENT_ID_DEM 255 // DEMO SEQUENCE CAMERA (invisble)

Re: Tower Conversion Tool

Thanks! Just what I needed.

I just wished you had used the original numbering of tower elements. There's some unneccessary mapping going on. After my first conversion to RToB format I was wondering why all prisms faced the wrong direction...


Re: Tower Conversion Tool

New version of the tool, now even with logo...

RToB format is supported as far as possible.

Please test!!