📄 level.java
字号:
s_type = (byte)type;
s_number = (byte)number;
s_last_score = s_current_score = score;
initProperties();
Engine.s_current_sound_playing = 10000;
if(s_type == TYPE_MAINMENU) Engine.loadSavedGameFromRecordStore();
else Engine.saveGameToRecordStore();
//Engine.printLine("extra type: " + s_extra_type + ", adventure #: " + s_adventure_number + ", puzzle: " + s_puzzle_number + ", time: " + s_timetrial_number);
if(!Engine.s_engine.s_use_tutorials && s_type == TYPE_TUTORIAL && s_main_type == TYPE_ADVENTURE) {
//Engine.printLine("skipping tutorial, next type: " + s_next_type + ", next number: " + s_next_number);
init(s_next_type, s_next_number, s_last_score);
return;
}
else {
initBackground();
if(s_type == TYPE_MAINMENU) {
Engine.playSound(Engine.SONG_TITLE);
}
else {
Engine.stopAllSounds();
//#if DefaultConfiguration || Nokia_6600 || Nokia_6600_Unobfuscated || Nokia_3220 || Nokia_3220_Unobfuscated || Razr
if(s_type == TYPE_TUTORIAL) Engine.playSound(Engine.SONG_TUTORIAL);
else if(s_type == TYPE_SURVIVAL) Engine.playSound(Engine.getRandom(Engine.SONG_BG_1, Engine.SONG_BG_4 + 1));
else Engine.playSound(((int)s_number % Engine.SONGS_TOTAL) + Engine.SONG_BG_1);
//#else
//# if(s_type != TYPE_TUTORIAL) Engine.playSound(Engine.SOUND_LEVEL_START);
//# else if (s_type == TYPE_TUTORIAL && Engine.mb_script_show_text) Engine.playSound(Engine.SONG_TUTORIAL);
//#endif
initChances();
initBoard();
initExtras();
if(s_type == TYPE_TUTORIAL) {
// start the level immediately without the board dropping state
Level.seedBoard();
s_player = new Avatar();
s_state = STATE_ACTIVE;
//Engine.mb_script_active = false;
Engine.s_engine.beginScript(number);
} else {
Engine.mb_script_active = false;
s_player = new Avatar(-Engine.SCREEN_HALF_HEIGHT);
}
}
}
Engine.gc();
//Level.print();
//Engine.printLine("Heap after loading the level: " + TOTFC.s_runtime.freeMemory());
}
// initialize miscellaneous level properties.
public static void initProperties() {
s_state = STATE_INTRO;
s_clock = 0;
s_level_bar = s_level_bar_goal = Engine.FULL_INT;
s_level_bar_height = FOOD_BAR_HEIGHT;
s_board_offset_total = s_board_offset = 0;
s_background_frame = 0;
s_creature_count = s_greens = s_reds = s_blues = s_oranges = s_purples = s_specials = 0;
s_special_last = s_special_interval = 0;
s_board_timer = s_board_timer_full = s_board_timer_original = s_board_timer_delay = 0;
s_board_timer_bonus = s_board_timer_bonus_original = 0;
s_combo = s_longest_combo = 0;
s_total_combos = 0;
s_jewel_column = s_jewel_board_offset = Engine.FULL_BYTE;
s_coin_timer = s_coin_frame = 0;
s_total_jewels_caught = 0;
s_hold_down = 0;
s_board = null;
s_extras = null;
s_player = null;
s_game_win = false;
//#ifndef NO_BOARD_BUMPS
for(int i = 0; i < GAME_BOARD_W; i++) {
s_board_bumps[BUMP_SIZE][i] = 0;
s_board_bumps[BUMP_DIRECTION][i] = Engine.DIRECTIONLESS;
}
//#endif
int start;
if(s_type == TYPE_ADVENTURE) {
s_extra_type = TYPE_ADVENTURE;
s_adventure_number = s_number;
s_adventure_score = s_last_score;
start = s_number * LEVEL_SIZE;
s_next_type = LEVELS[start + NEXT_LEVEL_TYPE];
s_next_number = (byte)(LEVELS[start + NEXT_LEVEL_NUMBER] - 1);
s_board_timer = s_board_timer_full = s_board_timer_original = LEVELS[start + LEVEL_BOARD_TIMER] * TIME_LEVEL_OFFSET;
s_level_bar = s_level_bar_goal = LEVELS[start + LEVEL_FOOD_BAR];
s_level_bar_height = s_level_bar * FOOD_BAR_MULTIPLYER;
//#if DefaultConfiguration || Nokia_6600 || Nokia_6600_Unobfuscated
s_board_padding = LEVELS[start + LEVEL_ROWS];
//#else
//# s_board_padding = (byte)(LEVELS[start + LEVEL_ROWS] - 1);
//#endif
s_board_timer_bonus = s_board_timer_bonus_original = LEVELS[start + LEVEL_BONUS] * TIME_LEVEL_OFFSET;
s_oranges = LEVELS[start + LEVEL_ORANGES];
s_purples = LEVELS[start + LEVEL_PURPLES];
//Engine.printLine("Level init, next_type: " + s_next_type + ", next_number: " + s_next_number);
}
else if(s_type == TYPE_PUZZLE) {
if(s_main_type == TYPE_ADVENTURE) {
s_extra_type = TYPE_PUZZLE;
s_adventure_number = s_number;
s_adventure_score = s_last_score;
}
else {
s_puzzle_number = s_number;
}
start = s_number * PUZZLE_SIZE;
s_next_type = PUZZLES[start + NEXT_LEVEL_TYPE];
s_next_number = (byte)(PUZZLES[start + NEXT_LEVEL_NUMBER] - 1);
s_level_bar = s_level_bar_goal = PUZZLES[start + COMMON_HEADER];
s_level_bar_height = s_level_bar * FOOD_BAR_SQUARE_SIZE;
}
else if(s_type == TYPE_TIMETRIAL) {
if(s_main_type == TYPE_ADVENTURE) {
s_extra_type = TYPE_TIMETRIAL;
s_adventure_number = s_number;
s_adventure_score = s_last_score;
}
else {
s_timetrial_number = s_number;
s_timetrial_score = s_last_score;
}
start = s_number * TIMETRIAL_SIZE;
//Engine.printLine("start: " + start + ", next type: " + NEXT_LEVEL_TYPE + ", total: " + (start + NEXT_LEVEL_TYPE) + ", length: " + TIMETRIALS.length);
s_next_type = TIMETRIALS[start + NEXT_LEVEL_TYPE];
s_next_number = (byte)(TIMETRIALS[start + NEXT_LEVEL_NUMBER] - 1);
s_level_bar = s_level_bar_goal = TIMETRIALS[start + COMMON_HEADER];
s_level_bar_height = s_level_bar * FOOD_BAR_MULTIPLYER;
}
else if(s_type == TYPE_SURVIVAL) {
s_number = 0;
s_level_bar = s_level_bar_goal = SURVIVAL_TIMER;
s_level_bar_height = s_level_bar / TOTFC.FRAMES_PER_SECOND * FOOD_BAR_MULTIPLYER;
s_board_timer = s_board_timer_full = s_board_timer_original = SURVIVAL_DROP_TIMER;
s_board_padding = SURVIVAL_START_ROWS;
}
else if(s_type == TYPE_TUTORIAL) {
if(s_main_type == TYPE_ADVENTURE) {
s_extra_type = TYPE_TUTORIAL;
s_adventure_number = s_number;
s_adventure_score = s_last_score;
}
start = s_number * TUTORIAL_SIZE;
s_level_bar = s_level_bar_goal = TUTORIALS[start + COMMON_HEADER];
if(s_number == PUZZLE_TUTORIAL) s_level_bar_height = s_level_bar * FOOD_BAR_SQUARE_SIZE;
else s_level_bar_height = s_level_bar * FOOD_BAR_MULTIPLYER;
if(s_number != PUZZLE_TUTORIAL && s_number != TIMETRIAL_TUTORIAL)
s_level_bar -= s_level_bar/4; // start off with a quarter full level bar
s_next_type = TUTORIALS[start + NEXT_LEVEL_TYPE];
s_next_number = (byte)(TUTORIALS[start + NEXT_LEVEL_NUMBER] - 1);
}
//s_board_timer = s_board_timer_full = s_board_timer_original = 100;
//s_board_timer_offset = 10;
//Engine.printLine("board timer: " + s_board_timer_full + ", offset: " + s_board_timer_offset);
//#ifndef NO_SCREEN_SHAKING
Engine.clearAllShakes();
//#endif
}
// create an array of creature ids that will be used to indicate the chance
// of them appearing when seeding the game board.
public static void initChances() {
if(s_type == TYPE_ADVENTURE) {
int chances_size = 0, start = s_number * LEVEL_SIZE + COMMON_HEADER + LEVEL_HEADER, end = start + Critter.ALL_CREATURES, index_1, index_2;
for(int i = start; i < end; i++) {
chances_size += LEVELS[i];
}
s_chance_creatures = new byte[chances_size];
index_1 = 0;
index_2 = 0;
for(int i = start; i < end; i++) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -