Overview
| Comment: | RLE compression of levels |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
06cd05742fc5cf0ac97bb17748c8e5c3 |
| User & Date: | user on 2018-03-10 22:48:20.903 |
| Other Links: | manifest | tags |
Context
|
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 | |
|
2018-03-09
| ||
| 06:00 | Add smallxrm check-in: f6f1c94d23 user: user tags: trunk | |
Changes
Modified mbtofhm.c
from [fc5168bbe3]
to [9fbf2afe75].
| ︙ | ︙ | |||
443 444 445 446 447 448 449 |
}
fclose(fp);
}
static void one_level(FILE*fp,int ord) {
unsigned char buf[16];
unsigned char mru[32];
| | | 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 |
}
fclose(fp);
}
static void one_level(FILE*fp,int ord) {
unsigned char buf[16];
unsigned char mru[32];
int i,j,x,y,n,q,r;
i=fgetc(stdin);
i|=fgetc(stdin)<<8;
levelid[ord]=i;
sprintf(nam,"%d.LVL",i);
hamarc_begin(fp);
fputc(0,fp); fputc(0,fp); // Level version
fputc(ord,fp); fputc(ord>>8,fp); // Level code
|
| ︙ | ︙ | |||
481 482 483 484 485 486 487 |
}
}
fread(mru,1,32,stdin); // Skip border colours
fread(buf,1,2,stdin); // Skip border colours
mru[0x04]=mru[0x14]=255;
n=fgetc(stdin);
n|=fgetc(stdin)<<8;
| | | | | 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 |
}
}
fread(mru,1,32,stdin); // Skip border colours
fread(buf,1,2,stdin); // Skip border colours
mru[0x04]=mru[0x14]=255;
n=fgetc(stdin);
n|=fgetc(stdin)<<8;
x=q=r=0;
y=1;
// Free Hero Mesh level format for objects:
// * bit flags (or 0xFF for end):
// bit7 = MRU (omit everything but position)
// bit6 = Next position
// bit5 = New X position
// bit4 = New Y position
// bit3 = Has MiscVars (RLE in case of MRU)
// bit2-bit0 = LastDir (RLE in case of MRU)
// * new X if applicable
// * new Y if applicable
// * class (one-based; add 0x8000 for image 0) (two bytes)
// * image (one byte)
// * data types (if has MiscVars):
// bit7-bit6 = How many (0=has Misc2 and Misc3, not Misc1)
// bit5-bit4 = Misc3 type
|
| ︙ | ︙ | |||
518 519 520 521 522 523 524 |
if(q<32 && !memcmp(mru+q,buf,16)) {
i|=0x80;
} else {
i|=buf[4]&7;
if(buf[5] || memcmp(buf+10,"\0\0\0\0\0\0",6)) i|=0x08;
if(q<32) memcpy(mru+q,buf,16);
}
| < > > > > > > > | 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 |
if(q<32 && !memcmp(mru+q,buf,16)) {
i|=0x80;
} else {
i|=buf[4]&7;
if(buf[5] || memcmp(buf+10,"\0\0\0\0\0\0",6)) i|=0x08;
if(q<32) memcpy(mru+q,buf,16);
}
x=buf[6];
y=buf[8];
if(i==0xC0) {
if(++r==16) fputc(r+0xBF,fp),r=0;
continue;
} else if(r) {
fputc(r+0xBF,fp),r=0;
}
fputc(i,fp);
if(i&0x20) fputc(x,fp);
if(i&0x10) fputc(y,fp);
if(i<0x80) {
if(buf[2]) {
fwrite(buf,1,3,fp);
} else {
fputc(*buf,fp);
|
| ︙ | ︙ | |||
563 564 565 566 567 568 569 570 571 572 573 574 575 576 |
fputc(j+236,fp); fputc((j+236)>>8,fp);
} else {
fwrite(buf+14,1,2,fp);
}
}
}
}
fputc(255,fp); // End of objects
n=fgetc(stdin);
n|=fgetc(stdin)<<8;
while(n--) {
i=fgetc(stdin);
i|=fgetc(stdin)<<8;
// fputc(17,fp); // Select proportional font
| > | 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 |
fputc(j+236,fp); fputc((j+236)>>8,fp);
} else {
fwrite(buf+14,1,2,fp);
}
}
}
}
if(r) fputc(r+0xBF,fp);
fputc(255,fp); // End of objects
n=fgetc(stdin);
n|=fgetc(stdin)<<8;
while(n--) {
i=fgetc(stdin);
i|=fgetc(stdin)<<8;
// fputc(17,fp); // Select proportional font
|
| ︙ | ︙ |