@pong777, post #1
@pong777, post #1
@Hexmage960, post #4
@pong777, post #1
Super jeśli byłby pełny support dla ECS/AGA/RTG.
@Krashan, post #5
@Hexmage960, post #9
@teh_KaiN, post #10
@pong777, post #12
int main(void) { logOpen(); // odpal menedżer logów randInit(0); // odpal generator liczb losowych (seed = 0) inputOpen(); // odpal menedżer inputa (nasłuchiwanie klawy, dżojów, myszy) windowCreate(); // zrób mi screen oraz okno, które przesłania cały ekran, co bym mógł przechwytywać mysz i klawiaturę nie brudząc niczego w systemie działającym w tle loadCursorData(); // własna funkcja, wczytuje dane kursora z pliku gameChangeState(gsMenuCreate, gsMenuSplashSetup, gsMenuDestroy); // zacznij od gameState'a MENU // tu już gra jest otwarta i sobie leci w kółko while (gameIsRunning()) { // pętla gry timerProcess(); // pyknij timery do przodu inputProcess(); // odśwież stan wciśnięcia klawiszy, myszy, dżojów, itd. gameProcess(); // wykonaj przebieg pętli z aktualnego gamestate'a } // tu już gra się zamyka gameChangeState(0, 0, 0); // wyjdź z jakiegokolwiek gamestate'a windowDestroy(); // zniszcz ekran inputClose(); // zamknij nasłuchiwanie inputa logClose(); // wyłącz menedżer logów return EXIT_SUCCESS; // koniec programu }
void gsMenuCreate(void) { logWrite("gsMenuCreate begin\n"); // wpis w logu, co by to debugować logPushIndent(); // wcięcie w logu, co by widzieć, że ta część loga należy do menu g_pExtView = extViewCreate( // tworzenie ekranu 320x256: pierwszy viewport na cały ekran i z pełnym bpp, drugiego viewporta nie ma (wewnątrz gry jest nim zrobiony HUD) WINDOW_SCREEN_WIDTH, WINDOW_SCREEN_HEIGHT, WINDOW_SCREEN_WIDTH, WINDOW_SCREEN_HEIGHT, WINDOW_SCREEN_BPP, 0, 0, 0, 0 ); createFilePalette("data/palettes/selur_v1.plt", g_sWindowManager.pPalette); // wczytanie palety kolorów z pliku i ustawienie jako bieżącej g_pSplashBitMap = bitmapCreateFromFile("data/bitmaps/splash.bm"); // bitmapa splash screena g_pCharactersBitMap = bitmapCreateFromFile("data/bitmaps/goblins.bm"); // bitmapa portretów postaci g_pGrassBitMap = bitmapCreateFromFile("data/bitmaps/grass.bm"); // bitmapa trawy w tle g_pFont = fontCreate("data/fonts/arpegius-15.fnt"); // wczytanie fonta z pliku if (!g_sGameConfig.ubPawnCount) { // logika gry, nieistotne g_sGameConfig.ubPawnCount = 8; } windowLoadExtView(g_pExtView); // załadowanie wcześniej utworzonego viewa z viewportami logPopIndent(); // zmniejsz wcięcie w logu logWrite("gsMenuCreate end\n"); // kolejny wpis w logu }
void gsMenuDestroy(void) { logWrite("gsMenuDestroy begin\n"); // znowu to samo z dziennikiem logPushIndent(); LoadView(0); // schowanie ekranu co by go spokojnie usunąć fontDestroy(g_pFont); // zwolnij fonta bitmapDestroy(g_pCharactersBitMap); // zwolnij bitmapy bitmapDestroy(g_pGrassBitMap); bitmapDestroy(g_pSplashBitMap); extViewDestroy(g_pExtView); // zwolnij ekran z viewportami i bufferami logPopIndent(); logWrite("gsMenuDestroy end\n"); }
void gsMenuLoop(void) { // Nie wywalać eskejpa, bo fajnie działa, my się przyzwyczailiśmy, to gracze też się przyzwyczają if (keyUse(KEY_ESCAPE)) { gameClose(); return; } // steruje port 2 bo osoby grające na singla ZAWSZE mają wpiętą mychę w port 1 else if ((joyUse(JOY1_DOWN) || keyUse(KEY_DOWN)) && (g_pMainMenuList->ubActiveOption < (g_pMainMenuList->ubLength - 1))) { ++g_pMainMenuList->ubActiveOption; gsMenuDrawMenuList(g_pExtView, g_pMainMenuList, g_pFontAlagard, (WINDOW_SCREEN_WIDTH >> 1), MENULIST_Y, FONT_CENTER | FONT_COOKIE); } else if ((joyUse(JOY1_UP) || keyUse(KEY_UP)) && g_pMainMenuList->ubActiveOption) { --g_pMainMenuList->ubActiveOption; gsMenuDrawMenuList(g_pExtView, g_pMainMenuList, g_pFontAlagard, (WINDOW_SCREEN_WIDTH >> 1), MENULIST_Y, FONT_CENTER | FONT_COOKIE); } else if (joyUse(JOY1_FIRE) || keyUse(KEY_RETURN)) { g_pMainMenuList->pOptions[g_pMainMenuList->ubActiveOption].pAction(); } if (timerCheck(&g_ulLogoTimer, 1)) { animateMenuCopperList(g_pCopList); } // Pulsowanie wybranej pozycji - kod własny // ... }
@wali7, post #14
void windowSeekUCopList(struct UCopList *pUCopList, WORD wOffset, UBYTE ubFlags) { if (ubFlags & CPR_SEEK_SET) { pUCopList->CopList->Count = wOffset; } else if (ubFlags & CPR_SEEK_END) { pUCopList->CopList->Count = pUCopList->CopList->MaxCount+wOffset; } else { // CPR_SEEK_CUR pUCopList->CopList->Count += wOffset; } pUCopList->CopList->CopPtr = pUCopList->CopList->CopIns + (sizeof(struct CopIns) * pUCopList->CopList->Count); }