int main() { SDL_Event event; int quit=0; printf("Initializing Screen..."); screen = SC_InitVideo(_X,_Y,_DEPTH); SDL_FillRect(screen,NULL,0x000000); printf("\tOK\n"); printf("Loading Player..."); loadPlayer(); printf("\tOK\n"); printf("Initializing Units..."); init(); printf("\tOK\n"); background = SC_LoadImage("data/img/map.bmp"); SC_DrawSurface(background->h - _Y,0,background,screen); srand(time(NULL)); while(!quit){ quit = quit | events(event) | render(); SDL_Delay(12); } atexit(SDL_Quit); return 0; }
void Game::initGame(char **p) { state.total_score[0] = 0; state.total_score[1] = 0; dealer = rand() % NB_PLAYERS; cheater = INVALID_PLAYER; libraries.clear(); for (int i = 0; i < NB_PLAYERS; i++) { players[i] = NULL; hands[i].clear(); players[i] = loadPlayer(p[i+1]); if (players[i] == NULL) { std::cerr << "Cannot open player " << i << "(" << p[i] << ") library" << std::endl; exit(EXIT_FAILURE); } players[i]->setName(p[i+1]); players[i]->setNum(i); } for (int c = 0; c < NB_SUITS; c++) { for (int v = 0; v < NB_VALUES; v++) { deck[c*NB_VALUES+v].suit = c; deck[c*NB_VALUES+v].value = v; } } }
bool IOLoginData::loadPlayerByName(Player* player, const std::string& name) { Database* db = Database::getInstance(); std::ostringstream query; query << "SELECT `id`, `name`, `account_id`, `group_id`, `sex`, `vocation`, `experience`, `level`, `maglevel`, `health`, `healthmax`, `blessings`, `mana`, `manamax`, `manaspent`, `soul`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `lookaddons`, `posx`, `posy`, `posz`, `cap`, `lastlogin`, `lastlogout`, `lastip`, `conditions`, `skulltime`, `skull`, `town_id`, `balance`, `offlinetraining_time`, `offlinetraining_skill`, `stamina`, `skill_fist`, `skill_fist_tries`, `skill_club`, `skill_club_tries`, `skill_sword`, `skill_sword_tries`, `skill_axe`, `skill_axe_tries`, `skill_dist`, `skill_dist_tries`, `skill_shielding`, `skill_shielding_tries`, `skill_fishing`, `skill_fishing_tries` FROM `players` WHERE `name` = " << db->escapeString(name); return loadPlayer(player, db->storeQuery(query.str())); }
Game::Game() { device = irr::createDevice(irr::video::EDT_OPENGL, {640,480}, 16, false, false, false, &event_receiver); assert(device); device->setWindowCaption(L"Eternal Sonata"); driver = device->getVideoDriver(); scene_manager = device->getSceneManager(); environment = device->getGUIEnvironment(); menu.setDevice(device); menu.setDevice(device); this->mapSelector = 0; this->game_set = false; character.setEventReceiver(&event_receiver); loadMeshes(); loadMap(); loadPlayer(); getMenu().showMainMenu(); getPlayer().debugCharacter(); }
void loadGame(SDL_Renderer *renderer, Gamestate* game) { SDL_Surface* surface = NULL; // set game values game->GRAVITY = 0.3f; game->FRICTION = 0.3f; game->PLAYER_MAX_SPEED = 5; game->NUM_BOMBS = 50; game->NUM_LEDGES = 50; game->frame = 0; game->status = 0; // WELCOME_SCREEN game->scrollX = 0; game->victory = false; // load elements of the game loadFont(renderer, game); loadBackground(renderer, game, surface); loadLedges(renderer, game, surface); loadBombs(renderer, game, surface); loadPlayer(renderer, game, surface); loadBalloon(renderer, game, surface); } // void initGamestate()
void story(Player &player) { bool Retry; std::cout << "Welcome to the game. This is a text-based RPG, made by Meraj Ahmed." << std::endl; std::cout << "Press enter to continue..." << std::endl; getchar(); cls(); std::cout << "This tutorial will introduce you to the basics of the game. New features will be unlocked as you progress, and you will learn about them when they are unlocked." << std::endl; std::cout << "Press enter to continue..." << std::endl; getchar(); cls(); std::cout << "There are 3 main battle choices: Hit, Bash, and Heal." << std::endl; std::cout << "Hit is a normal attack." << std::endl; std::cout << "Bash does extra damage to the enemy, but damages you as well." << std::endl; std::cout << "Heal simply heals you for a small amount." << std::endl; std::cout << "Press enter to continue..." << std::endl; getchar(); cls(); savePlayer(player); do { TutorialTroll tutorialTroll; player = loadPlayer(); Retry = battle(player, tutorialTroll); } while (Retry); Retry = false; return; }
void load(P_HWATOO pilehead, P_HWATOO ahead, P_HWATOO bhead, P_HWATOO chead, P_HWATOO paehead, player_info *aplayer, player_info *bplayer, player_info *cplayer) { char file_name[][30] = {"pile.txt", "paehead.txt", "ahead.txt", "aplayerinfo.txt", "aplayerpae.txt", "ascore.txt", "bhead.txt", "bplayerinfo.txt", "bplayerpae.txt", "bscore.txt", "chead.txt", "cplayerinfo.txt", "cplayerpae.txt", "cscore.txt"}; extern P_HWATOO head; extern P_HWATOO A_head; extern P_HWATOO B_head; extern P_HWATOO C_head; extern P_HWATOO PAE_head; pilehead = NULL; ahead = NULL; bhead = NULL; chead = NULL; paehead = NULL; aplayer -> head_pae = NULL; bplayer -> head_pae = NULL; cplayer -> head_pae = NULL; puts("pilehead load start"); loadPae(file_name[0], &head); puts("ahead load start"); loadPae(file_name[2], &A_head); puts("bhead load start"); loadPae(file_name[6], &B_head); puts("chead load start"); loadPae(file_name[10], &C_head); puts("paehead load start"); loadPae(file_name[1], &PAE_head); puts("Aplayer load start"); loadPlayer(file_name[3], file_name[4], file_name[5], aplayer); puts("Bplayer load start"); loadPlayer(file_name[7], file_name[8], file_name[9], bplayer); puts("Cplayer load start"); loadPlayer(file_name[11], file_name[12], file_name[13], cplayer); puts("Winner load start"); loadWinner("winner.txt"); puts("load success!"); }
void StageManager::changeStage( int stageNum , Point nextPlayerPosition) { _ASSERT( stageNum <= m_FloorData.stageNum ); if( stageNum == m_CurrentStageNum ) { return; } m_CurrentStageNum = stageNum; addVisitedStage( stageNum ); m_IsAvailable = false; m_CurrentWorldScene = m_WorldScenes[m_CurrentStageNum]; Director::getInstance()->replaceScene( m_CurrentWorldScene ); loadPlayer( nextPlayerPosition ); m_IsAvailable = true; m_CurrentWorldScene->scheduleUpdate(); }
XP_Bool newg_juggle( NewGameCtx* ngc ) { XP_Bool changed = XP_FALSE; XP_U16 nPlayers = ngc->nPlayersShown; XP_ASSERT( ngc->isNewGame ); if ( nPlayers > 1 ) { LocalPlayer tmpPlayers[MAX_NUM_PLAYERS]; XP_U16 pos[MAX_NUM_PLAYERS]; XP_U16 player; /* Get a randomly juggled array of numbers 0..nPlayers-1. Then the number at pos[n] inicates where the entry currently at n should be. */ changed = randIntArray( pos, nPlayers ); if ( changed ) { /* Deep-copy off to tmp storage. But skip lines that won't be moved in the juggle. */ XP_MEMSET( &tmpPlayers, 0, sizeof(tmpPlayers) ); for ( player = 0; player < nPlayers; ++player ) { if ( player != pos[player] ) { storePlayer( ngc, player, &tmpPlayers[player] ); } } for ( player = 0; player < nPlayers; ++player ) { if ( player != pos[player] ) { LocalPlayer* lp = &tmpPlayers[player]; XP_U16 dest = pos[player]; loadPlayer( ngc, dest, lp ); XP_FREEP( ngc->mpool, &lp->name ); XP_FREEP( ngc->mpool, &lp->password ); XP_FREEP( ngc->mpool, &lp->dictName ); adjustOneRow( ngc, dest, XP_FALSE ); } } } } return changed; } /* newg_juggle */
int cmdSpells(Creature* player, cmd* cmnd) { Creature* target = player; Player *pTarget=0, *viewer=0; bool notSelf=false; if(player->isPet()) { viewer = player->getPlayerMaster(); notSelf = true; } else { viewer = player->getAsPlayer(); } viewer->clearFlag(P_AFK); if(player->isBraindead()) { player->print("You are brain-dead. You can't do that.\n"); return(0); } if(player->isCt()) { if(cmnd->num > 1) { cmnd->str[1][0] = up(cmnd->str[1][0]); target = gServer->findPlayer(cmnd->str[1]); notSelf = true; if(!target) { if(!loadPlayer(cmnd->str[1], &pTarget)) { player->print("Player does not exist.\n"); return(0); } infoSpells(viewer, pTarget, notSelf); free_crt(pTarget); return(0); } else { if(!player->canSee(target)) { player->print("That player is not logged on.\n"); return(0); } } } } infoSpells(viewer, target, notSelf); return(0); }
k9astTitles::k9astTitles(QWidget* parent,k9DVD *_dvd) : QWidget(parent) { Ui_astTitles.setupUi(this); m_dvd=_dvd; m_src=Ui_astTitles.twSource; m_preview=NULL; m_currentItem=NULL; loadPlayer(); QTreeWidgetItem *header=m_src->headerItem(); header->setText(0,""); QCheckBox *ck=new QCheckBox(m_src); ck->setChecked(true); connect(ck,SIGNAL(toggled( bool )),this,SLOT(selectAll(bool))); connect(m_src,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(ItemChanged(QTreeWidgetItem*,int))); m_src->setItemWidget(header,0,ck); m_src->setSortingEnabled(true); }
int Codec::ReadPCM(BYTE *pBuffer, int size, int *actualsize) { *actualsize = 0; if (!m_isPlayerLoaded) loadPlayer(); if (m_startStream) { if (m_endOfTrack && m_bufferPos == 0) { return READ_EOF; } else if (m_bufferPos > 0) { int amountToMove = m_bufferPos; if (m_bufferPos > size) amountToMove = size; memcpy(pBuffer, m_buffer, amountToMove); memmove(m_buffer, m_buffer + amountToMove, m_bufferSize - amountToMove); m_bufferPos -= amountToMove; *actualsize = amountToMove; } } return READ_SUCCESS; }
void renderScene(bool miniMapOption) { light.makeLight(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // limpar o depth buffer glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if(miniMapOption) miniMapCam.setMiniMapCam(); else cam.updateCam(game_map.player); loadPlayer(); loadEnemies(); loadIsland(); glBindTexture(type, texture); renderSea(); if(!PlaySound("Sounds\\56_Rocket_Tower_Takeover.wav", NULL, SND_ASYNC|SND_FILENAME|SND_LOOP|SND_NOSTOP )) PlaySound("Sounds\\56_Rocket_Tower_Takeover.wav", NULL, SND_ASYNC|SND_FILENAME|SND_LOOP|SND_NOSTOP ); }
// on "init" you need to initialize your instance bool Splash::init(std::string csbFile) { BaseScene::init(csbFile); loadingBar = (LoadingBar *)_rootNode->getChildByName("loadingBar"); this->schedule(schedule_selector(Splash::updateProgress), 0.016f); // Init game settings auto settings = GameSettings::getInstance(); // Init player auto player = Player::getInstance(); settings->loadPlayer(player); // Setup global physic world auto world = Physics::createWorld2D(PhysicsBox2DType); world->loadBodies("box2dphysicsbody.plist"); auto audio = CocosDenshion::SimpleAudioEngine::getInstance(); audio->playEffect("intro.wav"); return true; }
int main(int argc, char* args[]) { srand(time(NULL)); PLAYER* player = createPlayer(); BACKGROUND* background = createBackground(); LTexture lt; BANANA* bananaArray[MAX_NUM_OF_BANANA]; BARRIER* barrierArray[MAX_NUM_OF_BARRIER]; int i; for(i = 0; i < MAX_NUM_OF_BANANA; i++) { bananaArray[i] = createBanana(); } for(i = 0; i < MAX_NUM_OF_BARRIER; i++) { barrierArray[i] = createBarrier(); } if( !init() ) { printf( "Failed to initialize!\n" ); } else { if( !loadBackground("./media/background.png", &background->background_tex, gRenderer) || !loadPlayer("./media/minion.png", &player->player_tex, gRenderer, gSpriteClips)) { printf( "Failed to load media!\n" ); } else { for(i = 0; i < MAX_NUM_OF_BANANA; i++) { loadBanana("./media/banana.png", &bananaArray[i]->banana_tex, gRenderer); setPosRectBanana(bananaArray[i]); } for(i = 0; i < MAX_NUM_OF_BARRIER; i++) { loadBarrier("./media/barrier.png", &barrierArray[i]->barrier_tex, gRenderer); setPosRectBarrier(barrierArray[i]); } bool quit = false; SDL_Event e; player->frame = 0; background->scrollingOffset = 0; while( !quit ) { while( SDL_PollEvent( &e ) != 0 ) { if( e.type == SDL_QUIT ) { quit = true; } if(e.key.type == SDL_KEYDOWN) { switch( e.key.keysym.sym ) { case SDLK_UP: if(canMoveUp(player)) { moveUp(player); } break; case SDLK_DOWN: if(canMoveDown(player)) { moveDown(player); } break; } } } --(background->scrollingOffset); if( background->scrollingOffset < -background->background_tex.mWidth ) { background->scrollingOffset = 0; } SDL_Rect* currentClip; SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF ); SDL_RenderClear( gRenderer ); renderBackground(background, background->scrollingOffset, gRenderer); currentClip = &gSpriteClips[ player->frame / 16 ]; renderPlayer(player, currentClip, gRenderer); setPosRectPlayer(player); for (i = 0; i < MAX_NUM_OF_BANANA; i++) { if( checkCollision(player->mPlayer, bananaArray[i]->mBanana, background->scrollingOffset)) { increaseTotalScore(); eraseBanana(bananaArray[i]); } renderBanana(bananaArray[i], background->scrollingOffset + bananaArray[i]->posX, gRenderer); } for (i = 0; i < MAX_NUM_OF_BARRIER; i++) { if( checkCollisionEnd(player->mPlayer, barrierArray[i]->mBarrier, background->scrollingOffset)) { closeWin(player, background, bananaArray, barrierArray); return 0; } renderBarrier(barrierArray[i], background->scrollingOffset + barrierArray[i]->posX, gRenderer); } ++player->frame; if( player->frame / 4 >= WALKING_ANIMATION_FRAMES ) { player->frame = 0; } SDL_RenderPresent(gRenderer); } closeWin(player, background, bananaArray, barrierArray); } } return 0; }
void newg_load( NewGameCtx* ngc, const CurGameInfo* gi ) { void* closure = ngc->closure; NGValue value; XP_U16 nPlayers, nLoaded; XP_S16 ii, jj; DeviceRole role; XP_Bool localOnly; XP_Bool shown[MAX_NUM_PLAYERS] = { XP_FALSE }; ngc->juggleEnabled = TRI_ENAB_NONE; ngc->settingsEnabled = TRI_ENAB_NONE; for ( ii = 0; ii < NG_NUM_COLS; ++ii ) { for ( jj = 0; jj < MAX_NUM_PLAYERS; ++jj ) { ngc->enabled[ii][jj] = TRI_ENAB_NONE; } } ngc->role = role = gi->serverRole; localOnly = (role == SERVER_ISCLIENT) && ngc->isNewGame; #ifndef XWFEATURE_STANDALONE_ONLY value.ng_role = role; (*ngc->setAttrProc)( closure, NG_ATTR_ROLE, value ); (*ngc->enableAttrProc)( closure, NG_ATTR_ROLE, ngc->isNewGame? TRI_ENAB_ENABLED : TRI_ENAB_DISABLED ); #endif nPlayers = gi->nPlayers; ngc->nPlayersTotal = nPlayers; #ifndef XWFEATURE_STANDALONE_ONLY for ( ii = nPlayers - 1; ii >= 0; --ii ) { if ( gi->players[ii].isLocal ) { ++ngc->nLocalPlayers; } } #endif if ( localOnly ) { nPlayers = ngc->nLocalPlayers; } ngc->nPlayersShown = nPlayers; value.ng_u16 = ngc->nPlayersShown; (*ngc->setAttrProc)( closure, NG_ATTR_NPLAYERS, value ); (*ngc->enableAttrProc)( closure, NG_ATTR_NPLAYERS, ngc->isNewGame? TRI_ENAB_ENABLED : TRI_ENAB_DISABLED ); setRoleStrings( ngc ); considerEnable( ngc ); /* Load local players first */ nLoaded = 0; do { for ( ii = 0; ii < MAX_NUM_PLAYERS; ++ii ) { if ( !shown[ii] ) { const LocalPlayer* lp = &gi->players[ii]; if ( !localOnly || (lp->isLocal && (nLoaded < ngc->nLocalPlayers)) ) { shown[ii] = XP_TRUE; loadPlayer( ngc, nLoaded++, lp ); } } } XP_ASSERT( localOnly || nLoaded == MAX_NUM_PLAYERS ); localOnly = XP_FALSE; /* for second pass */ } while ( nLoaded < MAX_NUM_PLAYERS ); adjustAllRows( ngc, XP_TRUE ); } /* newg_load */
Entity *addEntityFromResource(char *type, char *name, int startX, int startY) { Entity *e = NULL; if (strcmpignorecase(type, "ITEM") == 0 || strcmpignorecase(type, "SHIELD") == 0 || strcmpignorecase(type, "WEAPON") == 0) { e = addPermanentItem(name, startX, startY); } else if (strcmpignorecase(type, "TEMP_ITEM") == 0 || strcmpignorecase(type, "HEALTH") == 0) { e = addTemporaryItem(name, startX, startY, LEFT, 0, 0); } else if (strcmpignorecase(type, "PLAYER") == 0) { e = loadPlayer(startX, startY, NULL); } else if (strcmpignorecase(type, "PLAYER_WEAPON") == 0) { setPlayerWeaponName(name); } else if (strcmpignorecase(type, "PLAYER_SHIELD") == 0) { setPlayerShieldName(name); } else if (strcmpignorecase(type, "KEY_ITEM") == 0) { e = addKeyItem(name, startX, startY); } else if (strcmpignorecase(type, "ENEMY") == 0) { e = addEnemy(name, startX, startY); } else if (strcmpignorecase(type, "NPC") == 0) { e = addNPC(name, startX, startY); } else if (strcmpignorecase(type, "AUTO_LIFT") == 0 || strcmpignorecase(type, "MANUAL_LIFT") == 0) { e = addLift(name, startX, startY, getEntityTypeByName(type)); } else if (strcmpignorecase(type, "SPAWNER") == 0) { e = addSpawner(startX, startY, name); } else if (strcmpignorecase(type, "TARGET") == 0) { addTarget(startX, startY, name); } else if (strcmpignorecase(type, "PRESSURE_PLATE") == 0) { e = addPressurePlate(name, startX, startY); } else if (strcmpignorecase(type, "TELEPORTER") == 0) { e = addTeleporter(name, startX, startY); } else if (strcmpignorecase(type, "AUTO_DOOR") == 0 || strcmpignorecase(type, "MANUAL_DOOR") == 0) { e = addDoor(name, startX, startY, getEntityTypeByName(type)); } else if (strcmpignorecase(type, "WEAK_WALL") == 0) { e = addWeakWall(name, startX, startY); } else if (strcmpignorecase(type, "TRAP_DOOR") == 0) { e = addTrapDoor(name, startX, startY); } else if (strcmpignorecase(type, "CONVEYOR_BELT") == 0) { e = addConveyorBelt(name, startX, startY); } else if (strcmpignorecase(type, "SWITCH") == 0) { e = addSwitch(name, startX, startY); } else if (strcmpignorecase(type, "SCRIPT_LINE_DEF") == 0 || strcmpignorecase(type, "LINE_DEF") == 0) { e = addLineDef(type, name, startX, startY); } else if (strcmpignorecase(type, "LEVEL_EXIT") == 0) { e = addLevelExit(name, startX, startY); } else if (strcmpignorecase(type, "SAVE_POINT") == 0) { /* Save points don't spawn for replays */ if (game.gameType == NORMAL) { e = addSavePoint(startX, startY); } } else if (strcmpignorecase(type, "TRIGGER") == 0) { addTriggerFromResource(key, value); } else if (strcmpignorecase(type, "GLOBAL_TRIGGER") == 0) { addGlobalTriggerFromResource(key, value); } else if (strcmpignorecase(type, "MAP_TRIGGER") == 0) { addMapTriggerFromResource(key, value); } else if (strcmpignorecase(type, "OBJECTIVE") == 0) { addObjectiveFromResource(key, value); } else if (strcmpignorecase(type, "ACTION_POINT") == 0) { e = addActionPoint(name, startX, startY); } else if (strcmpignorecase(type, "FALLING_PLATFORM") == 0) { e = addFallingPlatform(startX, startY, name); } else if (strcmpignorecase(type, "VANISHING_PLATFORM") == 0) { e = addVanishingPlatform(startX, startY, name); } else if (strcmpignorecase(type, "ANTI_GRAVITY") == 0) { e = addAntiGravityField(startX, startY, name); } else { showErrorAndExit("Unknown Entity type %s", type); } return e; }
/** *\fn int main(int argc, char *argv[]) * Main *\param[in,out] argc argc *\param[in,out] argv argv */ int main(int argc, char *argv[]) { SDL_Surface *screen = NULL; int go = 1; int ret,ret1, ret2 = 0, ret3, ret4; char level_name[MAX_SIZE_FILE_NAME]; char player_name[MAX_SIZE_FILE_NAME]; int nb_lvl; /*sound*/ Sound *sound_system; sound_system = createSound(); /*keyboard config*/ SDLKey kc[NB_KEY-1]; /*input*/ Input in; SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER|SDL_INIT_JOYSTICK); Player *current_player; current_player = (Player *)malloc(sizeof(Player)); /*screen initialization*/ screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); initInput(&in); /*configurations loading */ loadSoundOptions("configuration/sound.conf",sound_system); SDL_WM_SetCaption("Super Martin", NULL); //window name SDL_ShowCursor(SDL_DISABLE); //delete the mouse while (go) //main loop { if(titleMenu(screen,&go,sound_system, &in)) { while( (ret3 = menuPlayers(screen, player_name, &go, sound_system, &in)) != -1 && go) { switch(ret3) { case -1: break; case 2 : ret2 = newPlayer(screen, player_name, sound_system, &go); if(ret2 == 1) { current_player->levelMax = 1; current_player->nbCoins = 0; current_player->nbLifes = 3; current_player->nbProjectile = 5; savePlayer("save/.save", player_name, current_player); loadInputOptions("default",kc,&in); saveInputOptions(player_name, kc, &in); } else break; case 1 : loadPlayer("save/.save", player_name, current_player); loadInputOptions(player_name,kc,&in); while(go && (ret1 = mainMenu(screen,&go,sound_system, player_name, &in)) != -1) { switch(ret1) { case -1: break; case 0: while( (ret4 = menuLevel(screen,level_name,sound_system, player_name, current_player, &go, &nb_lvl, &in)) != -1 && go) { while(play(screen,level_name,sound_system,&go,kc, &in, current_player, player_name, ret4+1, nb_lvl) && go); } break; case 1 : save(screen, "save/.save", player_name, current_player, &go); loadPlayer("save/.save", player_name, current_player); break; case 2 : while((ret = optionMenu(screen,&go,sound_system,kc, &in)) != -1 && go) { switch(ret) { case -1: break; case 0: soundOptions(screen,&go,sound_system, &in); break; case 1: keyBoardOptions(screen,&go,kc,&in,player_name); break; default:; } } break; case 3 : deletePlayer(screen, "save/players", player_name); go = 0; break; default: ; } } go = 1; break; default : ; } } } SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format,255,255,255)); //clear screen SDL_Flip(screen); } freeSound(sound_system); free((void*)current_player); freeInput(&in); SDL_Quit(); return EXIT_SUCCESS; }