// //////////////////////////////////////////////////////////////////////////// bool startKeyMapEditor(bool first) { addBackdrop(); addSideText(FRONTEND_SIDETEXT, KM_SX, KM_Y, _("KEY MAPPING")); if (first) { loadKeyMap(); // get the current mappings. } WIDGET *parent = widgGetFromID(psWScreen, FRONTEND_BACKDROP); IntFormAnimated *kmForm = new IntFormAnimated(parent, false); kmForm->id = KM_FORM; kmForm->setGeometry(KM_X, KM_Y, KM_W, KM_H); addMultiBut(psWScreen, KM_FORM, KM_RETURN, // return button. 8, 5, iV_GetImageWidth(FrontImages, IMAGE_RETURN), iV_GetImageHeight(FrontImages, IMAGE_RETURN), _("Return To Previous Screen"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI); addMultiBut(psWScreen, KM_FORM, KM_DEFAULT, 11, 45, iV_GetImageWidth(FrontImages, IMAGE_KEYMAP_DEFAULT), iV_GetImageWidth(FrontImages, IMAGE_KEYMAP_DEFAULT), _("Select Default"), IMAGE_KEYMAP_DEFAULT, IMAGE_KEYMAP_DEFAULT_HI, IMAGE_KEYMAP_DEFAULT_HI); // default. // add tab form.. IntListTabWidget *kmList = new IntListTabWidget(kmForm); kmList->setChildSize(KM_ENTRYW, KM_ENTRYH); kmList->setChildSpacing(3, 3); kmList->setGeometry(52, 10, KM_ENTRYW, KM_H - 10 - 25); //Put the buttons on it std::vector<KEY_MAPPING *> mappings; for (KEY_MAPPING *m = keyMappings; m != nullptr; m = m->psNext) { if (m->status != KEYMAP__DEBUG && m->status != KEYMAP___HIDE) // if it's not a debug mapping.. { mappings.push_back(m); } } std::sort(mappings.begin(), mappings.end(), keyMappingSort); /* Add our first mapping to the form */ /* Now add the others... */ for (std::vector<KEY_MAPPING *>::const_iterator i = mappings.begin(); i != mappings.end(); ++i) { W_BUTTON *button = new W_BUTTON(kmList); button->id = KM_START + (i - mappings.begin()); button->pUserData = *i; button->displayFunction = displayKeyMap; kmList->addWidgetToLayout(button); } /* Stop when the right number or when aphabetically last - not sure...! */ /* Go home... */ return true; }
// //////////////////////////////////////////////////////////////////////////// // Audio Options Menu static bool startAudioOptionsMenu(void) { addBackdrop(); addTopForm(); addBottomForm(); // 2d audio addTextButton(FRONTEND_FX, FRONTEND_POS2X-25,FRONTEND_POS2Y, _("Voice Volume"), 0); addFESlider(FRONTEND_FX_SL, FRONTEND_BOTFORM, FRONTEND_POS2M, FRONTEND_POS2Y+5, AUDIO_VOL_MAX, sound_GetUIVolume() * 100.0); // 3d audio addTextButton(FRONTEND_3D_FX, FRONTEND_POS3X-25,FRONTEND_POS3Y, _("FX Volume"), 0); addFESlider(FRONTEND_3D_FX_SL, FRONTEND_BOTFORM, FRONTEND_POS3M, FRONTEND_POS3Y+5, AUDIO_VOL_MAX, sound_GetEffectsVolume() * 100.0); // cd audio addTextButton(FRONTEND_MUSIC, FRONTEND_POS4X-25,FRONTEND_POS4Y, _("Music Volume"), 0); addFESlider(FRONTEND_MUSIC_SL, FRONTEND_BOTFORM, FRONTEND_POS4M, FRONTEND_POS4Y+5, AUDIO_VOL_MAX, sound_GetMusicVolume() * 100.0); // quit. addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI); //add some text down the side of the form addSideText (FRONTEND_SIDETEXT , FRONTEND_SIDEX,FRONTEND_SIDEY, _("AUDIO OPTIONS")); return true; }
// //////////////////////////////////////////////////////////////////////////// // Video Options static bool startVideoOptionsMenu(void) { // Generate the resolution string snprintf(resolution, WIDG_MAXSTR, "%d x %d", war_GetWidth(), war_GetHeight()); // Generate texture size string snprintf(textureSize, WIDG_MAXSTR, "%d", getTextureSize()); addBackdrop(); addTopForm(); addBottomForm(); // Add a note about changes taking effect on restart for certain options addTextHint(FRONTEND_TAKESEFFECT, FRONTEND_POS1X + 48, FRONTEND_POS1Y + 24, _("* Takes effect on game restart")); // Fullscreen/windowed addTextButton(FRONTEND_WINDOWMODE, FRONTEND_POS2X-35, FRONTEND_POS2Y, _("Graphics Mode*"), 0); if (war_getFullscreen()) { addTextButton(FRONTEND_WINDOWMODE_R, FRONTEND_POS2M-55, FRONTEND_POS2Y, _("Fullscreen"), 0); } else { addTextButton(FRONTEND_WINDOWMODE_R, FRONTEND_POS2M-55, FRONTEND_POS2Y, _("Windowed"), 0); } // Resolution addTextButton(FRONTEND_RESOLUTION, FRONTEND_POS3X-35, FRONTEND_POS3Y, _("Resolution*"), WBUT_SECONDARY); addTextButton(FRONTEND_RESOLUTION_R, FRONTEND_POS3M-55, FRONTEND_POS3Y, resolution, WBUT_SECONDARY); widgSetString(psWScreen, FRONTEND_RESOLUTION_R, resolution); // Texture size addTextButton(FRONTEND_TEXTURESZ, FRONTEND_POS4X-35, FRONTEND_POS4Y, _("Texture size"), 0); addTextButton(FRONTEND_TEXTURESZ_R, FRONTEND_POS4M-55, FRONTEND_POS4Y, textureSize, 0); // Vsync addTextButton(FRONTEND_VSYNC, FRONTEND_POS5X-35, FRONTEND_POS5Y, _("Vertical sync*"), 0); if (war_GetVsync()) { addTextButton(FRONTEND_VSYNC_R, FRONTEND_POS5M-55, FRONTEND_POS5Y, _("On"), 0); } else { addTextButton(FRONTEND_VSYNC_R, FRONTEND_POS5M-55, FRONTEND_POS5Y, _("Off"), 0); } // Add some text down the side of the form addSideText(FRONTEND_SIDETEXT, FRONTEND_SIDEX, FRONTEND_SIDEY, _("VIDEO OPTIONS")); // Quit/return addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI); return true; }
// //////////////////////////////////////////////////////////////////////////// // Single Player Menu static void startSinglePlayerMenu(void) { addBackdrop(); addTopForm(); addBottomForm(); addTextButton(FRONTEND_NEWGAME, FRONTEND_POS2X,FRONTEND_POS2Y,_("New Campaign") , WBUT_TXTCENTRE); addTextButton(FRONTEND_SKIRMISH, FRONTEND_POS3X,FRONTEND_POS3Y, _("Start Skirmish Game"), WBUT_TXTCENTRE); addTextButton(FRONTEND_CHALLENGES, FRONTEND_POS4X, FRONTEND_POS4Y, _("Challenges"), WBUT_TXTCENTRE); addTextButton(FRONTEND_LOADGAME, FRONTEND_POS5X,FRONTEND_POS5Y, _("Load Game"), WBUT_TXTCENTRE); addSideText (FRONTEND_SIDETEXT ,FRONTEND_SIDEX,FRONTEND_SIDEY,_("SINGLE PLAYER")); addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI); }
// //////////////////////////////////////////////////////////////////////////// // Multi Player Menu static bool startMultiPlayerMenu(void) { addBackdrop(); addTopForm(); addBottomForm(); addSideText (FRONTEND_SIDETEXT , FRONTEND_SIDEX,FRONTEND_SIDEY,_("MULTI PLAYER")); addTextButton(FRONTEND_HOST, FRONTEND_POS2X,FRONTEND_POS2Y, _("Host Game"), WBUT_TXTCENTRE); addTextButton(FRONTEND_JOIN, FRONTEND_POS3X,FRONTEND_POS3Y, _("Join Game"), WBUT_TXTCENTRE); addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI); return true; }
// //////////////////////////////////////////////////////////////////////////// // Tutorial Menu static bool startTutorialMenu(void) { addBackdrop(); addTopForm(); addBottomForm(); addTextButton(FRONTEND_TUTORIAL, FRONTEND_POS3X,FRONTEND_POS3Y, _("Tutorial"), WBUT_TXTCENTRE); addTextButton(FRONTEND_FASTPLAY, FRONTEND_POS4X,FRONTEND_POS4Y, _("Fast Play"), WBUT_TXTCENTRE); addSideText (FRONTEND_SIDETEXT ,FRONTEND_SIDEX,FRONTEND_SIDEY,_("TUTORIALS")); // TRANSLATORS: "Return", in this context, means "return to previous screen/menu" addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI); return true; }
// //////////////////////////////////////////////////////////////////////////// // Options Menu static bool startOptionsMenu(void) { sliderEnableDrag(true); addBackdrop(); addTopForm(); addBottomForm(); addSideText (FRONTEND_SIDETEXT , FRONTEND_SIDEX,FRONTEND_SIDEY, _("OPTIONS")); addTextButton(FRONTEND_GAMEOPTIONS, FRONTEND_POS2X,FRONTEND_POS2Y, _("Game Options"), WBUT_TXTCENTRE); addTextButton(FRONTEND_GRAPHICSOPTIONS, FRONTEND_POS3X,FRONTEND_POS3Y, _("Graphics Options"), WBUT_TXTCENTRE); addTextButton(FRONTEND_VIDEOOPTIONS, FRONTEND_POS4X,FRONTEND_POS4Y, _("Video Options"), WBUT_TXTCENTRE); addTextButton(FRONTEND_AUDIOOPTIONS, FRONTEND_POS5X,FRONTEND_POS5Y, _("Audio Options"), WBUT_TXTCENTRE); addTextButton(FRONTEND_MOUSEOPTIONS, FRONTEND_POS6X,FRONTEND_POS6Y, _("Mouse Options"), WBUT_TXTCENTRE); addTextButton(FRONTEND_KEYMAP, FRONTEND_POS7X,FRONTEND_POS7Y, _("Key Mappings"), WBUT_TXTCENTRE); addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI); return true; }
// //////////////////////////////////////////////////////////////////////////// bool startLimitScreen(void) { addBackdrop();//background // load stats... if(!bLimiterLoaded) { initLoadingScreen(true); if (!resLoad("wrf/limiter_tex.wrf", 501)) { return false; } if (!resLoad("wrf/piestats.wrf", 502)) { return false; } if (!resLoad("wrf/limiter_data.wrf", 503)) { return false; } bLimiterLoaded = true; closeLoadingScreen(); } if (challengeActive) { // reset the sliders.. // it's a HACK since the actual limiter structure was cleared in the startMultiOptions function for (unsigned i = 0; i < numStructureStats; ++i) { asStructLimits[0][i].limit = asStructLimits[0][i].globalLimit; } // turn off the sliders sliderEnableDrag(false); } else { //enable the sliders sliderEnableDrag(true); } addSideText(FRONTEND_SIDETEXT1,LIMITSX-2,LIMITSY,"LIMITS"); // draw sidetext... WIDGET *parent = widgGetFromID(psWScreen, FRONTEND_BACKDROP); IntFormAnimated *limitsForm = new IntFormAnimated(parent, false); limitsForm->id = IDLIMITS; limitsForm->setGeometry(LIMITSX, LIMITSY, LIMITSW, LIMITSH); // return button. addMultiBut(psWScreen,IDLIMITS,IDLIMITS_RETURN, LIMITS_OKX-40,LIMITS_OKY, iV_GetImageWidth(FrontImages, IMAGE_NO), iV_GetImageHeight(FrontImages, IMAGE_NO), _("Apply Defaults and Return To Previous Screen"),IMAGE_NO,IMAGE_NO,true); // ok button addMultiBut(psWScreen,IDLIMITS,IDLIMITS_OK, LIMITS_OKX,LIMITS_OKY, iV_GetImageWidth(FrontImages,IMAGE_OK), iV_GetImageHeight(FrontImages,IMAGE_OK), _("Accept Settings"),IMAGE_OK,IMAGE_OK,true); // add tab form.. IntListTabWidget *limitsList = new IntListTabWidget(limitsForm); limitsList->setChildSize(BARWIDTH, BARHEIGHT); limitsList->setChildSpacing(5, 5); limitsList->setGeometry(50, 10, BARWIDTH, 370); //Put the buttons on it int limitsButtonId = IDLIMITS_ENTRIES_START; for (unsigned i = 0; i < numStructureStats; ++i) { if (asStructLimits[0][i].globalLimit != LOTS_OF) { W_FORM *button = new W_FORM(limitsList); button->id = limitsButtonId; button->displayFunction = displayStructureBar; button->UserData = i; limitsList->addWidgetToLayout(button); ++limitsButtonId; addFESlider(limitsButtonId, limitsButtonId - 1, 290, 11, asStructLimits[0][i].globalLimit, asStructLimits[0][i].limit); ++limitsButtonId; } } return true; }
// //////////////////////////////////////////////////////////////////////////// bool startKeyMapEditor(bool first) { KEY_MAPPING *psMapping; UDWORD i,mapcount =0; UDWORD bubbleCount; bool bAtEnd,bGotOne; KEY_MAPPING *psPresent = NULL, *psNext; char test[255]; addBackdrop(); addSideText(FRONTEND_SIDETEXT, KM_SX, KM_Y, _("KEY MAPPING")); if (first) { loadKeyMap(); // get the current mappings. } W_FORMINIT sFormInit; sFormInit.formID = FRONTEND_BACKDROP; sFormInit.id = KM_FORM; sFormInit.style = WFORM_PLAIN; sFormInit.x = KM_X; sFormInit.y = KM_Y; sFormInit.width = KM_W; sFormInit.height = KM_H; sFormInit.pDisplay = intDisplayPlainForm; widgAddForm(psWScreen, &sFormInit); addMultiBut(psWScreen,KM_FORM,KM_RETURN, // return button. 8,5, iV_GetImageWidth(FrontImages,IMAGE_RETURN), iV_GetImageHeight(FrontImages,IMAGE_RETURN), _("Return To Previous Screen"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI); addMultiBut(psWScreen,KM_FORM,KM_DEFAULT, 11,45, 56,38, _("Select Default"), IMAGE_KEYMAP_DEFAULT, IMAGE_KEYMAP_DEFAULT_HI, IMAGE_KEYMAP_DEFAULT_HI); // default. /* Better be none that come after this...! */ sstrcpy(test, "zzzzzzzzzzzzzzzzzzzzz"); psMapping = NULL; //count mappings required. for(psMapping = keyMappings; psMapping; psMapping = psMapping->psNext) { if( (psMapping->status!=KEYMAP__DEBUG)&&(psMapping->status!=KEYMAP___HIDE)) // if it's not a debug mapping.. { mapcount++; if(strcmp(psMapping->pName,test) < 0) { /* Best one found so far */ sstrcpy(test, psMapping->pName); psPresent = psMapping; } } } // add tab form.. sFormInit = W_FORMINIT(); sFormInit.formID = KM_FORM; sFormInit.id = KM_FORM_TABS; sFormInit.style = WFORM_TABBED; sFormInit.x = 50; sFormInit.y = 10; sFormInit.width = KM_W- 100; sFormInit.height = KM_H- 4; sFormInit.numMajor = numForms(mapcount, BUTTONSPERKEYMAPPAGE); sFormInit.majorPos = WFORM_TABTOP; sFormInit.minorPos = WFORM_TABNONE; sFormInit.majorSize = OBJ_TABWIDTH+3; sFormInit.majorOffset = OBJ_TABOFFSET; sFormInit.tabVertOffset = (OBJ_TABHEIGHT/2); sFormInit.tabMajorThickness = OBJ_TABHEIGHT; sFormInit.pUserData = &StandardTab; sFormInit.pTabDisplay = intDisplayTab; // TABFIXME: Special case for tabs, since this one has whole screen to itself. No need to modify(?) for (i=0; i< sFormInit.numMajor; i++) { sFormInit.aNumMinors[i] = 1; } widgAddForm(psWScreen, &sFormInit); //Put the buttons on it W_BUTINIT sButInit; sButInit.formID = KM_FORM_TABS; sButInit.width = KM_ENTRYW; sButInit.height = KM_ENTRYH; sButInit.pDisplay = displayKeyMap; sButInit.x = 2; sButInit.y = 16; sButInit.id = KM_START; /* Add our first mapping to the form */ sButInit.pUserData= psPresent; widgAddButton(psWScreen, &sButInit); sButInit.id++; sButInit.y += KM_ENTRYH +3; /* Now add the others... */ bubbleCount = 0; bAtEnd = false; /* Stop when the right number or when aphabetically last - not sure...! */ while(bubbleCount<mapcount-1 && !bAtEnd) { /* Same test as before for upper limit */ sstrcpy(test, "zzzzzzzzzzzzzzzzzzzzz"); for(psMapping = keyMappings,psNext = NULL,bGotOne = false; psMapping; psMapping = psMapping->psNext) { /* Only certain mappings get displayed */ if( (psMapping->status!=KEYMAP__DEBUG)&&(psMapping->status!=KEYMAP___HIDE)) // if it's not a debug mapping.. { /* If it's alphabetically good but better then next one */ if(strcmp(psMapping->pName,test) < 0 && strcmp(psMapping->pName,psPresent->pName) > 0) { /* Keep a record of it */ sstrcpy(test, psMapping->pName); psNext = psMapping; bGotOne = true; } } } /* We found one matching criteria */ if(bGotOne) { psPresent = psNext; bubbleCount++; sButInit.pUserData= psNext; widgAddButton(psWScreen, &sButInit); // move on.. sButInit.id++; /* Might be no more room on the page */ if ( (sButInit.y + KM_ENTRYH+5 ) > (3+ (BUTTONSPERKEYMAPPAGE*(KM_ENTRYH+3)))) { sButInit.y = 16; sButInit.majorID += 1; } else { sButInit.y += KM_ENTRYH +3; } } else { /* The previous one we found was alphabetically last - time to stop */ bAtEnd = true; } } /* Go home... */ return true; }
// //////////////////////////////////////////////////////////////////////////// // Graphics Options static bool startGraphicsOptionsMenu(void) { addBackdrop(); addTopForm(); addBottomForm(); //////////// //FMV mode. addTextButton(FRONTEND_FMVMODE, FRONTEND_POS2X - 35, FRONTEND_POS2Y, _("Video Playback"), 0); switch (war_GetFMVmode()) { case FMV_1X: addTextButton(FRONTEND_FMVMODE_R, FRONTEND_POS2M - 55,FRONTEND_POS2Y, _("1X"), 0); break; case FMV_2X: addTextButton(FRONTEND_FMVMODE_R, FRONTEND_POS2M - 55,FRONTEND_POS2Y, _("2X"), 0); break; case FMV_FULLSCREEN: addTextButton(FRONTEND_FMVMODE_R, FRONTEND_POS2M - 55,FRONTEND_POS2Y, _("Fullscreen"), 0); break; default: ASSERT(!"invalid FMV mode", "Invalid FMV mode: %u", (unsigned int)war_GetFMVmode()); break; } // Scanlines addTextButton(FRONTEND_SCANLINES, FRONTEND_POS3X - 35, FRONTEND_POS3Y, _("Scanlines"), 0); switch (war_getScanlineMode()) { case SCANLINES_OFF: addTextButton(FRONTEND_SCANLINES_R, FRONTEND_POS3M - 55, FRONTEND_POS3Y, _("Off"), 0); break; case SCANLINES_50: addTextButton(FRONTEND_SCANLINES_R, FRONTEND_POS3M - 55, FRONTEND_POS3Y, _("50%"), 0); break; case SCANLINES_BLACK: addTextButton(FRONTEND_SCANLINES_R, FRONTEND_POS3M - 55, FRONTEND_POS3Y, _("Black"), 0); break; } //////////// // screenshake addTextButton(FRONTEND_SSHAKE, FRONTEND_POS4X-35, FRONTEND_POS4Y, _("Screen Shake"), 0); if(getShakeStatus()) {// shaking on addTextButton(FRONTEND_SSHAKE_R, FRONTEND_POS4M-55, FRONTEND_POS4Y, _("On"), 0); } else {//shaking off. addTextButton(FRONTEND_SSHAKE_R, FRONTEND_POS4M-55, FRONTEND_POS4Y, _("Off"), 0); } //////////// // fog addTextButton(FRONTEND_FOGTYPE, FRONTEND_POS5X-35, FRONTEND_POS5Y, _("Fog"), 0); if(war_GetFog()) { addTextButton(FRONTEND_FOGTYPE_R,FRONTEND_POS5M-55,FRONTEND_POS5Y, _("Mist"), 0); } else { addTextButton(FRONTEND_FOGTYPE_R,FRONTEND_POS5M-55,FRONTEND_POS5Y, _("Fog Of War"), 0); } //////////// //subtitle mode. addTextButton(FRONTEND_SUBTITLES, FRONTEND_POS6X - 35, FRONTEND_POS6Y, _("Subtitles"), 0); if (!seq_GetSubtitles()) { addTextButton(FRONTEND_SUBTITLES_R, FRONTEND_POS6M - 55, FRONTEND_POS6Y, _("Off"), 0); } else { addTextButton(FRONTEND_SUBTITLES_R, FRONTEND_POS6M - 55, FRONTEND_POS6Y, _("On"), 0); } //////////// //shadows addTextButton(FRONTEND_SHADOWS, FRONTEND_POS7X - 35, FRONTEND_POS7Y, _("Shadows"), 0); if (getDrawShadows()) { addTextButton(FRONTEND_SHADOWS_R, FRONTEND_POS7M - 55, FRONTEND_POS7Y, _("On"), 0); } else { // not flipped addTextButton(FRONTEND_SHADOWS_R, FRONTEND_POS7M - 55, FRONTEND_POS7Y, _("Off"), 0); } // Add some text down the side of the form addSideText(FRONTEND_SIDETEXT, FRONTEND_SIDEX, FRONTEND_SIDEY, _("GRAPHICS OPTIONS")); //////////// // quit. addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI); return true; }
// //////////////////////////////////////////////////////////////////////////// // Game Options Menu static bool startGameOptionsMenu(void) { UDWORD w, h; int playercolor; addBackdrop(); addTopForm(); addBottomForm(); // Difficulty addTextButton(FRONTEND_DIFFICULTY, FRONTEND_POS2X-25, FRONTEND_POS2Y, _("Difficulty"), 0); switch (getDifficultyLevel()) { case DL_EASY: addTextButton(FRONTEND_DIFFICULTY_R, FRONTEND_POS2M-25, FRONTEND_POS2Y, _("Easy"), 0); break; case DL_NORMAL: addTextButton(FRONTEND_DIFFICULTY_R, FRONTEND_POS2M-25,FRONTEND_POS2Y, _("Normal"), 0); break; case DL_HARD: default: addTextButton(FRONTEND_DIFFICULTY_R, FRONTEND_POS2M-25, FRONTEND_POS2Y, _("Hard"), 0); break; } // Scroll speed addTextButton(FRONTEND_SCROLLSPEED, FRONTEND_POS3X-25, FRONTEND_POS3Y, _("Scroll Speed"), 0); addFESlider(FRONTEND_SCROLLSPEED_SL, FRONTEND_BOTFORM, FRONTEND_POS3M, FRONTEND_POS3Y+5, 16, scroll_speed_accel / 100); // Colour stuff w = iV_GetImageWidth(FrontImages, IMAGE_PLAYERN); h = iV_GetImageHeight(FrontImages, IMAGE_PLAYERN); addMultiBut(psWScreen, FRONTEND_BOTFORM, FE_P0, FRONTEND_POS4M+(0*(w+6)), FRONTEND_POS4Y, w, h, NULL, IMAGE_PLAYERN, IMAGE_PLAYERX, true, 0); addMultiBut(psWScreen, FRONTEND_BOTFORM, FE_P4, FRONTEND_POS4M+(1*(w+6)), FRONTEND_POS4Y, w, h, NULL, IMAGE_PLAYERN, IMAGE_PLAYERX, true, 4); addMultiBut(psWScreen, FRONTEND_BOTFORM, FE_P5, FRONTEND_POS4M+(2*(w+6)), FRONTEND_POS4Y, w, h, NULL, IMAGE_PLAYERN, IMAGE_PLAYERX, true, 5); addMultiBut(psWScreen, FRONTEND_BOTFORM, FE_P6, FRONTEND_POS4M+(3*(w+6)), FRONTEND_POS4Y, w, h, NULL, IMAGE_PLAYERN, IMAGE_PLAYERX, true, 6); addMultiBut(psWScreen, FRONTEND_BOTFORM, FE_P7, FRONTEND_POS4M+(4*(w+6)), FRONTEND_POS4Y, w, h, NULL, IMAGE_PLAYERN, IMAGE_PLAYERX, true, 7); // language addTextButton(FRONTEND_LANGUAGE, FRONTEND_POS2X - 25, FRONTEND_POS5Y, _("Language"), 0); addTextButton(FRONTEND_LANGUAGE_R, FRONTEND_POS2M - 25, FRONTEND_POS5Y, getLanguageName(), 0); // FIXME: if playercolor = 1-3, then we Assert in widgSetButtonState() since we don't define FE_P1 - FE_P3 // I assume the reason is that in SP games, those are reserved for the AI? Valid values are 0, 4-7. // This is a workaround, until we find what is setting that to 1-3. See configuration.c:701 playercolor = war_GetSPcolor(); if (playercolor >= 1 && playercolor <= 3) { playercolor = 0; } widgSetButtonState(psWScreen, FE_P0 + playercolor, WBUT_LOCK); addTextButton(FRONTEND_COLOUR, FRONTEND_POS4X-25, FRONTEND_POS4Y, _("Unit Colour"), 0); // Radar addTextButton(FRONTEND_RADAR, FRONTEND_POS6X - 25, FRONTEND_POS6Y, _("Radar"), 0); addTextButton(FRONTEND_RADAR_R, FRONTEND_POS6M - 25, FRONTEND_POS6Y, rotateRadar ? _("Rotating") : _("Fixed"), 0); // Quit addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI); // Add some text down the side of the form addSideText(FRONTEND_SIDETEXT, FRONTEND_SIDEX, FRONTEND_SIDEY, _("GAME OPTIONS")); return true; }
// //////////////////////////////////////////////////////////////////////////// // Mouse Options static bool startMouseOptionsMenu(void) { addBackdrop(); addTopForm(); addBottomForm(); addTextHint(FRONTEND_TAKESEFFECT, FRONTEND_POS1X + 48, FRONTEND_POS1Y + 24, _("* May negatively affect performance")); //////////// // mouseflip addTextButton(FRONTEND_MFLIP, FRONTEND_POS2X-35, FRONTEND_POS2Y, _("Reverse Rotation"), 0); if( getInvertMouseStatus() ) { // flipped addTextButton(FRONTEND_MFLIP_R, FRONTEND_POS2M-25, FRONTEND_POS2Y, _("On"), 0); } else { // not flipped addTextButton(FRONTEND_MFLIP_R, FRONTEND_POS2M-25, FRONTEND_POS2Y, _("Off"), 0); } // Cursor trapping addTextButton(FRONTEND_TRAP, FRONTEND_POS3X-35, FRONTEND_POS3Y, _("Trap Cursor"), 0); if (war_GetTrapCursor()) { addTextButton(FRONTEND_TRAP_R, FRONTEND_POS3M-25, FRONTEND_POS3Y, _("On"), 0); } else { addTextButton(FRONTEND_TRAP_R, FRONTEND_POS3M-25, FRONTEND_POS3Y, _("Off"), 0); } //////////// // left-click orders addTextButton(FRONTEND_MBUTTONS, FRONTEND_POS2X-35, FRONTEND_POS5Y, _("Switch Mouse Buttons"), 0); if( getRightClickOrders() ) { // right-click orders addTextButton(FRONTEND_MBUTTONS_R, FRONTEND_POS2M-25, FRONTEND_POS5Y, _("On"), 0); } else { // left-click orders addTextButton(FRONTEND_MBUTTONS_R, FRONTEND_POS2M-25, FRONTEND_POS5Y, _("Off"), 0); } //////////// // middle-click rotate addTextButton(FRONTEND_MMROTATE, FRONTEND_POS2X-35, FRONTEND_POS6Y, _("Rotate Screen"), 0); if( getMiddleClickRotate() ) { // right-click orders addTextButton(FRONTEND_MMROTATE_R, FRONTEND_POS2M-25, FRONTEND_POS6Y, _("Middle Mouse"), 0); } else { // left-click orders addTextButton(FRONTEND_MMROTATE_R, FRONTEND_POS2M-25, FRONTEND_POS6Y, _("Right Mouse"), 0); } // Add some text down the side of the form addSideText(FRONTEND_SIDETEXT, FRONTEND_SIDEX, FRONTEND_SIDEY, _("MOUSE OPTIONS")); // Quit/return addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI); return true; }
// //////////////////////////////////////////////////////////////////////////// bool startLimitScreen(void) { UDWORD numButtons = 0; UDWORD i; addBackdrop();//background // load stats... if(!bLimiterLoaded) { initLoadingScreen(true); if (!resLoad("wrf/limiter_tex.wrf", 501)) { return false; } if (!resLoad("wrf/piestats.wrf", 502)) { return false; } if (!resLoad("wrf/limiter_data.wrf", 503)) { return false; } bLimiterLoaded = true; closeLoadingScreen(); } if (challengeActive) { // reset the sliders.. // it's a HACK since the actual limiter structure was cleared in the startMultiOptions function for (i = 0; i < numStructureStats ; ++i) { asStructLimits[0][i].limit = asStructLimits[0][i].globalLimit; } // turn off the sliders sliderEnableDrag(false); } else { //enable the sliders sliderEnableDrag(true); } addSideText(FRONTEND_SIDETEXT1,LIMITSX-2,LIMITSY,"LIMITS"); // draw sidetext... W_FORMINIT sFormInit; sFormInit.formID = FRONTEND_BACKDROP; sFormInit.id = IDLIMITS; sFormInit.style = WFORM_PLAIN; sFormInit.x = LIMITSX; sFormInit.y = LIMITSY; sFormInit.width = LIMITSW; sFormInit.height = LIMITSH; sFormInit.pDisplay = intDisplayPlainForm; widgAddForm(psWScreen, &sFormInit); // return button. addMultiBut(psWScreen,IDLIMITS,IDLIMITS_RETURN, LIMITS_OKX-40,LIMITS_OKY, iV_GetImageWidth(FrontImages,IMAGE_RETURN), iV_GetImageHeight(FrontImages,IMAGE_RETURN), _("Apply Defaults and Return To Previous Screen"),IMAGE_NO,IMAGE_NO,true); // ok button addMultiBut(psWScreen,IDLIMITS,IDLIMITS_OK, LIMITS_OKX,LIMITS_OKY, iV_GetImageWidth(FrontImages,IMAGE_OK), iV_GetImageHeight(FrontImages,IMAGE_OK), _("Accept Settings"),IMAGE_OK,IMAGE_OK,true); // Count the number of minor tabs needed numButtons = 0; for(i=0; i<numStructureStats; i++ ) { if(useStruct(numButtons,i)) { numButtons++; } } if(numButtons >(4*BUTPERFORM)) numButtons =(4*BUTPERFORM); // add tab form.. sFormInit = W_FORMINIT(); sFormInit.formID = IDLIMITS; sFormInit.id = IDLIMITS_TABS; sFormInit.style = WFORM_TABBED; sFormInit.x = 50; sFormInit.y = 10; sFormInit.width = LIMITSW - 100; sFormInit.height =LIMITSH - 4; sFormInit.numMajor = numForms(numButtons, BUTPERFORM); sFormInit.majorPos = WFORM_TABTOP; sFormInit.minorPos = WFORM_TABNONE; sFormInit.majorSize = OBJ_TABWIDTH+3; //!! sFormInit.majorOffset = OBJ_TABOFFSET; sFormInit.tabVertOffset = (OBJ_TABHEIGHT/2); //(DES_TAB_HEIGHT/2)+2; sFormInit.tabMajorThickness = OBJ_TABHEIGHT; sFormInit.pUserData = &StandardTab; sFormInit.pTabDisplay = intDisplayTab; // TABFIXME --unsure if needs fixing yet. for (i=0; i< sFormInit.numMajor; i++) { sFormInit.aNumMinors[i] = 1; } widgAddForm(psWScreen, &sFormInit); //Put the buttons on it W_FORMINIT sButInit; sButInit.formID = IDLIMITS_TABS;//IDLIMITS; sButInit.style = WFORM_PLAIN; sButInit.width = BARWIDTH; sButInit.height = BARHEIGHT; sButInit.pDisplay = displayStructureBar; sButInit.x = 2; sButInit.y = 5; sButInit.id = IDLIMITS_ENTRIES_START; numButtons =0; for(i=0; i<numStructureStats ; i++) { if(useStruct(numButtons,i)) { numButtons++; sButInit.UserData= i; widgAddForm(psWScreen, &sButInit); sButInit.id ++; addFESlider(sButInit.id,sButInit.id-1, 290,11, asStructLimits[0][i].globalLimit, asStructLimits[0][i].limit); sButInit.id ++; if (sButInit.y + BARHEIGHT + 2 > (BUTPERFORM*(BARHEIGHT+2) - 4) ) { sButInit.y = 5; sButInit.majorID += 1; } else { sButInit.y += BARHEIGHT +5; } } } return true; }
// //////////////////////////////////////////////////////////////////////////// BOOL startKeyMapEditor(BOOL first) { W_BUTINIT sButInit; W_FORMINIT sFormInit; KEY_MAPPING *psMapping; UDWORD i,mapcount =0; UDWORD bubbleCount; BOOL bAtEnd,bGotOne; KEY_MAPPING *psPresent,*psNext; char test[255]; addBackdrop(); addSideText (FRONTEND_SIDETEXT ,KM_X-2,KM_Y,strresGetString(psStringRes, STR_KM_KEYMAP_SIDE)); if(first) { loadKeyMap(); // get the current mappings. } memset(&sFormInit, 0, sizeof(W_FORMINIT)); // draw blue form... sFormInit.formID = FRONTEND_BACKDROP; sFormInit.id = KM_FORM; sFormInit.style = WFORM_PLAIN; sFormInit.x = KM_X; sFormInit.y = KM_Y; sFormInit.width = KM_W; sFormInit.height = KM_H; sFormInit.pDisplay = intDisplayPlainForm; widgAddForm(psWScreen, &sFormInit); addMultiBut(psWScreen,KM_FORM,KM_RETURN, // return button. 8,5, iV_GetImageWidth(FrontImages,IMAGE_RETURN), iV_GetImageHeight(FrontImages,IMAGE_RETURN), STR_MUL_CANCEL,IMAGE_RETURN,IMAGE_RETURN_HI,TRUE); addMultiBut(psWScreen,KM_FORM,KM_DEFAULT, 11,45, 56,38, STR_MUL_DEFAULT, IMAGE_KEYMAP_DEFAULT,IMAGE_KEYMAP_DEFAULT,TRUE); // default. /* Better be none that come after this...! */ strcpy(test,"zzzzzzzzzzzzzzzzzzzzz"); psMapping = NULL; //count mappings required. for(psMapping = keyMappings; psMapping; psMapping = psMapping->psNext) { if( (psMapping->status!=KEYMAP__DEBUG)&&(psMapping->status!=KEYMAP___HIDE)) // if it's not a debug mapping.. { mapcount++; if(strcmp(psMapping->pName,test) < 0) { /* Best one found so far */ strcpy(test,psMapping->pName); psPresent = psMapping; } } } // add tab form.. memset(&sFormInit, 0, sizeof(W_FORMINIT)); sFormInit.formID = KM_FORM; sFormInit.id = KM_FORM_TABS; sFormInit.style = WFORM_TABBED; sFormInit.x = 50; sFormInit.y = 10; sFormInit.width = KM_W- 100; sFormInit.height = KM_H- 4; sFormInit.numMajor = numForms(mapcount, BUTTONSPERKEYMAPPAGE); sFormInit.majorPos = WFORM_TABTOP; sFormInit.minorPos = WFORM_TABNONE; sFormInit.majorSize = OBJ_TABWIDTH+3; sFormInit.majorOffset = OBJ_TABOFFSET; sFormInit.tabVertOffset = (OBJ_TABHEIGHT/2); sFormInit.tabMajorThickness = OBJ_TABHEIGHT; sFormInit.pFormDisplay = intDisplayObjectForm; sFormInit.pUserData = (void*)&StandardTab; sFormInit.pTabDisplay = intDisplayTab; for (i=0; i< sFormInit.numMajor; i++) { sFormInit.aNumMinors[i] = 1; } widgAddForm(psWScreen, &sFormInit); //Put the buttons on it memset(&sButInit, 0, sizeof(W_BUTINIT)); sButInit.formID = KM_FORM_TABS; sButInit.style = WFORM_PLAIN; sButInit.width = KM_ENTRYW; sButInit.height = KM_ENTRYH; sButInit.pDisplay = displayKeyMap; sButInit.x = 2; sButInit.y = 16; sButInit.id = KM_START; /* Add our first mapping to the form */ sButInit.pUserData= (VOID*)psPresent; widgAddButton(psWScreen, &sButInit); sButInit.id++; /* Now add the others... */ bubbleCount = 0; bAtEnd = FALSE; /* Stop when the right number or when aphabetically last - not sure...! */ while(bubbleCount<mapcount-1 AND !bAtEnd) { /* Same test as before for upper limit */ strcpy(test,"zzzzzzzzzzzzzzzzzzzzz"); for(psMapping = keyMappings,psNext = NULL,bGotOne = FALSE; psMapping; psMapping = psMapping->psNext) { /* Only certain mappings get displayed */ if( (psMapping->status!=KEYMAP__DEBUG)&&(psMapping->status!=KEYMAP___HIDE)) // if it's not a debug mapping.. { /* If it's alphabetically good but better then next one */ if(strcmp(psMapping->pName,test) < 0 AND strcmp(psMapping->pName,psPresent->pName) > 0) { /* Keep a record of it */ strcpy(test,psMapping->pName); psNext = psMapping; bGotOne = TRUE; } } } /* We found one matching criteria */ if(bGotOne) { psPresent = psNext; bubbleCount++; sButInit.pUserData= (VOID*)psNext; widgAddButton(psWScreen, &sButInit); // move on.. sButInit.id++; /* Might be no more room on the page */ if ( (sButInit.y + KM_ENTRYH+5 ) > (3+ (BUTTONSPERKEYMAPPAGE*(KM_ENTRYH+3)))) { sButInit.y = 16; sButInit.majorID += 1; } else { sButInit.y += KM_ENTRYH +3; } } else { /* The previous one we found was alphabetically last - time to stop */ bAtEnd = TRUE; } } /* Go home... */ return TRUE; }