Overview
Comment: | More details figured out of the file format |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
67bacbf22aabb77d442f65ba00b42ad2 |
User & Date: | user on 2018-03-16 01:51:05 |
Other Links: | manifest | tags |
Context
2018-03-17
| ||
06:10 | Improve the converter program check-in: 6d36e2c377 user: user tags: trunk | |
2018-03-16
| ||
01:51 | More details figured out of the file format check-in: 67bacbf22a user: user tags: trunk | |
2018-03-10
| ||
22:48 | RLE compression of levels check-in: 06cd05742f user: user tags: trunk | |
Changes
Modified fileform1.txt from [a949aa6944] to [bbb40911a8].
︙ | ︙ | |||
226 227 228 229 230 231 232 | 19=Departures, 32=Busy, 33=Invisible, 34=UserSignal, 35=UserState, 36=KeyCleared, 37=IsPlayer, 38=Destroyed, 39=Stealthy, 40=VisualOnly, 48=Msg, 49=MsgFrom, 50=MsgArg1, 51=MsgArg2, 64=Density, 65=Volume, 66=Strength, 67=Weight, 68=Distance, 69=Height, 70=Climb, 72=HardE, 73=HardN, 74=HardW, 75=HardS, 76=SharpE, 77=SharpN, 78=SharpW, 79=SharpS, 80=ShapeE, 81=ShapeN, 82=ShapeW, 83=ShapeS, 84=Shovable | | | > > > > > > > > > | 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 | 19=Departures, 32=Busy, 33=Invisible, 34=UserSignal, 35=UserState, 36=KeyCleared, 37=IsPlayer, 38=Destroyed, 39=Stealthy, 40=VisualOnly, 48=Msg, 49=MsgFrom, 50=MsgArg1, 51=MsgArg2, 64=Density, 65=Volume, 66=Strength, 67=Weight, 68=Distance, 69=Height, 70=Climb, 72=HardE, 73=HardN, 74=HardW, 75=HardS, 76=SharpE, 77=SharpN, 78=SharpW, 79=SharpS, 80=ShapeE, 81=ShapeN, 82=ShapeW, 83=ShapeS, 84=Shovable [2/1*] Retrieve local variable from other object. Local variable numbers are the same as opcode 1. [3/1] Assignment to standard local variables of current object. [4/2] Assignment to standard local variable of other object (the first (top) value taken from the stack is the value, and second is the object). [5*] User-defined local variable; the second byte is zero-based local variable number. [6/1] Assignment to user-defined variable; the second byte is the zero-based local variable number to write to. [7*] Short decimal constant; the second byte is the 8-bit value. [8*] Long decimal constant. The next two words are the small-endian 32-bit number that it represents. [9*] Short class constant; the second byte is a zero-based class number (the class number is one-based at runtime). [11*] Message constant; the second byte is the message number. [13*] String literal. Follow by one WORD giving number of bytes of string (including null terminator, always even), and then null-terminated special text. There may be two null terminators if needed to make it even. [14*] Direction constant (0-7 for absolute, 8-15 for relative) [16/1*] Unary operator: 0=negative, 1=bitwise NOT, 2=logical NOT [17/2*] Binary operator: 0=multiply, 1=divide, 2=modulo [18/2*] Binary operator: 0=add, 1=subtract, 2=AND, 3=OR, 4=XOR |
︙ | ︙ | |||
266 267 268 269 270 271 272 | [32] ObjDir [34] ObjAbove [36] ObjBelow | | | | 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 | [32] ObjDir [34] ObjAbove [36] ObjBelow [38/2*] 0=ObjTopAt, 1=ObjBottomAt, 2=VolumeAt, 3=HeightAt, 4=Delta [39*] Self [40/3*] ObjClassAt [48*] Key [49*] Animation constant: 0=STOP, 1=ONCE, 2=LOOP, 8=OSC [50*] Keyboard constant: See section about key codes. |
︙ | ︙ | |||
299 300 301 302 303 304 305 | [59*] Bit constant 0-31; the second byte is the number 0-31, and at runtime it is replaced by the relevant 32-bit number. [60*] Sound constant (see section about user sounds) [61] 0=ClassCount/1* (I don't know what this does), 1=GetArray | > > > > > > > > | > > | > > > > > > > > > > > > > | > > | | | > | > > | | > > | | | > > | | 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 | [59*] Bit constant 0-31; the second byte is the number 0-31, and at runtime it is replaced by the relevant 32-bit number. [60*] Sound constant (see section about user sounds) [61] 0=ClassCount/1* (I don't know what this does), 1=GetArray [64/3*] SendMessage (to Self) [65/4*] SendMessage [66/3*] Broadcast; second byte is zero-based class number [67/4*] Broadcast [68/1*] Move(Self, ...); minor code is 255 to take the value from the stack, or is another number for a direction constant (in this latter case the same bug occurs as with opcode 84). [69/2*] Move; minor code is same as opcode 68, but the bug with opcode 84 does not occur, regardless of the minor code. [70/2*] JumpTo(Self, ...) [71/3*] JumpTo [72/5*] Create [74*] Destroy(Self) [75/1*] Destroy [80/3] SendMessage(Self, ...) [81/4] SendMessage [82/3] Broadcast; second byte is zero-based class number [83/4] Broadcast [84] Move(Self, dir). The second byte is the direction to move. Unlike the normal Move() function, this one adds Strength to Inertia instead of setting Inertia equal to Strength (this seems to be a bug). If the minor code is 255 then takes direction from stack and does not have this bug. [85] Move. The second byte is the same as for opcode 84; if 255 then it takes from the stack (before taking the object to move). In this case the bug mentioned above does not occur regardless of what the minor code is. [88/5] Create [96] Comment. Has one WORD giving length of the comment text (including the null terminator), and then the plain text of the comment (with CRLF line endings), null terminated. [97] Popup setting. Second byte is 0 for PopupColor or 1 for PopupLoc. [98] Destroy(Self) [99/1] Destroy [100] CallSub [101-] Goto; next WORD is address to branch to unconditionally [102] Return. Second byte is 0 for implicit end of SUBS block, 1 for return from a subroutine, 2 for the end of a message block. [103-] Return short constant. Second byte is return value. [104/1] Return [105/1] If. Second byte is zero for block-if or one for inline-if. The next word is the number of words to skip (including the count itself) if the condition is false. [106] Else [107/3] ImageSeq (seems to do nothing?) [108/3] ImageLoop (seems to do nothing?) [109] PopUp. Values taken from the stack is one plus the minor code. [110/2] JumpTo(Self, ...) [111/3] JumpTo [112] Sound [114] Array operations. Second byte: 0 = definition of an array, 1 = SetArray, 2 = InitArray. [126] Animate |
︙ | ︙ | |||
377 378 379 380 381 382 383 | [134] ForEachObjAt [240] Trace === Levels === | | > | | 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 | [134] ForEachObjAt [240] Trace === Levels === After all classes are the levels. Before the levels comes a header of four bytes that consists of: * Number of levels (WORD) * Two null bytes with unknown meaning Each level consists of: * Zero-based level number (WORD) * Level description length, including the null terminator (WORD) |
︙ | ︙ |