59 |
LevelPack_Oxyd (OxydVersion ver, DatFile *dat, int idx_start, int idx_end); |
LevelPack_Oxyd (OxydVersion ver, DatFile *dat, int idx_start, int idx_end); |
60 |
|
|
61 |
// LevelPack interface |
// LevelPack interface |
62 |
string name() const; |
virtual string get_name() const; |
63 |
size_t size() const { return nlevels; } |
size_t size() const { return nlevels; } |
64 |
|
|
65 |
bool load_level (size_t index); |
bool load_level (size_t index); |
76 |
virtual Stone *make_stone (int type, int x, int y); |
virtual Stone *make_stone (int type, int x, int y); |
77 |
virtual Item *make_item (int type); |
virtual Item *make_item (int type); |
78 |
|
|
79 |
|
Level *get_level() const { return m_level; } |
80 |
|
|
81 |
private: |
private: |
82 |
// Private methods |
// Private methods |
83 |
void load_floor (const Level &level); |
void load_floor (const Level &level); |
508 |
else |
else |
509 |
Log << "Error parsing level at index " << i << ": " << msg << endl; |
Log << "Error parsing level at index " << i << ": " << msg << endl; |
510 |
} |
} |
511 |
Log << "Levelpack '" << name() << "' has " << nlevels << " levels." << endl; |
Log << "Levelpack '" << get_name() << "' has " << nlevels << " levels." << endl; |
512 |
} |
} |
513 |
|
|
514 |
|
|
515 |
|
|
516 |
string |
string |
517 |
LevelPack_Oxyd::name() const |
LevelPack_Oxyd::get_name() const |
518 |
{ |
{ |
519 |
static char *names1p[] = { |
static char *names1p[] = { |
520 |
"Oxyd 1", "Oxyd magnum", "Magnum Gold", "Per.Oxyd", "Oxyd extra" |
"Oxyd 1", "Oxyd magnum", "Magnum Gold", "Per.Oxyd", "Oxyd extra" |
613 |
default: |
default: |
614 |
// No special case -> get Stone from map |
// No special case -> get Stone from map |
615 |
const char *name = stone_map[type]; |
const char *name = stone_map[type]; |
616 |
if (name == 0) |
if (name == 0) { |
617 |
fprintf (stderr, "Unknown stone %X\n", type); |
fprintf (stderr, "Unknown stone %X\n", type); |
618 |
st = MakeStone (name ? name : "st-dummy"); |
st = MakeStone ("st-dummy"); |
619 |
|
} |
620 |
|
else if (name[0] != '\0') { // ignore if name=="" |
621 |
|
st = MakeStone (name); |
622 |
|
} |
623 |
} |
} |
624 |
return st; |
return st; |
625 |
} |
} |
724 |
Level level; |
Level level; |
725 |
|
|
726 |
if (!parseLevel (m_datfile->getLevel(level_index[index]), &level, &msg)) { |
if (!parseLevel (m_datfile->getLevel(level_index[index]), &level, &msg)) { |
727 |
Log << "Could not load " << name() << " level #" << index+1 |
Log << "Could not load " << get_name() << " level #" << index+1 |
728 |
<< ":\n " << msg; |
<< ":\n " << msg; |
729 |
return false; |
return false; |
730 |
} |
} |
756 |
static LevelInfo info ("oxyd", "Oxyd", "Dongleware"); |
static LevelInfo info ("oxyd", "Oxyd", "Dongleware"); |
757 |
|
|
758 |
char name[200]; |
char name[200]; |
759 |
sprintf (name, "%s #%d", this->name().c_str(), index+1); |
sprintf (name, "%s #%d", get_name().c_str(), index+1); |
760 |
info.name = name; |
info.name = name; |
761 |
|
|
762 |
char filename[200]; |
char filename[200]; |
763 |
sprintf (filename, "Import %s %d", this->name().c_str(), index); |
sprintf (filename, "Import %s %d", get_name().c_str(), index); |
764 |
info.filename = filename; |
info.filename = filename; |
765 |
|
|
766 |
return &info; |
return &info; |
819 |
stone_map[0x38] = "st-oneway-n"; |
stone_map[0x38] = "st-oneway-n"; |
820 |
stone_map[0x39] = "st-oneway-s"; |
stone_map[0x39] = "st-oneway-s"; |
821 |
stone_map[0x3e] = "st-window"; |
stone_map[0x3e] = "st-window"; |
822 |
stone_map[0x3f] = "st-magic"; |
stone_map[0x3f] = ""; // "st-magic"; |
823 |
stone_map[0x40] = "st-magic"; |
stone_map[0x40] = ""; // "st-magic"; |
824 |
stone_map[0x41] = "st-magic"; |
stone_map[0x41] = ""; // "st-magic"; |
825 |
// stone_map[0x42] = "st-stoneimpulse"; |
// stone_map[0x42] = "st-stoneimpulse"; |
826 |
|
|
827 |
stone_map[0x44] = "st-laser-s"; |
stone_map[0x44] = "st-laser-s"; |
894 |
return st ? st : LevelPack_Oxyd::make_stone(type, x, y); |
return st ? st : LevelPack_Oxyd::make_stone(type, x, y); |
895 |
} |
} |
896 |
|
|
897 |
|
|
898 |
//---------------------------------------- |
//---------------------------------------- |
899 |
// PerOxyd level pack |
// PerOxyd level pack |
900 |
//---------------------------------------- |
//---------------------------------------- |
963 |
stone_map[0x76] = "st-invisible"; |
stone_map[0x76] = "st-invisible"; |
964 |
stone_map[0x79] = "st-white1"; |
stone_map[0x79] = "st-white1"; |
965 |
stone_map[0x7a] = "st-black1"; |
stone_map[0x7a] = "st-black1"; |
966 |
|
stone_map[0x7d] = "st-yinyang1"; |
967 |
|
stone_map[0x7e] = "st-break_acwhite"; |
968 |
|
stone_map[0x7f] = "st-break_acblack"; |
969 |
stone_map[0x8c] = "st-rock3"; |
stone_map[0x8c] = "st-rock3"; |
970 |
stone_map[0x91] = "st-rotator-left"; |
stone_map[0x91] = "st-rotator-left"; |
971 |
stone_map[0x92] = "st-rotator-right"; |
stone_map[0x92] = "st-rotator-right"; |
979 |
{ |
{ |
980 |
Stone *st = 0; |
Stone *st = 0; |
981 |
switch (type) { |
switch (type) { |
982 |
|
case 0x39: case 0x3a: case 0x3b: |
983 |
|
// Create magic stones only if they are absolutely necessary |
984 |
|
if (get_level()->getRequireMagicPiece()) { |
985 |
|
char *names[] = { "st-magic", "st-magic", "st-magic" }; |
986 |
|
st = MakeStone (names[type - 0x39]); |
987 |
|
} |
988 |
|
break; |
989 |
case 0x51: st = MakeStone("st-puzzle"); st->set_attrib("connections", 7); break; |
case 0x51: st = MakeStone("st-puzzle"); st->set_attrib("connections", 7); break; |
990 |
case 0x52: st = MakeStone("st-puzzle"); st->set_attrib("connections", 4); break; |
case 0x52: st = MakeStone("st-puzzle"); st->set_attrib("connections", 4); break; |
991 |
case 0x53: st = MakeStone("st-puzzle"); st->set_attrib("connections", 10); break; |
case 0x53: st = MakeStone("st-puzzle"); st->set_attrib("connections", 10); break; |
1003 |
return st; |
return st; |
1004 |
} |
} |
1005 |
|
|
1006 |
|
|
1007 |
//---------------------------------------- |
//---------------------------------------- |
1008 |
// Oxyd Magnum level pack |
// Oxyd Magnum level pack |
1009 |
//---------------------------------------- |
//---------------------------------------- |