bool defense_game::init(game *g) { g->turn = HOURS(12); // Start at noon g->temperature = 65; if (!g->u.create(g, PLTYPE_CUSTOM)) return false; g->u.str_cur = g->u.str_max; g->u.per_cur = g->u.per_max; g->u.int_cur = g->u.int_max; g->u.dex_cur = g->u.dex_max; init_itypes(g); init_mtypes(g); init_constructions(g); init_recipes(g); current_wave = 0; hunger = false; thirst = false; sleep = false; zombies = false; specials = false; spiders = false; triffids = false; robots = false; subspace = false; mercenaries = false; init_to_style(DEFENSE_EASY); setup(); g->u.cash = initial_cash; popup_nowait("Please wait as the map generates [ 0%]"); // TODO: support multiple defence games? clean up old defence game g->cur_om = &overmap_buffer.get(g, 0, 0); init_map(g); caravan(g); return true; }
void defense_game::init(game *g) { g->turn = HOURS(12); // Start at noon g->temperature = 65; g->u.create(g, PLTYPE_CUSTOM); g->u.str_cur = g->u.str_max; g->u.per_cur = g->u.per_max; g->u.int_cur = g->u.int_max; g->u.dex_cur = g->u.dex_max; init_itypes(g); init_mtypes(g); init_constructions(g); init_recipes(g); current_wave = 0; hunger = false; thirst = false; sleep = false; zombies = false; specials = false; spiders = false; triffids = false; robots = false; subspace = false; mercenaries = false; init_to_style(DEFENSE_EASY); setup(); g->u.cash = initial_cash; popup_nowait("Please wait as the map generates [ 0%]"); init_map(g); caravan(g); }
defense_game::defense_game() { current_wave = 0; hunger = false; thirst = false; sleep = false; zombies = false; specials = false; spiders = false; triffids = false; robots = false; subspace = false; mercenaries = false; init_to_style(DEFENSE_EASY); }
void defense_game::setup() { WINDOW* w = newwin(25, 80, 0, 0); int selection = 1; refresh_setup(w, selection); while (true) { char ch = input(); if (ch == 'S') { if (!zombies && !specials && !spiders && !triffids && !robots && !subspace) { popup("You must choose at least one monster group!"); refresh_setup(w, selection); } else return; } else if (ch == '+' || ch == '>' || ch == 'j') { if (selection == 19) selection = 1; else selection++; refresh_setup(w, selection); } else if (ch == '-' || ch == '<' || ch == 'k') { if (selection == 1) selection = 19; else selection--; refresh_setup(w, selection); } else if (ch == '!') { std::string name = string_input_popup("Template Name:", 20); refresh_setup(w, selection); } else if (ch == 'S') return; else { switch (selection) { case 1: // Scenario selection if (ch == 'l') { if (style == defense_style(NUM_DEFENSE_STYLES - 1)) style = defense_style(1); else style = defense_style(style + 1); } if (ch == 'h') { if (style == defense_style(1)) style = defense_style(NUM_DEFENSE_STYLES - 1); else style = defense_style(style - 1); } init_to_style(style); break; case 2: // Location selection if (ch == 'l') { if (location == defense_location(NUM_DEFENSE_LOCATIONS - 1)) location = defense_location(1); else location = defense_location(location + 1); } if (ch == 'h') { if (location == defense_location(1)) location = defense_location(NUM_DEFENSE_LOCATIONS - 1); else location = defense_location(location - 1); } mvwprintz(w, 5, 2, c_black, "\ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); mvwprintz(w, 5, 2, c_yellow, defense_location_name(location).c_str()); mvwprintz(w, 5, 28, c_ltgray, defense_location_description(location).c_str()); break; case 3: // Difficulty of the first wave if (ch == 'h' && initial_difficulty > 10) initial_difficulty -= 5; if (ch == 'l' && initial_difficulty < 995) initial_difficulty += 5; mvwprintz(w, 7, 22, c_black, "xxx"); mvwprintz(w, 7, NUMALIGN(initial_difficulty), c_yellow, "%d", initial_difficulty); break; case 4: // Wave Difficulty if (ch == 'h' && wave_difficulty > 10) wave_difficulty -= 5; if (ch == 'l' && wave_difficulty < 995) wave_difficulty += 5; mvwprintz(w, 8, 22, c_black, "xxx"); mvwprintz(w, 8, NUMALIGN(wave_difficulty), c_yellow, "%d", wave_difficulty); break; case 5: if (ch == 'h' && time_between_waves > 5) time_between_waves -= 5; if (ch == 'l' && time_between_waves < 995) time_between_waves += 5; mvwprintz(w, 10, 22, c_black, "xxx"); mvwprintz(w, 10, NUMALIGN(time_between_waves), c_yellow, "%d", time_between_waves); break; case 6: if (ch == 'h' && waves_between_caravans > 1) waves_between_caravans -= 1; if (ch == 'l' && waves_between_caravans < 50) waves_between_caravans += 1; mvwprintz(w, 11, 22, c_black, "xxx"); mvwprintz(w, 11, NUMALIGN(waves_between_caravans), c_yellow, "%d", waves_between_caravans); break; case 7: if (ch == 'h' && initial_cash > 0) initial_cash -= 100; if (ch == 'l' && initial_cash < 99900) initial_cash += 100; mvwprintz(w, 13, 20, c_black, "xxxxx"); mvwprintz(w, 13, NUMALIGN(initial_cash), c_yellow, "%d", initial_cash); break; case 8: if (ch == 'h' && cash_per_wave > 0) cash_per_wave -= 100; if (ch == 'l' && cash_per_wave < 9900) cash_per_wave += 100; mvwprintz(w, 14, 21, c_black, "xxxx"); mvwprintz(w, 14, NUMALIGN(cash_per_wave), c_yellow, "%d", cash_per_wave); break; case 9: if (ch == 'h' && cash_increase > 0) cash_increase -= 50; if (ch == 'l' && cash_increase < 9950) cash_increase += 50; mvwprintz(w, 15, 21, c_black, "xxxx"); mvwprintz(w, 15, NUMALIGN(cash_increase), c_yellow, "%d", cash_increase); break; case 10: if (ch == ' ' || ch == '\n') { zombies = !zombies; specials = false; } mvwprintz(w, 18, 2, (zombies ? c_ltgreen : c_yellow), "Zombies"); mvwprintz(w, 18, 14, c_yellow, "Special Zombies"); break; case 11: if (ch == ' ' || ch == '\n') { specials = !specials; zombies = false; } mvwprintz(w, 18, 2, c_yellow, "Zombies"); mvwprintz(w, 18, 14, (specials ? c_ltgreen : c_yellow), "Special Zombies"); break; case 12: if (ch == ' ' || ch == '\n') spiders = !spiders; mvwprintz(w, 18, 34, (spiders ? c_ltgreen : c_yellow), "Spiders"); break; case 13: if (ch == ' ' || ch == '\n') triffids = !triffids; mvwprintz(w, 18, 46, (triffids ? c_ltgreen : c_yellow), "Triffids"); break; case 14: if (ch == ' ' || ch == '\n') robots = !robots; mvwprintz(w, 18, 59, (robots ? c_ltgreen : c_yellow), "Robots"); break; case 15: if (ch == ' ' || ch == '\n') subspace = !subspace; mvwprintz(w, 18, 70, (subspace ? c_ltgreen : c_yellow), "Subspace"); break; case 16: if (ch == ' ' || ch == '\n') hunger = !hunger; mvwprintz(w, 21, 2, (hunger ? c_ltgreen : c_yellow), "Food"); break; case 17: if (ch == ' ' || ch == '\n') thirst = !thirst; mvwprintz(w, 21, 16, (thirst ? c_ltgreen : c_yellow), "Water"); break; case 18: if (ch == ' ' || ch == '\n') sleep = !sleep; mvwprintz(w, 21, 31, (sleep ? c_ltgreen : c_yellow), "Sleep"); break; case 19: if (ch == ' ' || ch == '\n') mercenaries = !mercenaries; mvwprintz(w, 21, 46, (mercenaries ? c_ltgreen : c_yellow), "Mercenaries"); break; } } if (ch == 'h' || ch == 'l' || ch == ' ' || ch == '\n') refresh_setup(w, selection); } }