void GameStateNew::logic() {
	if (!input_name->inFocus)
		tablist.logic();

	button_permadeath->checkClick();
	if (show_classlist) class_list->checkClick();

	// require character name
	if (input_name->getText() == "") {
		if (button_create->enabled) {
			button_create->enabled = false;
			button_create->refresh();
		}
	}
	else {
		if (!button_create->enabled) {
			button_create->enabled = true;
			button_create->refresh();
		}
	}

	if ((inpt->pressing[CANCEL] && !inpt->lock[CANCEL]) || button_exit->checkClick()) {
		inpt->lock[CANCEL] = true;
		delete requestedGameState;
		requestedGameState = new GameStateLoad();
	}

	if (button_create->checkClick()) {
		// start the new game
		GameStatePlay* play = new GameStatePlay();
		Avatar *pc = play->getAvatar();
		pc->stats.gfx_base = base[current_option];
		pc->stats.gfx_head = head[current_option];
		pc->stats.gfx_portrait = portrait[current_option];
		pc->stats.name = input_name->getText();
		pc->stats.permadeath = button_permadeath->isChecked();
		play->game_slot = game_slot;
		play->resetGame();
		play->loadClass(class_list->getSelected());
		requestedGameState = play;
	}

	// scroll through portrait options
	if (button_next->checkClick()) {
		current_option++;
		if (current_option == (int)portrait.size()) current_option = 0;
		loadPortrait(portrait[current_option]);
		setName(name[current_option]);
	}
	else if (button_prev->checkClick()) {
		current_option--;
		if (current_option == -1) current_option = portrait.size()-1;
		loadPortrait(portrait[current_option]);
		setName(name[current_option]);
	}

	input_name->logic();

	if (input_name->getText() != name[current_option]) modified_name = true;
}