259 |
} |
} |
260 |
} |
} |
261 |
|
|
262 |
static string displayedLevelInfo (const LevelInfo *info) |
static string displayedLevelInfo (const LevelInfo *info) |
263 |
{ |
{ |
264 |
string displayed = (info->name.empty()) ? |
string displayed = (info->name.empty()) ? |
265 |
"Another nameless level" : string("\"")+info->name+"\""; |
"Another nameless level" : string("\"")+info->name+"\""; |
266 |
if (!info->author.empty()) |
if (!info->author.empty()) |
267 |
displayed += " by "+info->author; |
displayed += " by "+info->author; |
268 |
return displayed; |
return displayed; |
269 |
} |
} |
360 |
bool |
bool |
361 |
Game::load_level(int ilevel) |
Game::load_level(int ilevel) |
362 |
{ |
{ |
363 |
|
// first set default compatibility mode |
364 |
|
// (may be overidden by load_level (from lua)) |
365 |
|
{ |
366 |
|
const LevelInfo *info = level_pack->get_info(ilevel); |
367 |
|
enigma::GameCompatibility = info->type; |
368 |
|
} |
369 |
|
|
370 |
if (level_pack->load_level (ilevel)) |
if (level_pack->load_level (ilevel)) |
371 |
{ |
{ |
372 |
icurrent_level=ilevel; |
icurrent_level=ilevel; |
688 |
Game game_inst; |
Game game_inst; |
689 |
} |
} |
690 |
|
|
691 |
bool enigma::ConserveLevel = false; |
bool enigma::ConserveLevel = false; |
692 |
bool enigma::AllowTogglePlayer = false; |
bool enigma::AllowTogglePlayer = false; |
693 |
bool enigma::ShowMoves = false; |
bool enigma::ShowMoves = false; |
694 |
double enigma::Brittleness = 0; |
GameType enigma::GameCompatibility = GAMET_ENIGMA; |
695 |
double enigma::SlopeForce = 0; |
double enigma::Brittleness = 0; |
696 |
double enigma::SlopeForce2 = 0; |
double enigma::SlopeForce = 0; |
697 |
double enigma::FrictionFactor = 0; |
double enigma::SlopeForce2 = 0; |
698 |
double enigma::ElectricForce = 0; |
double enigma::FrictionFactor = 0; |
699 |
|
double enigma::ElectricForce = 0; |
700 |
|
|
701 |
|
|
702 |
void enigma::GameReset() |
void enigma::GameReset() |
771 |
void enigma::QuitGame() { |
void enigma::QuitGame() { |
772 |
game_inst.quit(); |
game_inst.quit(); |
773 |
} |
} |
774 |
|
|
775 |
|
|
776 |
|
void enigma::SetCompatibility(const char *version) { |
777 |
|
static const char *versionName[GAMET_COUNT+1] = { |
778 |
|
"enigma", // same indices as enum GameType |
779 |
|
"oxyd1", |
780 |
|
"per.oxyd", |
781 |
|
"oxyd.extra", |
782 |
|
"oxyd.magnum", |
783 |
|
0 |
784 |
|
}; |
785 |
|
|
786 |
|
GameType type = GAMET_UNKNOWN; |
787 |
|
for (int v = 0; v<GAMET_COUNT; ++v) { |
788 |
|
if (0 == strcmp(version, versionName[v])) { |
789 |
|
type = GameType(v); |
790 |
|
break; |
791 |
|
} |
792 |
|
} |
793 |
|
|
794 |
|
if (type == GAMET_UNKNOWN) { |
795 |
|
fprintf(stderr, "Invalid compatibility mode '%s' (ignored. using enigma behavior)\n", version); |
796 |
|
fprintf(stderr, "Valid modes:"); |
797 |
|
for (int v = 0; v<GAMET_COUNT; ++v) |
798 |
|
fprintf(stderr, " %s", versionName[v]); |
799 |
|
fprintf(stderr, "\n"); |
800 |
|
type = GAMET_ENIGMA; |
801 |
|
} |
802 |
|
|
803 |
|
GameCompatibility = type; |
804 |
|
} |