From ebed57aa22b772211387a5561f995eee8f5faed1 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Tue, 26 Jun 2012 22:23:05 +0200 Subject: Whitespace and language change - changed tabs to spaces and DOS line endings to Unix (except in CBot and metafile) - changed language to English - fixed #include in d3dengine.h --- src/ui/maindialog.cpp | 13870 ++++++++++++++++++++++++------------------------ 1 file changed, 6935 insertions(+), 6935 deletions(-) (limited to 'src/ui/maindialog.cpp') diff --git a/src/ui/maindialog.cpp b/src/ui/maindialog.cpp index 267c4b1..a45846e 100644 --- a/src/ui/maindialog.cpp +++ b/src/ui/maindialog.cpp @@ -1,6935 +1,6935 @@ -// * This file is part of the COLOBOT source code -// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch -// * -// * This program is free software: you can redistribute it and/or modify -// * it under the terms of the GNU General Public License as published by -// * the Free Software Foundation, either version 3 of the License, or -// * (at your option) any later version. -// * -// * This program is distributed in the hope that it will be useful, -// * but WITHOUT ANY WARRANTY; without even the implied warranty of -// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// * GNU General Public License for more details. -// * -// * You should have received a copy of the GNU General Public License -// * along with this program. If not, see http://www.gnu.org/licenses/. - -// maindialog.cpp - - -#include -#include -#include -#include -#include -#include - -#include "common/struct.h" -#include "old/d3dengine.h" -#include "old/d3dmath.h" -#include "common/global.h" -#include "common/language.h" -#include "common/event.h" -#include "common/misc.h" -#include "common/profile.h" -#include "common/iman.h" -#include "common/restext.h" -#include "old/math3d.h" -#include "old/particule.h" -#include "ui/interface.h" -#include "ui/button.h" -#include "ui/color.h" -#include "ui/check.h" -#include "ui/key.h" -#include "ui/group.h" -#include "ui/image.h" -#include "ui/scroll.h" -#include "ui/slider.h" -#include "ui/list.h" -#include "ui/label.h" -#include "ui/window.h" -#include "ui/edit.h" -#include "ui/editvalue.h" -#include "old/text.h" -#include "old/camera.h" -#include "old/sound.h" -#include "script/cmdtoken.h" -#include "object/robotmain.h" -#include "ui/maindialog.h" - - - -const int KEY_VISIBLE = 6; // number of visible keys redefinable - -#if _SCHOOL & _TEEN -const int KEY_TOTAL = 13; // total number of keys redefinable -#else -const int KEY_TOTAL = 21; // total number of keys redefinable -#endif - -const int WELCOME_LENGTH = 6.0f; - - - -static int perso_color[3*10*3] = -{ - // hair: - 193, 221, 226, // white - 255, 255, 181, // yellow - 204, 155, 84, // blond - 165, 48, 10, // red - 140, 75, 84, // brown - 83, 64, 51, // brown - 90, 95, 85, // black - 85, 48, 9, // brown - 60, 0, 23, // black - 0, 0, 0, // - // spacesuit: - 203, 206, 204, // dirty white - 0, 205, 203, // bluish - 108, 176, 0, // greenish - 207, 207, 32, // yellow - 170, 141, 0, // orange - 108, 84, 0, // brown - 0, 84, 136, // bluish - 56, 61, 146, // bluish - 56, 56, 56, // black - 0, 0, 0, // - // strips: - 255, 255, 255, // white - 255, 255, 0, // yellow - 255, 132, 1, // orange - 255, 0, 255, // magenta - 255, 0, 0, // red - 0, 255, 0, // green - 0, 255, 255, // cyan - 0, 0, 255, // blue - 70, 51, 84, // dark - 0, 0, 0, // -}; - - -#if _NET -// Check if the key "school" is present in the registry. - -bool SchoolCheck() -{ - HKEY key; - char buffer[100]; - LONG i; - DWORD type, len; - - i = RegOpenKeyEx(HKEY_LOCAL_MACHINE, -#if _NEWLOOK - "Software\\Epsitec\\CeeBot\\Setup", -#else - "Software\\Epsitec\\Colobot\\Setup", -#endif - 0, KEY_READ, &key); - if ( i != ERROR_SUCCESS ) return false; - - type = REG_SZ; - len = sizeof(buffer); - i = RegQueryValueEx(key, "School", NULL, &type, (LPBYTE)buffer, &len); - if ( i != ERROR_SUCCESS || type != REG_SZ ) return false; - - if ( strcmp(buffer, "ToBoLoC") != 0 ) return false; - - return true; -} -#endif - - -// Constructor of robot application. - -CMainDialog::CMainDialog(CInstanceManager* iMan) -{ - int i; - - m_iMan = iMan; - m_iMan->AddInstance(CLASS_DIALOG, this); - - m_main = (CRobotMain*)m_iMan->SearchInstance(CLASS_MAIN); - m_interface = (CInterface*)m_iMan->SearchInstance(CLASS_INTERFACE); - m_event = (CEvent*)m_iMan->SearchInstance(CLASS_EVENT); - m_engine = (CD3DEngine*)m_iMan->SearchInstance(CLASS_ENGINE); - m_particule = (CParticule*)m_iMan->SearchInstance(CLASS_PARTICULE); - m_camera = (CCamera*)m_iMan->SearchInstance(CLASS_CAMERA); - m_sound = (CSound*)m_iMan->SearchInstance(CLASS_SOUND); - - m_phase = PHASE_NAME; - m_phaseSetup = PHASE_SETUPg; - m_phaseTerm = PHASE_TRAINER; - m_sceneRead[0] = 0; - m_stackRead[0] = 0; - m_sceneName[0] = 0; - m_sceneRank = 0; - m_bSceneSoluce = false; - m_bSimulSetup = false; -#if _NET - m_accessEnable = SchoolCheck(); - m_accessMission= false; - m_accessUser = false; -#else - m_accessEnable = true; - m_accessMission= true; - m_accessUser = true; -#endif - m_bDeleteGamer = true; - - for ( i=0 ; i<10 ; i++ ) - { - m_chap[i] = 0; - m_sel[i] = 0; - } - m_index = 0; - m_maxList = 0; - - ZeroMemory(&m_perso, sizeof(GamerPerso)); - DefPerso(); - - m_bTooltip = true; - m_bGlint = true; - m_bRain = true; - m_bSoluce4 = true; - m_bMovies = true; - m_bNiceReset = true; - m_bHimselfDamage = true; -#if _TEEN - m_bCameraScroll = false; -#else - m_bCameraScroll = true; -#endif - m_bCameraInvertX = false; - m_bCameraInvertY = false; - m_bEffect = true; - m_shotDelay = 0; - - m_glintMouse = Math::Point(0.0f, 0.0f); - m_glintTime = 1000.0f; - - for ( i=0 ; i<10 ; i++ ) - { - m_partiPhase[i] = 0; - m_partiTime[i] = 0.0f; - } - - strcpy(m_sceneDir, "scene"); - strcpy(m_savegameDir, "savegame"); - strcpy(m_publicDir, "program"); - strcpy(m_userDir, "user"); - strcpy(m_filesDir, "files"); - - m_bDialog = false; -} - -// Destructor of robot application. - -CMainDialog::~CMainDialog() -{ -} - - -// Changes phase. - -void CMainDialog::ChangePhase(Phase phase) -{ - CWindow* pw; - CEdit* pe; - CEditValue* pv; - CLabel* pl; - CList* pli; - CCheck* pc; - CScroll* ps; - CSlider* psl; - CButton* pb; - CColor* pco; - CGroup* pg; - CImage* pi; - Math::Point pos, dim, ddim; - float ox, oy, sx, sy; - char name[100]; - char* gamer; - int res, i, j; - - m_camera->SetType(CAMERA_DIALOG); - m_engine->SetOverFront(false); - m_engine->SetOverColor(RetColor(0.0f), D3DSTATETCb); - - if ( phase == PHASE_TERM ) - { - phase = m_phaseTerm; - } - m_phase = phase; // copy the info to CRobotMain - m_phaseTime = 0.0f; - - dim.x = 32.0f/640.0f; - dim.y = 32.0f/480.0f; - ox = 3.0f/640.0f; - oy = 3.0f/480.0f; - sx = (32.0f+2.0f)/640.0f; - sy = (32.0f+2.0f)/480.0f; - - if ( m_phase == PHASE_INIT ) - { - pos.x = 0.35f; - pos.y = 0.10f; - ddim.x = 0.30f; - ddim.y = 0.80f; -#if _TEEN - pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5); -#else - pw = m_interface->CreateWindows(pos, ddim, 10, EVENT_WINDOW5); -#endif - GetResource(RES_TEXT, RT_TITLE_INIT, name); - pw->SetName(name); - - pos.x = 0.35f; - pos.y = 0.60f; - ddim.x = 0.30f; - ddim.y = 0.30f; - pw->CreateGroup(pos, ddim, 5, EVENT_INTERFACE_GLINTl); // orange corner - pos.x = 0.35f; - pos.y = 0.10f; - ddim.x = 0.30f; - ddim.y = 0.30f; - pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner - -#if _SCHOOL - ddim.x = 0.20f; - ddim.y = dim.y*2.4f; - pos.x = 0.40f; - pos.y = oy+sy*7.9f; - pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // orange - pg->SetState(STATE_SHADOW); - pos.y = oy+sy*3.9f; - pg = pw->CreateGroup(pos, ddim, 25, EVENT_LABEL1); // orange - pg->SetState(STATE_SHADOW); - ddim.y = dim.y*1.2f; - pos.y = oy+sy*1.9f; - pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // red - pg->SetState(STATE_SHADOW); -#else - ddim.x = 0.20f; - ddim.y = dim.y*2.4f; - pos.x = 0.40f; - if ( m_accessEnable && m_accessMission ) - { - pos.y = oy+sy*9.1f; - pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // yellow - pg->SetState(STATE_SHADOW); - } - pos.y = oy+sy*6.8f; - pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // orange - pg->SetState(STATE_SHADOW); - pos.y = oy+sy*3.9f; - pg = pw->CreateGroup(pos, ddim, 25, EVENT_LABEL1); // orange - pg->SetState(STATE_SHADOW); - ddim.y = dim.y*1.2f; - pos.y = oy+sy*1.9f; - pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // red - pg->SetState(STATE_SHADOW); -#endif - -#if _SCHOOL - ddim.x = 0.18f; - ddim.y = dim.y*1; - pos.x = 0.41f; - pos.y = oy+sy*9.1f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_TRAINER); - pb->SetState(STATE_SHADOW); - - pos.y = oy+sy*8.0f; -#if _TEEN - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_TEEN); -#else - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_DEFI); -#endif -#if _CEEBOTDEMO - pb->ClearState(STATE_ENABLE); -#endif - pb->SetState(STATE_SHADOW); -#else - ddim.x = 0.18f; - ddim.y = dim.y*1; - pos.x = 0.41f; - - if ( m_accessEnable && m_accessMission ) - { - pos.y = oy+sy*10.3f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_MISSION); - pb->SetState(STATE_SHADOW); - - pos.y = oy+sy*9.2f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_FREE); - pb->SetState(STATE_SHADOW); - } - - pos.y = oy+sy*8.0f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_TRAINER); - pb->SetState(STATE_SHADOW); - - pos.y = oy+sy*6.9f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_DEFI); - pb->SetState(STATE_SHADOW); -#endif - - if ( m_engine->RetSetupMode() ) - { - pos.y = oy+sy*5.1f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_SETUP); - pb->SetState(STATE_SHADOW); - } - - pos.y = oy+sy*4.0f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_NAME); - pb->SetState(STATE_SHADOW); - - pos.y = oy+sy*2.0f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_QUIT); - pb->SetState(STATE_SHADOW); - -#if !_DEMO & !_SCHOOL - if ( m_accessEnable && m_accessUser ) - { - pos.x = 447.0f/640.0f; - pos.y = 313.0f/480.0f; - ddim.x = 0.09f; -#if _POLISH - pos.x -= 5.0f/640.0f; - ddim.x += 10.0f/640.0f; -#endif - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_USER); - pb->SetState(STATE_SHADOW); - } -#endif - - if ( m_engine->RetDebugMode() ) - { - pos.x = 139.0f/640.0f; - pos.y = 313.0f/480.0f; - ddim.x = 0.09f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PROTO); - pb->SetState(STATE_SHADOW); - } - - pos.x = 0.40f; - ddim.x = 0.20f; - pos.y = 26.0f/480.0f; - ddim.y = 12.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 1, EVENT_LABEL1); - pg->SetState(STATE_SHADOW); - pos.y -= 5.0f/480.0f; -#if _WG - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, " "); -#else -#if _NEWLOOK - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, "www.epsitec.ch"); -#else - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, "www.ceebot.com"); -#endif -#endif - pl->SetFontType(FONT_COURIER); - pl->SetFontSize(8.0f); - - m_engine->SetBackground("inter01.tga", 0,0, 0,0, true, true); - m_engine->SetBackForce(true); - } - - if ( m_phase == PHASE_NAME ) - { - pos.x = 0.10f; - pos.y = 0.10f; - ddim.x = 0.80f; - ddim.y = 0.80f; - pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5); - GetResource(RES_TEXT, RT_TITLE_NAME, name); - pw->SetName(name); - -#if _NEWLOOK - pos.x = 80.0f/640.0f; - pos.y = 93.0f/480.0f; - ddim.x = 285.0f/640.0f; - ddim.y = 266.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue - pg->SetState(STATE_SHADOW); - pos.x = 372.0f/640.0f; - ddim.x = 188.0f/640.0f; - pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet - pg->SetState(STATE_SHADOW); -#endif - - pos.x = 0.10f; - pos.y = 0.40f; - ddim.x = 0.50f; - ddim.y = 0.50f; - pw->CreateGroup(pos, ddim, 5, EVENT_INTERFACE_GLINTl); // orange corner - pos.x = 0.40f; - pos.y = 0.10f; - ddim.x = 0.50f; - ddim.y = 0.50f; - pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner - - pos.x = 60.0f/640.0f; - pos.y = 313.0f/480.0f; - ddim.x = 120.0f/640.0f; - ddim.y = 32.0f/480.0f; - GetResource(RES_EVENT, EVENT_INTERFACE_NLABEL, name); - pl = pw->CreateLabel(pos, ddim, -1, EVENT_INTERFACE_NLABEL, name); - pl->SetJustif(-1); - - pos.x = 200.0f/640.0f; - pos.y = 320.0f/480.0f; - ddim.x = 160.0f/640.0f; - ddim.y = 32.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 7, EVENT_LABEL1); - pg->SetState(STATE_SHADOW); - - pos.x = 207.0f/640.0f; - pos.y = 328.0f/480.0f; - ddim.x = 144.0f/640.0f; - ddim.y = 18.0f/480.0f; - pe = pw->CreateEdit(pos, ddim, 0, EVENT_INTERFACE_NEDIT); - pe->SetMaxChar(15); - gamer = m_main->RetGamerName(); - if ( gamer[0] == 0 ) - { - GetResource(RES_TEXT, RT_NAME_DEFAULT, name); - } - else - { - strcpy(name, gamer); - } - pe->SetText(name); - pe->SetCursor(strlen(name), 0); - pe->SetFocus(true); - - pos.x = 380.0f/640.0f; - pos.y = 320.0f/480.0f; - ddim.x =100.0f/640.0f; - ddim.y = 32.0f/480.0f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_NOK); - pb->SetState(STATE_SHADOW); - -#if !_TEEN - pos.x = 380.0f/640.0f; - pos.y = 250.0f/480.0f; - ddim.x =100.0f/640.0f; - ddim.y = 52.0f/480.0f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PERSO); - pb->SetState(STATE_SHADOW); -#endif - - pos.x = 200.0f/640.0f; - pos.y = 150.0f/480.0f; - ddim.x = 160.0f/640.0f; - ddim.y = 160.0f/480.0f; - pli = pw->CreateList(pos, ddim, 0, EVENT_INTERFACE_NLIST); - pli->SetState(STATE_SHADOW); - - if ( m_bDeleteGamer ) - { - pos.x = 200.0f/640.0f; - pos.y = 100.0f/480.0f; - ddim.x = 160.0f/640.0f; - ddim.y = 32.0f/480.0f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_NDELETE); - pb->SetState(STATE_SHADOW); - } - - pos.x = 380.0f/640.0f; - pos.y = 100.0f/480.0f; - ddim.x =100.0f/640.0f; - ddim.y = 32.0f/480.0f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_NCANCEL); - pb->SetState(STATE_SHADOW); - - ReadNameList(); - UpdateNameList(); - UpdateNameControl(); - UpdateNameFace(); - - m_engine->SetBackground("inter01.tga", 0,0, 0,0, true, true); - m_engine->SetBackForce(true); - } - - if ( m_phase == PHASE_PERSO ) - { - pos.x = 0.10f; - pos.y = 0.10f; - ddim.x = 0.80f; - ddim.y = 0.80f; - pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5); - GetResource(RES_TEXT, RT_TITLE_PERSO, name); - pw->SetName(name); - -#if _NEWLOOK - pos.x = 95.0f/640.0f; - pos.y = 66.0f/480.0f; - ddim.x = 443.0f/640.0f; - ddim.y = 42.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet - pg->SetState(STATE_SHADOW); -#endif - - pos.x = 0.10f; - pos.y = 0.40f; - ddim.x = 0.50f; - ddim.y = 0.50f; - pw->CreateGroup(pos, ddim, 5, EVENT_INTERFACE_GLINTl); // orange corner - pos.x = 0.40f; - pos.y = 0.10f; - ddim.x = 0.50f; - ddim.y = 0.50f; - pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner - - pos.x = 95.0f/640.0f; - pos.y = 108.0f/480.0f; - ddim.x = 220.0f/640.0f; - ddim.y = 274.0f/480.0f; - pw->CreateGroup(pos, ddim, 17, EVENT_NULL); // frame - - pos.x = 100.0f/640.0f; - pos.y = 364.0f/480.0f; - ddim.x = 210.0f/640.0f; - ddim.y = 14.0f/480.0f; - pw->CreateGroup(pos, ddim, 3, EVENT_NULL); // transparent -> gray - - pos.x = 120.0f/640.0f; - pos.y = 364.0f/480.0f; - ddim.x = 80.0f/640.0f; - ddim.y = 28.0f/480.0f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PHEAD); - pb->SetState(STATE_SHADOW); - pb->SetState(STATE_CARD); - - pos.x = 210.0f/640.0f; - pos.y = 364.0f/480.0f; - ddim.x = 80.0f/640.0f; - ddim.y = 28.0f/480.0f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PBODY); - pb->SetState(STATE_SHADOW); - pb->SetState(STATE_CARD); - - pos.x = 100.0f/640.0f; - pos.y = 354.0f/480.0f; - ddim.x = 210.0f/640.0f; - ddim.y = 10.0f/480.0f; - pw->CreateGroup(pos, ddim, 1, EVENT_INTERFACE_GLINTb); // orange bar - pos.x = 100.0f/640.0f; - pos.y = 154.0f/480.0f; - ddim.x = 210.0f/640.0f; - ddim.y = 200.0f/480.0f; - pw->CreateGroup(pos, ddim, 2, EVENT_INTERFACE_GLINTu); // orange -> transparent - - // Face - pos.x = 340.0f/640.0f; - pos.y = 356.0f/480.0f; - ddim.x = 200.0f/640.0f; - ddim.y = 16.0f/480.0f; - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL11, ""); - pl->SetJustif(1); - - pos.x = 340.0f/640.0f; - pos.y = 312.0f/480.0f; - ddim.x = 44.0f/640.0f; - ddim.y = 44.0f/480.0f; - pb = pw->CreateButton(pos, ddim, 43, EVENT_INTERFACE_PFACE1); - pb->SetState(STATE_SHADOW); - pos.x += 50.0f/640.0f; - pb = pw->CreateButton(pos, ddim, 46, EVENT_INTERFACE_PFACE4); - pb->SetState(STATE_SHADOW); - pos.x += 50.0f/640.0f; - pb = pw->CreateButton(pos, ddim, 45, EVENT_INTERFACE_PFACE3); - pb->SetState(STATE_SHADOW); - pos.x += 50.0f/640.0f; - pb = pw->CreateButton(pos, ddim, 44, EVENT_INTERFACE_PFACE2); - pb->SetState(STATE_SHADOW); - - // Glasses - pos.x = 340.0f/640.0f; - pos.y = 270.0f/480.0f; - ddim.x = 200.0f/640.0f; - ddim.y = 16.0f/480.0f; - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL12, ""); - pl->SetJustif(1); - - pos.x = 340.0f/640.0f; - pos.y = 240.0f/480.0f; - ddim.x = 30.0f/640.0f; - ddim.y = 30.0f/480.0f; - for ( i=0 ; i<6 ; i++ ) - { - int ti[6] = {11, 179, 180, 181, 182, 183}; - pb = pw->CreateButton(pos, ddim, ti[i], (EventMsg)(EVENT_INTERFACE_PGLASS0+i)); - pb->SetState(STATE_SHADOW); - pos.x += (30.0f+2.8f)/640.0f; - } - - // Color A - pos.x = 340.0f/640.0f; - pos.y = 300.0f/480.0f; - ddim.x = 200.0f/640.0f; - ddim.y = 16.0f/480.0f; - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL14, ""); - pl->SetJustif(1); - - pos.y = 282.0f/480.0f; - ddim.x = 18.0f/640.0f; - ddim.y = 18.0f/480.0f; - for ( j=0 ; j<3 ; j++ ) - { - pos.x = 340.0f/640.0f; - for ( i=0 ; i<3 ; i++ ) - { - pco = pw->CreateColor(pos, ddim, -1, (EventMsg)(EVENT_INTERFACE_PC0a+j*3+i)); - pco->SetState(STATE_SHADOW); - pos.x += 20.0f/640.0f; - } - pos.y -= 20.0f/480.0f; - } - - pos.x = 420.0f/640.0f; - pos.y = 282.0f/480.0f; - ddim.x = 100.0f/640.0f; - ddim.y = 18.0f/480.0f; - for ( i=0 ; i<3 ; i++ ) - { - psl = pw->CreateSlider(pos, ddim, 0, (EventMsg)(EVENT_INTERFACE_PCRa+i)); - psl->SetState(STATE_SHADOW); - psl->SetLimit(0.0f, 255.0f); - psl->SetArrowStep(16.0f); - pos.y -= 20.0f/480.0f; - } - - // Color B - pos.x = 340.0f/640.0f; - pos.y = 192.0f/480.0f; - ddim.x = 200.0f/640.0f; - ddim.y = 16.0f/480.0f; - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL13, ""); - pl->SetJustif(1); - - pos.y = 174.0f/480.0f; - ddim.x = 18.0f/640.0f; - ddim.y = 18.0f/480.0f; - for ( j=0 ; j<3 ; j++ ) - { - pos.x = 340.0f/640.0f; - for ( i=0 ; i<3 ; i++ ) - { - pco = pw->CreateColor(pos, ddim, -1, (EventMsg)(EVENT_INTERFACE_PC0b+j*3+i)); - pco->SetState(STATE_SHADOW); - pos.x += 20.0f/640.0f; - } - pos.y -= 20.0f/480.0f; - } - - pos.x = 420.0f/640.0f; - pos.y = 174.0f/480.0f; - ddim.x = 100.0f/640.0f; - ddim.y = 18.0f/480.0f; - for ( i=0 ; i<3 ; i++ ) - { - psl = pw->CreateSlider(pos, ddim, 0, (EventMsg)(EVENT_INTERFACE_PCRb+i)); - psl->SetState(STATE_SHADOW); - psl->SetLimit(0.0f, 255.0f); - psl->SetArrowStep(16.0f); - pos.y -= 20.0f/480.0f; - } - - // Rotation - pos.x = 100.0f/640.0f; - pos.y = 113.0f/480.0f; - ddim.x = 20.0f/640.0f; - ddim.y = 20.0f/480.0f; - pb = pw->CreateButton(pos, ddim, 55, EVENT_INTERFACE_PLROT); // < - pb->SetState(STATE_SHADOW); - pb->SetRepeat(true); - - pos.x = 290.0f/640.0f; - pos.y = 113.0f/480.0f; - ddim.x = 20.0f/640.0f; - ddim.y = 20.0f/480.0f; - pb = pw->CreateButton(pos, ddim, 48, EVENT_INTERFACE_PRROT); // > - pb->SetState(STATE_SHADOW); - pb->SetRepeat(true); - - pos.x = 100.0f/640.0f; - pos.y = 70.0f/480.0f; - ddim.x = 100.0f/640.0f; - ddim.y = 32.0f/480.0f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_POK); - pb->SetState(STATE_SHADOW); - - pos.x = 210.0f/640.0f; - pos.y = 70.0f/480.0f; - ddim.x =100.0f/640.0f; - ddim.y = 32.0f/480.0f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PCANCEL); - pb->SetState(STATE_SHADOW); - - pos.x = 340.0f/640.0f; - pos.y = 70.0f/480.0f; - ddim.x =194.0f/640.0f; - ddim.y = 32.0f/480.0f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PDEF); - pb->SetState(STATE_SHADOW); - - m_persoCopy = m_perso; - m_persoTab = 0; - m_persoAngle = -0.6f; - UpdatePerso(); - m_main->ScenePerso(); - CameraPerso(); - } - - if ( m_phase == PHASE_TRAINER || - m_phase == PHASE_DEFI || - m_phase == PHASE_MISSION || - m_phase == PHASE_FREE || - m_phase == PHASE_TEEN || - m_phase == PHASE_USER || - m_phase == PHASE_PROTO ) - { - if ( m_phase == PHASE_TRAINER ) m_index = 0; - if ( m_phase == PHASE_DEFI ) m_index = 1; - if ( m_phase == PHASE_MISSION ) m_index = 2; - if ( m_phase == PHASE_FREE ) m_index = 3; - if ( m_phase == PHASE_USER ) m_index = 4; - if ( m_phase == PHASE_PROTO ) m_index = 5; - if ( m_phase == PHASE_TEEN ) m_index = 6; - - if ( m_phase == PHASE_FREE ) - { - strcpy(m_sceneName, "scene"); - ReadGamerInfo(); - m_accessChap = RetChapPassed(); - } - - if ( m_phase == PHASE_TRAINER ) strcpy(m_sceneName, "train"); - if ( m_phase == PHASE_DEFI ) strcpy(m_sceneName, "defi" ); - if ( m_phase == PHASE_MISSION ) strcpy(m_sceneName, "scene"); - if ( m_phase == PHASE_FREE ) strcpy(m_sceneName, "free"); - if ( m_phase == PHASE_TEEN ) strcpy(m_sceneName, "teen"); - if ( m_phase == PHASE_USER ) strcpy(m_sceneName, "user"); - if ( m_phase == PHASE_PROTO ) strcpy(m_sceneName, "proto"); - - ReadGamerInfo(); - - pos.x = 0.10f; - pos.y = 0.10f; - ddim.x = 0.80f; - ddim.y = 0.80f; - pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5); - pw->SetClosable(true); - if ( m_phase == PHASE_TRAINER ) res = RT_TITLE_TRAINER; - if ( m_phase == PHASE_DEFI ) res = RT_TITLE_DEFI; - if ( m_phase == PHASE_MISSION ) res = RT_TITLE_MISSION; - if ( m_phase == PHASE_FREE ) res = RT_TITLE_FREE; - if ( m_phase == PHASE_TEEN ) res = RT_TITLE_TEEN; - if ( m_phase == PHASE_USER ) res = RT_TITLE_USER; - if ( m_phase == PHASE_PROTO ) res = RT_TITLE_PROTO; - GetResource(RES_TEXT, res, name); - pw->SetName(name); - -#if _NEWLOOK - pos.x = 100.0f/640.0f; - pos.y = 226.0f/480.0f; - ddim.x = 216.0f/640.0f; - ddim.y = 160.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue - pg->SetState(STATE_SHADOW); - pos.x = 322.0f/640.0f; - pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // cyan - pg->SetState(STATE_SHADOW); - - pos.x = 100.0f/640.0f; - pos.y = 122.0f/480.0f; - ddim.x = 438.0f/640.0f; - ddim.y = 98.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 25, EVENT_LABEL1); // green - pg->SetState(STATE_SHADOW); - pos.y = 66.0f/480.0f; - ddim.y = 42.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet - pg->SetState(STATE_SHADOW); -#endif - - pos.x = 0.10f; - pos.y = 0.40f; - ddim.x = 0.50f; - ddim.y = 0.50f; - pw->CreateGroup(pos, ddim, 5, EVENT_INTERFACE_GLINTl); // orange corner - pos.x = 0.40f; - pos.y = 0.10f; - ddim.x = 0.50f; - ddim.y = 0.50f; - pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner - - // Displays a list of chapters: - pos.x = ox+sx*3; - pos.y = oy+sy*10.5f; - ddim.x = dim.x*7.5f; - ddim.y = dim.y*0.6f; - if ( m_phase == PHASE_TRAINER ) res = RT_PLAY_CHAPt; - if ( m_phase == PHASE_DEFI ) res = RT_PLAY_CHAPd; - if ( m_phase == PHASE_MISSION ) res = RT_PLAY_CHAPm; - if ( m_phase == PHASE_FREE ) res = RT_PLAY_CHAPf; - if ( m_phase == PHASE_TEEN ) res = RT_PLAY_CHAPte; - if ( m_phase == PHASE_USER ) res = RT_PLAY_CHAPu; - if ( m_phase == PHASE_PROTO ) res = RT_PLAY_CHAPp; - GetResource(RES_TEXT, res, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL11, name); - pl->SetJustif(1); - - pos.y = oy+sy*6.7f; - ddim.y = dim.y*4.5f; - ddim.x = dim.x*6.5f; - pli = pw->CreateList(pos, ddim, 0, EVENT_INTERFACE_CHAP); - pli->SetState(STATE_SHADOW); - UpdateSceneChap(m_chap[m_index]); - if ( m_phase != PHASE_USER ) pli->SetState(STATE_EXTEND); - - // Displays a list of missions: - pos.x = ox+sx*9.5f; - pos.y = oy+sy*10.5f; - ddim.x = dim.x*7.5f; - ddim.y = dim.y*0.6f; - if ( m_phase == PHASE_TRAINER ) res = RT_PLAY_LISTt; - if ( m_phase == PHASE_DEFI ) res = RT_PLAY_LISTd; - if ( m_phase == PHASE_MISSION ) res = RT_PLAY_LISTm; - if ( m_phase == PHASE_FREE ) res = RT_PLAY_LISTf; - if ( m_phase == PHASE_TEEN ) res = RT_PLAY_LISTk; - if ( m_phase == PHASE_USER ) res = RT_PLAY_LISTu; - if ( m_phase == PHASE_PROTO ) res = RT_PLAY_LISTp; - GetResource(RES_TEXT, res, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL12, name); - pl->SetJustif(1); - - pos.y = oy+sy*6.7f; - ddim.y = dim.y*4.5f; - ddim.x = dim.x*6.5f; - pli = pw->CreateList(pos, ddim, 0, EVENT_INTERFACE_LIST); - pli->SetState(STATE_SHADOW); - UpdateSceneList(m_chap[m_index], m_sel[m_index]); - if ( m_phase != PHASE_USER ) pli->SetState(STATE_EXTEND); - pos = pli->RetPos(); - ddim = pli->RetDim(); - - // Displays the summary: - pos.x = ox+sx*3; - pos.y = oy+sy*5.4f; - ddim.x = dim.x*6.5f; - ddim.y = dim.y*0.6f; - GetResource(RES_TEXT, RT_PLAY_RESUME, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL13, name); - pl->SetJustif(1); - - pos.x = ox+sx*3; - pos.y = oy+sy*3.6f; - ddim.x = dim.x*13.4f; - ddim.y = dim.y*1.9f; - pe = pw->CreateEdit(pos, ddim, 0, EVENT_INTERFACE_RESUME); - pe->SetState(STATE_SHADOW); - pe->SetMaxChar(500); - pe->SetEditCap(false); // just to see - pe->SetHiliteCap(false); - - // Button displays the "soluce": - if ( m_phase != PHASE_TRAINER && - m_phase != PHASE_FREE && - m_phase != PHASE_TEEN ) - { - pos.x = ox+sx*9.5f; - pos.y = oy+sy*5.8f; - ddim.x = dim.x*6.5f; - ddim.y = dim.y*0.5f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SOLUCE); - pc->SetState(STATE_SHADOW); - pc->ClearState(STATE_CHECK); - } - m_bSceneSoluce = false; - - UpdateSceneResume((m_chap[m_index]+1)*100+(m_sel[m_index]+1)); - - if ( m_phase == PHASE_MISSION || - m_phase == PHASE_FREE || - m_phase == PHASE_USER ) - { - pos.x = ox+sx*9.5f; - pos.y = oy+sy*2; - ddim.x = dim.x*3.7f; - ddim.y = dim.y*1; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PLAY); - pb->SetState(STATE_SHADOW); - if ( m_maxList == 0 ) - { - pb->ClearState(STATE_ENABLE); - } - - pos.x += dim.x*4.0f; - ddim.x = dim.x*2.5f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_READ); - pb->SetState(STATE_SHADOW); - if ( !IsIOReadScene() ) // no file to read? - { - pb->ClearState(STATE_ENABLE); - } - } - else - { - pos.x = ox+sx*9.5f; - pos.y = oy+sy*2; - ddim.x = dim.x*6.5f; - ddim.y = dim.y*1; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PLAY); - pb->SetState(STATE_SHADOW); - if ( m_maxList == 0 ) - { - pb->ClearState(STATE_ENABLE); - } - } - - pos.x = ox+sx*3; - ddim.x = dim.x*4; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_BACK); - pb->SetState(STATE_SHADOW); - - m_engine->SetBackground("inter01.tga", 0,0, 0,0, true, true); - m_engine->SetBackForce(true); - } - - if ( m_phase == PHASE_SETUPd || - m_phase == PHASE_SETUPg || - m_phase == PHASE_SETUPp || - m_phase == PHASE_SETUPc || - m_phase == PHASE_SETUPs || - m_phase == PHASE_SETUPds || - m_phase == PHASE_SETUPgs || - m_phase == PHASE_SETUPps || - m_phase == PHASE_SETUPcs || - m_phase == PHASE_SETUPss ) - { - if ( m_phase == PHASE_SETUPds ) - { - m_phaseSetup = PHASE_SETUPd; - m_bSimulSetup = true; - } - else if ( m_phase == PHASE_SETUPgs ) - { - m_phaseSetup = PHASE_SETUPg; - m_bSimulSetup = true; - } - else if ( m_phase == PHASE_SETUPps ) - { - m_phaseSetup = PHASE_SETUPp; - m_bSimulSetup = true; - } - else if ( m_phase == PHASE_SETUPcs ) - { - m_phaseSetup = PHASE_SETUPc; - m_bSimulSetup = true; - } - else if ( m_phase == PHASE_SETUPss ) - { - m_phaseSetup = PHASE_SETUPs; - m_bSimulSetup = true; - } - else - { - m_phaseSetup = m_phase; - m_bSimulSetup = false; - } - - pos.x = 0.10f; - pos.y = 0.10f; - ddim.x = 0.80f; - ddim.y = 0.80f; - pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5); - pw->SetClosable(true); - GetResource(RES_TEXT, RT_TITLE_SETUP, name); - pw->SetName(name); - - pos.x = 0.70f; - pos.y = 0.10f; - ddim.x = 0.20f; - ddim.y = 0.20f; - pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner - - pos.x = 0.10f; - ddim.x = 0.80f; - pos.y = 0.76f; - ddim.y = 0.05f; - pw->CreateGroup(pos, ddim, 3, EVENT_NULL); // transparent -> gray - -#if _NEWLOOK - if ( m_phase == PHASE_SETUPd || // setup/display ? - m_phase == PHASE_SETUPds ) - { - pos.x = 100.0f/640.0f; - pos.y = 130.0f/480.0f; - ddim.x = 216.0f/640.0f; - ddim.y = 212.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue - pg->SetState(STATE_SHADOW); - pos.x = 324.0f/640.0f; - pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // cyan - pg->SetState(STATE_SHADOW); - } - if ( m_phase == PHASE_SETUPg || // setup/graphic ? - m_phase == PHASE_SETUPgs ) - { - pos.x = 100.0f/640.0f; - pos.y = 130.0f/480.0f; - ddim.x = 174.0f/640.0f; - ddim.y = 212.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue - pg->SetState(STATE_SHADOW); - pos.x = 282.0f/640.0f; - ddim.x = 258.0f/640.0f; - pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // cyan - pg->SetState(STATE_SHADOW); - } - if ( m_phase == PHASE_SETUPp || // setup/game ? - m_phase == PHASE_SETUPps ) - { - pos.x = 100.0f/640.0f; - pos.y = 130.0f/480.0f; - ddim.x = 226.0f/640.0f; - ddim.y = 212.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue - pg->SetState(STATE_SHADOW); - pos.x = 334.0f/640.0f; - ddim.x = 206.0f/640.0f; - pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // cyan - pg->SetState(STATE_SHADOW); - } - if ( m_phase == PHASE_SETUPc || // setup/command ? - m_phase == PHASE_SETUPcs ) - { - pos.x = 100.0f/640.0f; - pos.y = 125.0f/480.0f; - ddim.x = 440.0f/640.0f; - ddim.y = 222.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue - pg->SetState(STATE_SHADOW); - } - if ( m_phase == PHASE_SETUPs || // setup/sound ? - m_phase == PHASE_SETUPss ) - { - pos.x = 100.0f/640.0f; - pos.y = 130.0f/480.0f; - ddim.x = 216.0f/640.0f; - ddim.y = 212.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue - pg->SetState(STATE_SHADOW); - pos.x = 324.0f/640.0f; - pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // cyan - pg->SetState(STATE_SHADOW); - } - - pos.x = 100.0f/640.0f; - pos.y = 66.0f/480.0f; - ddim.x = 440.0f/640.0f; - ddim.y = 42.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet - pg->SetState(STATE_SHADOW); -#endif - - ddim.x = 0.78f/5-0.01f; - ddim.y = 0.06f; - pos.x = 0.115f; - pos.y = 0.76f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_SETUPd); - pb->SetState(STATE_SHADOW); - pb->SetState(STATE_CARD); - pb->SetState(STATE_CHECK, (m_phase == PHASE_SETUPd || m_phase == PHASE_SETUPds)); - - pos.x += ddim.x+0.01f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_SETUPg); - pb->SetState(STATE_SHADOW); - pb->SetState(STATE_CARD); - pb->SetState(STATE_CHECK, (m_phase == PHASE_SETUPg || m_phase == PHASE_SETUPgs)); - - pos.x += ddim.x+0.01f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_SETUPp); - pb->SetState(STATE_SHADOW); - pb->SetState(STATE_CARD); - pb->SetState(STATE_CHECK, (m_phase == PHASE_SETUPp || m_phase == PHASE_SETUPps)); - - pos.x += ddim.x+0.01f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_SETUPc); - pb->SetState(STATE_SHADOW); - pb->SetState(STATE_CARD); - pb->SetState(STATE_CHECK, (m_phase == PHASE_SETUPc || m_phase == PHASE_SETUPcs)); - - pos.x += ddim.x+0.01f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_SETUPs); - pb->SetState(STATE_SHADOW); - pb->SetState(STATE_CARD); - pb->SetState(STATE_CHECK, (m_phase == PHASE_SETUPs || m_phase == PHASE_SETUPss)); - - pos.x = 0.10f; - ddim.x = 0.80f; - pos.y = 0.34f; - ddim.y = 0.42f; - pw->CreateGroup(pos, ddim, 2, EVENT_INTERFACE_GLINTu); // orange -> transparent - pos.x = 0.10f+(6.0f/640.0f); - ddim.x = 0.80f-(11.0f/640.0f); - pos.y = 0.74f; - ddim.y = 0.02f; - pw->CreateGroup(pos, ddim, 1, EVENT_INTERFACE_GLINTb); // orange bar - - ddim.x = dim.x*4; - ddim.y = dim.y*1; - pos.x = ox+sx*3; - pos.y = oy+sy*2; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_BACK); - pb->SetState(STATE_SHADOW); - - if ( !m_bSimulSetup ) - { - m_engine->SetBackground("inter01.tga", 0,0, 0,0, true, true); - m_engine->SetBackForce(true); - } - } - - if ( m_phase == PHASE_SETUPd || // setup/display ? - m_phase == PHASE_SETUPds ) - { - pos.x = ox+sx*3; - pos.y = oy+sy*9; - ddim.x = dim.x*6; - ddim.y = dim.y*1; - GetResource(RES_TEXT, RT_SETUP_DEVICE, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, name); - pl->SetJustif(1); - - pos.x = ox+sx*3; - pos.y = oy+sy*5.2f; - ddim.x = dim.x*6; - ddim.y = dim.y*4.5f; - pli = pw->CreateList(pos, ddim, 0, EVENT_LIST1); - pli->SetState(STATE_SHADOW); - UpdateDisplayDevice(); - - pos.x = ox+sx*10; - pos.y = oy+sy*9; - ddim.x = dim.x*6; - ddim.y = dim.y*1; - GetResource(RES_TEXT, RT_SETUP_MODE, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL2, name); - pl->SetJustif(1); - - m_setupFull = m_engine->RetFullScreen(); - pos.x = ox+sx*10; - pos.y = oy+sy*5.2f; - ddim.x = dim.x*6; - ddim.y = dim.y*4.5f; - pli = pw->CreateList(pos, ddim, 0, EVENT_LIST2); - pli->SetState(STATE_SHADOW); - UpdateDisplayMode(); - pli->SetState(STATE_ENABLE, m_setupFull); - - ddim.x = dim.x*4; - ddim.y = dim.y*0.5f; - pos.x = ox+sx*3; - pos.y = oy+sy*4.1f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_FULL); - pc->SetState(STATE_SHADOW); - pc->SetState(STATE_CHECK, m_setupFull); - - ddim.x = dim.x*6; - ddim.y = dim.y*1; - pos.x = ox+sx*10; - pos.y = oy+sy*2; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_APPLY); - pb->SetState(STATE_SHADOW); - UpdateApply(); - } - - if ( m_phase == PHASE_SETUPg || // setup/graphic ? - m_phase == PHASE_SETUPgs ) - { - ddim.x = dim.x*6; - ddim.y = dim.y*0.5f; - pos.x = ox+sx*3; - pos.y = 0.65f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SHADOW); - pc->SetState(STATE_SHADOW); - pos.y -= 0.048f; - if ( !m_bSimulSetup ) - { - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_GROUND); - pc->SetState(STATE_SHADOW); - if ( m_engine->IsVideo8MB() ) pc->ClearState(STATE_ENABLE); - } - pos.y -= 0.048f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_DIRTY); - pc->SetState(STATE_SHADOW); - pos.y -= 0.048f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SKY); - pc->SetState(STATE_SHADOW); - if ( m_engine->IsVideo8MB() ) pc->ClearState(STATE_ENABLE); - pos.y -= 0.048f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_LENS); - pc->SetState(STATE_SHADOW); - pos.y -= 0.048f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_PLANET); - pc->SetState(STATE_SHADOW); - pos.y -= 0.048f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_FOG); - pc->SetState(STATE_SHADOW); - pos.y -= 0.048f; - if ( !m_bSimulSetup ) - { - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_LIGHT); - pc->SetState(STATE_SHADOW); - } - - pos.x = ox+sx*8.5f; - pos.y = 0.65f; - ddim.x = dim.x*2.2f; - ddim.y = 18.0f/480.0f; - pv = pw->CreateEditValue(pos, ddim, 0, EVENT_INTERFACE_PARTI); - pv->SetState(STATE_SHADOW); - pv->SetMinValue(0.0f); - pv->SetMaxValue(2.0f); - pos.x += 0.13f; - pos.y -= 0.015f; - ddim.x = 0.40f; - GetResource(RES_EVENT, EVENT_INTERFACE_PARTI, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL10, name); - pl->SetJustif(1); - - pos.x = ox+sx*8.5f; - pos.y = 0.59f; - ddim.x = dim.x*2.2f; - ddim.y = 18.0f/480.0f; - pv = pw->CreateEditValue(pos, ddim, 0, EVENT_INTERFACE_CLIP); - pv->SetState(STATE_SHADOW); - pv->SetMinValue(0.5f); - pv->SetMaxValue(2.0f); - pos.x += 0.13f; - pos.y -= 0.015f; - ddim.x = 0.40f; - GetResource(RES_EVENT, EVENT_INTERFACE_CLIP, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL11, name); - pl->SetJustif(1); - - pos.x = ox+sx*8.5f; - pos.y = 0.53f; - ddim.x = dim.x*2.2f; - ddim.y = 18.0f/480.0f; - pv = pw->CreateEditValue(pos, ddim, 0, EVENT_INTERFACE_DETAIL); - pv->SetState(STATE_SHADOW); - pv->SetMinValue(0.0f); - pv->SetMaxValue(2.0f); - pos.x += 0.13f; - pos.y -= 0.015f; - ddim.x = 0.40f; - GetResource(RES_EVENT, EVENT_INTERFACE_DETAIL, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL12, name); - pl->SetJustif(1); - - if ( !m_bSimulSetup ) - { - pos.x = ox+sx*8.5f; - pos.y = 0.47f; - ddim.x = dim.x*2.2f; - ddim.y = 18.0f/480.0f; - pv = pw->CreateEditValue(pos, ddim, 0, EVENT_INTERFACE_GADGET); - pv->SetState(STATE_SHADOW); - pv->SetMinValue(0.0f); - pv->SetMaxValue(1.0f); - pos.x += 0.13f; - pos.y -= 0.015f; - ddim.x = 0.40f; - GetResource(RES_EVENT, EVENT_INTERFACE_GADGET, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL13, name); - pl->SetJustif(1); - } - -#if 0 - if ( !m_bSimulSetup ) - { - pos.x = ox+sx*8.5f; - pos.y = 0.41f; - ddim.x = dim.x*2.2f; - ddim.y = 18.0f/480.0f; - pv = pw->CreateEditValue(pos, ddim, 0, EVENT_INTERFACE_TEXTURE); - pv->SetState(STATE_SHADOW); - pv->SetType(EVT_INT); - pv->SetMinValue(0.0f); - pv->SetMaxValue(2.0f); - pv->SetStepValue(1.0f); - pos.x += 0.13f; - pos.y -= 0.015f; - ddim.x = 0.40f; - GetResource(RES_EVENT, EVENT_INTERFACE_TEXTURE, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL14, name); - pl->SetJustif(1); - } -#endif - - ddim.x = dim.x*2; - ddim.y = dim.y*1; - pos.x = ox+sx*10; - pos.y = oy+sy*2; -#if _POLISH - ddim.x += 20.0f/640.0f; - pos.x -= 20.0f/640.0f*3.0f; -#endif - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_MIN); - pb->SetState(STATE_SHADOW); - pos.x += ddim.x; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_NORM); - pb->SetState(STATE_SHADOW); - pos.x += ddim.x; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_MAX); - pb->SetState(STATE_SHADOW); - - UpdateSetupButtons(); - } - - if ( m_phase == PHASE_SETUPp || // setup/game ? - m_phase == PHASE_SETUPps ) - { - ddim.x = dim.x*6; - ddim.y = dim.y*0.5f; - pos.x = ox+sx*3; - pos.y = 0.65f; -//? pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_TOTO); -//? pc->SetState(STATE_SHADOW); -//? pos.y -= 0.048f; -#if _SCHOOL - #if _EDU - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SOLUCE4); - pc->SetState(STATE_SHADOW); - pos.y -= 0.048f; - #endif -#else - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_MOVIES); - pc->SetState(STATE_SHADOW); - pos.y -= 0.048f; -#endif - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SCROLL); - pc->SetState(STATE_SHADOW); - pos.y -= 0.048f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_INVERTX); - pc->SetState(STATE_SHADOW); - pos.y -= 0.048f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_INVERTY); - pc->SetState(STATE_SHADOW); - pos.y -= 0.048f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_EFFECT); - pc->SetState(STATE_SHADOW); -//? pos.y -= 0.048f; -//? pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_NICERST); -//? pc->SetState(STATE_SHADOW); -//? pos.y -= 0.048f; -//? pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_HIMSELF); -//? pc->SetState(STATE_SHADOW); - - ddim.x = dim.x*6; - ddim.y = dim.y*0.5f; - pos.x = ox+sx*10; - pos.y = 0.65f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_TOOLTIP); - pc->SetState(STATE_SHADOW); - pos.y -= 0.048f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_GLINT); - pc->SetState(STATE_SHADOW); - pos.y -= 0.048f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_RAIN); - pc->SetState(STATE_SHADOW); - pos.y -= 0.048f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_MOUSE); - pc->SetState(STATE_SHADOW); - pos.y -= 0.048f; - pos.y -= 0.048f; - if ( !m_bSimulSetup ) - { - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_EDITMODE); - pc->SetState(STATE_SHADOW); - } - pos.y -= 0.048f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_EDITVALUE); - pc->SetState(STATE_SHADOW); - - UpdateSetupButtons(); - } - - if ( m_phase == PHASE_SETUPc || // setup/commands ? - m_phase == PHASE_SETUPcs ) - { - pos.x = ox+sx*3; - pos.y = 320.0f/480.0f; - ddim.x = dim.x*15.0f; - ddim.y = 18.0f/480.0f; - GetResource(RES_TEXT, RT_SETUP_KEY1, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_INTERFACE_KINFO1, name); - pl->SetJustif(1); - - pos.x = ox+sx*3; - pos.y = 302.0f/480.0f; - ddim.x = dim.x*15.0f; - ddim.y = 18.0f/480.0f; - GetResource(RES_TEXT, RT_SETUP_KEY2, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_INTERFACE_KINFO2, name); - pl->SetJustif(1); - - ddim.x = 428.0f/640.0f; - ddim.y = 128.0f/480.0f; - pos.x = 105.0f/640.0f; - pos.y = 164.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 0, EVENT_INTERFACE_KGROUP); - pg->ClearState(STATE_ENABLE); - pg->SetState(STATE_DEAD); - pg->SetState(STATE_SHADOW); - - ddim.x = 18.0f/640.0f; - ddim.y = (20.0f/480.0f)*KEY_VISIBLE; - pos.x = 510.0f/640.0f; - pos.y = 168.0f/480.0f; - ps = pw->CreateScroll(pos, ddim, -1, EVENT_INTERFACE_KSCROLL); - ps->SetVisibleRatio((float)KEY_VISIBLE/KEY_TOTAL); - ps->SetArrowStep(1.0f/((float)KEY_TOTAL-KEY_VISIBLE)); - UpdateKey(); - - ddim.x = dim.x*6; - ddim.y = dim.y*0.5f; - pos.x = ox+sx*3; - pos.y = 130.0f/480.0f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_JOYSTICK); - pc->SetState(STATE_SHADOW); - - ddim.x = dim.x*6; - ddim.y = dim.y*1; - pos.x = ox+sx*10; - pos.y = oy+sy*2; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_KDEF); - pb->SetState(STATE_SHADOW); - - UpdateSetupButtons(); - } - - if ( m_phase == PHASE_SETUPs || // setup/sound ? - m_phase == PHASE_SETUPss ) - { - pos.x = ox+sx*3; - pos.y = 0.55f; - ddim.x = dim.x*4.0f; - ddim.y = 18.0f/480.0f; - psl = pw->CreateSlider(pos, ddim, 0, EVENT_INTERFACE_VOLSOUND); - psl->SetState(STATE_SHADOW); - psl->SetLimit(0.0f, MAXVOLUME); - psl->SetArrowStep(1.0f); - pos.y += ddim.y; - GetResource(RES_EVENT, EVENT_INTERFACE_VOLSOUND, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, name); - pl->SetJustif(1); - -#if (_FULL | _NET) & _SOUNDTRACKS - pos.x = ox+sx*3; - pos.y = 0.40f; - ddim.x = dim.x*4.0f; - ddim.y = 18.0f/480.0f; - psl = pw->CreateSlider(pos, ddim, 0, EVENT_INTERFACE_VOLMUSIC); - psl->SetState(STATE_SHADOW); - psl->SetLimit(0.0f, MAXVOLUME); - psl->SetArrowStep(1.0f); - pos.y += ddim.y; - GetResource(RES_EVENT, EVENT_INTERFACE_VOLMUSIC, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL2, name); - pl->SetJustif(1); -#endif - - ddim.x = dim.x*6; - ddim.y = dim.y*0.5f; - pos.x = ox+sx*10; - pos.y = 0.55f; - pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SOUND3D); - pc->SetState(STATE_SHADOW); - - ddim.x = dim.x*3; - ddim.y = dim.y*1; - pos.x = ox+sx*10; - pos.y = oy+sy*2; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_SILENT); - pb->SetState(STATE_SHADOW); - pos.x += ddim.x; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_NOISY); - pb->SetState(STATE_SHADOW); - - UpdateSetupButtons(); - } - - if ( m_phase == PHASE_WRITE || - m_phase == PHASE_WRITEs ) - { - pos.x = 0.10f; - pos.y = 0.10f; - ddim.x = 0.80f; - ddim.y = 0.80f; - pw = m_interface->CreateWindows(pos, ddim, 13, EVENT_WINDOW5); - pw->SetClosable(true); - GetResource(RES_TEXT, RT_TITLE_WRITE, name); - pw->SetName(name); - - pos.x = 0.10f; - pos.y = 0.40f; - ddim.x = 0.50f; - ddim.y = 0.50f; - pw->CreateGroup(pos, ddim, 5, EVENT_INTERFACE_GLINTl); // orange corner - pos.x = 0.40f; - pos.y = 0.10f; - ddim.x = 0.50f; - ddim.y = 0.50f; - pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner - -#if _NEWLOOK - pos.x = 100.0f/640.0f; - pos.y = 66.0f/480.0f; - ddim.x = 438.0f/640.0f; - ddim.y = 42.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet - pg->SetState(STATE_SHADOW); -#endif - - pos.x = 290.0f/640.0f; - ddim.x = 245.0f/640.0f; - - pos.y = 146.0f/480.0f; - ddim.y = 18.0f/480.0f; - GetResource(RES_EVENT, EVENT_INTERFACE_IOLABEL, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_INTERFACE_IOLABEL, name); - pl->SetJustif(1); - - pos.y = 130.0f/480.0f; - ddim.y = 18.0f/480.0f; - pe = pw->CreateEdit(pos, ddim, 0, EVENT_INTERFACE_IONAME); - pe->SetState(STATE_SHADOW); - pe->SetFontType(FONT_COLOBOT); - pe->SetMaxChar(35); - IOReadName(); - - pos.y = 190.0f/480.0f; - ddim.y = 190.0f/480.0f; - pli = pw->CreateList(pos, ddim, 0, EVENT_INTERFACE_IOLIST); - pli->SetState(STATE_SHADOW); - - pos.y = oy+sy*2; - ddim.y = dim.y*1; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_IOWRITE); - pb->SetState(STATE_SHADOW); - - pos.x = 105.0f/640.0f; - pos.y = 190.0f/480.0f; - ddim.x = 170.0f/640.0f; - ddim.y = dim.y*1; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_IODELETE); - pb->SetState(STATE_SHADOW); - - pos.x = 105.0f/640.0f; - pos.y = 250.0f/480.0f; - ddim.x = 170.0f/640.0f; - ddim.y = 128.0f/480.0f; - pi = pw->CreateImage(pos, ddim, 0, EVENT_INTERFACE_IOIMAGE); - pi->SetState(STATE_SHADOW); - - ddim.x = dim.x*4; - ddim.y = dim.y*1; - pos.x = ox+sx*3; - pos.y = oy+sy*2; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_BACK); - pb->SetState(STATE_SHADOW); - - IOReadList(); - IOUpdateList(); - } - - if ( m_phase == PHASE_READ || - m_phase == PHASE_READs ) - { - pos.x = 0.10f; - pos.y = 0.10f; - ddim.x = 0.80f; - ddim.y = 0.80f; - pw = m_interface->CreateWindows(pos, ddim, 14, EVENT_WINDOW5); - pw->SetClosable(true); - GetResource(RES_TEXT, RT_TITLE_READ, name); - pw->SetName(name); - - pos.x = 0.10f; - pos.y = 0.40f; - ddim.x = 0.50f; - ddim.y = 0.50f; - pw->CreateGroup(pos, ddim, 5, EVENT_INTERFACE_GLINTl); // orange corner - pos.x = 0.40f; - pos.y = 0.10f; - ddim.x = 0.50f; - ddim.y = 0.50f; - pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner - -#if _NEWLOOK - pos.x = 100.0f/640.0f; - pos.y = 66.0f/480.0f; - ddim.x = 438.0f/640.0f; - ddim.y = 42.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet - pg->SetState(STATE_SHADOW); -#endif - - pos.x = 290.0f/640.0f; - ddim.x = 245.0f/640.0f; - - pos.y = 160.0f/480.0f; - ddim.y = 190.0f/480.0f; - pli = pw->CreateList(pos, ddim, 0, EVENT_INTERFACE_IOLIST); - pli->SetState(STATE_SHADOW); - - pos.y = oy+sy*2; - ddim.y = dim.y*1; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_IOREAD); - pb->SetState(STATE_SHADOW); - if ( m_phase == PHASE_READs ) - { - pb->SetState(STATE_WARNING); - } - - pos.x = 105.0f/640.0f; - pos.y = 160.0f/480.0f; - ddim.x = 170.0f/640.0f; - ddim.y = dim.y*1; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_IODELETE); - pb->SetState(STATE_SHADOW); - - pos.x = 105.0f/640.0f; - pos.y = 220.0f/480.0f; - ddim.x = 170.0f/640.0f; - ddim.y = 128.0f/480.0f; - pi = pw->CreateImage(pos, ddim, 0, EVENT_INTERFACE_IOIMAGE); - pi->SetState(STATE_SHADOW); - - ddim.x = dim.x*4; - ddim.y = dim.y*1; - pos.x = ox+sx*3; - pos.y = oy+sy*2; - pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_BACK); - pb->SetState(STATE_SHADOW); - - IOReadList(); - IOUpdateList(); - - if ( m_phase == PHASE_READ ) - { - m_engine->SetBackground("inter01.tga", 0,0, 0,0, true, true); - m_engine->SetBackForce(true); - } - } - - if ( m_phase == PHASE_LOADING ) - { - pos.x = 0.35f; - pos.y = 0.10f; - ddim.x = 0.30f; - ddim.y = 0.80f; -#if _TEEN - pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5); -#else - pw = m_interface->CreateWindows(pos, ddim, 10, EVENT_WINDOW5); -#endif - pw->SetName(" "); - - pos.x = 0.35f; - pos.y = 0.60f; - ddim.x = 0.30f; - ddim.y = 0.30f; - pw->CreateGroup(pos, ddim, 5, EVENT_INTERFACE_GLINTl); // orange corner - pos.x = 0.35f; - pos.y = 0.10f; - ddim.x = 0.30f; - ddim.y = 0.30f; - pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner - - pos.x = 254.0f/640.0f; - pos.y = 208.0f/480.0f; - ddim.x = 132.0f/640.0f; - ddim.y = 42.0f/480.0f; - pg = pw->CreateGroup(pos, ddim, 22, EVENT_NULL); - pg->SetState(STATE_SHADOW); - - pos.x = 220.0f/640.0f; - pos.y = 210.0f/480.0f; - ddim.x = 200.0f/640.0f; - ddim.y = 20.0f/480.0f; - GetResource(RES_TEXT, RT_DIALOG_LOADING, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, name); - pl->SetFontSize(12.0f); - pl->SetJustif(0); - - m_engine->SetBackground("inter01.tga", 0,0, 0,0, true, true); - m_engine->SetBackForce(true); - - m_loadingCounter = 1; // enough time to display! - } - - if ( m_phase == PHASE_WELCOME1 ) - { - m_sound->StopMusic(); - m_sound->PlayMusic(11, false); - - pos.x = 0.0f; - pos.y = 0.0f; - ddim.x = 0.0f; - ddim.y = 0.0f; - pw = m_interface->CreateWindows(pos, ddim, -1, EVENT_WINDOW5); - - m_engine->SetOverColor(RetColor(1.0f), D3DSTATETCb); - m_engine->SetOverFront(true); - -#if _FRENCH - m_engine->SetBackground("alsyd.tga", 0,0, 0,0, true, false); -#endif -#if _POLISH - m_engine->SetBackground("manta.tga", 0,0, 0,0, true, false); -#endif -#if _WG - m_engine->SetBackground("wg.tga", 0,0, 0,0, true, false); -#endif - m_engine->SetBackForce(true); - } - if ( m_phase == PHASE_WELCOME2 ) - { -#if _ENGLISH - m_sound->StopMusic(); - m_sound->PlayMusic(11, false); -#endif -#if _POLISH - m_sound->StopMusic(); - m_sound->PlayMusic(11, false); -#endif - - pos.x = 0.0f; - pos.y = 0.0f; - ddim.x = 0.0f; - ddim.y = 0.0f; - pw = m_interface->CreateWindows(pos, ddim, -1, EVENT_WINDOW5); - - m_engine->SetOverColor(RetColor(1.0f), D3DSTATETCb); - m_engine->SetOverFront(true); - - m_engine->SetBackground("colobot.tga", 0,0, 0,0, true, false); - m_engine->SetBackForce(true); - } - if ( m_phase == PHASE_WELCOME3 ) - { - pos.x = 0.0f; - pos.y = 0.0f; - ddim.x = 0.0f; - ddim.y = 0.0f; - pw = m_interface->CreateWindows(pos, ddim, -1, EVENT_WINDOW5); - - m_engine->SetOverColor(RetColor(0.0f), D3DSTATETCw); - m_engine->SetOverFront(true); - -#if _FRENCH - m_engine->SetBackground("epsitecf.tga", 0,0, 0,0, true, false); -#endif -#if _ENGLISH - m_engine->SetBackground("epsitece.tga", 0,0, 0,0, true, false); -#endif -#if _GERMAN | _WG - m_engine->SetBackground("epsitecd.tga", 0,0, 0,0, true, false); -#endif -#if _POLISH - m_engine->SetBackground("epsitecp.tga", 0,0, 0,0, true, false); -#endif - m_engine->SetBackForce(true); - } - - if ( m_phase == PHASE_GENERIC ) - { - pos.x = 0.0f; - pos.y = 0.0f; - ddim.x = 0.0f; - ddim.y = 0.0f; - pw = m_interface->CreateWindows(pos, ddim, -1, EVENT_WINDOW5); - -#if _FULL | _NET - pos.x = 80.0f/640.0f; - pos.y = 240.0f/480.0f; - ddim.x = 490.0f/640.0f; - ddim.y = 110.0f/480.0f; - pe = pw->CreateEdit(pos, ddim, 0, EVENT_EDIT1); - pe->SetGenericMode(true); - pe->SetEditCap(false); - pe->SetHiliteCap(false); - pe->SetFontType(FONT_COURIER); - pe->SetFontSize(8.0f); - pe->ReadText("help\\authors.txt"); - - pos.x = 80.0f/640.0f; - pos.y = 140.0f/480.0f; - ddim.x = 490.0f/640.0f; - ddim.y = 100.0f/480.0f; - pe = pw->CreateEdit(pos, ddim, 0, EVENT_EDIT2); - pe->SetGenericMode(true); - pe->SetEditCap(false); - pe->SetHiliteCap(false); - pe->SetFontType(FONT_COURIER); - pe->SetFontSize(6.5f); - pe->ReadText("help\\licences.txt"); -#endif -#if _SCHOOL -#if _CEEBOTDEMO - pos.x = 80.0f/640.0f; - pos.y = 210.0f/480.0f; - ddim.x = 490.0f/640.0f; - ddim.y = 150.0f/480.0f; -#else - pos.x = 80.0f/640.0f; - pos.y = 200.0f/480.0f; - ddim.x = 490.0f/640.0f; - ddim.y = 150.0f/480.0f; -#endif - pe = pw->CreateEdit(pos, ddim, 0, EVENT_EDIT1); - pe->SetGenericMode(true); - pe->SetEditCap(false); - pe->SetHiliteCap(false); - pe->SetFontType(FONT_COURIER); - pe->SetFontSize(8.0f); - pe->ReadText("help\\authors.txt"); -#endif -#if _DEMO -//? pos.x = 80.0f/640.0f; -//? pos.y = 240.0f/480.0f; -//? ddim.x = 490.0f/640.0f; -//? ddim.y = 110.0f/480.0f; -//? pe = pw->CreateEdit(pos, ddim, 0, EVENT_EDIT1); -//? pe->SetGenericMode(true); -//? pe->SetEditCap(false); -//? pe->SetHiliteCap(false); -//? pe->SetFontType(FONT_COURIER); -//? pe->SetFontSize(8.0f); -//? pe->ReadText("help\\demo.txt"); - -//? pos.x = 80.0f/640.0f; -//? pos.y = 140.0f/480.0f; -//? ddim.x = 490.0f/640.0f; -//? ddim.y = 100.0f/480.0f; -//? pe = pw->CreateEdit(pos, ddim, 0, EVENT_EDIT2); -//? pe->SetGenericMode(true); -//? pe->SetEditCap(false); -//? pe->SetHiliteCap(false); -//? pe->SetFontType(FONT_COURIER); -//? pe->SetFontSize(8.0f); -//? pe->ReadText("help\\authors.txt"); -#endif - -#if !_DEMO - pos.x = 40.0f/640.0f; - pos.y = 83.0f/480.0f; - ddim.x = 246.0f/640.0f; - ddim.y = 16.0f/480.0f; - GetResource(RES_TEXT, RT_GENERIC_DEV1, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, name); - pl->SetFontType(FONT_COURIER); - pl->SetFontSize(8.0f); - - pos.y = 13.0f/480.0f; - GetResource(RES_TEXT, RT_GENERIC_DEV2, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL2, name); - pl->SetFontType(FONT_COURIER); - pl->SetFontSize(8.0f); - - pos.x = 355.0f/640.0f; - pos.y = 83.0f/480.0f; - ddim.x = 246.0f/640.0f; - ddim.y = 16.0f/480.0f; - GetResource(RES_TEXT, RT_GENERIC_EDIT1, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL3, name); - pl->SetFontType(FONT_COURIER); - pl->SetFontSize(8.0f); - - pos.y = 13.0f/480.0f; - GetResource(RES_TEXT, RT_GENERIC_EDIT2, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL4, name); - pl->SetFontType(FONT_COURIER); - pl->SetFontSize(8.0f); -#endif - -#if _DEMO - pos.x = 481.0f/640.0f; - pos.y = 51.0f/480.0f; - ddim.x = 30.0f/640.0f; - ddim.y = 30.0f/480.0f; - pb = pw->CreateButton(pos, ddim, 49, EVENT_INTERFACE_ABORT); - pb->SetState(STATE_SHADOW); -#else - pos.x = 306.0f/640.0f; - pos.y = 17.0f/480.0f; - ddim.x = 30.0f/640.0f; - ddim.y = 30.0f/480.0f; - pb = pw->CreateButton(pos, ddim, 49, EVENT_INTERFACE_ABORT); - pb->SetState(STATE_SHADOW); -#endif - -#if _NEWLOOK -#if _CEEBOTDEMO -#if _TEEN - m_engine->SetBackground("genedt.tga", 0,0, 0,0, true, true); -#else - m_engine->SetBackground("geneda.tga", 0,0, 0,0, true, true); -#endif -#else - m_engine->SetBackground("genern.tga", 0,0, 0,0, true, true); -#endif -#else -#if _FRENCH -#if _DEMO - m_engine->SetBackground("genedf.tga", 0,0, 0,0, true, true); -#else - m_engine->SetBackground("generf.tga", 0,0, 0,0, true, true); -#endif -#endif -#if _ENGLISH -#if _DEMO - m_engine->SetBackground("genede.tga", 0,0, 0,0, true, true); -#else - m_engine->SetBackground("genere.tga", 0,0, 0,0, true, true); -#endif -#endif -#if _GERMAN -#if _DEMO - m_engine->SetBackground("genedd.tga", 0,0, 0,0, true, true); -#else - m_engine->SetBackground("genere.tga", 0,0, 0,0, true, true); -#endif -#endif -#if _WG -#if _DEMO - m_engine->SetBackground("genedd.tga", 0,0, 0,0, true, true); -#else - m_engine->SetBackground("generd.tga", 0,0, 0,0, true, true); -#endif -#endif -#if _POLISH -#if _DEMO - m_engine->SetBackground("genedp.tga", 0,0, 0,0, true, true); -#else - m_engine->SetBackground("generp.tga", 0,0, 0,0, true, true); -#endif -#endif -#endif - m_engine->SetBackForce(true); - } - - if ( m_phase == PHASE_INIT || - m_phase == PHASE_NAME || - m_phase == PHASE_TRAINER || - m_phase == PHASE_DEFI || - m_phase == PHASE_MISSION || - m_phase == PHASE_FREE || - m_phase == PHASE_TEEN || - m_phase == PHASE_USER || - m_phase == PHASE_PROTO || - m_phase == PHASE_SETUPd || - m_phase == PHASE_SETUPg || - m_phase == PHASE_SETUPp || - m_phase == PHASE_SETUPc || - m_phase == PHASE_SETUPs || - m_phase == PHASE_READ || - m_phase == PHASE_LOADING ) - { -#if _SCHOOL -#if _TEEN - pos.x = 50.0f/640.0f; - pos.y = 430.0f/480.0f; - ddim.x = 200.0f/640.0f; - ddim.y = 10.0f/480.0f; -#else - pos.x = 450.0f/640.0f; - pos.y = 0.0f/480.0f; - ddim.x = 170.0f/640.0f; - ddim.y = 9.0f/480.0f; -#endif -#else - pos.x = 540.0f/640.0f; - pos.y = 9.0f/480.0f; - ddim.x = 90.0f/640.0f; - ddim.y = 10.0f/480.0f; -#endif - GetResource(RES_TEXT, RT_VERSION_ID, name); - pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, name); - pl->SetFontType(FONT_COURIER); - pl->SetFontSize(9.0f); - } - - m_engine->LoadAllTexture(); -} - - -// Processing an event. -// Returns false if the event has been processed completely. - -bool CMainDialog::EventProcess(const Event &event) -{ - CWindow* pw; - CList* pl; - CButton* pb; - CCheck* pc; - Event newEvent; - float welcomeLength; - - if ( event.event == EVENT_FRAME ) - { - m_phaseTime += event.rTime; - -//? if ( m_phase == PHASE_WELCOME1 ) welcomeLength = WELCOME_LENGTH+2.0f; -//? else welcomeLength = WELCOME_LENGTH; - welcomeLength = WELCOME_LENGTH; - - if ( m_phase == PHASE_WELCOME1 || - m_phase == PHASE_WELCOME2 || - m_phase == PHASE_WELCOME3 ) - { - float intensity; - int mode = D3DSTATETCb; - - if ( m_phaseTime < 1.5f ) - { - intensity = 1.0f-(m_phaseTime-0.5f); - } - else if ( m_phaseTime < welcomeLength-1.0f ) - { - intensity = 0.0f; - } - else - { - intensity = m_phaseTime-(welcomeLength-1.0f); - } - if ( intensity < 0.0f ) intensity = 0.0f; - if ( intensity > 1.0f ) intensity = 1.0f; - - if ( (m_phase == PHASE_WELCOME2 && m_phaseTime > welcomeLength/2.0f) || - m_phase == PHASE_WELCOME3 ) - { - intensity = 1.0f-intensity; - mode = D3DSTATETCw; - } - - m_engine->SetOverColor(RetColor(intensity), mode); - } - - if ( m_phase == PHASE_WELCOME1 && m_phaseTime >= welcomeLength ) - { - ChangePhase(PHASE_WELCOME2); - return true; - } - if ( m_phase == PHASE_WELCOME2 && m_phaseTime >= welcomeLength ) - { - ChangePhase(PHASE_WELCOME3); - return true; - } - if ( m_phase == PHASE_WELCOME3 && m_phaseTime >= welcomeLength ) - { - ChangePhase(PHASE_NAME); - return true; - } - - if ( m_shotDelay > 0 && !m_bDialog ) // screenshot done? - { - m_shotDelay --; - if ( m_shotDelay == 0 ) - { - m_engine->WriteScreenShot(m_shotName, 320, 240); -//? m_engine->WriteScreenShot(m_shotName, 160, 120); - } - } - - if ( m_phase == PHASE_LOADING ) - { - if ( m_loadingCounter == 0 ) - { - m_main->ChangePhase(PHASE_SIMUL); - } - m_loadingCounter --; - return false; - } - - m_glintTime += event.rTime; - GlintMove(); // moves reflections - - FrameParticule(event.rTime); - - if ( m_bDialog ) // this dialogue? - { - FrameDialog(event.rTime); - } - - return true; - } - - if ( event.event == EVENT_MOUSEMOVE ) - { - m_glintMouse = event.pos; - NiceParticule(event.pos, event.keyState&KS_MLEFT); - } - - if ( m_bDialog ) // this dialogue? - { - m_interface->EventProcess(event); - - if ( event.event == EVENT_DIALOG_OK || - (event.event == EVENT_KEYDOWN && event.param == VK_RETURN ) ) - { - StopDialog(); - if ( m_phase == PHASE_NAME ) - { - NameDelete(); - } - if ( m_phase == PHASE_INIT ) - { -//? m_event->MakeEvent(newEvent, EVENT_QUIT); -//? m_event->AddEvent(newEvent); - m_main->ChangePhase(PHASE_GENERIC); - } - if ( m_phase == PHASE_SIMUL ) - { - if ( m_bDialogDelete ) - { - m_main->DeleteObject(); - } - else - { - m_main->ChangePhase(PHASE_TERM); - } - } - } - if ( event.event == EVENT_DIALOG_CANCEL || - (event.event == EVENT_KEYDOWN && event.param == VK_ESCAPE ) ) - { - StopDialog(); - } - if ( event.event == EVENT_INTERFACE_SETUP ) - { - StopDialog(); - StartSuspend(); - if ( m_phaseSetup == PHASE_SETUPd ) ChangePhase(PHASE_SETUPds); - if ( m_phaseSetup == PHASE_SETUPg ) ChangePhase(PHASE_SETUPgs); - if ( m_phaseSetup == PHASE_SETUPp ) ChangePhase(PHASE_SETUPps); - if ( m_phaseSetup == PHASE_SETUPc ) ChangePhase(PHASE_SETUPcs); - if ( m_phaseSetup == PHASE_SETUPs ) ChangePhase(PHASE_SETUPss); - } - if ( event.event == EVENT_INTERFACE_AGAIN ) - { - StopDialog(); - m_main->ChangePhase(PHASE_LOADING); - } - if ( event.event == EVENT_INTERFACE_WRITE ) - { - StopDialog(); - StartSuspend(); - ChangePhase(PHASE_WRITEs); - } - if ( event.event == EVENT_INTERFACE_READ ) - { - StopDialog(); - StartSuspend(); - ChangePhase(PHASE_READs); - } - - return false; - } - - if ( !m_engine->RetMouseHide() && - !m_interface->EventProcess(event) ) - { - return false; - } - - if ( m_phase == PHASE_INIT ) - { - switch( event.event ) - { - case EVENT_KEYDOWN: - if ( event.param == VK_ESCAPE ) - { -//? StartQuit(); // would you leave? - m_sound->Play(SOUND_TZOING); - m_main->ChangePhase(PHASE_GENERIC); - } - break; - - case EVENT_INTERFACE_QUIT: -//? StartQuit(); // would you leave? - m_sound->Play(SOUND_TZOING); - m_main->ChangePhase(PHASE_GENERIC); - break; - - case EVENT_INTERFACE_TRAINER: - m_main->ChangePhase(PHASE_TRAINER); - break; - - case EVENT_INTERFACE_DEFI: - m_main->ChangePhase(PHASE_DEFI); - break; - - case EVENT_INTERFACE_MISSION: - m_main->ChangePhase(PHASE_MISSION); - break; - - case EVENT_INTERFACE_FREE: - m_main->ChangePhase(PHASE_FREE); - break; - - case EVENT_INTERFACE_TEEN: - m_main->ChangePhase(PHASE_TEEN); - break; - - case EVENT_INTERFACE_USER: - m_main->ChangePhase(PHASE_USER); - break; - - case EVENT_INTERFACE_PROTO: - m_main->ChangePhase(PHASE_PROTO); - break; - - case EVENT_INTERFACE_SETUP: - m_main->ChangePhase(m_phaseSetup); - break; - - case EVENT_INTERFACE_NAME: - m_main->ChangePhase(PHASE_NAME); - break; - } - return false; - } - - if ( m_phase == PHASE_NAME ) - { - switch( event.event ) - { - case EVENT_KEYDOWN: - if ( event.param == VK_RETURN ) - { - NameSelect(); - } - if ( event.param == VK_ESCAPE ) - { - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) break; - pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_NCANCEL); - if ( pb == 0 ) break; - if ( pb->TestState(STATE_ENABLE) ) - { - m_main->ChangePhase(PHASE_INIT); - } - } - break; - - case EVENT_INTERFACE_NEDIT: - UpdateNameList(); - UpdateNameControl(); - break; - - case EVENT_INTERFACE_NLIST: - UpdateNameEdit(); - break; - - case EVENT_INTERFACE_NOK: - NameSelect(); - break; - - case EVENT_INTERFACE_PERSO: - NameSelect(); - m_main->ChangePhase(PHASE_PERSO); - break; - - case EVENT_INTERFACE_NCANCEL: - m_main->ChangePhase(PHASE_INIT); - break; - - case EVENT_INTERFACE_NDELETE: - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) break; - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); - if ( pl == 0 ) break; - StartDeleteGame(pl->RetName(pl->RetSelect())); - break; - } - } - - if ( m_phase == PHASE_PERSO ) - { - switch( event.event ) - { - case EVENT_KEYDOWN: - if ( event.param == VK_RETURN ) - { - m_main->ChangePhase(PHASE_INIT); - } - if ( event.param == VK_ESCAPE ) - { - m_main->ChangePhase(PHASE_NAME); - } - break; - - case EVENT_INTERFACE_PHEAD: - m_persoTab = 0; - UpdatePerso(); - m_main->ScenePerso(); - CameraPerso(); - break; - case EVENT_INTERFACE_PBODY: - m_persoTab = 1; - UpdatePerso(); - m_main->ScenePerso(); - CameraPerso(); - break; - - case EVENT_INTERFACE_PFACE1: - case EVENT_INTERFACE_PFACE2: - case EVENT_INTERFACE_PFACE3: - case EVENT_INTERFACE_PFACE4: - m_perso.face = event.event-EVENT_INTERFACE_PFACE1; - WriteGamerPerso(m_main->RetGamerName()); - UpdatePerso(); - m_main->ScenePerso(); - break; - - case EVENT_INTERFACE_PGLASS0: - case EVENT_INTERFACE_PGLASS1: - case EVENT_INTERFACE_PGLASS2: - case EVENT_INTERFACE_PGLASS3: - case EVENT_INTERFACE_PGLASS4: - case EVENT_INTERFACE_PGLASS5: - case EVENT_INTERFACE_PGLASS6: - case EVENT_INTERFACE_PGLASS7: - case EVENT_INTERFACE_PGLASS8: - case EVENT_INTERFACE_PGLASS9: - m_perso.glasses = event.event-EVENT_INTERFACE_PGLASS0; - WriteGamerPerso(m_main->RetGamerName()); - UpdatePerso(); - m_main->ScenePerso(); - break; - - case EVENT_INTERFACE_PC0a: - case EVENT_INTERFACE_PC1a: - case EVENT_INTERFACE_PC2a: - case EVENT_INTERFACE_PC3a: - case EVENT_INTERFACE_PC4a: - case EVENT_INTERFACE_PC5a: - case EVENT_INTERFACE_PC6a: - case EVENT_INTERFACE_PC7a: - case EVENT_INTERFACE_PC8a: - case EVENT_INTERFACE_PC9a: - FixPerso(event.event-EVENT_INTERFACE_PC0a, 0); - WriteGamerPerso(m_main->RetGamerName()); - UpdatePerso(); - m_main->ScenePerso(); - break; - - case EVENT_INTERFACE_PC0b: - case EVENT_INTERFACE_PC1b: - case EVENT_INTERFACE_PC2b: - case EVENT_INTERFACE_PC3b: - case EVENT_INTERFACE_PC4b: - case EVENT_INTERFACE_PC5b: - case EVENT_INTERFACE_PC6b: - case EVENT_INTERFACE_PC7b: - case EVENT_INTERFACE_PC8b: - case EVENT_INTERFACE_PC9b: - FixPerso(event.event-EVENT_INTERFACE_PC0b, 1); - WriteGamerPerso(m_main->RetGamerName()); - UpdatePerso(); - m_main->ScenePerso(); - break; - - case EVENT_INTERFACE_PCRa: - case EVENT_INTERFACE_PCGa: - case EVENT_INTERFACE_PCBa: - case EVENT_INTERFACE_PCRb: - case EVENT_INTERFACE_PCGb: - case EVENT_INTERFACE_PCBb: - ColorPerso(); - WriteGamerPerso(m_main->RetGamerName()); - UpdatePerso(); - m_main->ScenePerso(); - break; - - case EVENT_INTERFACE_PDEF: - DefPerso(); - WriteGamerPerso(m_main->RetGamerName()); - UpdatePerso(); - m_main->ScenePerso(); - break; - - case EVENT_INTERFACE_PLROT: - m_persoAngle += 0.2f; - break; - case EVENT_INTERFACE_PRROT: - m_persoAngle -= 0.2f; - break; - - case EVENT_INTERFACE_POK: - m_main->ChangePhase(PHASE_INIT); - break; - - case EVENT_INTERFACE_PCANCEL: - m_perso = m_persoCopy; - WriteGamerPerso(m_main->RetGamerName()); - m_main->ChangePhase(PHASE_NAME); - break; - } - } - - if ( m_phase == PHASE_TRAINER || - m_phase == PHASE_DEFI || - m_phase == PHASE_MISSION || - m_phase == PHASE_FREE || - m_phase == PHASE_TEEN || - m_phase == PHASE_USER || - m_phase == PHASE_PROTO ) - { - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return false; - - if ( event.event == pw->RetEventMsgClose() || - event.event == EVENT_INTERFACE_BACK || - (event.event == EVENT_KEYDOWN && event.param == VK_ESCAPE) ) - { - m_main->ChangePhase(PHASE_INIT); - return false; - } - } - - if ( m_phase == PHASE_TRAINER || - m_phase == PHASE_DEFI || - m_phase == PHASE_MISSION || - m_phase == PHASE_FREE || - m_phase == PHASE_TEEN || - m_phase == PHASE_USER || - m_phase == PHASE_PROTO ) - { - switch( event.event ) - { - case EVENT_INTERFACE_CHAP: - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_CHAP); - if ( pl == 0 ) break; - m_chap[m_index] = pl->RetSelect(); - UpdateSceneList(m_chap[m_index], m_sel[m_index]); - UpdateSceneResume((m_chap[m_index]+1)*100+(m_sel[m_index]+1)); - break; - - case EVENT_INTERFACE_LIST: - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_LIST); - if ( pl == 0 ) break; - m_sel[m_index] = pl->RetSelect(); - UpdateSceneResume((m_chap[m_index]+1)*100+(m_sel[m_index]+1)); - break; - - case EVENT_INTERFACE_SOLUCE: - pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_SOLUCE); - if ( pb == 0 ) break; - m_bSceneSoluce = !m_bSceneSoluce; - pb->SetState(STATE_CHECK, m_bSceneSoluce); - break; - - case EVENT_INTERFACE_PLAY: - if ( m_phase == PHASE_PROTO && m_chap[m_index] == 0 && m_sel[m_index] == 0 ) - { - m_main->ChangePhase(PHASE_MODEL); - break; - } - m_sceneRank = (m_chap[m_index]+1)*100+(m_sel[m_index]+1); - m_phaseTerm = m_phase; - m_main->ChangePhase(PHASE_LOADING); - break; - - case EVENT_INTERFACE_READ: - m_phaseTerm = m_phase; - m_main->ChangePhase(PHASE_READ); - break; - } - return false; - } - - if ( m_phase == PHASE_SETUPd || - m_phase == PHASE_SETUPg || - m_phase == PHASE_SETUPp || - m_phase == PHASE_SETUPc || - m_phase == PHASE_SETUPs ) - { - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return false; - - if ( event.event == pw->RetEventMsgClose() || - event.event == EVENT_INTERFACE_BACK || - (event.event == EVENT_KEYDOWN && event.param == VK_ESCAPE) ) - { - SetupMemorize(); - m_engine->ApplyChange(); - m_main->ChangePhase(PHASE_INIT); - return false; - } - - switch( event.event ) - { - case EVENT_INTERFACE_SETUPd: - m_main->ChangePhase(PHASE_SETUPd); - break; - - case EVENT_INTERFACE_SETUPg: - m_main->ChangePhase(PHASE_SETUPg); - break; - - case EVENT_INTERFACE_SETUPp: - m_main->ChangePhase(PHASE_SETUPp); - break; - - case EVENT_INTERFACE_SETUPc: - m_main->ChangePhase(PHASE_SETUPc); - break; - - case EVENT_INTERFACE_SETUPs: - m_main->ChangePhase(PHASE_SETUPs); - break; - } - } - - if ( m_phase == PHASE_SETUPds || - m_phase == PHASE_SETUPgs || - m_phase == PHASE_SETUPps || - m_phase == PHASE_SETUPcs || - m_phase == PHASE_SETUPss ) - { - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return false; - - if ( event.event == pw->RetEventMsgClose() || - event.event == EVENT_INTERFACE_BACK || - (event.event == EVENT_KEYDOWN && event.param == VK_ESCAPE) ) - { - SetupMemorize(); - m_engine->ApplyChange(); - m_interface->DeleteControl(EVENT_WINDOW5); - ChangePhase(PHASE_SIMUL); - StopSuspend(); - return false; - } - - switch( event.event ) - { - case EVENT_INTERFACE_SETUPd: - ChangePhase(PHASE_SETUPds); - break; - - case EVENT_INTERFACE_SETUPg: - ChangePhase(PHASE_SETUPgs); - break; - - case EVENT_INTERFACE_SETUPp: - ChangePhase(PHASE_SETUPps); - break; - - case EVENT_INTERFACE_SETUPc: - ChangePhase(PHASE_SETUPcs); - break; - - case EVENT_INTERFACE_SETUPs: - ChangePhase(PHASE_SETUPss); - break; - } - } - - if ( m_phase == PHASE_SETUPd || // setup/display ? - m_phase == PHASE_SETUPds ) - { - switch( event.event ) - { - case EVENT_LIST1: - case EVENT_LIST2: - UpdateApply(); - break; - - case EVENT_INTERFACE_FULL: - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) break; - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_FULL); - if ( pc == 0 ) break; - pl = (CList*)pw->SearchControl(EVENT_LIST2); - if ( pl == 0 ) break; - if ( pc->TestState(STATE_CHECK) ) - { - pc->ClearState(STATE_CHECK); // window - pl->ClearState(STATE_ENABLE); - } - else - { - pc->SetState(STATE_CHECK); // fullscreen - pl->SetState(STATE_ENABLE); - } - UpdateApply(); - break; - - case EVENT_INTERFACE_APPLY: - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) break; - pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_APPLY); - if ( pb == 0 ) break; - pb->ClearState(STATE_PRESS); - pb->ClearState(STATE_HILIGHT); - ChangeDisplay(); - UpdateApply(); - break; - } - return false; - } - - if ( m_phase == PHASE_SETUPg || // setup/graphic ? - m_phase == PHASE_SETUPgs ) - { - switch( event.event ) - { - case EVENT_INTERFACE_SHADOW: - m_engine->SetShadow(!m_engine->RetShadow()); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_GROUND: - m_engine->SetGroundSpot(!m_engine->RetGroundSpot()); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_DIRTY: - m_engine->SetDirty(!m_engine->RetDirty()); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_FOG: - m_engine->SetFog(!m_engine->RetFog()); - m_camera->SetOverBaseColor(RetColor(RetColor(0.0f))); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_LENS: - m_engine->SetLensMode(!m_engine->RetLensMode()); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_SKY: - m_engine->SetSkyMode(!m_engine->RetSkyMode()); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_PLANET: - m_engine->SetPlanetMode(!m_engine->RetPlanetMode()); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_LIGHT: - m_engine->SetLightMode(!m_engine->RetLightMode()); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_PARTI: - case EVENT_INTERFACE_CLIP: - case EVENT_INTERFACE_DETAIL: - case EVENT_INTERFACE_GADGET: - case EVENT_INTERFACE_TEXTURE: - ChangeSetupButtons(); - break; - - case EVENT_INTERFACE_MIN: - ChangeSetupQuality(-1); - UpdateSetupButtons(); - break; - case EVENT_INTERFACE_NORM: - ChangeSetupQuality(0); - UpdateSetupButtons(); - break; - case EVENT_INTERFACE_MAX: - ChangeSetupQuality(1); - UpdateSetupButtons(); - break; - } - return false; - } - - if ( m_phase == PHASE_SETUPp || // setup/game ? - m_phase == PHASE_SETUPps ) - { - switch( event.event ) - { - case EVENT_INTERFACE_TOTO: - m_engine->SetTotoMode(!m_engine->RetTotoMode()); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_TOOLTIP: - m_bTooltip = !m_bTooltip; - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_GLINT: - m_bGlint = !m_bGlint; - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_RAIN: - m_bRain = !m_bRain; - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_MOUSE: - m_engine->SetNiceMouse(!m_engine->RetNiceMouse()); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_EDITMODE: - m_engine->SetEditIndentMode(!m_engine->RetEditIndentMode()); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_EDITVALUE: - if ( m_engine->RetEditIndentValue() == 2 ) - { - m_engine->SetEditIndentValue(4); - } - else - { - m_engine->SetEditIndentValue(2); - } - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_SOLUCE4: - m_bSoluce4 = !m_bSoluce4; - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_MOVIES: - m_bMovies = !m_bMovies; - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_NICERST: - m_bNiceReset = !m_bNiceReset; - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_HIMSELF: - m_bHimselfDamage = !m_bHimselfDamage; - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_SCROLL: - m_bCameraScroll = !m_bCameraScroll; - m_camera->SetCameraScroll(m_bCameraScroll); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_INVERTX: - m_bCameraInvertX = !m_bCameraInvertX; - m_camera->SetCameraInvertX(m_bCameraInvertX); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_INVERTY: - m_bCameraInvertY = !m_bCameraInvertY; - m_camera->SetCameraInvertY(m_bCameraInvertY); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_EFFECT: - m_bEffect = !m_bEffect; - m_camera->SetEffect(m_bEffect); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - } - return false; - } - - if ( m_phase == PHASE_SETUPc || // setup/commands ? - m_phase == PHASE_SETUPcs ) - { - switch( event.event ) - { - case EVENT_INTERFACE_KSCROLL: - UpdateKey(); - break; - - case EVENT_INTERFACE_KLEFT: - case EVENT_INTERFACE_KRIGHT: - case EVENT_INTERFACE_KUP: - case EVENT_INTERFACE_KDOWN: - case EVENT_INTERFACE_KGUP: - case EVENT_INTERFACE_KGDOWN: - case EVENT_INTERFACE_KCAMERA: - case EVENT_INTERFACE_KDESEL: - case EVENT_INTERFACE_KACTION: - case EVENT_INTERFACE_KNEAR: - case EVENT_INTERFACE_KAWAY: - case EVENT_INTERFACE_KNEXT: - case EVENT_INTERFACE_KHUMAN: - case EVENT_INTERFACE_KQUIT: - case EVENT_INTERFACE_KHELP: - case EVENT_INTERFACE_KPROG: - case EVENT_INTERFACE_KCBOT: - case EVENT_INTERFACE_KSPEED10: - case EVENT_INTERFACE_KSPEED15: - case EVENT_INTERFACE_KSPEED20: - case EVENT_INTERFACE_KSPEED30: - case EVENT_INTERFACE_KVISIT: - ChangeKey(event.event); - UpdateKey(); - break; - - case EVENT_INTERFACE_KDEF: - m_engine->ResetKey(); - UpdateKey(); - break; - - case EVENT_INTERFACE_JOYSTICK: - m_engine->SetJoystick(!m_engine->RetJoystick()); - UpdateSetupButtons(); - break; - } - return false; - } - - if ( m_phase == PHASE_SETUPs || // setup/sound ? - m_phase == PHASE_SETUPss ) - { - switch( event.event ) - { - case EVENT_INTERFACE_VOLSOUND: - case EVENT_INTERFACE_VOLMUSIC: - ChangeSetupButtons(); - break; - - case EVENT_INTERFACE_SOUND3D: - m_sound->SetSound3D(!m_sound->RetSound3D()); - ChangeSetupButtons(); - UpdateSetupButtons(); - break; - - case EVENT_INTERFACE_SILENT: - m_sound->SetAudioVolume(0); - m_sound->SetMidiVolume(0); - UpdateSetupButtons(); - break; - case EVENT_INTERFACE_NOISY: - m_sound->SetAudioVolume(MAXVOLUME); - m_sound->SetMidiVolume(MAXVOLUME*3/4); - UpdateSetupButtons(); - break; - } - return false; - } - - if ( m_phase == PHASE_READ ) - { - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return false; - - if ( event.event == pw->RetEventMsgClose() || - event.event == EVENT_INTERFACE_BACK || - (event.event == EVENT_KEYDOWN && event.param == VK_ESCAPE) ) - { - ChangePhase(m_phaseTerm); - } - - if ( event.event == EVENT_INTERFACE_IOLIST ) - { - IOUpdateList(); - } - if ( event.event == EVENT_INTERFACE_IODELETE ) - { - IODeleteScene(); - IOUpdateList(); - } - if ( event.event == EVENT_INTERFACE_IOREAD ) - { - if ( IOReadScene() ) - { - m_main->ChangePhase(PHASE_LOADING); - } - } - - return false; - } - - if ( m_phase == PHASE_WRITEs || - m_phase == PHASE_READs ) - { - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return false; - - if ( event.event == pw->RetEventMsgClose() || - event.event == EVENT_INTERFACE_BACK || - (event.event == EVENT_KEYDOWN && event.param == VK_ESCAPE) ) - { - m_interface->DeleteControl(EVENT_WINDOW5); - ChangePhase(PHASE_SIMUL); - StopSuspend(); - } - - if ( event.event == EVENT_INTERFACE_IOLIST ) - { - IOUpdateList(); - } - if ( event.event == EVENT_INTERFACE_IODELETE ) - { - IODeleteScene(); - IOUpdateList(); - } - if ( event.event == EVENT_INTERFACE_IOWRITE ) - { - IOWriteScene(); - m_interface->DeleteControl(EVENT_WINDOW5); - ChangePhase(PHASE_SIMUL); - StopSuspend(); - } - if ( event.event == EVENT_INTERFACE_IOREAD ) - { - if ( IOReadScene() ) - { - m_interface->DeleteControl(EVENT_WINDOW5); - ChangePhase(PHASE_SIMUL); - StopSuspend(); - m_main->ChangePhase(PHASE_LOADING); - } - } - - return false; - } - - if ( m_phase == PHASE_WELCOME1 ) - { - if ( event.event == EVENT_KEYDOWN || - event.event == EVENT_LBUTTONDOWN || - event.event == EVENT_RBUTTONDOWN ) - { - ChangePhase(PHASE_WELCOME2); - return true; - } - } - if ( m_phase == PHASE_WELCOME2 ) - { - if ( event.event == EVENT_KEYDOWN || - event.event == EVENT_LBUTTONDOWN || - event.event == EVENT_RBUTTONDOWN ) - { - ChangePhase(PHASE_WELCOME3); - return true; - } - } - if ( m_phase == PHASE_WELCOME3 ) - { - if ( event.event == EVENT_KEYDOWN || - event.event == EVENT_LBUTTONDOWN || - event.event == EVENT_RBUTTONDOWN ) - { - ChangePhase(PHASE_NAME); - return true; - } - } - - if ( m_phase == PHASE_GENERIC ) - { - if ( event.event == EVENT_INTERFACE_ABORT ) - { - ChangePhase(PHASE_INIT); - } - - if ( event.event == EVENT_KEYDOWN ) - { - if ( event.param == VK_ESCAPE ) - { - ChangePhase(PHASE_INIT); - } - else - { - m_event->MakeEvent(newEvent, EVENT_QUIT); - m_event->AddEvent(newEvent); - } - } - - if ( event.event == EVENT_LBUTTONDOWN || - event.event == EVENT_RBUTTONDOWN ) - { - m_event->MakeEvent(newEvent, EVENT_QUIT); - m_event->AddEvent(newEvent); - } - } - - return true; -} - - -// Moves the reflections. - -void CMainDialog::GlintMove() -{ - CWindow* pw; - CGroup* pg; - Math::Point pos, dim, zoom; - - if ( m_phase == PHASE_SIMUL ) return; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - - if ( m_phase == PHASE_INIT ) - { - pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTl); - if ( pg != 0 ) - { - zoom.x = sinf(m_glintTime*0.23f); - zoom.y = sinf(m_glintTime*0.37f); - pos.x = 0.35f; - pos.y = 0.90f; - dim.x = 0.30f-0.10f*(zoom.x+1.0f)/2.0f; - dim.y = 0.50f-0.30f*(zoom.y+1.0f)/2.0f; - pos.y -= dim.y; - pg->SetPos(pos); - pg->SetDim(dim); - } - - pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTr); - if ( pg != 0 ) - { - zoom.x = sinf(m_glintTime*0.21f); - zoom.y = sinf(m_glintTime*0.26f); - pos.x = 0.65f; - pos.y = 0.10f; - dim.x = 0.30f-0.10f*(zoom.x+1.0f)/2.0f; - dim.y = 0.50f-0.30f*(zoom.y+1.0f)/2.0f; - pos.x -= dim.x; - pg->SetPos(pos); - pg->SetDim(dim); - } - } - - if ( m_phase == PHASE_NAME || - m_phase == PHASE_TRAINER || - m_phase == PHASE_MISSION || - m_phase == PHASE_FREE || - m_phase == PHASE_TEEN || - m_phase == PHASE_USER || - m_phase == PHASE_PROTO ) - { - pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTl); - if ( pg != 0 ) - { - zoom.x = sinf(m_glintTime*0.22f); - zoom.y = sinf(m_glintTime*0.37f); - pos.x = 0.10f; - pos.y = 0.90f; - dim.x = 0.60f+0.30f*zoom.x; - dim.y = 0.60f+0.30f*zoom.y; - pos.y -= dim.y; - pg->SetPos(pos); - pg->SetDim(dim); - } - - pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTr); - if ( pg != 0 ) - { - zoom.x = sinf(m_glintTime*0.19f); - zoom.y = sinf(m_glintTime*0.28f); - pos.x = 0.90f; - pos.y = 0.10f; - dim.x = 0.60f+0.30f*zoom.x; - dim.y = 0.60f+0.30f*zoom.y; - pos.x -= dim.x; - pg->SetPos(pos); - pg->SetDim(dim); - } - } - - if ( m_phase == PHASE_SETUPd || - m_phase == PHASE_SETUPg || - m_phase == PHASE_SETUPp || - m_phase == PHASE_SETUPc || - m_phase == PHASE_SETUPs || - m_phase == PHASE_SETUPds || - m_phase == PHASE_SETUPgs || - m_phase == PHASE_SETUPps || - m_phase == PHASE_SETUPcs || - m_phase == PHASE_SETUPss ) - { - pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTu); - if ( pg != 0 ) - { - zoom.y = sinf(m_glintTime*0.27f); - pos.x = 0.10f; - pos.y = 0.76f; - dim.x = 0.80f; - dim.y = 0.32f+0.20f*zoom.y; - pos.y -= dim.y; - pg->SetPos(pos); - pg->SetDim(dim); - } - - pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTr); - if ( pg != 0 ) - { - zoom.x = sinf(m_glintTime*0.29f); - zoom.y = sinf(m_glintTime*0.14f); - pos.x = 0.90f; - pos.y = 0.10f; - dim.x = 0.40f+0.20f*zoom.x; - dim.y = 0.40f+0.20f*zoom.y; - pos.x -= dim.x; - pg->SetPos(pos); - pg->SetDim(dim); - } - } - - if ( m_phase == PHASE_WRITE || - m_phase == PHASE_READ || - m_phase == PHASE_WRITEs || - m_phase == PHASE_READs ) - { - pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTl); - if ( pg != 0 ) - { - zoom.x = sinf(m_glintTime*0.22f); - zoom.y = sinf(m_glintTime*0.37f); - pos.x = 0.10f; - pos.y = 0.90f; - dim.x = 0.60f+0.30f*zoom.x; - dim.y = 0.60f+0.30f*zoom.y; - pos.y -= dim.y; - pg->SetPos(pos); - pg->SetDim(dim); - } - - pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTr); - if ( pg != 0 ) - { - zoom.x = sinf(m_glintTime*0.19f); - zoom.y = sinf(m_glintTime*0.28f); - pos.x = 0.90f; - pos.y = 0.10f; - dim.x = 0.60f+0.30f*zoom.x; - dim.y = 0.60f+0.30f*zoom.y; - pos.x -= dim.x; - pg->SetPos(pos); - pg->SetDim(dim); - } - } -} - - -// Returns the position for a sound. - -Math::Vector SoundPos(Math::Point pos) -{ - Math::Vector s; - - s.x = (pos.x-0.5f)*2.0f; - s.y = (pos.y-0.5f)*2.0f; - s.z = 0.0f; - - return s; -} - -// Returns a random position for a sound. - -Math::Vector SoundRand() -{ - Math::Vector s; - - s.x = (Math::Rand()-0.5f)*2.0f; - s.y = (Math::Rand()-0.5f)*2.0f; - s.z = 0.0f; - - return s; -} - -// Makes pretty qq particles evolve. - -void CMainDialog::FrameParticule(float rTime) -{ -#if _NEWLOOK -#else - Math::Vector pos, speed; - Math::Point dim; - float *pParti, *pGlint; - int nParti, nGlint; - int i, r, ii; - - static float partiPosInit[1+5*12] = - { // x x t2 t2 type - 12.0f, - 607.0f, 164.0f, 0.2f, 0.8f, 1.0f, // upper cable - 604.0f, 205.0f, 0.1f, 0.3f, 1.0f, // middle cable - 603.0f, 247.0f, 0.1f, 0.3f, 1.0f, // lower cable - 119.0f, 155.0f, 0.2f, 0.4f, 2.0f, // left pipe - 366.0f, 23.0f, 0.5f, 1.5f, 4.0f, // upper pipe - 560.0f, 414.0f, 0.1f, 0.1f, 1.0f, // button lower/right - 20.0f, 413.0f, 0.1f, 0.1f, 2.0f, // button lower/left - 39.0f, 78.0f, 0.1f, 0.2f, 1.0f, // left pot - 39.0f, 78.0f, 0.5f, 0.9f, 1.0f, // left pot - 170.0f, 229.0f, 0.5f, 0.5f, 3.0f, // left smoke - 170.0f, 229.0f, 0.5f, 0.5f, 3.0f, // left smoke - 474.0f, 229.0f, 0.5f, 0.5f, 3.0f, // right smoke - }; - - static float glintPosInit[1+2*14] = - { - 14.0f, - 15.0f, 407.0f, - 68.0f, 417.0f, - 548.0f, 36.0f, - 611.0f, 37.0f, - 611.0f, 100.0f, - 611.0f, 395.0f, - 36.0f, 35.0f, - 166.0f, 55.0f, - 166.0f, 94.0f, - 477.0f, 56.0f, - 31.0f, 190.0f, - 32.0f, 220.0f, - 65.0f, 221.0f, - 65.0f, 250.0f, - }; - - static float partiPosBig[1+5*12] = - { // x x t2 t2 type - 12.0f, - 607.0f, 164.0f, 0.2f, 0.8f, 1.0f, // upper cable - 604.0f, 205.0f, 0.1f, 0.3f, 1.0f, // middle cable - 603.0f, 247.0f, 0.1f, 0.3f, 1.0f, // lower cable - 64.0f, 444.0f, 0.2f, 0.8f, 1.0f, // down the left cable - 113.0f, 449.0f, 0.1f, 0.3f, 1.0f, // down the left cable - 340.0f, 463.0f, 0.2f, 0.8f, 1.0f, // down the middle cable - 36.0f, 155.0f, 0.2f, 0.4f, 2.0f, // left pipe - 366.0f, 23.0f, 0.5f, 1.5f, 4.0f, // upper pipe - 612.0f, 414.0f, 0.1f, 0.1f, 1.0f, // button lower/right - 20.0f, 413.0f, 0.1f, 0.1f, 2.0f, // button lower/left - 39.0f, 78.0f, 0.1f, 0.2f, 1.0f, // left pot - 39.0f, 78.0f, 0.5f, 0.9f, 1.0f, // left pot - }; - - static float glintPosBig[1+2*12] = - { - 12.0f, - 15.0f, 407.0f, - 48.0f, 399.0f, - 611.0f, 37.0f, - 611.0f, 100.0f, - 611.0f, 395.0f, - 36.0f, 35.0f, - 31.0f, 190.0f, - 32.0f, 220.0f, - 31.0f, 221.0f, - 31.0f, 189.0f, - 255.0f, 18.0f, - 279.0f, 18.0f, - }; - - if ( m_bDialog || !m_bRain ) return; - - if ( m_phase == PHASE_INIT ) - { - pParti = partiPosInit; - pGlint = glintPosInit; - } - else if ( m_phase == PHASE_NAME || - m_phase == PHASE_TRAINER || - m_phase == PHASE_DEFI || - m_phase == PHASE_MISSION || - m_phase == PHASE_FREE || - m_phase == PHASE_TEEN || - m_phase == PHASE_USER || - m_phase == PHASE_PROTO || - m_phase == PHASE_SETUPd || - m_phase == PHASE_SETUPg || - m_phase == PHASE_SETUPp || - m_phase == PHASE_SETUPc || - m_phase == PHASE_SETUPs || - m_phase == PHASE_WRITE || - m_phase == PHASE_READ ) - { - pParti = partiPosBig; - pGlint = glintPosBig; - } - else - { - return; - } - - nParti = (int)(*pParti++); - nGlint = (int)(*pGlint++); - - for ( i=0 ; i<10 ; i++ ) - { - if ( m_partiPhase[i] == 0 ) // waiting? - { - m_partiTime[i] -= rTime; - if ( m_partiTime[i] <= 0.0f ) - { - r = rand()%3; - - if ( r == 0 ) - { - ii = rand()%nParti; - m_partiPos[i].x = pParti[ii*5+0]/640.0f; - m_partiPos[i].y = (480.0f-pParti[ii*5+1])/480.0f; - m_partiTime[i] = pParti[ii*5+2]+Math::Rand()*pParti[ii*5+3]; - m_partiPhase[i] = (int)pParti[ii*5+4]; - if ( m_partiPhase[i] == 3 ) - { - m_sound->Play(SOUND_PSHHH, SoundPos(m_partiPos[i]), 0.3f+Math::Rand()*0.3f); - } - else - { - m_sound->Play(SOUND_GGG, SoundPos(m_partiPos[i]), 0.1f+Math::Rand()*0.4f); - } - } - - if ( r == 1 ) - { - ii = rand()%nGlint; - pos.x = pGlint[ii*2+0]/640.0f; - pos.y = (480.0f-pGlint[ii*2+1])/480.0f; - pos.z = 0.0f; - speed.x = 0.0f; - speed.y = 0.0f; - speed.z = 0.0f; - dim.x = 0.04f+Math::Rand()*0.04f; - dim.y = dim.x/0.75f; - m_particule->CreateParticule(pos, speed, dim, - rand()%2?PARTIGLINT:PARTICONTROL, - Math::Rand()*0.4f+0.4f, 0.0f, 0.0f, - SH_INTERFACE); - m_partiTime[i] = 0.5f+Math::Rand()*0.5f; - } - - if ( r == 2 ) - { - ii = rand()%7; - if ( ii == 0 ) - { - m_sound->Play(SOUND_ENERGY, SoundRand(), 0.2f+Math::Rand()*0.2f); - m_partiTime[i] = 1.0f+Math::Rand()*1.0f; - } - if ( ii == 1 ) - { - m_sound->Play(SOUND_STATION, SoundRand(), 0.2f+Math::Rand()*0.2f); - m_partiTime[i] = 1.0f+Math::Rand()*2.0f; - } - if ( ii == 2 ) - { - m_sound->Play(SOUND_ALARM, SoundRand(), 0.1f+Math::Rand()*0.1f); - m_partiTime[i] = 2.0f+Math::Rand()*4.0f; - } - if ( ii == 3 ) - { - m_sound->Play(SOUND_INFO, SoundRand(), 0.1f+Math::Rand()*0.1f); - m_partiTime[i] = 2.0f+Math::Rand()*4.0f; - } - if ( ii == 4 ) - { - m_sound->Play(SOUND_RADAR, SoundRand(), 0.2f+Math::Rand()*0.2f); - m_partiTime[i] = 0.5f+Math::Rand()*1.0f; - } - if ( ii == 5 ) - { - m_sound->Play(SOUND_GFLAT, SoundRand(), 0.3f+Math::Rand()*0.3f); - m_partiTime[i] = 2.0f+Math::Rand()*4.0f; - } - if ( ii == 6 ) - { - m_sound->Play(SOUND_ALARMt, SoundRand(), 0.1f+Math::Rand()*0.1f); - m_partiTime[i] = 2.0f+Math::Rand()*4.0f; - } - } - } - } - - if ( m_partiPhase[i] != 0 ) // generates? - { - m_partiTime[i] -= rTime; - if ( m_partiTime[i] > 0.0f ) - { - if ( m_partiPhase[i] == 1 ) // sparks? - { - pos.x = m_partiPos[i].x; - pos.y = m_partiPos[i].y; - pos.z = 0.0f; - pos.x += (Math::Rand()-0.5f)*0.01f; - pos.y += (Math::Rand()-0.5f)*0.01f; - speed.x = (Math::Rand()-0.5f)*0.2f; - speed.y = (Math::Rand()-0.5f)*0.2f; - speed.z = 0.0f; - dim.x = 0.005f+Math::Rand()*0.005f; - dim.y = dim.x/0.75f; - m_particule->CreateParticule(pos, speed, dim, PARTIBLITZ, - Math::Rand()*0.2f+0.2f, 0.0f, 0.0f, - SH_INTERFACE); - pos.x = m_partiPos[i].x; - pos.y = m_partiPos[i].y; - pos.z = 0.0f; - speed.x = (Math::Rand()-0.5f)*0.5f; - speed.y = (0.3f+Math::Rand()*0.3f); - speed.z = 0.0f; - dim.x = 0.01f+Math::Rand()*0.01f; - dim.y = dim.x/0.75f; - m_particule->CreateParticule(pos, speed, dim, - (ParticuleType)(PARTILENS1+rand()%3), - Math::Rand()*0.5f+0.5f, 2.0f, 0.0f, - SH_INTERFACE); - } - if ( m_partiPhase[i] == 2 ) // sparks? - { - pos.x = m_partiPos[i].x; - pos.y = m_partiPos[i].y; - pos.z = 0.0f; - pos.x += (Math::Rand()-0.5f)*0.01f; - pos.y += (Math::Rand()-0.5f)*0.01f; - speed.x = (Math::Rand()-0.5f)*0.2f; - speed.y = (Math::Rand()-0.5f)*0.2f; - speed.z = 0.0f; - dim.x = 0.005f+Math::Rand()*0.005f; - dim.y = dim.x/0.75f; - m_particule->CreateParticule(pos, speed, dim, PARTIBLITZ, - Math::Rand()*0.2f+0.2f, 0.0f, 0.0f, - SH_INTERFACE); - pos.x = m_partiPos[i].x; - pos.y = m_partiPos[i].y; - pos.z = 0.0f; - speed.x = (Math::Rand()-0.5f)*0.5f; - speed.y = (0.3f+Math::Rand()*0.3f); - speed.z = 0.0f; - dim.x = 0.005f+Math::Rand()*0.005f; - dim.y = dim.x/0.75f; - m_particule->CreateParticule(pos, speed, dim, PARTISCRAPS, - Math::Rand()*0.5f+0.5f, 2.0f, 0.0f, - SH_INTERFACE); - } - if ( m_partiPhase[i] == 3 ) // smoke? - { - pos.x = m_partiPos[i].x; - pos.y = m_partiPos[i].y; - pos.z = 0.0f; - pos.x += (Math::Rand()-0.5f)*0.03f; - pos.y += (Math::Rand()-0.5f)*0.03f; - speed.x = (Math::Rand()-0.5f)*0.2f; - speed.y = Math::Rand()*0.5f; - speed.z = 0.0f; - dim.x = 0.03f+Math::Rand()*0.07f; - dim.y = dim.x/0.75f; - m_particule->CreateParticule(pos, speed, dim, PARTICRASH, - Math::Rand()*0.4f+0.4f, 0.0f, 0.0f, - SH_INTERFACE); - } - } - else - { - m_partiPhase[i] = 0; - m_partiTime[i] = 2.0f+Math::Rand()*4.0f; - } - } - } -#endif -} - -// Some nice particles following the mouse. - -void CMainDialog::NiceParticule(Math::Point mouse, bool bPress) -{ - Math::Vector pos, speed; - Math::Point dim; - - if ( !m_bRain ) return; - if ( (m_phase == PHASE_SIMUL || - m_phase == PHASE_WIN || - m_phase == PHASE_LOST || - m_phase == PHASE_MODEL ) && - !m_bDialog ) return; - - if ( bPress ) - { - pos.x = mouse.x; - pos.y = mouse.y; - pos.z = 0.0f; - speed.x = (Math::Rand()-0.5f)*0.5f; - speed.y = (0.3f+Math::Rand()*0.3f); - speed.z = 0.0f; - dim.x = 0.005f+Math::Rand()*0.005f; - dim.y = dim.x/0.75f; - m_particule->CreateParticule(pos, speed, dim, PARTISCRAPS, - Math::Rand()*0.5f+0.5f, 2.0f, 0.0f, - SH_INTERFACE); - } - else - { - pos.x = mouse.x; - pos.y = mouse.y; - pos.z = 0.0f; - speed.x = (Math::Rand()-0.5f)*0.5f; - speed.y = (0.3f+Math::Rand()*0.3f); - speed.z = 0.0f; - dim.x = 0.01f+Math::Rand()*0.01f; - dim.y = dim.x/0.75f; - m_particule->CreateParticule(pos, speed, dim, - (ParticuleType)(PARTILENS1+rand()%3), - Math::Rand()*0.5f+0.5f, 2.0f, 0.0f, - SH_INTERFACE); - } -} - - - -// Specifies the special user folder if needed. - -void CMainDialog::SetUserDir(char *base, int rank) -{ - char dir[100]; - - if ( strcmp(base, "user") == 0 && rank >= 100 ) - { - sprintf(dir, "%s\\%s", m_userDir, m_userList[rank/100-1]); - UserDir(true, dir); - } - else - { - UserDir(false, ""); - } -} - -// Builds the file name of a mission. - -void CMainDialog::BuildSceneName(char *filename, char *base, int rank) -{ - if ( strcmp(base, "user") == 0 ) - { - sprintf(filename, "%s\\%s\\scene%.2d.txt", m_userDir, m_userList[rank/100-1], rank%100); - } - else - { - sprintf(filename, "%s\\%s%.3d.txt", m_sceneDir, base, rank); - } -} - -// Built the default descriptive name of a mission. - -void CMainDialog::BuildResumeName(char *filename, char *base, int rank) -{ - sprintf(filename, "Scene %s %d", base, rank); -} - -// Returns the name of the file or save the files. - -char* CMainDialog::RetFilesDir() -{ - return m_filesDir; -} - - -// Updates the list of players after checking the files on disk. - -void CMainDialog::ReadNameList() -{ - CWindow* pw; - CList* pl; - long hFile; - struct _finddata_t fBuffer; - bool bDo; - char dir[_MAX_FNAME]; - char temp[_MAX_FNAME]; - char filenames[_MAX_FNAME][100]; - int nbFilenames, i; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); - if ( pl == 0 ) return; - pl->Flush(); - - nbFilenames = 0; - sprintf(dir, "%s\\*", m_savegameDir); - hFile = _findfirst(dir, &fBuffer); - if ( hFile != -1 ) - { - do - { - if ( (fBuffer.attrib & _A_SUBDIR) && fBuffer.name[0] != '.' ) - { - strcpy(filenames[nbFilenames++], fBuffer.name); - } - } - while ( _findnext(hFile, &fBuffer) == 0 && nbFilenames < 100 ); - } - do // sorts all names: - { - bDo = false; - for ( i=0 ; i 0 ) - { - strcpy(temp, filenames[i]); - strcpy(filenames[i], filenames[i+1]); - strcpy(filenames[i+1], temp); - bDo = true; - } - } - } - while ( bDo ); - - for ( i=0 ; iSetName(i, filenames[i]); - } -} - -// Updates the controls of the players. - -void CMainDialog::UpdateNameControl() -{ - CWindow* pw; - CList* pl; - CButton* pb; - CEdit* pe; - char name[100]; - char* gamer; - int total, sel; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); - if ( pl == 0 ) return; - pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_NEDIT); - if ( pe == 0 ) return; - - gamer = m_main->RetGamerName(); - total = pl->RetTotal(); - sel = pl->RetSelect(); - pe->GetText(name, 100); - - pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_NCANCEL); - if ( pb != 0 ) - { - pb->SetState(STATE_ENABLE, gamer[0]!=0); - } - - pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_NDELETE); - if ( pb != 0 ) - { - pb->SetState(STATE_ENABLE, total>0 && sel!=-1); - } - - pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_NOK); - if ( pb != 0 ) - { - pb->SetState(STATE_ENABLE, name[0]!=0 || sel!=-1); - } - - pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_PERSO); - if ( pb != 0 ) - { - pb->SetState(STATE_ENABLE, name[0]!=0 || sel!=-1); - } -} - -// Updates the list of players by name frape. - -void CMainDialog::UpdateNameList() -{ - CWindow* pw; - CList* pl; - CEdit* pe; - char name[100]; - int total, sel, i; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); - if ( pl == 0 ) return; - pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_NEDIT); - if ( pe == 0 ) return; - - pe->GetText(name, 100); - total = pl->RetTotal(); - sel = pl->RetSelect(); - - for ( i=0 ; iRetName(i)) == 0 ) - { - pl->SetSelect(i); - pl->ShowSelect(false); - return; - } - } - - pl->SetSelect(-1); -} - -// Updates the player's name and function of the selected list. - -void CMainDialog::UpdateNameEdit() -{ - CWindow* pw; - CList* pl; - CEdit* pe; - char* name; - int sel; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); - if ( pl == 0 ) return; - pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_NEDIT); - if ( pe == 0 ) return; - - sel = pl->RetSelect(); - if ( sel == -1 ) - { - pe->SetText(""); - pe->SetCursor(0, 0); - } - else - { - name = pl->RetName(sel); - pe->SetText(name); - pe->SetCursor(strlen(name), 0); - } - - UpdateNameControl(); -} - -// Updates the representation of the player depending on the selected list. - -void CMainDialog::UpdateNameFace() -{ - CWindow* pw; - CList* pl; - char* name; - int sel; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); - if ( pl == 0 ) return; - - sel = pl->RetSelect(); - if ( sel == -1 ) return; - name = pl->RetName(sel); - - ReadGamerPerso(name); -} - -// Selects a player. - -void CMainDialog::NameSelect() -{ - CWindow* pw; - CList* pl; - CEdit* pe; - char name[100]; - int sel; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); - if ( pl == 0 ) return; - pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_NEDIT); - if ( pe == 0 ) return; - - pe->GetText(name, 100); - sel = pl->RetSelect(); - - if ( sel == -1 ) - { - NameCreate(); - } - else - { - m_main->SetGamerName(pl->RetName(sel)); - m_main->ChangePhase(PHASE_INIT); - } - - RetGamerFace(m_main->RetGamerName()); - - SetProfileString("Gamer", "LastName", m_main->RetGamerName()); -} - -// Creates a new player. - -void CMainDialog::NameCreate() -{ - CWindow* pw; - CEdit* pe; - char name[100]; - char dir[100]; - char c; - int len, i, j; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_NEDIT); - if ( pe == 0 ) return; - - pe->GetText(name, 100); - if ( name[0] == 0 ) - { - m_sound->Play(SOUND_TZOING); - return; - } - - len = strlen(name); - j = 0; - for ( i=0 ; i= '0' && c <= '9') || - (c >= 'a' && c <= 'z') || - c == ' ' || - c == '-' || - c == '_' || - c == '.' || - c == ',' || - c == '\'' ) - { - name[j++] = name[i]; - } - } - name[j] = 0; - if ( j == 0 ) - { - m_sound->Play(SOUND_TZOING); - return; - } - - _mkdir(m_savegameDir); // if does not exist yet! - - sprintf(dir, "%s\\%s", m_savegameDir, name); - if ( _mkdir(dir) != 0 ) - { - m_sound->Play(SOUND_TZOING); - pe->SetText(name); - pe->SetCursor(strlen(name), 0); - pe->SetFocus(true); - return; - } - - SetGamerFace(name, 0); - - m_main->SetGamerName(name); - m_main->ChangePhase(PHASE_INIT); -} - -// Deletes a folder and all its offspring. - -bool RemoveDir(char *dirname) -{ - long hFile; - struct _finddata_t fBuffer; - char filename[100]; - - sprintf(filename, "%s\\*", dirname); - hFile = _findfirst(filename, &fBuffer); - if ( hFile != -1 ) - { - do - { - if ( fBuffer.name[0] != '.' ) - { - if ( fBuffer.attrib & _A_SUBDIR ) - { - sprintf(filename, "%s\\%s", dirname, fBuffer.name); - RemoveDir(filename); - } - else - { - sprintf(filename, "%s\\%s", dirname, fBuffer.name); - remove(filename); - } - } - } - while ( _findnext(hFile, &fBuffer) == 0 ); - } - - if ( _rmdir(dirname) != 0 ) - { - return false; - } - return true; -} - -// Removes a player. - -void CMainDialog::NameDelete() -{ - CWindow* pw; - CList* pl; - int sel; - char* gamer; - char dir[100]; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); - if ( pl == 0 ) return; - - sel = pl->RetSelect(); - if ( sel == -1 ) - { - m_sound->Play(SOUND_TZOING); - return; - } - gamer = pl->RetName(sel); - - // Deletes all the contents of the file. - sprintf(dir, "%s\\%s", m_savegameDir, gamer); - if ( !RemoveDir(dir) ) - { - m_sound->Play(SOUND_TZOING); - return; - } - - m_main->SetGamerName(""); - pl->SetSelect(-1); - - ReadNameList(); - UpdateNameList(); - UpdateNameControl(); -} - - - -// ests whether two colors are equal or nearly are. - -bool EqColor(const D3DCOLORVALUE &c1, const D3DCOLORVALUE &c2) -{ - return (fabs(c1.r-c2.r) < 0.01f && - fabs(c1.g-c2.g) < 0.01f && - fabs(c1.b-c2.b) < 0.01f ); -} - -// Updates all the buttons for the character. - -void CMainDialog::UpdatePerso() -{ - CWindow* pw; - CLabel* pl; - CButton* pb; - CColor* pc; - CSlider* ps; - D3DCOLORVALUE color; - char name[100]; - int i; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - - pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_PHEAD); - if ( pb != 0 ) - { - pb->SetState(STATE_CHECK, m_persoTab==0); - } - pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_PBODY); - if ( pb != 0 ) - { - pb->SetState(STATE_CHECK, m_persoTab==1); - } - - pl = (CLabel*)pw->SearchControl(EVENT_LABEL11); - if ( pl != 0 ) - { - if ( m_persoTab == 0 ) - { - pl->SetState(STATE_VISIBLE); - GetResource(RES_TEXT, RT_PERSO_FACE, name); - pl->SetName(name); - } - else - { - pl->ClearState(STATE_VISIBLE); - } - } - - pl = (CLabel*)pw->SearchControl(EVENT_LABEL12); - if ( pl != 0 ) - { - if ( m_persoTab == 0 ) - { - pl->SetState(STATE_VISIBLE); - GetResource(RES_TEXT, RT_PERSO_GLASSES, name); - pl->SetName(name); - } - else - { - pl->ClearState(STATE_VISIBLE); - } - } - - pl = (CLabel*)pw->SearchControl(EVENT_LABEL13); - if ( pl != 0 ) - { - if ( m_persoTab == 0 ) GetResource(RES_TEXT, RT_PERSO_HAIR, name); - else GetResource(RES_TEXT, RT_PERSO_BAND, name); - pl->SetName(name); - } - - pl = (CLabel*)pw->SearchControl(EVENT_LABEL14); - if ( pl != 0 ) - { - if ( m_persoTab == 0 ) - { - pl->ClearState(STATE_VISIBLE); - } - else - { - pl->SetState(STATE_VISIBLE); - GetResource(RES_TEXT, RT_PERSO_COMBI, name); - pl->SetName(name); - } - } - - for ( i=0 ; i<4 ; i++ ) - { - pb = (CButton*)pw->SearchControl((EventMsg)(EVENT_INTERFACE_PFACE1+i)); - if ( pb == 0 ) break; - pb->SetState(STATE_VISIBLE, m_persoTab==0); - pb->SetState(STATE_CHECK, i==m_perso.face); - } - - for ( i=0 ; i<10 ; i++ ) - { - pb = (CButton*)pw->SearchControl((EventMsg)(EVENT_INTERFACE_PGLASS0+i)); - if ( pb == 0 ) break; - pb->SetState(STATE_VISIBLE, m_persoTab==0); - pb->SetState(STATE_CHECK, i==m_perso.glasses); - } - - for ( i=0 ; i<3*3 ; i++ ) - { - pc = (CColor*)pw->SearchControl((EventMsg)(EVENT_INTERFACE_PC0a+i)); - if ( pc == 0 ) break; - if ( m_persoTab == 0 ) - { - pc->ClearState(STATE_VISIBLE); - } - else - { - pc->SetState(STATE_VISIBLE); - color.r = perso_color[3*10*1+3*i+0]/255.0f; - color.g = perso_color[3*10*1+3*i+1]/255.0f; - color.b = perso_color[3*10*1+3*i+2]/255.0f; - color.a = 0.0f; - pc->SetColor(color); - pc->SetState(STATE_CHECK, EqColor(color, m_perso.colorCombi)); - } - - pc = (CColor*)pw->SearchControl((EventMsg)(EVENT_INTERFACE_PC0b+i)); - if ( pc == 0 ) break; - color.r = perso_color[3*10*2*m_persoTab+3*i+0]/255.0f; - color.g = perso_color[3*10*2*m_persoTab+3*i+1]/255.0f; - color.b = perso_color[3*10*2*m_persoTab+3*i+2]/255.0f; - color.a = 0.0f; - pc->SetColor(color); - pc->SetState(STATE_CHECK, EqColor(color, m_persoTab?m_perso.colorBand:m_perso.colorHair)); - } - - for ( i=0 ; i<3 ; i++ ) - { - ps = (CSlider*)pw->SearchControl((EventMsg)(EVENT_INTERFACE_PCRa+i)); - if ( ps == 0 ) break; - ps->SetState(STATE_VISIBLE, m_persoTab==1); - } - - if ( m_persoTab == 1 ) - { - color = m_perso.colorCombi; - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCRa); - if ( ps != 0 ) ps->SetVisibleValue(color.r*255.0f); - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCGa); - if ( ps != 0 ) ps->SetVisibleValue(color.g*255.0f); - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCBa); - if ( ps != 0 ) ps->SetVisibleValue(color.b*255.0f); - } - - if ( m_persoTab == 0 ) color = m_perso.colorHair; - else color = m_perso.colorBand; - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCRb); - if ( ps != 0 ) ps->SetVisibleValue(color.r*255.0f); - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCGb); - if ( ps != 0 ) ps->SetVisibleValue(color.g*255.0f); - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCBb); - if ( ps != 0 ) ps->SetVisibleValue(color.b*255.0f); -} - -// Updates the camera for the character. - -void CMainDialog::CameraPerso() -{ - if ( m_persoTab == 0 ) - { -//? m_camera->Init(Math::Vector(4.0f, 0.0f, 0.0f), -//? Math::Vector(0.0f, 0.0f, 1.0f), 0.0f); - m_camera->Init(Math::Vector(6.0f, 0.0f, 0.0f), - Math::Vector(0.0f, 0.2f, 1.5f), 0.0f); - } - else - { - m_camera->Init(Math::Vector(18.0f, 0.0f, 4.5f), - Math::Vector(0.0f, 1.6f, 4.5f), 0.0f); - } - - m_camera->SetType(CAMERA_SCRIPT); - m_camera->FixCamera(); -} - -// Sets a fixed color. - -void CMainDialog::FixPerso(int rank, int index) -{ - if ( m_persoTab == 0 ) - { - if ( index == 1 ) - { - m_perso.colorHair.r = perso_color[3*10*0+rank*3+0]/255.0f; - m_perso.colorHair.g = perso_color[3*10*0+rank*3+1]/255.0f; - m_perso.colorHair.b = perso_color[3*10*0+rank*3+2]/255.0f; - } - } - if ( m_persoTab == 1 ) - { - if ( index == 0 ) - { - m_perso.colorCombi.r = perso_color[3*10*1+rank*3+0]/255.0f; - m_perso.colorCombi.g = perso_color[3*10*1+rank*3+1]/255.0f; - m_perso.colorCombi.b = perso_color[3*10*1+rank*3+2]/255.0f; - } - if ( index == 1 ) - { - m_perso.colorBand.r = perso_color[3*10*2+rank*3+0]/255.0f; - m_perso.colorBand.g = perso_color[3*10*2+rank*3+1]/255.0f; - m_perso.colorBand.b = perso_color[3*10*2+rank*3+2]/255.0f; - } - } -} - -// Updates the color of the character. - -void CMainDialog::ColorPerso() -{ - CWindow* pw; - CSlider* ps; - D3DCOLORVALUE color; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - - color.a = 0.0f; - - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCRa); - if ( ps != 0 ) color.r = ps->RetVisibleValue()/255.0f; - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCGa); - if ( ps != 0 ) color.g = ps->RetVisibleValue()/255.0f; - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCBa); - if ( ps != 0 ) color.b = ps->RetVisibleValue()/255.0f; - if ( m_persoTab == 1 ) m_perso.colorCombi = color; - - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCRb); - if ( ps != 0 ) color.r = ps->RetVisibleValue()/255.0f; - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCGb); - if ( ps != 0 ) color.g = ps->RetVisibleValue()/255.0f; - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCBb); - if ( ps != 0 ) color.b = ps->RetVisibleValue()/255.0f; - if ( m_persoTab == 0 ) m_perso.colorHair = color; - else m_perso.colorBand = color; -} - -// Updates the default settings of the character. - -void CMainDialog::DefPerso() -{ - m_perso.colorCombi.r = 206.0f/256.0f; - m_perso.colorCombi.g = 206.0f/256.0f; - m_perso.colorCombi.b = 204.0f/256.0f; // ~white - m_perso.colorBand.r = 255.0f/256.0f; - m_perso.colorBand.g = 132.0f/256.0f; - m_perso.colorBand.b = 1.0f/256.0f; // orange - - if ( m_perso.face == 0 ) // normal ? - { - m_perso.glasses = 0; - m_perso.colorHair.r = 90.0f/256.0f; - m_perso.colorHair.g = 95.0f/256.0f; - m_perso.colorHair.b = 85.0f/256.0f; // black - } - if ( m_perso.face == 1 ) // bald ? - { - m_perso.glasses = 0; - m_perso.colorHair.r = 83.0f/256.0f; - m_perso.colorHair.g = 64.0f/256.0f; - m_perso.colorHair.b = 51.0f/256.0f; // brown - } - if ( m_perso.face == 2 ) // carlos ? - { - m_perso.glasses = 1; - m_perso.colorHair.r = 85.0f/256.0f; - m_perso.colorHair.g = 48.0f/256.0f; - m_perso.colorHair.b = 9.0f/256.0f; // brown - } - if ( m_perso.face == 3 ) // blond ? - { - m_perso.glasses = 4; - m_perso.colorHair.r = 255.0f/256.0f; - m_perso.colorHair.g = 255.0f/256.0f; - m_perso.colorHair.b = 181.0f/256.0f; // yellow - } - - m_perso.colorHair.a = 0.0f; - m_perso.colorCombi.a = 0.0f; - m_perso.colorBand.a = 0.0f; -} - - -// Indicates if there is at least one backup. - -bool CMainDialog::IsIOReadScene() -{ - FILE* file; - char filename[100]; - - sprintf(filename, "%s\\%s\\save%c%.3d\\data.sav", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], 0); - file = fopen(filename, "r"); - if ( file == NULL ) return false; - fclose(file); - return true; -} - -// Builds the file name by default. - -void CMainDialog::IOReadName() -{ - FILE* file; - CWindow* pw; - CEdit* pe; - char filename[_MAX_FNAME]; - char op[100]; - char line[500]; - char resume[100]; - char name[100]; - time_t now; - int i; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_IONAME); - if ( pe == 0 ) return; - - sprintf(resume, "%s %d", m_sceneName, m_chap[m_index]+1); - BuildSceneName(filename, m_sceneName, (m_chap[m_index]+1)*100); - file = fopen(filename, "r"); - if ( file != NULL ) - { - while ( fgets(line, 500, file) != NULL ) - { - for ( i=0 ; i<500 ; i++ ) - { - if ( line[i] == '\t' ) line[i] = ' '; // replaces tab by space - if ( line[i] == '/' && line[i+1] == '/' ) - { - line[i] = 0; - break; - } - } - - sprintf(op, "Title.%c", RetLanguageLetter()); - if ( Cmd(line, op) ) - { - OpString(line, "resume", resume); - break; - } - } - fclose(file); - } - - time(&now); - TimeToAscii(now, line); - sprintf(name, "%s %d - %s", resume, m_sel[m_index]+1, line); - pe->SetText(name); - pe->SetCursor(strlen(name), 0); - pe->SetFocus(true); -} - -// Updates the list of games recorded on disk. - -void CMainDialog::IOReadList() -{ - FILE* file = NULL; - CWindow* pw; - CList* pl; - char filename[100]; - char line[500]; - char name[100]; - int i, j; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_IOLIST); - if ( pl == 0 ) return; - - pl->Flush(); - - for ( j=0 ; j<999 ; j++ ) - { - sprintf(filename, "%s\\%s\\save%c%.3d\\data.sav", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], j); - file = fopen(filename, "r"); - if ( file == NULL ) break; - - strcmp(name, filename); // default name - while ( fgets(line, 500, file) != NULL ) - { - for ( i=0 ; i<500 ; i++ ) - { - if ( line[i] == '\t' ) line[i] = ' '; // replaces tab by space - if ( line[i] == '/' && line[i+1] == '/' ) - { - line[i] = 0; - break; - } - } - - if ( Cmd(line, "Title") ) - { - OpString(line, "text", name); - break; - } - } - fclose(file); - - pl->SetName(j, name); - } - - if ( m_phase == PHASE_WRITE || - m_phase == PHASE_WRITEs ) - { - GetResource(RES_TEXT, RT_IO_NEW, name); - pl->SetName(j, name); - j ++; - } - - pl->SetSelect(j-1); - pl->ShowSelect(false); // shows the selected columns -} - -// Updates the buttons according to the selected part in the list. - -void CMainDialog::IOUpdateList() -{ - FILE* file = NULL; - CWindow* pw; - CList* pl; - CButton* pb; - CImage* pi; - char filename[100]; - int sel, max; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_IOLIST); - if ( pl == 0 ) return; - pi = (CImage*)pw->SearchControl(EVENT_INTERFACE_IOIMAGE); - if ( pi == 0 ) return; - - sel = pl->RetSelect(); - max = pl->RetTotal(); - - sprintf(filename, "%s\\%s\\save%c%.3d\\screen.bmp", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); - - if ( m_phase == PHASE_WRITE || - m_phase == PHASE_WRITEs ) - { - if ( sel < max-1 ) - { - pi->SetFilenameImage(filename); - } - else - { - pi->SetFilenameImage(""); - } - - pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_IODELETE); - if ( pb != 0 ) - { - pb->SetState(STATE_ENABLE, sel < max-1); - } - } - else - { - pi->SetFilenameImage(filename); - } -} - -// Deletes the selected scene. - -void CMainDialog::IODeleteScene() -{ - CWindow* pw; - CList* pl; - char dir[100]; - char old[100]; - long hFile; - struct _finddata_t fBuffer; - int sel, max, i; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_IOLIST); - if ( pl == 0 ) return; - - sel = pl->RetSelect(); - if ( sel == -1 ) - { - m_sound->Play(SOUND_TZOING); - return; - } - - // Deletes all the contents of the file. - sprintf(dir, "%s\\%s\\save%c%.3d\\*", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); - hFile = _findfirst(dir, &fBuffer); - if ( hFile != -1 ) - { - do - { - if ( fBuffer.name[0] != '.' ) - { - sprintf(dir, "%s\\%s\\save%c%.3d\\%s", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel, fBuffer.name); - remove(dir); - } - } - while ( _findnext(hFile, &fBuffer) == 0 ); - } - - sprintf(dir, "%s\\%s\\save%c%.3d", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); - if ( _rmdir(dir) != 0 ) - { - m_sound->Play(SOUND_TZOING); - return; - } - - max = pl->RetTotal(); - for ( i=sel+1 ; iRetGamerName(), m_sceneName[0], i); - sprintf(dir, "%s\\%s\\save%c%.3d", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], i-1); - rename(old, dir); - } - IOReadList(); -} - -// Writes the scene. - -bool CMainDialog::IOWriteScene() -{ - CWindow* pw; - CList* pl; - CEdit* pe; - char filename[100]; - char filecbot[100]; - char info[100]; - int sel; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return false; - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_IOLIST); - if ( pl == 0 ) return false; - pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_IONAME); - if ( pe == 0 ) return false; - - sel = pl->RetSelect(); - if ( sel == -1 ) return false; - - _mkdir("Savegame"); // if doesn't exist yet! - sprintf(filename, "%s\\%s", m_savegameDir, m_main->RetGamerName()); - _mkdir(filename); - sprintf(filename, "%s\\%s\\save%c%.3d", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); - _mkdir(filename); - - sprintf(filename, "%s\\%s\\save%c%.3d\\data.sav", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); - sprintf(filecbot, "%s\\%s\\save%c%.3d\\cbot.run", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); - pe->GetText(info, 100); - m_main->IOWriteScene(filename, filecbot, info); - - m_shotDelay = 3; - sprintf(m_shotName, "%s\\%s\\save%c%.3d\\screen.bmp", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); - - return true; -} - -// Reads the scene. - -bool CMainDialog::IOReadScene() -{ - FILE* file; - CWindow* pw; - CList* pl; - char filename[100]; - char filecbot[100]; - char line[500]; - char dir[100]; - int sel, i; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return false; - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_IOLIST); - if ( pl == 0 ) return false; - - sel = pl->RetSelect(); - if ( sel == -1 ) return false; - - sprintf(filename, "%s\\%s\\save%c%.3d\\data.sav", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); - sprintf(filecbot, "%s\\%s\\save%c%.3d\\cbot.run", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); - - file = fopen(filename, "r"); - if ( file == NULL ) return false; - - while ( fgets(line, 500, file) != NULL ) - { - for ( i=0 ; i<500 ; i++ ) - { - if ( line[i] == '\t' ) line[i] = ' '; // replaces tab by space - if ( line[i] == '/' && line[i+1] == '/' ) - { - line[i] = 0; - break; - } - } - - if ( Cmd(line, "Mission") ) - { - OpString(line, "base", m_sceneName); - m_sceneRank = OpInt(line, "rank", 0); - - if ( strcmp(m_sceneName, "user") == 0 ) - { - m_sceneRank = m_sceneRank%100; - OpString(line, "dir", dir); - for ( i=0 ; iRetShowAll() ) return 9; - - for ( j=0 ; j<9 ; j++ ) - { - if ( !RetGamerInfoPassed((j+1)*100) ) - { - return j; - } - } - return 9; -} - -// Updates the lists according to the cheat code. - -void CMainDialog::AllMissionUpdate() -{ - if ( m_phase == PHASE_TRAINER || - m_phase == PHASE_DEFI || - m_phase == PHASE_MISSION || - m_phase == PHASE_FREE || - m_phase == PHASE_TEEN || - m_phase == PHASE_USER || - m_phase == PHASE_PROTO ) - { - UpdateSceneChap(m_chap[m_index]); - UpdateSceneList(m_chap[m_index], m_sel[m_index]); - } -} - -// Updates the chapters of exercises or missions. - -void CMainDialog::UpdateSceneChap(int &chap) -{ - FILE* file = NULL; - CWindow* pw; - CList* pl; - long hFile; - struct _finddata_t fileBuffer; - char filename[_MAX_FNAME]; - char op[100]; - char line[500]; - char name[100]; - int i, j; - bool bPassed, bDo; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_CHAP); - if ( pl == 0 ) return; - - pl->Flush(); - - if ( m_phase == PHASE_USER ) - { - j = 0; - hFile = _findfirst("user\\*", &fileBuffer); - if ( hFile != -1 ) - { - do - { - if ( (fileBuffer.attrib & _A_SUBDIR) != 0 && - fileBuffer.name[0] != '.' ) - { - strcpy(m_userList[j++], fileBuffer.name); - } - } - while ( _findnext(hFile, &fileBuffer) == 0 && j < 100 ); - } - m_userTotal = j; - - do // sorts all names: - { - bDo = false; - for ( i=0 ; i 0 ) - { - strcpy(name, m_userList[i]); - strcpy(m_userList[i], m_userList[i+1]); - strcpy(m_userList[i+1], name); - bDo = true; - } - } - } - while ( bDo ); - - for ( j=0 ; jSetName(j, name); - pl->SetEnable(j, true); - } - } - else - { - for ( j=0 ; j<9 ; j++ ) - { -#if _SCHOOL - if ( m_phase == PHASE_MISSION ) break; - if ( m_phase == PHASE_FREE ) break; -#if _CEEBOTDEMO - if ( m_phase == PHASE_TRAINER && j >= 2 ) break; -#endif -#endif -#if _DEMO - if ( m_phase == PHASE_MISSION && j >= 4 ) break; - if ( m_phase == PHASE_TRAINER && j >= 1 ) break; -#endif - BuildSceneName(filename, m_sceneName, (j+1)*100); - file = fopen(filename, "r"); - if ( file == NULL ) break; - - BuildResumeName(name, m_sceneName, j+1); // default name - while ( fgets(line, 500, file) != NULL ) - { - for ( i=0 ; i<500 ; i++ ) - { - if ( line[i] == '\t' ) line[i] = ' '; // replaces tab by space - if ( line[i] == '/' && line[i+1] == '/' ) - { - line[i] = 0; - break; - } - } - - sprintf(op, "Title.%c", RetLanguageLetter()); - if ( Cmd(line, op) ) - { - OpString(line, "text", name); - break; - } - } - fclose(file); - - bPassed = RetGamerInfoPassed((j+1)*100); - sprintf(line, "%d: %s", j+1, name); - pl->SetName(j, line); - pl->SetCheck(j, bPassed); - pl->SetEnable(j, true); - - if ( m_phase == PHASE_MISSION && !m_main->RetShowAll() && !bPassed ) - { - j ++; - break; - } - -#if _TEEN - if ( m_phase == PHASE_TRAINER && !m_main->RetShowAll() && !bPassed ) - { - j ++; - break; - } -#endif - - if ( m_phase == PHASE_FREE && j == m_accessChap ) - { - j ++; - break; - } - } - } - - if ( chap > j-1 ) chap = j-1; - - pl->SetSelect(chap); - pl->ShowSelect(false); // shows the selected columns -} - -// Updates the list of exercises or missions. - -void CMainDialog::UpdateSceneList(int chap, int &sel) -{ - FILE* file = NULL; - CWindow* pw; - CList* pl; - char filename[_MAX_FNAME]; - char op[100]; - char line[500]; - char name[100]; - int i, j; - bool bPassed; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pl = (CList*)pw->SearchControl(EVENT_INTERFACE_LIST); - if ( pl == 0 ) return; - - pl->Flush(); - - for ( j=0 ; j<99 ; j++ ) - { -#if _SCHOOL - if ( m_phase == PHASE_MISSION ) break; - if ( m_phase == PHASE_FREE ) break; -#if _CEEBOTDEMO -#if _TEEN - if ( m_phase == PHASE_TRAINER && j >= 5 ) break; -#else - if ( m_phase == PHASE_TRAINER && j >= 3 ) break; -#endif -#endif -#endif -#if _DEMO - if ( m_phase == PHASE_MISSION && j >= 3 ) break; - if ( m_phase == PHASE_TRAINER && j >= 5 ) break; -#endif - BuildSceneName(filename, m_sceneName, (chap+1)*100+(j+1)); - file = fopen(filename, "r"); - if ( file == NULL ) break; - - BuildResumeName(name, m_sceneName, j+1); // default name - while ( fgets(line, 500, file) != NULL ) - { - for ( i=0 ; i<500 ; i++ ) - { - if ( line[i] == '\t' ) line[i] = ' '; // replaces tab by space - if ( line[i] == '/' && line[i+1] == '/' ) - { - line[i] = 0; - break; - } - } - - sprintf(op, "Title.%c", RetLanguageLetter()); - if ( Cmd(line, op) ) - { - OpString(line, "text", name); - break; - } - } - fclose(file); - - bPassed = RetGamerInfoPassed((chap+1)*100+(j+1)); - sprintf(line, "%d: %s", j+1, name); - pl->SetName(j, line); - pl->SetCheck(j, bPassed); - pl->SetEnable(j, true); - - if ( m_phase == PHASE_MISSION && !m_main->RetShowAll() && !bPassed ) - { - j ++; - break; - } - -#if _TEEN - if ( m_phase == PHASE_TRAINER && !m_main->RetShowAll() && !bPassed ) - { - j ++; - break; - } -#endif - } - - BuildSceneName(filename, m_sceneName, (chap+1)*100+(j+1)); - file = fopen(filename, "r"); - if ( file == NULL ) - { - m_maxList = j; - } - else - { - m_maxList = j+1; // this is not the last! - fclose(file); - } - - if ( sel > j-1 ) sel = j-1; - - pl->SetSelect(sel); - pl->ShowSelect(false); // shows the selected columns -} - -// Updates the button "solution" according to cheat code. - -void CMainDialog::ShowSoluceUpdate() -{ - CWindow* pw; - CEdit* pe; - CCheck* pc; - - if ( m_phase == PHASE_TRAINER || - m_phase == PHASE_DEFI || - m_phase == PHASE_MISSION || - m_phase == PHASE_FREE || - m_phase == PHASE_TEEN || - m_phase == PHASE_USER || - m_phase == PHASE_PROTO ) - { - m_bSceneSoluce = false; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_RESUME); - if ( pe == 0 ) return; - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_SOLUCE); - if ( pc == 0 ) return; - - if ( m_main->RetShowSoluce() ) - { - pc->SetState(STATE_VISIBLE); - pc->SetState(STATE_CHECK); - m_bSceneSoluce = true; - } - else - { - pc->ClearState(STATE_VISIBLE); - pc->ClearState(STATE_CHECK); - m_bSceneSoluce = false; - } - } -} - -// Updates a summary of exercise or mission. - -void CMainDialog::UpdateSceneResume(int rank) -{ - FILE* file = NULL; - CWindow* pw; - CEdit* pe; - CCheck* pc; - char filename[_MAX_FNAME]; - char op[100]; - char line[500]; - char name[500]; - int i, numTry; - bool bPassed, bVisible; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_RESUME); - if ( pe == 0 ) return; - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_SOLUCE); - - if ( pc == 0 ) - { - m_bSceneSoluce = false; - } - else - { - numTry = RetGamerInfoTry(rank); - bPassed = RetGamerInfoPassed(rank); - bVisible = ( numTry > 2 || bPassed || m_main->RetShowSoluce() ); - if ( !RetSoluce4() ) bVisible = false; - pc->SetState(STATE_VISIBLE, bVisible); - if ( !bVisible ) - { - pc->ClearState(STATE_CHECK); - m_bSceneSoluce = false; - } - } - - BuildSceneName(filename, m_sceneName, rank); - file = fopen(filename, "r"); - if ( file == NULL ) return; - - name[0] = 0; - while ( fgets(line, 500, file) != NULL ) - { - for ( i=0 ; i<500 ; i++ ) - { - if ( line[i] == '\t' ) line[i] = ' '; // replaces tab by space - if ( line[i] == '/' && line[i+1] == '/' ) - { - line[i] = 0; - break; - } - } - - sprintf(op, "Resume.%c", RetLanguageLetter()); - if ( Cmd(line, op) ) - { - OpString(line, "text", name); - break; - } - } - fclose(file); - - pe->SetText(name); -} - -// Updates the list of devices. - -void CMainDialog::UpdateDisplayDevice() -{ - CWindow* pw; - CList* pl; - char bufDevices[1000]; - char bufModes[5000]; - int i, j, totalDevices, selectDevices, totalModes, selectModes; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pl = (CList*)pw->SearchControl(EVENT_LIST1); - if ( pl == 0 ) return; - pl->Flush(); - - m_engine->EnumDevices(bufDevices, 1000, - bufModes, 5000, - totalDevices, selectDevices, - totalModes, selectModes); - - i = 0; - j = 0; - while ( bufDevices[i] != 0 ) - { - pl->SetName(j++, bufDevices+i); - while ( bufDevices[i++] != 0 ); - } - - pl->SetSelect(selectDevices); - pl->ShowSelect(false); - - m_setupSelDevice = selectDevices; -} - -// Updates the list of modes. - -void CMainDialog::UpdateDisplayMode() -{ - CWindow* pw; - CList* pl; - char bufDevices[1000]; - char bufModes[5000]; - int i, j, totalDevices, selectDevices, totalModes, selectModes; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - pl = (CList*)pw->SearchControl(EVENT_LIST2); - if ( pl == 0 ) return; - pl->Flush(); - - m_engine->EnumDevices(bufDevices, 1000, - bufModes, 5000, - totalDevices, selectDevices, - totalModes, selectModes); - - i = 0; - j = 0; - while ( bufModes[i] != 0 ) - { - pl->SetName(j++, bufModes+i); - while ( bufModes[i++] != 0 ); - } - - pl->SetSelect(selectModes); - pl->ShowSelect(false); - - m_setupSelMode = selectModes; -} - -// Change the graphics mode. - -void CMainDialog::ChangeDisplay() -{ - CWindow* pw; - CList* pl; - CCheck* pc; - char* device; - char* mode; - bool bFull; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - - pl = (CList*)pw->SearchControl(EVENT_LIST1); - if ( pl == 0 ) return; - m_setupSelDevice = pl->RetSelect(); - device = pl->RetName(m_setupSelDevice); - - pl = (CList*)pw->SearchControl(EVENT_LIST2); - if ( pl == 0 ) return; - m_setupSelMode = pl->RetSelect(); - mode = pl->RetName(m_setupSelMode); - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_FULL); - if ( pc == 0 ) return; - bFull = pc->TestState(STATE_CHECK); - m_setupFull = bFull; - - m_engine->ChangeDevice(device, mode, bFull); - - if ( m_bSimulSetup ) - { - m_main->ChangeColor(); - m_main->UpdateMap(); - } -} - - - -// Updates the "apply" button. - -void CMainDialog::UpdateApply() -{ - CWindow* pw; - CButton* pb; - CList* pl; - CCheck* pc; - int sel1, sel2; - bool bFull; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - - pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_APPLY); - if ( pb == 0 ) return; - - pl = (CList*)pw->SearchControl(EVENT_LIST1); - if ( pl == 0 ) return; - sel1 = pl->RetSelect(); - - pl = (CList*)pw->SearchControl(EVENT_LIST2); - if ( pl == 0 ) return; - sel2 = pl->RetSelect(); - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_FULL); - bFull = pc->TestState(STATE_CHECK); - - if ( sel1 == m_setupSelDevice && - sel2 == m_setupSelMode && - bFull == m_setupFull ) - { - pb->ClearState(STATE_ENABLE); - } - else - { - pb->SetState(STATE_ENABLE); - } -} - -// Updates the buttons during the setup phase. - -void CMainDialog::UpdateSetupButtons() -{ - CWindow* pw; - CCheck* pc; - CEditValue* pv; - CSlider* ps; - float value; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_TOTO); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_engine->RetTotoMode()); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_TOOLTIP); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_bTooltip); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_GLINT); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_bGlint); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_RAIN); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_bRain); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_MOUSE); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_engine->RetNiceMouse()); - pc->SetState(STATE_ENABLE, m_engine->RetNiceMouseCap()); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_EDITMODE); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_engine->RetEditIndentMode()); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_EDITVALUE); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_engine->RetEditIndentValue()>2); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_SOLUCE4); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_bSoluce4); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_MOVIES); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_bMovies); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_NICERST); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_bNiceReset); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_HIMSELF); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_bHimselfDamage); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_SCROLL); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_bCameraScroll); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_INVERTX); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_bCameraInvertX); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_INVERTY); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_bCameraInvertY); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_EFFECT); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_bEffect); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_SHADOW); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_engine->RetShadow()); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_GROUND); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_engine->RetGroundSpot()); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_DIRTY); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_engine->RetDirty()); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_FOG); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_engine->RetFog()); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_LENS); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_engine->RetLensMode()); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_SKY); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_engine->RetSkyMode()); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_PLANET); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_engine->RetPlanetMode()); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_LIGHT); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_engine->RetLightMode()); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_JOYSTICK); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_engine->RetJoystick()); - } - - pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_PARTI); - if ( pv != 0 ) - { - value = m_engine->RetParticuleDensity(); - pv->SetValue(value); - } - - pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_CLIP); - if ( pv != 0 ) - { - value = m_engine->RetClippingDistance(); - pv->SetValue(value); - } - - pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_DETAIL); - if ( pv != 0 ) - { - value = m_engine->RetObjectDetail(); - pv->SetValue(value); - } - - pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_GADGET); - if ( pv != 0 ) - { - value = m_engine->RetGadgetQuantity(); - pv->SetValue(value); - } - - pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_TEXTURE); - if ( pv != 0 ) - { - value = (float)m_engine->RetTextureQuality(); - pv->SetValue(value); - } - - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_VOLSOUND); - if ( ps != 0 ) - { - value = (float)m_sound->RetAudioVolume(); - ps->SetVisibleValue(value); - } - - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_VOLMUSIC); - if ( ps != 0 ) - { - value = (float)m_sound->RetMidiVolume(); - ps->SetVisibleValue(value); - } - - pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_SOUND3D); - if ( pc != 0 ) - { - pc->SetState(STATE_CHECK, m_sound->RetSound3D()); - pc->SetState(STATE_ENABLE, m_sound->RetSound3DCap()); - } -} - -// Updates the engine function of the buttons after the setup phase. - -void CMainDialog::ChangeSetupButtons() -{ - CWindow* pw; - CEditValue* pv; - CSlider* ps; - float value; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - - pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_PARTI); - if ( pv != 0 ) - { - value = pv->RetValue(); - m_engine->SetParticuleDensity(value); - } - - pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_CLIP); - if ( pv != 0 ) - { - value = pv->RetValue(); - m_engine->SetClippingDistance(value); - } - - pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_DETAIL); - if ( pv != 0 ) - { - value = pv->RetValue(); - m_engine->SetObjectDetail(value); - } - - pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_GADGET); - if ( pv != 0 ) - { - value = pv->RetValue(); - m_engine->SetGadgetQuantity(value); - } - - pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_TEXTURE); - if ( pv != 0 ) - { - value = pv->RetValue(); - m_engine->SetTextureQuality((int)value); - } - - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_VOLSOUND); - if ( ps != 0 ) - { - value = ps->RetVisibleValue(); - m_sound->SetAudioVolume((int)value); - } - - ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_VOLMUSIC); - if ( ps != 0 ) - { - value = ps->RetVisibleValue(); - m_sound->SetMidiVolume((int)value); - } -} - - -// Memorizes all the settings. - -void CMainDialog::SetupMemorize() -{ - float fValue; - int iValue, i, j; - char key[500]; - char num[10]; - - SetProfileString("Directory", "scene", m_sceneDir); - SetProfileString("Directory", "savegame", m_savegameDir); - SetProfileString("Directory", "public", m_publicDir); - SetProfileString("Directory", "user", m_userDir); - SetProfileString("Directory", "files", m_filesDir); - - iValue = m_engine->RetTotoMode(); - SetProfileInt("Setup", "TotoMode", iValue); - - iValue = m_bTooltip; - SetProfileInt("Setup", "Tooltips", iValue); - - iValue = m_bGlint; - SetProfileInt("Setup", "InterfaceGlint", iValue); - - iValue = m_bRain; - SetProfileInt("Setup", "InterfaceGlint", iValue); - - iValue = m_engine->RetNiceMouse(); - SetProfileInt("Setup", "NiceMouse", iValue); - - iValue = m_bSoluce4; - SetProfileInt("Setup", "Soluce4", iValue); - - iValue = m_bMovies; - SetProfileInt("Setup", "Movies", iValue); - - iValue = m_bNiceReset; - SetProfileInt("Setup", "NiceReset", iValue); - - iValue = m_bHimselfDamage; - SetProfileInt("Setup", "HimselfDamage", iValue); - - iValue = m_bCameraScroll; - SetProfileInt("Setup", "CameraScroll", iValue); - - iValue = m_bCameraInvertX; - SetProfileInt("Setup", "CameraInvertX", iValue); - - iValue = m_bEffect; - SetProfileInt("Setup", "InterfaceEffect", iValue); - - iValue = m_engine->RetShadow(); - SetProfileInt("Setup", "GroundShadow", iValue); - - iValue = m_engine->RetGroundSpot(); - SetProfileInt("Setup", "GroundSpot", iValue); - - iValue = m_engine->RetDirty(); - SetProfileInt("Setup", "ObjectDirty", iValue); - - iValue = m_engine->RetFog(); - SetProfileInt("Setup", "FogMode", iValue); - - iValue = m_engine->RetLensMode(); - SetProfileInt("Setup", "LensMode", iValue); - - iValue = m_engine->RetSkyMode(); - SetProfileInt("Setup", "SkyMode", iValue); - - iValue = m_engine->RetPlanetMode(); - SetProfileInt("Setup", "PlanetMode", iValue); - - iValue = m_engine->RetLightMode(); - SetProfileInt("Setup", "LightMode", iValue); - - iValue = m_engine->RetJoystick(); - SetProfileInt("Setup", "UseJoystick", iValue); - - fValue = m_engine->RetParticuleDensity(); - SetProfileFloat("Setup", "ParticuleDensity", fValue); - - fValue = m_engine->RetClippingDistance(); - SetProfileFloat("Setup", "ClippingDistance", fValue); - - fValue = m_engine->RetObjectDetail(); - SetProfileFloat("Setup", "ObjectDetail", fValue); - - fValue = m_engine->RetGadgetQuantity(); - SetProfileFloat("Setup", "GadgetQuantity", fValue); - - iValue = m_engine->RetTextureQuality(); - SetProfileInt("Setup", "TextureQuality", iValue); - - iValue = m_sound->RetAudioVolume(); - SetProfileInt("Setup", "AudioVolume", iValue); - - iValue = m_sound->RetMidiVolume(); - SetProfileInt("Setup", "MidiVolume", iValue); - - iValue = m_sound->RetSound3D(); - SetProfileInt("Setup", "Sound3D", iValue); - - iValue = m_engine->RetEditIndentMode(); - SetProfileInt("Setup", "EditIndentMode", iValue); - - iValue = m_engine->RetEditIndentValue(); - SetProfileInt("Setup", "EditIndentValue", iValue); - - key[0] = 0; - for ( i=0 ; i<100 ; i++ ) - { - if ( m_engine->RetKey(i, 0) == 0 ) break; - - for ( j=0 ; j<2 ; j++ ) - { - iValue = m_engine->RetKey(i, j); - sprintf(num, "%d%c", iValue, j==0?'+':' '); - strcat(key, num); - } - } - SetProfileString("Setup", "KeyMap", key); - -#if _NET - if ( m_accessEnable ) - { - iValue = m_accessMission; - SetProfileInt("Setup", "AccessMission", iValue); - - iValue = m_accessUser; - SetProfileInt("Setup", "AccessUser", iValue); - } -#endif - - iValue = m_bDeleteGamer; - SetProfileInt("Setup", "DeleteGamer", iValue); - - m_engine->WriteProfile(); -} - -// Remember all the settings. - -void CMainDialog::SetupRecall() -{ - float fValue; - int iValue, i, j; - char key[500]; - char* p; - - if ( GetProfileString("Directory", "scene", key, _MAX_FNAME) ) - { - strcpy(m_sceneDir, key); - } - - if ( GetProfileString("Directory", "savegame", key, _MAX_FNAME) ) - { - strcpy(m_savegameDir, key); - } - - if ( GetProfileString("Directory", "public", key, _MAX_FNAME) ) - { - strcpy(m_publicDir, key); - } - - if ( GetProfileString("Directory", "user", key, _MAX_FNAME) ) - { - strcpy(m_userDir, key); - } - - if ( GetProfileString("Directory", "files", key, _MAX_FNAME) ) - { - strcpy(m_filesDir, key); - } - - - if ( GetProfileInt("Setup", "TotoMode", iValue) ) - { - m_engine->SetTotoMode(iValue); - } - - if ( GetProfileInt("Setup", "Tooltips", iValue) ) - { - m_bTooltip = iValue; - } - - if ( GetProfileInt("Setup", "InterfaceGlint", iValue) ) - { - m_bGlint = iValue; - } - - if ( GetProfileInt("Setup", "InterfaceGlint", iValue) ) - { - m_bRain = iValue; - } - - if ( GetProfileInt("Setup", "NiceMouse", iValue) ) - { - m_engine->SetNiceMouse(iValue); - } - - if ( GetProfileInt("Setup", "Soluce4", iValue) ) - { - m_bSoluce4 = iValue; - } - - if ( GetProfileInt("Setup", "Movies", iValue) ) - { - m_bMovies = iValue; - } - - if ( GetProfileInt("Setup", "NiceReset", iValue) ) - { - m_bNiceReset = iValue; - } - - if ( GetProfileInt("Setup", "HimselfDamage", iValue) ) - { - m_bHimselfDamage = iValue; - } - - if ( GetProfileInt("Setup", "CameraScroll", iValue) ) - { - m_bCameraScroll = iValue; - m_camera->SetCameraScroll(m_bCameraScroll); - } - - if ( GetProfileInt("Setup", "CameraInvertX", iValue) ) - { - m_bCameraInvertX = iValue; - m_camera->SetCameraInvertX(m_bCameraInvertX); - } - - if ( GetProfileInt("Setup", "CameraInvertY", iValue) ) - { - m_bCameraInvertY = iValue; - m_camera->SetCameraInvertY(m_bCameraInvertY); - } - - if ( GetProfileInt("Setup", "InterfaceEffect", iValue) ) - { - m_bEffect = iValue; - } - - if ( GetProfileInt("Setup", "GroundShadow", iValue) ) - { - m_engine->SetShadow(iValue); - } - - if ( GetProfileInt("Setup", "GroundSpot", iValue) ) - { - m_engine->SetGroundSpot(iValue); - } - - if ( GetProfileInt("Setup", "ObjectDirty", iValue) ) - { - m_engine->SetDirty(iValue); - } - - if ( GetProfileInt("Setup", "FogMode", iValue) ) - { - m_engine->SetFog(iValue); - m_camera->SetOverBaseColor(RetColor(RetColor(0.0f))); - } - - if ( GetProfileInt("Setup", "LensMode", iValue) ) - { - m_engine->SetLensMode(iValue); - } - - if ( GetProfileInt("Setup", "SkyMode", iValue) ) - { - m_engine->SetSkyMode(iValue); - } - - if ( GetProfileInt("Setup", "PlanetMode", iValue) ) - { - m_engine->SetPlanetMode(iValue); - } - - if ( GetProfileInt("Setup", "LightMode", iValue) ) - { - m_engine->SetLightMode(iValue); - } - - if ( GetProfileInt("Setup", "UseJoystick", iValue) ) - { - m_engine->SetJoystick(iValue); - } - - if ( GetProfileFloat("Setup", "ParticuleDensity", fValue) ) - { - m_engine->SetParticuleDensity(fValue); - } - - if ( GetProfileFloat("Setup", "ClippingDistance", fValue) ) - { - m_engine->SetClippingDistance(fValue); - } - - if ( GetProfileFloat("Setup", "ObjectDetail", fValue) ) - { - m_engine->SetObjectDetail(fValue); - } - - if ( GetProfileFloat("Setup", "GadgetQuantity", fValue) ) - { - m_engine->SetGadgetQuantity(fValue); - } - - if ( GetProfileInt("Setup", "TextureQuality", iValue) ) - { - m_engine->SetTextureQuality(iValue); - } - - if ( GetProfileInt("Setup", "AudioVolume", iValue) ) - { - m_sound->SetAudioVolume(iValue); - } - - if ( GetProfileInt("Setup", "MidiVolume", iValue) ) - { - m_sound->SetMidiVolume(iValue); - } - - if ( GetProfileInt("Setup", "EditIndentMode", iValue) ) - { - m_engine->SetEditIndentMode(iValue); - } - - if ( GetProfileInt("Setup", "EditIndentValue", iValue) ) - { - m_engine->SetEditIndentValue(iValue); - } - - if ( GetProfileString("Setup", "KeyMap", key, 500) ) - { - p = key; - for ( i=0 ; i<100 ; i++ ) - { - if ( p[0] == 0 ) break; - - for ( j=0 ; j<2 ; j++ ) - { - sscanf(p, "%d", &iValue); - m_engine->SetKey(i, j, iValue); - while ( *p >= '0' && *p <= '9' ) p++; - while ( *p == ' ' || *p == '+' ) p++; - } - } - } - -#if _NET - if ( m_accessEnable ) - { - if ( GetProfileInt("Setup", "AccessMission", iValue) ) - { - m_accessMission = iValue; - } - - if ( GetProfileInt("Setup", "AccessUser", iValue) ) - { - m_accessUser = iValue; - } - } -#endif - - if ( GetProfileInt("Setup", "DeleteGamer", iValue) ) - { - m_bDeleteGamer = iValue; - } -} - - -// Changes the general level of quality. - -void CMainDialog::ChangeSetupQuality(int quality) -{ - bool bEnable; - float value; - int iValue; - - bEnable = (quality >= 0); - m_engine->SetShadow(bEnable); - m_engine->SetGroundSpot(bEnable); - m_engine->SetDirty(bEnable); - m_engine->SetFog(bEnable); - m_engine->SetLensMode(bEnable); - m_engine->SetSkyMode(bEnable); - m_engine->SetPlanetMode(bEnable); - m_engine->SetLightMode(bEnable); - m_camera->SetOverBaseColor(RetColor(RetColor(0.0f))); - - if ( quality < 0 ) value = 0.0f; - if ( quality == 0 ) value = 1.0f; - if ( quality > 0 ) value = 2.0f; - m_engine->SetParticuleDensity(value); - - if ( quality < 0 ) value = 0.5f; - if ( quality == 0 ) value = 1.0f; - if ( quality > 0 ) value = 2.0f; - m_engine->SetClippingDistance(value); - - if ( quality < 0 ) value = 0.0f; - if ( quality == 0 ) value = 1.0f; - if ( quality > 0 ) value = 2.0f; - m_engine->SetObjectDetail(value); - - if ( quality < 0 ) value = 0.5f; - if ( quality == 0 ) value = 1.0f; - if ( quality > 0 ) value = 1.0f; - m_engine->SetGadgetQuantity(value); - - if ( quality < 0 ) iValue = 0; - if ( quality == 0 ) iValue = 1; - if ( quality > 0 ) iValue = 2; - m_engine->SetTextureQuality(iValue); - - m_engine->FirstExecuteAdapt(false); -} - - -// Redefinable keys: - -static int key_table[KEY_TOTAL] = -{ -#if _SCHOOL & _TEEN - KEYRANK_LEFT, - KEYRANK_RIGHT, - KEYRANK_UP, - KEYRANK_DOWN, - KEYRANK_CAMERA, - KEYRANK_NEAR, - KEYRANK_AWAY, - KEYRANK_HELP, - KEYRANK_PROG, - KEYRANK_SPEED10, - KEYRANK_SPEED15, - KEYRANK_SPEED20, - KEYRANK_QUIT, -#else - KEYRANK_LEFT, - KEYRANK_RIGHT, - KEYRANK_UP, - KEYRANK_DOWN, - KEYRANK_GUP, - KEYRANK_GDOWN, - KEYRANK_ACTION, - KEYRANK_CAMERA, - KEYRANK_VISIT, - KEYRANK_NEXT, - KEYRANK_HUMAN, - KEYRANK_DESEL, - KEYRANK_NEAR, - KEYRANK_AWAY, - KEYRANK_HELP, - KEYRANK_PROG, - KEYRANK_CBOT, - KEYRANK_SPEED10, - KEYRANK_SPEED15, - KEYRANK_SPEED20, - KEYRANK_QUIT, -#endif -}; - -static EventMsg key_event[KEY_TOTAL] = -{ -#if _SCHOOL & _TEEN - EVENT_INTERFACE_KLEFT, - EVENT_INTERFACE_KRIGHT, - EVENT_INTERFACE_KUP, - EVENT_INTERFACE_KDOWN, - EVENT_INTERFACE_KCAMERA, - EVENT_INTERFACE_KNEAR, - EVENT_INTERFACE_KAWAY, - EVENT_INTERFACE_KHELP, - EVENT_INTERFACE_KPROG, - EVENT_INTERFACE_KSPEED10, - EVENT_INTERFACE_KSPEED15, - EVENT_INTERFACE_KSPEED20, - EVENT_INTERFACE_KQUIT, -#else - EVENT_INTERFACE_KLEFT, - EVENT_INTERFACE_KRIGHT, - EVENT_INTERFACE_KUP, - EVENT_INTERFACE_KDOWN, - EVENT_INTERFACE_KGUP, - EVENT_INTERFACE_KGDOWN, - EVENT_INTERFACE_KACTION, - EVENT_INTERFACE_KCAMERA, - EVENT_INTERFACE_KVISIT, - EVENT_INTERFACE_KNEXT, - EVENT_INTERFACE_KHUMAN, - EVENT_INTERFACE_KDESEL, - EVENT_INTERFACE_KNEAR, - EVENT_INTERFACE_KAWAY, - EVENT_INTERFACE_KHELP, - EVENT_INTERFACE_KPROG, - EVENT_INTERFACE_KCBOT, - EVENT_INTERFACE_KSPEED10, - EVENT_INTERFACE_KSPEED15, - EVENT_INTERFACE_KSPEED20, - EVENT_INTERFACE_KQUIT, -#endif -}; - -// Updates the list of keys. - -void CMainDialog::UpdateKey() -{ - CWindow* pw; - CScroll* ps; - CKey* pk; - Math::Point pos, dim; - int first, i; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - - ps = (CScroll*)pw->SearchControl(EVENT_INTERFACE_KSCROLL); - if ( ps == 0 ) return; - - first = (int)(ps->RetVisibleValue()*(KEY_TOTAL-KEY_VISIBLE)); - - for ( i=0 ; iDeleteControl(key_event[i]); - } - - dim.x = 400.0f/640.0f; - dim.y = 20.0f/480.0f; - pos.x = 110.0f/640.0f; - pos.y = 168.0f/480.0f + dim.y*(KEY_VISIBLE-1); - for ( i=0 ; iCreateKey(pos, dim, -1, key_event[first+i]); - pk = (CKey*)pw->SearchControl(key_event[first+i]); - if ( pk == 0 ) break; - pk->SetKey(0, m_engine->RetKey(key_table[first+i], 0)); - pk->SetKey(1, m_engine->RetKey(key_table[first+i], 1)); - pos.y -= dim.y; - } -} - -// Change a key. - -void CMainDialog::ChangeKey(EventMsg event) -{ - CWindow* pw; - CScroll* ps; - CKey* pk; - int i; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw == 0 ) return; - - ps = (CScroll*)pw->SearchControl(EVENT_INTERFACE_KSCROLL); - if ( ps == 0 ) return; - - for ( i=0 ; iSearchControl(key_event[i]); - if ( pk == 0 ) break; - m_engine->SetKey(key_table[i], 0, pk->RetKey(0)); - m_engine->SetKey(key_table[i], 1, pk->RetKey(1)); - } - } -} - - - -// Do you want to quit the current mission? - -void CMainDialog::StartAbort() -{ - CWindow* pw; - CButton* pb; - Math::Point pos, dim; - char name[100]; - - StartDialog(Math::Point(0.3f, 0.8f), true, false, false); - m_bDialogDelete = false; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW9); - if ( pw == 0 ) return; - - pos.x = 0.35f; - pos.y = 0.60f; - dim.x = 0.30f; - dim.y = 0.30f; - pw->CreateGroup(pos, dim, 5, EVENT_INTERFACE_GLINTl); // orange corner - pos.x = 0.35f; - pos.y = 0.10f; - dim.x = 0.30f; - dim.y = 0.30f; - pw->CreateGroup(pos, dim, 4, EVENT_INTERFACE_GLINTr); // blue corner - - pos.x = 0.40f; - dim.x = 0.20f; -#if _POLISH - pos.x -= 7.0f/640.0f; - dim.x += 14.0f/640.0f; -#endif - dim.y = 32.0f/480.0f; - - pos.y = 0.74f; - pb = pw->CreateButton(pos, dim, -1, EVENT_DIALOG_CANCEL); - pb->SetState(STATE_SHADOW); - GetResource(RES_TEXT, RT_DIALOG_NO, name); - pb->SetName(name); - - if ( m_index == 2 || // missions ? - m_index == 3 || // free games? - m_index == 4 ) // user ? - { - pos.y = 0.62f; - pb = pw->CreateButton(pos, dim, -1, EVENT_INTERFACE_WRITE); - pb->SetState(STATE_SHADOW); - if ( m_main->IsBusy() ) // current task? - { - pb->ClearState(STATE_ENABLE); - } - - pos.y = 0.53f; - pb = pw->CreateButton(pos, dim, -1, EVENT_INTERFACE_READ); - pb->SetState(STATE_SHADOW); - if ( !IsIOReadScene() ) // no file to read? - { - pb->ClearState(STATE_ENABLE); - } - pb->SetState(STATE_WARNING); - } - - if ( m_engine->RetSetupMode() ) - { - pos.y = 0.39f; - pb = pw->CreateButton(pos, dim, -1, EVENT_INTERFACE_SETUP); - pb->SetState(STATE_SHADOW); - } - - pos.y = 0.25f; - pb = pw->CreateButton(pos, dim, -1, EVENT_INTERFACE_AGAIN); - pb->SetState(STATE_SHADOW); - pb->SetState(STATE_WARNING); - - pos.y = 0.16f; - pb = pw->CreateButton(pos, dim, -1, EVENT_DIALOG_OK); - pb->SetState(STATE_SHADOW); - pb->SetState(STATE_WARNING); - GetResource(RES_TEXT, RT_DIALOG_YES, name); - pb->SetName(name); -} - -// Do you want to destroy the building? - -void CMainDialog::StartDeleteObject() -{ - CWindow* pw; - CButton* pb; - Math::Point pos, dim; - char name[100]; - - StartDialog(Math::Point(0.7f, 0.3f), false, true, true); - m_bDialogDelete = true; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW9); - if ( pw == 0 ) return; - - pos.x = 0.00f; - pos.y = 0.50f; - dim.x = 1.00f; - dim.y = 0.05f; - GetResource(RES_TEXT, RT_DIALOG_DELOBJ, name); - pw->CreateLabel(pos, dim, -1, EVENT_DIALOG_LABEL, name); - - pb = (CButton*)pw->SearchControl(EVENT_DIALOG_OK); - if ( pb == 0 ) return; - GetResource(RES_TEXT, RT_DIALOG_YESDEL, name); - pb->SetName(name); - pb->SetState(STATE_WARNING); - - pb = (CButton*)pw->SearchControl(EVENT_DIALOG_CANCEL); - if ( pb == 0 ) return; - GetResource(RES_TEXT, RT_DIALOG_NODEL, name); - pb->SetName(name); -} - -// Do you want to delete the player? - -void CMainDialog::StartDeleteGame(char *gamer) -{ - CWindow* pw; - CButton* pb; - Math::Point pos, dim; - char name[100]; - char text[100]; - - StartDialog(Math::Point(0.7f, 0.3f), false, true, true); - m_bDialogDelete = true; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW9); - if ( pw == 0 ) return; - - pos.x = 0.00f; - pos.y = 0.50f; - dim.x = 1.00f; - dim.y = 0.05f; - GetResource(RES_TEXT, RT_DIALOG_DELGAME, name); - sprintf(text, name, gamer); - pw->CreateLabel(pos, dim, -1, EVENT_DIALOG_LABEL, text); - - pb = (CButton*)pw->SearchControl(EVENT_DIALOG_OK); - if ( pb == 0 ) return; - GetResource(RES_TEXT, RT_DIALOG_YESDEL, name); - pb->SetName(name); - pb->SetState(STATE_WARNING); - - pb = (CButton*)pw->SearchControl(EVENT_DIALOG_CANCEL); - if ( pb == 0 ) return; - GetResource(RES_TEXT, RT_DIALOG_NODEL, name); - pb->SetName(name); -} - -// Would you quit the game? - -void CMainDialog::StartQuit() -{ - CWindow* pw; - CButton* pb; - Math::Point pos, dim; - char name[100]; - - StartDialog(Math::Point(0.6f, 0.3f), false, true, true); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW9); - if ( pw == 0 ) return; - - pos.x = 0.00f; - pos.y = 0.50f; - dim.x = 1.00f; - dim.y = 0.05f; - GetResource(RES_TEXT, RT_DIALOG_QUIT, name); - pw->CreateLabel(pos, dim, -1, EVENT_DIALOG_LABEL, name); - - pb = (CButton*)pw->SearchControl(EVENT_DIALOG_OK); - if ( pb == 0 ) return; - GetResource(RES_TEXT, RT_DIALOG_YESQUIT, name); - pb->SetName(name); - pb->SetState(STATE_WARNING); - - pb = (CButton*)pw->SearchControl(EVENT_DIALOG_CANCEL); - if ( pb == 0 ) return; - GetResource(RES_TEXT, RT_DIALOG_NOQUIT, name); - pb->SetName(name); -} - -// Beginning of displaying a dialog. - -void CMainDialog::StartDialog(Math::Point dim, bool bFire, bool bOK, bool bCancel) -{ - CWindow* pw; - CButton* pb; - Math::Point pos, ddim; - char name[100]; - - StartSuspend(); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW0); - if ( pw != 0 ) pw->ClearState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW1); - if ( pw != 0 ) pw->ClearState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW2); - if ( pw != 0 ) pw->ClearState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW3); - if ( pw != 0 ) pw->ClearState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW4); - if ( pw != 0 ) pw->ClearState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw != 0 ) pw->ClearState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW6); - if ( pw != 0 ) pw->ClearState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW7); - if ( pw != 0 ) pw->ClearState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW8); - if ( pw != 0 ) pw->ClearState(STATE_ENABLE); - - pb = (CButton*)m_interface->SearchControl(EVENT_BUTTON_QUIT); - if ( pb != 0 ) - { - pb->ClearState(STATE_VISIBLE); - } - - m_bDialogFire = bFire; - - pos.x = (1.0f-dim.x)/2.0f; - pos.y = (1.0f-dim.y)/2.0f; - pw = m_interface->CreateWindows(pos, dim, bFire?12:8, EVENT_WINDOW9); - pw->SetState(STATE_SHADOW); - GetResource(RES_TEXT, RT_TITLE_BASE, name); - pw->SetName(name); - - m_dialogPos = pos; - m_dialogDim = dim; - m_dialogTime = 0.0f; - m_dialogParti = 999.0f; - - if ( bOK ) - { - pos.x = 0.50f-0.15f-0.02f; - pos.y = 0.50f-dim.y/2.0f+0.03f; - ddim.x = 0.15f; - ddim.y = 0.06f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_DIALOG_OK); - pb->SetState(STATE_SHADOW); - GetResource(RES_EVENT, EVENT_DIALOG_OK, name); - pb->SetName(name); - } - - if ( bCancel ) - { - pos.x = 0.50f+0.02f; - pos.y = 0.50f-dim.y/2.0f+0.03f; - ddim.x = 0.15f; - ddim.y = 0.06f; - pb = pw->CreateButton(pos, ddim, -1, EVENT_DIALOG_CANCEL); - pb->SetState(STATE_SHADOW); - GetResource(RES_EVENT, EVENT_DIALOG_CANCEL, name); - pb->SetName(name); - } - - m_sound->Play(SOUND_TZOING); - m_bDialog = true; -} - -// Animation of a dialog. - -void CMainDialog::FrameDialog(float rTime) -{ - CWindow* pw; - Math::Vector pos, speed; - Math::Point dim, dpos, ddim; - float zoom; - int i; - - dpos = m_dialogPos; - ddim = m_dialogDim; - - m_dialogTime += rTime; - if ( m_dialogTime < 1.0f ) - { - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW9); - if ( pw != 0 ) - { - if ( m_dialogTime < 0.50f ) - { - zoom = Math::Bounce(m_dialogTime/0.50f); - } - else - { - zoom = 1.0f; - } - - dpos.x += ddim.x/2.0f; - dpos.y += ddim.y/2.0f; - - ddim.x *= zoom; -//? ddim.y *= zoom; - - dpos.x -= ddim.x/2.0f; - dpos.y -= ddim.y/2.0f; - - pw->SetPos(dpos); - pw->SetDim(ddim); - } - } - - if ( !m_bGlint ) return; - - m_dialogParti += rTime; - if ( m_dialogParti < m_engine->ParticuleAdapt(0.05f) ) return; - m_dialogParti = 0.0f; - - if ( !m_bDialogFire ) return; - - dpos = m_dialogPos; - ddim = m_dialogDim; - - pos.z = 0.0f; - speed = Math::Vector(0.0f, 0.0f, 0.0f); - - for ( i=0 ; i<2 ; i++ ) - { - // Bottom. - pos.x = dpos.x + ddim.x*Math::Rand(); - pos.y = dpos.y; - pos.x += (Math::Rand()-0.5f)*(6.0f/640.0f); - pos.y += Math::Rand()*(16.0f/480.0f)-(10.0f/480.0f); - dim.x = 0.01f+Math::Rand()*0.01f; - dim.y = dim.x/0.75f; - m_particule->CreateParticule(pos, speed, dim, - (ParticuleType)(PARTILENS1+rand()%3), - 1.0f, 0.0f, 0.0f, SH_INTERFACE); - - // Top. - pos.x = dpos.x + ddim.x*Math::Rand(); - pos.y = dpos.y + ddim.y; - pos.x += (Math::Rand()-0.5f)*(6.0f/640.0f); - pos.y -= Math::Rand()*(16.0f/480.0f)-(10.0f/480.0f); - dim.x = 0.01f+Math::Rand()*0.01f; - dim.y = dim.x/0.75f; - m_particule->CreateParticule(pos, speed, dim, - (ParticuleType)(PARTILENS1+rand()%3), - 1.0f, 0.0f, 0.0f, SH_INTERFACE); - - // Left. - pos.y = dpos.y + ddim.y*Math::Rand(); - pos.x = dpos.x; - pos.x += Math::Rand()*(16.0f/640.0f)-(10.0f/640.0f); - pos.y += (Math::Rand()-0.5f)*(6.0f/480.0f); - dim.x = 0.01f+Math::Rand()*0.01f; - dim.y = dim.x/0.75f; - m_particule->CreateParticule(pos, speed, dim, - (ParticuleType)(PARTILENS1+rand()%3), - 1.0f, 0.0f, 0.0f, SH_INTERFACE); - - // Right. - pos.y = dpos.y + ddim.y*Math::Rand(); - pos.x = dpos.x + ddim.x; - pos.x -= Math::Rand()*(16.0f/640.0f)-(10.0f/640.0f); - pos.y += (Math::Rand()-0.5f)*(6.0f/480.0f); - dim.x = 0.01f+Math::Rand()*0.01f; - dim.y = dim.x/0.75f; - m_particule->CreateParticule(pos, speed, dim, - (ParticuleType)(PARTILENS1+rand()%3), - 1.0f, 0.0f, 0.0f, SH_INTERFACE); - } -} - -// End of the display of a dialogue. - -void CMainDialog::StopDialog() -{ - CWindow* pw; - CButton* pb; - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW0); - if ( pw != 0 ) pw->SetState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW1); - if ( pw != 0 ) pw->SetState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW2); - if ( pw != 0 ) pw->SetState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW3); - if ( pw != 0 ) pw->SetState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW4); - if ( pw != 0 ) pw->SetState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); - if ( pw != 0 ) pw->SetState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW6); - if ( pw != 0 ) pw->SetState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW7); - if ( pw != 0 ) pw->SetState(STATE_ENABLE); - - pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW8); - if ( pw != 0 ) pw->SetState(STATE_ENABLE); - - pb = (CButton*)m_interface->SearchControl(EVENT_BUTTON_QUIT); - if ( pb != 0 ) - { - pb->SetState(STATE_VISIBLE); - } - - StopSuspend(); - m_interface->DeleteControl(EVENT_WINDOW9); - m_bDialog = false; -} - -// Suspends the simulation for a dialog phase. - -void CMainDialog::StartSuspend() -{ - m_sound->MuteAll(true); - m_main->ClearInterface(); - m_bInitPause = m_engine->RetPause(); - m_engine->SetPause(true); - m_engine->SetOverFront(false); // over flat behind - m_main->CreateShortcuts(); - m_main->StartSuspend(); - m_initCamera = m_camera->RetType(); - m_camera->SetType(CAMERA_DIALOG); -} - -// Resume the simulation after a period of dialog. - -void CMainDialog::StopSuspend() -{ - m_sound->MuteAll(false); - m_main->ClearInterface(); - if ( !m_bInitPause ) m_engine->SetPause(false); - m_engine->SetOverFront(true); // over flat front - m_main->CreateShortcuts(); - m_main->StopSuspend(); - m_camera->SetType(m_initCamera); -} - - -// Whether to use tooltips. - -bool CMainDialog::RetTooltip() -{ - return m_bTooltip; -} - -// Specifies whether a dialog is displayed. - -bool CMainDialog::IsDialog() -{ - return m_bDialog; -} - - - - -// Specifies the name of the scene to read. - -void CMainDialog::SetSceneRead(char* name) -{ - strcpy(m_sceneRead, name); -} - -// Returns the name of the scene to read. - -char* CMainDialog::RetSceneRead() -{ - return m_sceneRead; -} - -// Specifies the name of the scene to read. - -void CMainDialog::SetStackRead(char* name) -{ - strcpy(m_stackRead, name); -} - -// Returns the name of the scene to read. - -char* CMainDialog::RetStackRead() -{ - return m_stackRead; -} - -// Specifies the name of the chosen to play scene. - -void CMainDialog::SetSceneName(char* name) -{ - strcpy(m_sceneName, name); -} - -// Returns the name of the chosen to play scene. - -char* CMainDialog::RetSceneName() -{ - return m_sceneName; -} - -// Specifies the rank of the chosen to play scene. - -void CMainDialog::SetSceneRank(int rank) -{ - m_sceneRank = rank; -} - -// Returns the rank of the chosen to play scene. - -int CMainDialog::RetSceneRank() -{ - return m_sceneRank; -} - -// Returns folder name of the scene that user selected to play. - -char* CMainDialog::RetSceneDir() -{ - int i; - - i = (m_sceneRank/100)-1; - - if ( i < 0 || i >= m_userTotal ) return 0; - return m_userList[i]; -} - -// Whether to show the solution. - -bool CMainDialog::RetSceneSoluce() -{ - return m_bSceneSoluce; -} - -// Returns the name of the folder to save. - -char* CMainDialog::RetSavegameDir() -{ - return m_savegameDir; -} - -// Returns the name of public folder. - -char* CMainDialog::RetPublicDir() -{ - return m_publicDir; -} - - -// Indicates if there are reflections on the buttons. - -bool CMainDialog::RetGlint() -{ - return m_bGlint; -} - -// Whether to show 4:solutions. - -bool CMainDialog::RetSoluce4() -{ - return m_bSoluce4; -} - -// Whether to show the cinematics. - -bool CMainDialog::RetMovies() -{ - return m_bMovies; -} - -// IWhether to make an animation in CTaskReset. - -bool CMainDialog::RetNiceReset() -{ - return m_bNiceReset; -} - -// Indicates whether the fire causes damage to its own units. - -bool CMainDialog::RetHimselfDamage() -{ - return m_bHimselfDamage; -} - - - -// Saves the personalized player. - -void CMainDialog::WriteGamerPerso(char *gamer) -{ - FILE* file; - char filename[100]; - char line[100]; - - sprintf(filename, "%s\\%s\\face.gam", m_savegameDir, gamer); - file = fopen(filename, "w"); - if ( file == NULL ) return; - - sprintf(line, "Head face=%d glasses=%d hair=%.2f;%.2f;%.2f;%.2f\n", - m_perso.face, m_perso.glasses, - m_perso.colorHair.r, m_perso.colorHair.g, m_perso.colorHair.b, m_perso.colorHair.a); - fputs(line, file); - - sprintf(line, "Body combi=%.2f;%.2f;%.2f;%.2f band=%.2f;%.2f;%.2f;%.2f\n", - m_perso.colorCombi.r, m_perso.colorCombi.g, m_perso.colorCombi.b, m_perso.colorCombi.a, - m_perso.colorBand.r, m_perso.colorBand.g, m_perso.colorBand.b, m_perso.colorBand.a); - fputs(line, file); - - fclose(file); -} - -// Reads the personalized player. - -void CMainDialog::ReadGamerPerso(char *gamer) -{ - FILE* file; - char filename[100]; - char line[100]; - D3DCOLORVALUE color; - - m_perso.face = 0; - DefPerso(); - - sprintf(filename, "%s\\%s\\face.gam", m_savegameDir, gamer); - file = fopen(filename, "r"); - if ( file == NULL ) return; - - while ( fgets(line, 100, file) != NULL ) - { - if ( Cmd(line, "Head") ) - { - m_perso.face = OpInt(line, "face", 0); - m_perso.glasses = OpInt(line, "glasses", 0); - - color.r = 0.0f; - color.g = 0.0f; - color.b = 0.0f; - color.a = 0.0f; - m_perso.colorHair = OpColorValue(line, "hair", color); - } - - if ( Cmd(line, "Body") ) - { - color.r = 0.0f; - color.g = 0.0f; - color.b = 0.0f; - color.a = 0.0f; - m_perso.colorCombi = OpColorValue(line, "combi", color); - - color.r = 0.0f; - color.g = 0.0f; - color.b = 0.0f; - color.a = 0.0f; - m_perso.colorBand = OpColorValue(line, "band", color); - } - } - - fclose(file); -} - -// Specifies the face of the player. - -void CMainDialog::SetGamerFace(char *gamer, int face) -{ - m_perso.face = face; - WriteGamerPerso(gamer); -} - -// Gives the face of the player. - -int CMainDialog::RetGamerFace(char *gamer) -{ - ReadGamerPerso(gamer); - return m_perso.face; -} - -// Gives the face of the player. - -int CMainDialog::RetGamerFace() -{ - return m_perso.face; -} - -int CMainDialog::RetGamerGlasses() -{ - return m_perso.glasses; -} - -bool CMainDialog::RetGamerOnlyHead() -{ - return (m_phase == PHASE_PERSO && m_persoTab == 0); -} - -float CMainDialog::RetPersoAngle() -{ - return m_persoAngle; -} - -D3DCOLORVALUE CMainDialog::RetGamerColorHair() -{ - return m_perso.colorHair; -} - -D3DCOLORVALUE CMainDialog::RetGamerColorCombi() -{ - return m_perso.colorCombi; -} - -D3DCOLORVALUE CMainDialog::RetGamerColorBand() -{ - return m_perso.colorBand; -} - - -// Reads the file of the player. - -bool CMainDialog::ReadGamerInfo() -{ - FILE* file; - char line[100]; - int chap, i, numTry, passed; - - for ( i=0 ; iRetGamerName(), m_sceneName); - file = fopen(line, "r"); - if ( file == NULL ) return false; - - if ( fgets(line, 100, file) != NULL ) - { - sscanf(line, "CurrentChapter=%d CurrentSel=%d\n", &chap, &i); - m_chap[m_index] = chap-1; - m_sel[m_index] = i-1; - } - - while ( fgets(line, 100, file) != NULL ) - { - sscanf(line, "Chapter %d: Scene %d: numTry=%d passed=%d\n", - &chap, &i, &numTry, &passed); - - i += chap*100; - if ( i >= 0 && i < MAXSCENE ) - { - m_sceneInfo[i].numTry = numTry; - m_sceneInfo[i].bPassed = passed; - } - } - - fclose(file); - return true; -} - -// Writes the file of the player. - -bool CMainDialog::WriteGamerInfo() -{ - FILE* file; - char line[100]; - int i; - - sprintf(line, "%s\\%s\\%s.gam", m_savegameDir, m_main->RetGamerName(), m_sceneName); - file = fopen(line, "w"); - if ( file == NULL ) return false; - - sprintf(line, "CurrentChapter=%d CurrentSel=%d\n", - m_chap[m_index]+1, m_sel[m_index]+1); - fputs(line, file); - - for ( i=0 ; i= MAXSCENE ) return; - if ( numTry > 100 ) numTry = 100; - m_sceneInfo[rank].numTry = numTry; -} - -int CMainDialog::RetGamerInfoTry(int rank) -{ - if ( rank < 0 || rank >= MAXSCENE ) return 0; - return m_sceneInfo[rank].numTry; -} - -void CMainDialog::SetGamerInfoPassed(int rank, bool bPassed) -{ - int chap, i; - bool bAll; - - if ( rank < 0 || rank >= MAXSCENE ) return; - m_sceneInfo[rank].bPassed = bPassed; - - if ( bPassed ) - { - bAll = true; - chap = rank/100; - for ( i=0 ; i= MAXSCENE ) return false; - return m_sceneInfo[rank].bPassed; -} - - -// Passes to the next mission, and possibly in the next chapter. - -bool CMainDialog::NextMission() -{ - m_sel[m_index] ++; // next mission - - if ( m_sel[m_index] >= m_maxList ) // last mission of the chapter? - { - m_chap[m_index] ++; // next chapter - m_sel[m_index] = 0; // first mission - } - - return true; -} - - +// * This file is part of the COLOBOT source code +// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch +// * +// * This program is free software: you can redistribute it and/or modify +// * it under the terms of the GNU General Public License as published by +// * the Free Software Foundation, either version 3 of the License, or +// * (at your option) any later version. +// * +// * This program is distributed in the hope that it will be useful, +// * but WITHOUT ANY WARRANTY; without even the implied warranty of +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// * GNU General Public License for more details. +// * +// * You should have received a copy of the GNU General Public License +// * along with this program. If not, see http://www.gnu.org/licenses/. + +// maindialog.cpp + + +#include +#include +#include +#include +#include +#include + +#include "common/struct.h" +#include "old/d3dengine.h" +#include "old/d3dmath.h" +#include "common/global.h" +#include "common/language.h" +#include "common/event.h" +#include "common/misc.h" +#include "common/profile.h" +#include "common/iman.h" +#include "common/restext.h" +#include "old/math3d.h" +#include "old/particule.h" +#include "ui/interface.h" +#include "ui/button.h" +#include "ui/color.h" +#include "ui/check.h" +#include "ui/key.h" +#include "ui/group.h" +#include "ui/image.h" +#include "ui/scroll.h" +#include "ui/slider.h" +#include "ui/list.h" +#include "ui/label.h" +#include "ui/window.h" +#include "ui/edit.h" +#include "ui/editvalue.h" +#include "old/text.h" +#include "old/camera.h" +#include "old/sound.h" +#include "script/cmdtoken.h" +#include "object/robotmain.h" +#include "ui/maindialog.h" + + + +const int KEY_VISIBLE = 6; // number of visible keys redefinable + +#if _SCHOOL & _TEEN +const int KEY_TOTAL = 13; // total number of keys redefinable +#else +const int KEY_TOTAL = 21; // total number of keys redefinable +#endif + +const int WELCOME_LENGTH = 6.0f; + + + +static int perso_color[3*10*3] = +{ + // hair: + 193, 221, 226, // white + 255, 255, 181, // yellow + 204, 155, 84, // blond + 165, 48, 10, // red + 140, 75, 84, // brown + 83, 64, 51, // brown + 90, 95, 85, // black + 85, 48, 9, // brown + 60, 0, 23, // black + 0, 0, 0, // + // spacesuit: + 203, 206, 204, // dirty white + 0, 205, 203, // bluish + 108, 176, 0, // greenish + 207, 207, 32, // yellow + 170, 141, 0, // orange + 108, 84, 0, // brown + 0, 84, 136, // bluish + 56, 61, 146, // bluish + 56, 56, 56, // black + 0, 0, 0, // + // strips: + 255, 255, 255, // white + 255, 255, 0, // yellow + 255, 132, 1, // orange + 255, 0, 255, // magenta + 255, 0, 0, // red + 0, 255, 0, // green + 0, 255, 255, // cyan + 0, 0, 255, // blue + 70, 51, 84, // dark + 0, 0, 0, // +}; + + +#if _NET +// Check if the key "school" is present in the registry. + +bool SchoolCheck() +{ + HKEY key; + char buffer[100]; + LONG i; + DWORD type, len; + + i = RegOpenKeyEx(HKEY_LOCAL_MACHINE, +#if _NEWLOOK + "Software\\Epsitec\\CeeBot\\Setup", +#else + "Software\\Epsitec\\Colobot\\Setup", +#endif + 0, KEY_READ, &key); + if ( i != ERROR_SUCCESS ) return false; + + type = REG_SZ; + len = sizeof(buffer); + i = RegQueryValueEx(key, "School", NULL, &type, (LPBYTE)buffer, &len); + if ( i != ERROR_SUCCESS || type != REG_SZ ) return false; + + if ( strcmp(buffer, "ToBoLoC") != 0 ) return false; + + return true; +} +#endif + + +// Constructor of robot application. + +CMainDialog::CMainDialog(CInstanceManager* iMan) +{ + int i; + + m_iMan = iMan; + m_iMan->AddInstance(CLASS_DIALOG, this); + + m_main = (CRobotMain*)m_iMan->SearchInstance(CLASS_MAIN); + m_interface = (CInterface*)m_iMan->SearchInstance(CLASS_INTERFACE); + m_event = (CEvent*)m_iMan->SearchInstance(CLASS_EVENT); + m_engine = (CD3DEngine*)m_iMan->SearchInstance(CLASS_ENGINE); + m_particule = (CParticule*)m_iMan->SearchInstance(CLASS_PARTICULE); + m_camera = (CCamera*)m_iMan->SearchInstance(CLASS_CAMERA); + m_sound = (CSound*)m_iMan->SearchInstance(CLASS_SOUND); + + m_phase = PHASE_NAME; + m_phaseSetup = PHASE_SETUPg; + m_phaseTerm = PHASE_TRAINER; + m_sceneRead[0] = 0; + m_stackRead[0] = 0; + m_sceneName[0] = 0; + m_sceneRank = 0; + m_bSceneSoluce = false; + m_bSimulSetup = false; +#if _NET + m_accessEnable = SchoolCheck(); + m_accessMission= false; + m_accessUser = false; +#else + m_accessEnable = true; + m_accessMission= true; + m_accessUser = true; +#endif + m_bDeleteGamer = true; + + for ( i=0 ; i<10 ; i++ ) + { + m_chap[i] = 0; + m_sel[i] = 0; + } + m_index = 0; + m_maxList = 0; + + ZeroMemory(&m_perso, sizeof(GamerPerso)); + DefPerso(); + + m_bTooltip = true; + m_bGlint = true; + m_bRain = true; + m_bSoluce4 = true; + m_bMovies = true; + m_bNiceReset = true; + m_bHimselfDamage = true; +#if _TEEN + m_bCameraScroll = false; +#else + m_bCameraScroll = true; +#endif + m_bCameraInvertX = false; + m_bCameraInvertY = false; + m_bEffect = true; + m_shotDelay = 0; + + m_glintMouse = Math::Point(0.0f, 0.0f); + m_glintTime = 1000.0f; + + for ( i=0 ; i<10 ; i++ ) + { + m_partiPhase[i] = 0; + m_partiTime[i] = 0.0f; + } + + strcpy(m_sceneDir, "scene"); + strcpy(m_savegameDir, "savegame"); + strcpy(m_publicDir, "program"); + strcpy(m_userDir, "user"); + strcpy(m_filesDir, "files"); + + m_bDialog = false; +} + +// Destructor of robot application. + +CMainDialog::~CMainDialog() +{ +} + + +// Changes phase. + +void CMainDialog::ChangePhase(Phase phase) +{ + CWindow* pw; + CEdit* pe; + CEditValue* pv; + CLabel* pl; + CList* pli; + CCheck* pc; + CScroll* ps; + CSlider* psl; + CButton* pb; + CColor* pco; + CGroup* pg; + CImage* pi; + Math::Point pos, dim, ddim; + float ox, oy, sx, sy; + char name[100]; + char* gamer; + int res, i, j; + + m_camera->SetType(CAMERA_DIALOG); + m_engine->SetOverFront(false); + m_engine->SetOverColor(RetColor(0.0f), D3DSTATETCb); + + if ( phase == PHASE_TERM ) + { + phase = m_phaseTerm; + } + m_phase = phase; // copy the info to CRobotMain + m_phaseTime = 0.0f; + + dim.x = 32.0f/640.0f; + dim.y = 32.0f/480.0f; + ox = 3.0f/640.0f; + oy = 3.0f/480.0f; + sx = (32.0f+2.0f)/640.0f; + sy = (32.0f+2.0f)/480.0f; + + if ( m_phase == PHASE_INIT ) + { + pos.x = 0.35f; + pos.y = 0.10f; + ddim.x = 0.30f; + ddim.y = 0.80f; +#if _TEEN + pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5); +#else + pw = m_interface->CreateWindows(pos, ddim, 10, EVENT_WINDOW5); +#endif + GetResource(RES_TEXT, RT_TITLE_INIT, name); + pw->SetName(name); + + pos.x = 0.35f; + pos.y = 0.60f; + ddim.x = 0.30f; + ddim.y = 0.30f; + pw->CreateGroup(pos, ddim, 5, EVENT_INTERFACE_GLINTl); // orange corner + pos.x = 0.35f; + pos.y = 0.10f; + ddim.x = 0.30f; + ddim.y = 0.30f; + pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner + +#if _SCHOOL + ddim.x = 0.20f; + ddim.y = dim.y*2.4f; + pos.x = 0.40f; + pos.y = oy+sy*7.9f; + pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // orange + pg->SetState(STATE_SHADOW); + pos.y = oy+sy*3.9f; + pg = pw->CreateGroup(pos, ddim, 25, EVENT_LABEL1); // orange + pg->SetState(STATE_SHADOW); + ddim.y = dim.y*1.2f; + pos.y = oy+sy*1.9f; + pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // red + pg->SetState(STATE_SHADOW); +#else + ddim.x = 0.20f; + ddim.y = dim.y*2.4f; + pos.x = 0.40f; + if ( m_accessEnable && m_accessMission ) + { + pos.y = oy+sy*9.1f; + pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // yellow + pg->SetState(STATE_SHADOW); + } + pos.y = oy+sy*6.8f; + pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // orange + pg->SetState(STATE_SHADOW); + pos.y = oy+sy*3.9f; + pg = pw->CreateGroup(pos, ddim, 25, EVENT_LABEL1); // orange + pg->SetState(STATE_SHADOW); + ddim.y = dim.y*1.2f; + pos.y = oy+sy*1.9f; + pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // red + pg->SetState(STATE_SHADOW); +#endif + +#if _SCHOOL + ddim.x = 0.18f; + ddim.y = dim.y*1; + pos.x = 0.41f; + pos.y = oy+sy*9.1f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_TRAINER); + pb->SetState(STATE_SHADOW); + + pos.y = oy+sy*8.0f; +#if _TEEN + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_TEEN); +#else + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_DEFI); +#endif +#if _CEEBOTDEMO + pb->ClearState(STATE_ENABLE); +#endif + pb->SetState(STATE_SHADOW); +#else + ddim.x = 0.18f; + ddim.y = dim.y*1; + pos.x = 0.41f; + + if ( m_accessEnable && m_accessMission ) + { + pos.y = oy+sy*10.3f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_MISSION); + pb->SetState(STATE_SHADOW); + + pos.y = oy+sy*9.2f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_FREE); + pb->SetState(STATE_SHADOW); + } + + pos.y = oy+sy*8.0f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_TRAINER); + pb->SetState(STATE_SHADOW); + + pos.y = oy+sy*6.9f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_DEFI); + pb->SetState(STATE_SHADOW); +#endif + + if ( m_engine->RetSetupMode() ) + { + pos.y = oy+sy*5.1f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_SETUP); + pb->SetState(STATE_SHADOW); + } + + pos.y = oy+sy*4.0f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_NAME); + pb->SetState(STATE_SHADOW); + + pos.y = oy+sy*2.0f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_QUIT); + pb->SetState(STATE_SHADOW); + +#if !_DEMO & !_SCHOOL + if ( m_accessEnable && m_accessUser ) + { + pos.x = 447.0f/640.0f; + pos.y = 313.0f/480.0f; + ddim.x = 0.09f; +#if _POLISH + pos.x -= 5.0f/640.0f; + ddim.x += 10.0f/640.0f; +#endif + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_USER); + pb->SetState(STATE_SHADOW); + } +#endif + + if ( m_engine->RetDebugMode() ) + { + pos.x = 139.0f/640.0f; + pos.y = 313.0f/480.0f; + ddim.x = 0.09f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PROTO); + pb->SetState(STATE_SHADOW); + } + + pos.x = 0.40f; + ddim.x = 0.20f; + pos.y = 26.0f/480.0f; + ddim.y = 12.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 1, EVENT_LABEL1); + pg->SetState(STATE_SHADOW); + pos.y -= 5.0f/480.0f; +#if _WG + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, " "); +#else +#if _NEWLOOK + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, "www.epsitec.ch"); +#else + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, "www.ceebot.com"); +#endif +#endif + pl->SetFontType(FONT_COURIER); + pl->SetFontSize(8.0f); + + m_engine->SetBackground("inter01.tga", 0,0, 0,0, true, true); + m_engine->SetBackForce(true); + } + + if ( m_phase == PHASE_NAME ) + { + pos.x = 0.10f; + pos.y = 0.10f; + ddim.x = 0.80f; + ddim.y = 0.80f; + pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5); + GetResource(RES_TEXT, RT_TITLE_NAME, name); + pw->SetName(name); + +#if _NEWLOOK + pos.x = 80.0f/640.0f; + pos.y = 93.0f/480.0f; + ddim.x = 285.0f/640.0f; + ddim.y = 266.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue + pg->SetState(STATE_SHADOW); + pos.x = 372.0f/640.0f; + ddim.x = 188.0f/640.0f; + pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet + pg->SetState(STATE_SHADOW); +#endif + + pos.x = 0.10f; + pos.y = 0.40f; + ddim.x = 0.50f; + ddim.y = 0.50f; + pw->CreateGroup(pos, ddim, 5, EVENT_INTERFACE_GLINTl); // orange corner + pos.x = 0.40f; + pos.y = 0.10f; + ddim.x = 0.50f; + ddim.y = 0.50f; + pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner + + pos.x = 60.0f/640.0f; + pos.y = 313.0f/480.0f; + ddim.x = 120.0f/640.0f; + ddim.y = 32.0f/480.0f; + GetResource(RES_EVENT, EVENT_INTERFACE_NLABEL, name); + pl = pw->CreateLabel(pos, ddim, -1, EVENT_INTERFACE_NLABEL, name); + pl->SetJustif(-1); + + pos.x = 200.0f/640.0f; + pos.y = 320.0f/480.0f; + ddim.x = 160.0f/640.0f; + ddim.y = 32.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 7, EVENT_LABEL1); + pg->SetState(STATE_SHADOW); + + pos.x = 207.0f/640.0f; + pos.y = 328.0f/480.0f; + ddim.x = 144.0f/640.0f; + ddim.y = 18.0f/480.0f; + pe = pw->CreateEdit(pos, ddim, 0, EVENT_INTERFACE_NEDIT); + pe->SetMaxChar(15); + gamer = m_main->RetGamerName(); + if ( gamer[0] == 0 ) + { + GetResource(RES_TEXT, RT_NAME_DEFAULT, name); + } + else + { + strcpy(name, gamer); + } + pe->SetText(name); + pe->SetCursor(strlen(name), 0); + pe->SetFocus(true); + + pos.x = 380.0f/640.0f; + pos.y = 320.0f/480.0f; + ddim.x =100.0f/640.0f; + ddim.y = 32.0f/480.0f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_NOK); + pb->SetState(STATE_SHADOW); + +#if !_TEEN + pos.x = 380.0f/640.0f; + pos.y = 250.0f/480.0f; + ddim.x =100.0f/640.0f; + ddim.y = 52.0f/480.0f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PERSO); + pb->SetState(STATE_SHADOW); +#endif + + pos.x = 200.0f/640.0f; + pos.y = 150.0f/480.0f; + ddim.x = 160.0f/640.0f; + ddim.y = 160.0f/480.0f; + pli = pw->CreateList(pos, ddim, 0, EVENT_INTERFACE_NLIST); + pli->SetState(STATE_SHADOW); + + if ( m_bDeleteGamer ) + { + pos.x = 200.0f/640.0f; + pos.y = 100.0f/480.0f; + ddim.x = 160.0f/640.0f; + ddim.y = 32.0f/480.0f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_NDELETE); + pb->SetState(STATE_SHADOW); + } + + pos.x = 380.0f/640.0f; + pos.y = 100.0f/480.0f; + ddim.x =100.0f/640.0f; + ddim.y = 32.0f/480.0f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_NCANCEL); + pb->SetState(STATE_SHADOW); + + ReadNameList(); + UpdateNameList(); + UpdateNameControl(); + UpdateNameFace(); + + m_engine->SetBackground("inter01.tga", 0,0, 0,0, true, true); + m_engine->SetBackForce(true); + } + + if ( m_phase == PHASE_PERSO ) + { + pos.x = 0.10f; + pos.y = 0.10f; + ddim.x = 0.80f; + ddim.y = 0.80f; + pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5); + GetResource(RES_TEXT, RT_TITLE_PERSO, name); + pw->SetName(name); + +#if _NEWLOOK + pos.x = 95.0f/640.0f; + pos.y = 66.0f/480.0f; + ddim.x = 443.0f/640.0f; + ddim.y = 42.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet + pg->SetState(STATE_SHADOW); +#endif + + pos.x = 0.10f; + pos.y = 0.40f; + ddim.x = 0.50f; + ddim.y = 0.50f; + pw->CreateGroup(pos, ddim, 5, EVENT_INTERFACE_GLINTl); // orange corner + pos.x = 0.40f; + pos.y = 0.10f; + ddim.x = 0.50f; + ddim.y = 0.50f; + pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner + + pos.x = 95.0f/640.0f; + pos.y = 108.0f/480.0f; + ddim.x = 220.0f/640.0f; + ddim.y = 274.0f/480.0f; + pw->CreateGroup(pos, ddim, 17, EVENT_NULL); // frame + + pos.x = 100.0f/640.0f; + pos.y = 364.0f/480.0f; + ddim.x = 210.0f/640.0f; + ddim.y = 14.0f/480.0f; + pw->CreateGroup(pos, ddim, 3, EVENT_NULL); // transparent -> gray + + pos.x = 120.0f/640.0f; + pos.y = 364.0f/480.0f; + ddim.x = 80.0f/640.0f; + ddim.y = 28.0f/480.0f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PHEAD); + pb->SetState(STATE_SHADOW); + pb->SetState(STATE_CARD); + + pos.x = 210.0f/640.0f; + pos.y = 364.0f/480.0f; + ddim.x = 80.0f/640.0f; + ddim.y = 28.0f/480.0f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PBODY); + pb->SetState(STATE_SHADOW); + pb->SetState(STATE_CARD); + + pos.x = 100.0f/640.0f; + pos.y = 354.0f/480.0f; + ddim.x = 210.0f/640.0f; + ddim.y = 10.0f/480.0f; + pw->CreateGroup(pos, ddim, 1, EVENT_INTERFACE_GLINTb); // orange bar + pos.x = 100.0f/640.0f; + pos.y = 154.0f/480.0f; + ddim.x = 210.0f/640.0f; + ddim.y = 200.0f/480.0f; + pw->CreateGroup(pos, ddim, 2, EVENT_INTERFACE_GLINTu); // orange -> transparent + + // Face + pos.x = 340.0f/640.0f; + pos.y = 356.0f/480.0f; + ddim.x = 200.0f/640.0f; + ddim.y = 16.0f/480.0f; + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL11, ""); + pl->SetJustif(1); + + pos.x = 340.0f/640.0f; + pos.y = 312.0f/480.0f; + ddim.x = 44.0f/640.0f; + ddim.y = 44.0f/480.0f; + pb = pw->CreateButton(pos, ddim, 43, EVENT_INTERFACE_PFACE1); + pb->SetState(STATE_SHADOW); + pos.x += 50.0f/640.0f; + pb = pw->CreateButton(pos, ddim, 46, EVENT_INTERFACE_PFACE4); + pb->SetState(STATE_SHADOW); + pos.x += 50.0f/640.0f; + pb = pw->CreateButton(pos, ddim, 45, EVENT_INTERFACE_PFACE3); + pb->SetState(STATE_SHADOW); + pos.x += 50.0f/640.0f; + pb = pw->CreateButton(pos, ddim, 44, EVENT_INTERFACE_PFACE2); + pb->SetState(STATE_SHADOW); + + // Glasses + pos.x = 340.0f/640.0f; + pos.y = 270.0f/480.0f; + ddim.x = 200.0f/640.0f; + ddim.y = 16.0f/480.0f; + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL12, ""); + pl->SetJustif(1); + + pos.x = 340.0f/640.0f; + pos.y = 240.0f/480.0f; + ddim.x = 30.0f/640.0f; + ddim.y = 30.0f/480.0f; + for ( i=0 ; i<6 ; i++ ) + { + int ti[6] = {11, 179, 180, 181, 182, 183}; + pb = pw->CreateButton(pos, ddim, ti[i], (EventMsg)(EVENT_INTERFACE_PGLASS0+i)); + pb->SetState(STATE_SHADOW); + pos.x += (30.0f+2.8f)/640.0f; + } + + // Color A + pos.x = 340.0f/640.0f; + pos.y = 300.0f/480.0f; + ddim.x = 200.0f/640.0f; + ddim.y = 16.0f/480.0f; + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL14, ""); + pl->SetJustif(1); + + pos.y = 282.0f/480.0f; + ddim.x = 18.0f/640.0f; + ddim.y = 18.0f/480.0f; + for ( j=0 ; j<3 ; j++ ) + { + pos.x = 340.0f/640.0f; + for ( i=0 ; i<3 ; i++ ) + { + pco = pw->CreateColor(pos, ddim, -1, (EventMsg)(EVENT_INTERFACE_PC0a+j*3+i)); + pco->SetState(STATE_SHADOW); + pos.x += 20.0f/640.0f; + } + pos.y -= 20.0f/480.0f; + } + + pos.x = 420.0f/640.0f; + pos.y = 282.0f/480.0f; + ddim.x = 100.0f/640.0f; + ddim.y = 18.0f/480.0f; + for ( i=0 ; i<3 ; i++ ) + { + psl = pw->CreateSlider(pos, ddim, 0, (EventMsg)(EVENT_INTERFACE_PCRa+i)); + psl->SetState(STATE_SHADOW); + psl->SetLimit(0.0f, 255.0f); + psl->SetArrowStep(16.0f); + pos.y -= 20.0f/480.0f; + } + + // Color B + pos.x = 340.0f/640.0f; + pos.y = 192.0f/480.0f; + ddim.x = 200.0f/640.0f; + ddim.y = 16.0f/480.0f; + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL13, ""); + pl->SetJustif(1); + + pos.y = 174.0f/480.0f; + ddim.x = 18.0f/640.0f; + ddim.y = 18.0f/480.0f; + for ( j=0 ; j<3 ; j++ ) + { + pos.x = 340.0f/640.0f; + for ( i=0 ; i<3 ; i++ ) + { + pco = pw->CreateColor(pos, ddim, -1, (EventMsg)(EVENT_INTERFACE_PC0b+j*3+i)); + pco->SetState(STATE_SHADOW); + pos.x += 20.0f/640.0f; + } + pos.y -= 20.0f/480.0f; + } + + pos.x = 420.0f/640.0f; + pos.y = 174.0f/480.0f; + ddim.x = 100.0f/640.0f; + ddim.y = 18.0f/480.0f; + for ( i=0 ; i<3 ; i++ ) + { + psl = pw->CreateSlider(pos, ddim, 0, (EventMsg)(EVENT_INTERFACE_PCRb+i)); + psl->SetState(STATE_SHADOW); + psl->SetLimit(0.0f, 255.0f); + psl->SetArrowStep(16.0f); + pos.y -= 20.0f/480.0f; + } + + // Rotation + pos.x = 100.0f/640.0f; + pos.y = 113.0f/480.0f; + ddim.x = 20.0f/640.0f; + ddim.y = 20.0f/480.0f; + pb = pw->CreateButton(pos, ddim, 55, EVENT_INTERFACE_PLROT); // < + pb->SetState(STATE_SHADOW); + pb->SetRepeat(true); + + pos.x = 290.0f/640.0f; + pos.y = 113.0f/480.0f; + ddim.x = 20.0f/640.0f; + ddim.y = 20.0f/480.0f; + pb = pw->CreateButton(pos, ddim, 48, EVENT_INTERFACE_PRROT); // > + pb->SetState(STATE_SHADOW); + pb->SetRepeat(true); + + pos.x = 100.0f/640.0f; + pos.y = 70.0f/480.0f; + ddim.x = 100.0f/640.0f; + ddim.y = 32.0f/480.0f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_POK); + pb->SetState(STATE_SHADOW); + + pos.x = 210.0f/640.0f; + pos.y = 70.0f/480.0f; + ddim.x =100.0f/640.0f; + ddim.y = 32.0f/480.0f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PCANCEL); + pb->SetState(STATE_SHADOW); + + pos.x = 340.0f/640.0f; + pos.y = 70.0f/480.0f; + ddim.x =194.0f/640.0f; + ddim.y = 32.0f/480.0f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PDEF); + pb->SetState(STATE_SHADOW); + + m_persoCopy = m_perso; + m_persoTab = 0; + m_persoAngle = -0.6f; + UpdatePerso(); + m_main->ScenePerso(); + CameraPerso(); + } + + if ( m_phase == PHASE_TRAINER || + m_phase == PHASE_DEFI || + m_phase == PHASE_MISSION || + m_phase == PHASE_FREE || + m_phase == PHASE_TEEN || + m_phase == PHASE_USER || + m_phase == PHASE_PROTO ) + { + if ( m_phase == PHASE_TRAINER ) m_index = 0; + if ( m_phase == PHASE_DEFI ) m_index = 1; + if ( m_phase == PHASE_MISSION ) m_index = 2; + if ( m_phase == PHASE_FREE ) m_index = 3; + if ( m_phase == PHASE_USER ) m_index = 4; + if ( m_phase == PHASE_PROTO ) m_index = 5; + if ( m_phase == PHASE_TEEN ) m_index = 6; + + if ( m_phase == PHASE_FREE ) + { + strcpy(m_sceneName, "scene"); + ReadGamerInfo(); + m_accessChap = RetChapPassed(); + } + + if ( m_phase == PHASE_TRAINER ) strcpy(m_sceneName, "train"); + if ( m_phase == PHASE_DEFI ) strcpy(m_sceneName, "defi" ); + if ( m_phase == PHASE_MISSION ) strcpy(m_sceneName, "scene"); + if ( m_phase == PHASE_FREE ) strcpy(m_sceneName, "free"); + if ( m_phase == PHASE_TEEN ) strcpy(m_sceneName, "teen"); + if ( m_phase == PHASE_USER ) strcpy(m_sceneName, "user"); + if ( m_phase == PHASE_PROTO ) strcpy(m_sceneName, "proto"); + + ReadGamerInfo(); + + pos.x = 0.10f; + pos.y = 0.10f; + ddim.x = 0.80f; + ddim.y = 0.80f; + pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5); + pw->SetClosable(true); + if ( m_phase == PHASE_TRAINER ) res = RT_TITLE_TRAINER; + if ( m_phase == PHASE_DEFI ) res = RT_TITLE_DEFI; + if ( m_phase == PHASE_MISSION ) res = RT_TITLE_MISSION; + if ( m_phase == PHASE_FREE ) res = RT_TITLE_FREE; + if ( m_phase == PHASE_TEEN ) res = RT_TITLE_TEEN; + if ( m_phase == PHASE_USER ) res = RT_TITLE_USER; + if ( m_phase == PHASE_PROTO ) res = RT_TITLE_PROTO; + GetResource(RES_TEXT, res, name); + pw->SetName(name); + +#if _NEWLOOK + pos.x = 100.0f/640.0f; + pos.y = 226.0f/480.0f; + ddim.x = 216.0f/640.0f; + ddim.y = 160.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue + pg->SetState(STATE_SHADOW); + pos.x = 322.0f/640.0f; + pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // cyan + pg->SetState(STATE_SHADOW); + + pos.x = 100.0f/640.0f; + pos.y = 122.0f/480.0f; + ddim.x = 438.0f/640.0f; + ddim.y = 98.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 25, EVENT_LABEL1); // green + pg->SetState(STATE_SHADOW); + pos.y = 66.0f/480.0f; + ddim.y = 42.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet + pg->SetState(STATE_SHADOW); +#endif + + pos.x = 0.10f; + pos.y = 0.40f; + ddim.x = 0.50f; + ddim.y = 0.50f; + pw->CreateGroup(pos, ddim, 5, EVENT_INTERFACE_GLINTl); // orange corner + pos.x = 0.40f; + pos.y = 0.10f; + ddim.x = 0.50f; + ddim.y = 0.50f; + pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner + + // Displays a list of chapters: + pos.x = ox+sx*3; + pos.y = oy+sy*10.5f; + ddim.x = dim.x*7.5f; + ddim.y = dim.y*0.6f; + if ( m_phase == PHASE_TRAINER ) res = RT_PLAY_CHAPt; + if ( m_phase == PHASE_DEFI ) res = RT_PLAY_CHAPd; + if ( m_phase == PHASE_MISSION ) res = RT_PLAY_CHAPm; + if ( m_phase == PHASE_FREE ) res = RT_PLAY_CHAPf; + if ( m_phase == PHASE_TEEN ) res = RT_PLAY_CHAPte; + if ( m_phase == PHASE_USER ) res = RT_PLAY_CHAPu; + if ( m_phase == PHASE_PROTO ) res = RT_PLAY_CHAPp; + GetResource(RES_TEXT, res, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL11, name); + pl->SetJustif(1); + + pos.y = oy+sy*6.7f; + ddim.y = dim.y*4.5f; + ddim.x = dim.x*6.5f; + pli = pw->CreateList(pos, ddim, 0, EVENT_INTERFACE_CHAP); + pli->SetState(STATE_SHADOW); + UpdateSceneChap(m_chap[m_index]); + if ( m_phase != PHASE_USER ) pli->SetState(STATE_EXTEND); + + // Displays a list of missions: + pos.x = ox+sx*9.5f; + pos.y = oy+sy*10.5f; + ddim.x = dim.x*7.5f; + ddim.y = dim.y*0.6f; + if ( m_phase == PHASE_TRAINER ) res = RT_PLAY_LISTt; + if ( m_phase == PHASE_DEFI ) res = RT_PLAY_LISTd; + if ( m_phase == PHASE_MISSION ) res = RT_PLAY_LISTm; + if ( m_phase == PHASE_FREE ) res = RT_PLAY_LISTf; + if ( m_phase == PHASE_TEEN ) res = RT_PLAY_LISTk; + if ( m_phase == PHASE_USER ) res = RT_PLAY_LISTu; + if ( m_phase == PHASE_PROTO ) res = RT_PLAY_LISTp; + GetResource(RES_TEXT, res, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL12, name); + pl->SetJustif(1); + + pos.y = oy+sy*6.7f; + ddim.y = dim.y*4.5f; + ddim.x = dim.x*6.5f; + pli = pw->CreateList(pos, ddim, 0, EVENT_INTERFACE_LIST); + pli->SetState(STATE_SHADOW); + UpdateSceneList(m_chap[m_index], m_sel[m_index]); + if ( m_phase != PHASE_USER ) pli->SetState(STATE_EXTEND); + pos = pli->RetPos(); + ddim = pli->RetDim(); + + // Displays the summary: + pos.x = ox+sx*3; + pos.y = oy+sy*5.4f; + ddim.x = dim.x*6.5f; + ddim.y = dim.y*0.6f; + GetResource(RES_TEXT, RT_PLAY_RESUME, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL13, name); + pl->SetJustif(1); + + pos.x = ox+sx*3; + pos.y = oy+sy*3.6f; + ddim.x = dim.x*13.4f; + ddim.y = dim.y*1.9f; + pe = pw->CreateEdit(pos, ddim, 0, EVENT_INTERFACE_RESUME); + pe->SetState(STATE_SHADOW); + pe->SetMaxChar(500); + pe->SetEditCap(false); // just to see + pe->SetHiliteCap(false); + + // Button displays the "soluce": + if ( m_phase != PHASE_TRAINER && + m_phase != PHASE_FREE && + m_phase != PHASE_TEEN ) + { + pos.x = ox+sx*9.5f; + pos.y = oy+sy*5.8f; + ddim.x = dim.x*6.5f; + ddim.y = dim.y*0.5f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SOLUCE); + pc->SetState(STATE_SHADOW); + pc->ClearState(STATE_CHECK); + } + m_bSceneSoluce = false; + + UpdateSceneResume((m_chap[m_index]+1)*100+(m_sel[m_index]+1)); + + if ( m_phase == PHASE_MISSION || + m_phase == PHASE_FREE || + m_phase == PHASE_USER ) + { + pos.x = ox+sx*9.5f; + pos.y = oy+sy*2; + ddim.x = dim.x*3.7f; + ddim.y = dim.y*1; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PLAY); + pb->SetState(STATE_SHADOW); + if ( m_maxList == 0 ) + { + pb->ClearState(STATE_ENABLE); + } + + pos.x += dim.x*4.0f; + ddim.x = dim.x*2.5f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_READ); + pb->SetState(STATE_SHADOW); + if ( !IsIOReadScene() ) // no file to read? + { + pb->ClearState(STATE_ENABLE); + } + } + else + { + pos.x = ox+sx*9.5f; + pos.y = oy+sy*2; + ddim.x = dim.x*6.5f; + ddim.y = dim.y*1; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PLAY); + pb->SetState(STATE_SHADOW); + if ( m_maxList == 0 ) + { + pb->ClearState(STATE_ENABLE); + } + } + + pos.x = ox+sx*3; + ddim.x = dim.x*4; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_BACK); + pb->SetState(STATE_SHADOW); + + m_engine->SetBackground("inter01.tga", 0,0, 0,0, true, true); + m_engine->SetBackForce(true); + } + + if ( m_phase == PHASE_SETUPd || + m_phase == PHASE_SETUPg || + m_phase == PHASE_SETUPp || + m_phase == PHASE_SETUPc || + m_phase == PHASE_SETUPs || + m_phase == PHASE_SETUPds || + m_phase == PHASE_SETUPgs || + m_phase == PHASE_SETUPps || + m_phase == PHASE_SETUPcs || + m_phase == PHASE_SETUPss ) + { + if ( m_phase == PHASE_SETUPds ) + { + m_phaseSetup = PHASE_SETUPd; + m_bSimulSetup = true; + } + else if ( m_phase == PHASE_SETUPgs ) + { + m_phaseSetup = PHASE_SETUPg; + m_bSimulSetup = true; + } + else if ( m_phase == PHASE_SETUPps ) + { + m_phaseSetup = PHASE_SETUPp; + m_bSimulSetup = true; + } + else if ( m_phase == PHASE_SETUPcs ) + { + m_phaseSetup = PHASE_SETUPc; + m_bSimulSetup = true; + } + else if ( m_phase == PHASE_SETUPss ) + { + m_phaseSetup = PHASE_SETUPs; + m_bSimulSetup = true; + } + else + { + m_phaseSetup = m_phase; + m_bSimulSetup = false; + } + + pos.x = 0.10f; + pos.y = 0.10f; + ddim.x = 0.80f; + ddim.y = 0.80f; + pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5); + pw->SetClosable(true); + GetResource(RES_TEXT, RT_TITLE_SETUP, name); + pw->SetName(name); + + pos.x = 0.70f; + pos.y = 0.10f; + ddim.x = 0.20f; + ddim.y = 0.20f; + pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner + + pos.x = 0.10f; + ddim.x = 0.80f; + pos.y = 0.76f; + ddim.y = 0.05f; + pw->CreateGroup(pos, ddim, 3, EVENT_NULL); // transparent -> gray + +#if _NEWLOOK + if ( m_phase == PHASE_SETUPd || // setup/display ? + m_phase == PHASE_SETUPds ) + { + pos.x = 100.0f/640.0f; + pos.y = 130.0f/480.0f; + ddim.x = 216.0f/640.0f; + ddim.y = 212.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue + pg->SetState(STATE_SHADOW); + pos.x = 324.0f/640.0f; + pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // cyan + pg->SetState(STATE_SHADOW); + } + if ( m_phase == PHASE_SETUPg || // setup/graphic ? + m_phase == PHASE_SETUPgs ) + { + pos.x = 100.0f/640.0f; + pos.y = 130.0f/480.0f; + ddim.x = 174.0f/640.0f; + ddim.y = 212.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue + pg->SetState(STATE_SHADOW); + pos.x = 282.0f/640.0f; + ddim.x = 258.0f/640.0f; + pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // cyan + pg->SetState(STATE_SHADOW); + } + if ( m_phase == PHASE_SETUPp || // setup/game ? + m_phase == PHASE_SETUPps ) + { + pos.x = 100.0f/640.0f; + pos.y = 130.0f/480.0f; + ddim.x = 226.0f/640.0f; + ddim.y = 212.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue + pg->SetState(STATE_SHADOW); + pos.x = 334.0f/640.0f; + ddim.x = 206.0f/640.0f; + pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // cyan + pg->SetState(STATE_SHADOW); + } + if ( m_phase == PHASE_SETUPc || // setup/command ? + m_phase == PHASE_SETUPcs ) + { + pos.x = 100.0f/640.0f; + pos.y = 125.0f/480.0f; + ddim.x = 440.0f/640.0f; + ddim.y = 222.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue + pg->SetState(STATE_SHADOW); + } + if ( m_phase == PHASE_SETUPs || // setup/sound ? + m_phase == PHASE_SETUPss ) + { + pos.x = 100.0f/640.0f; + pos.y = 130.0f/480.0f; + ddim.x = 216.0f/640.0f; + ddim.y = 212.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue + pg->SetState(STATE_SHADOW); + pos.x = 324.0f/640.0f; + pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // cyan + pg->SetState(STATE_SHADOW); + } + + pos.x = 100.0f/640.0f; + pos.y = 66.0f/480.0f; + ddim.x = 440.0f/640.0f; + ddim.y = 42.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet + pg->SetState(STATE_SHADOW); +#endif + + ddim.x = 0.78f/5-0.01f; + ddim.y = 0.06f; + pos.x = 0.115f; + pos.y = 0.76f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_SETUPd); + pb->SetState(STATE_SHADOW); + pb->SetState(STATE_CARD); + pb->SetState(STATE_CHECK, (m_phase == PHASE_SETUPd || m_phase == PHASE_SETUPds)); + + pos.x += ddim.x+0.01f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_SETUPg); + pb->SetState(STATE_SHADOW); + pb->SetState(STATE_CARD); + pb->SetState(STATE_CHECK, (m_phase == PHASE_SETUPg || m_phase == PHASE_SETUPgs)); + + pos.x += ddim.x+0.01f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_SETUPp); + pb->SetState(STATE_SHADOW); + pb->SetState(STATE_CARD); + pb->SetState(STATE_CHECK, (m_phase == PHASE_SETUPp || m_phase == PHASE_SETUPps)); + + pos.x += ddim.x+0.01f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_SETUPc); + pb->SetState(STATE_SHADOW); + pb->SetState(STATE_CARD); + pb->SetState(STATE_CHECK, (m_phase == PHASE_SETUPc || m_phase == PHASE_SETUPcs)); + + pos.x += ddim.x+0.01f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_SETUPs); + pb->SetState(STATE_SHADOW); + pb->SetState(STATE_CARD); + pb->SetState(STATE_CHECK, (m_phase == PHASE_SETUPs || m_phase == PHASE_SETUPss)); + + pos.x = 0.10f; + ddim.x = 0.80f; + pos.y = 0.34f; + ddim.y = 0.42f; + pw->CreateGroup(pos, ddim, 2, EVENT_INTERFACE_GLINTu); // orange -> transparent + pos.x = 0.10f+(6.0f/640.0f); + ddim.x = 0.80f-(11.0f/640.0f); + pos.y = 0.74f; + ddim.y = 0.02f; + pw->CreateGroup(pos, ddim, 1, EVENT_INTERFACE_GLINTb); // orange bar + + ddim.x = dim.x*4; + ddim.y = dim.y*1; + pos.x = ox+sx*3; + pos.y = oy+sy*2; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_BACK); + pb->SetState(STATE_SHADOW); + + if ( !m_bSimulSetup ) + { + m_engine->SetBackground("inter01.tga", 0,0, 0,0, true, true); + m_engine->SetBackForce(true); + } + } + + if ( m_phase == PHASE_SETUPd || // setup/display ? + m_phase == PHASE_SETUPds ) + { + pos.x = ox+sx*3; + pos.y = oy+sy*9; + ddim.x = dim.x*6; + ddim.y = dim.y*1; + GetResource(RES_TEXT, RT_SETUP_DEVICE, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, name); + pl->SetJustif(1); + + pos.x = ox+sx*3; + pos.y = oy+sy*5.2f; + ddim.x = dim.x*6; + ddim.y = dim.y*4.5f; + pli = pw->CreateList(pos, ddim, 0, EVENT_LIST1); + pli->SetState(STATE_SHADOW); + UpdateDisplayDevice(); + + pos.x = ox+sx*10; + pos.y = oy+sy*9; + ddim.x = dim.x*6; + ddim.y = dim.y*1; + GetResource(RES_TEXT, RT_SETUP_MODE, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL2, name); + pl->SetJustif(1); + + m_setupFull = m_engine->RetFullScreen(); + pos.x = ox+sx*10; + pos.y = oy+sy*5.2f; + ddim.x = dim.x*6; + ddim.y = dim.y*4.5f; + pli = pw->CreateList(pos, ddim, 0, EVENT_LIST2); + pli->SetState(STATE_SHADOW); + UpdateDisplayMode(); + pli->SetState(STATE_ENABLE, m_setupFull); + + ddim.x = dim.x*4; + ddim.y = dim.y*0.5f; + pos.x = ox+sx*3; + pos.y = oy+sy*4.1f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_FULL); + pc->SetState(STATE_SHADOW); + pc->SetState(STATE_CHECK, m_setupFull); + + ddim.x = dim.x*6; + ddim.y = dim.y*1; + pos.x = ox+sx*10; + pos.y = oy+sy*2; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_APPLY); + pb->SetState(STATE_SHADOW); + UpdateApply(); + } + + if ( m_phase == PHASE_SETUPg || // setup/graphic ? + m_phase == PHASE_SETUPgs ) + { + ddim.x = dim.x*6; + ddim.y = dim.y*0.5f; + pos.x = ox+sx*3; + pos.y = 0.65f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SHADOW); + pc->SetState(STATE_SHADOW); + pos.y -= 0.048f; + if ( !m_bSimulSetup ) + { + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_GROUND); + pc->SetState(STATE_SHADOW); + if ( m_engine->IsVideo8MB() ) pc->ClearState(STATE_ENABLE); + } + pos.y -= 0.048f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_DIRTY); + pc->SetState(STATE_SHADOW); + pos.y -= 0.048f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SKY); + pc->SetState(STATE_SHADOW); + if ( m_engine->IsVideo8MB() ) pc->ClearState(STATE_ENABLE); + pos.y -= 0.048f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_LENS); + pc->SetState(STATE_SHADOW); + pos.y -= 0.048f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_PLANET); + pc->SetState(STATE_SHADOW); + pos.y -= 0.048f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_FOG); + pc->SetState(STATE_SHADOW); + pos.y -= 0.048f; + if ( !m_bSimulSetup ) + { + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_LIGHT); + pc->SetState(STATE_SHADOW); + } + + pos.x = ox+sx*8.5f; + pos.y = 0.65f; + ddim.x = dim.x*2.2f; + ddim.y = 18.0f/480.0f; + pv = pw->CreateEditValue(pos, ddim, 0, EVENT_INTERFACE_PARTI); + pv->SetState(STATE_SHADOW); + pv->SetMinValue(0.0f); + pv->SetMaxValue(2.0f); + pos.x += 0.13f; + pos.y -= 0.015f; + ddim.x = 0.40f; + GetResource(RES_EVENT, EVENT_INTERFACE_PARTI, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL10, name); + pl->SetJustif(1); + + pos.x = ox+sx*8.5f; + pos.y = 0.59f; + ddim.x = dim.x*2.2f; + ddim.y = 18.0f/480.0f; + pv = pw->CreateEditValue(pos, ddim, 0, EVENT_INTERFACE_CLIP); + pv->SetState(STATE_SHADOW); + pv->SetMinValue(0.5f); + pv->SetMaxValue(2.0f); + pos.x += 0.13f; + pos.y -= 0.015f; + ddim.x = 0.40f; + GetResource(RES_EVENT, EVENT_INTERFACE_CLIP, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL11, name); + pl->SetJustif(1); + + pos.x = ox+sx*8.5f; + pos.y = 0.53f; + ddim.x = dim.x*2.2f; + ddim.y = 18.0f/480.0f; + pv = pw->CreateEditValue(pos, ddim, 0, EVENT_INTERFACE_DETAIL); + pv->SetState(STATE_SHADOW); + pv->SetMinValue(0.0f); + pv->SetMaxValue(2.0f); + pos.x += 0.13f; + pos.y -= 0.015f; + ddim.x = 0.40f; + GetResource(RES_EVENT, EVENT_INTERFACE_DETAIL, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL12, name); + pl->SetJustif(1); + + if ( !m_bSimulSetup ) + { + pos.x = ox+sx*8.5f; + pos.y = 0.47f; + ddim.x = dim.x*2.2f; + ddim.y = 18.0f/480.0f; + pv = pw->CreateEditValue(pos, ddim, 0, EVENT_INTERFACE_GADGET); + pv->SetState(STATE_SHADOW); + pv->SetMinValue(0.0f); + pv->SetMaxValue(1.0f); + pos.x += 0.13f; + pos.y -= 0.015f; + ddim.x = 0.40f; + GetResource(RES_EVENT, EVENT_INTERFACE_GADGET, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL13, name); + pl->SetJustif(1); + } + +#if 0 + if ( !m_bSimulSetup ) + { + pos.x = ox+sx*8.5f; + pos.y = 0.41f; + ddim.x = dim.x*2.2f; + ddim.y = 18.0f/480.0f; + pv = pw->CreateEditValue(pos, ddim, 0, EVENT_INTERFACE_TEXTURE); + pv->SetState(STATE_SHADOW); + pv->SetType(EVT_INT); + pv->SetMinValue(0.0f); + pv->SetMaxValue(2.0f); + pv->SetStepValue(1.0f); + pos.x += 0.13f; + pos.y -= 0.015f; + ddim.x = 0.40f; + GetResource(RES_EVENT, EVENT_INTERFACE_TEXTURE, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL14, name); + pl->SetJustif(1); + } +#endif + + ddim.x = dim.x*2; + ddim.y = dim.y*1; + pos.x = ox+sx*10; + pos.y = oy+sy*2; +#if _POLISH + ddim.x += 20.0f/640.0f; + pos.x -= 20.0f/640.0f*3.0f; +#endif + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_MIN); + pb->SetState(STATE_SHADOW); + pos.x += ddim.x; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_NORM); + pb->SetState(STATE_SHADOW); + pos.x += ddim.x; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_MAX); + pb->SetState(STATE_SHADOW); + + UpdateSetupButtons(); + } + + if ( m_phase == PHASE_SETUPp || // setup/game ? + m_phase == PHASE_SETUPps ) + { + ddim.x = dim.x*6; + ddim.y = dim.y*0.5f; + pos.x = ox+sx*3; + pos.y = 0.65f; +//? pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_TOTO); +//? pc->SetState(STATE_SHADOW); +//? pos.y -= 0.048f; +#if _SCHOOL + #if _EDU + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SOLUCE4); + pc->SetState(STATE_SHADOW); + pos.y -= 0.048f; + #endif +#else + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_MOVIES); + pc->SetState(STATE_SHADOW); + pos.y -= 0.048f; +#endif + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SCROLL); + pc->SetState(STATE_SHADOW); + pos.y -= 0.048f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_INVERTX); + pc->SetState(STATE_SHADOW); + pos.y -= 0.048f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_INVERTY); + pc->SetState(STATE_SHADOW); + pos.y -= 0.048f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_EFFECT); + pc->SetState(STATE_SHADOW); +//? pos.y -= 0.048f; +//? pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_NICERST); +//? pc->SetState(STATE_SHADOW); +//? pos.y -= 0.048f; +//? pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_HIMSELF); +//? pc->SetState(STATE_SHADOW); + + ddim.x = dim.x*6; + ddim.y = dim.y*0.5f; + pos.x = ox+sx*10; + pos.y = 0.65f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_TOOLTIP); + pc->SetState(STATE_SHADOW); + pos.y -= 0.048f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_GLINT); + pc->SetState(STATE_SHADOW); + pos.y -= 0.048f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_RAIN); + pc->SetState(STATE_SHADOW); + pos.y -= 0.048f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_MOUSE); + pc->SetState(STATE_SHADOW); + pos.y -= 0.048f; + pos.y -= 0.048f; + if ( !m_bSimulSetup ) + { + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_EDITMODE); + pc->SetState(STATE_SHADOW); + } + pos.y -= 0.048f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_EDITVALUE); + pc->SetState(STATE_SHADOW); + + UpdateSetupButtons(); + } + + if ( m_phase == PHASE_SETUPc || // setup/commands ? + m_phase == PHASE_SETUPcs ) + { + pos.x = ox+sx*3; + pos.y = 320.0f/480.0f; + ddim.x = dim.x*15.0f; + ddim.y = 18.0f/480.0f; + GetResource(RES_TEXT, RT_SETUP_KEY1, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_INTERFACE_KINFO1, name); + pl->SetJustif(1); + + pos.x = ox+sx*3; + pos.y = 302.0f/480.0f; + ddim.x = dim.x*15.0f; + ddim.y = 18.0f/480.0f; + GetResource(RES_TEXT, RT_SETUP_KEY2, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_INTERFACE_KINFO2, name); + pl->SetJustif(1); + + ddim.x = 428.0f/640.0f; + ddim.y = 128.0f/480.0f; + pos.x = 105.0f/640.0f; + pos.y = 164.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 0, EVENT_INTERFACE_KGROUP); + pg->ClearState(STATE_ENABLE); + pg->SetState(STATE_DEAD); + pg->SetState(STATE_SHADOW); + + ddim.x = 18.0f/640.0f; + ddim.y = (20.0f/480.0f)*KEY_VISIBLE; + pos.x = 510.0f/640.0f; + pos.y = 168.0f/480.0f; + ps = pw->CreateScroll(pos, ddim, -1, EVENT_INTERFACE_KSCROLL); + ps->SetVisibleRatio((float)KEY_VISIBLE/KEY_TOTAL); + ps->SetArrowStep(1.0f/((float)KEY_TOTAL-KEY_VISIBLE)); + UpdateKey(); + + ddim.x = dim.x*6; + ddim.y = dim.y*0.5f; + pos.x = ox+sx*3; + pos.y = 130.0f/480.0f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_JOYSTICK); + pc->SetState(STATE_SHADOW); + + ddim.x = dim.x*6; + ddim.y = dim.y*1; + pos.x = ox+sx*10; + pos.y = oy+sy*2; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_KDEF); + pb->SetState(STATE_SHADOW); + + UpdateSetupButtons(); + } + + if ( m_phase == PHASE_SETUPs || // setup/sound ? + m_phase == PHASE_SETUPss ) + { + pos.x = ox+sx*3; + pos.y = 0.55f; + ddim.x = dim.x*4.0f; + ddim.y = 18.0f/480.0f; + psl = pw->CreateSlider(pos, ddim, 0, EVENT_INTERFACE_VOLSOUND); + psl->SetState(STATE_SHADOW); + psl->SetLimit(0.0f, MAXVOLUME); + psl->SetArrowStep(1.0f); + pos.y += ddim.y; + GetResource(RES_EVENT, EVENT_INTERFACE_VOLSOUND, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, name); + pl->SetJustif(1); + +#if (_FULL | _NET) & _SOUNDTRACKS + pos.x = ox+sx*3; + pos.y = 0.40f; + ddim.x = dim.x*4.0f; + ddim.y = 18.0f/480.0f; + psl = pw->CreateSlider(pos, ddim, 0, EVENT_INTERFACE_VOLMUSIC); + psl->SetState(STATE_SHADOW); + psl->SetLimit(0.0f, MAXVOLUME); + psl->SetArrowStep(1.0f); + pos.y += ddim.y; + GetResource(RES_EVENT, EVENT_INTERFACE_VOLMUSIC, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL2, name); + pl->SetJustif(1); +#endif + + ddim.x = dim.x*6; + ddim.y = dim.y*0.5f; + pos.x = ox+sx*10; + pos.y = 0.55f; + pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SOUND3D); + pc->SetState(STATE_SHADOW); + + ddim.x = dim.x*3; + ddim.y = dim.y*1; + pos.x = ox+sx*10; + pos.y = oy+sy*2; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_SILENT); + pb->SetState(STATE_SHADOW); + pos.x += ddim.x; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_NOISY); + pb->SetState(STATE_SHADOW); + + UpdateSetupButtons(); + } + + if ( m_phase == PHASE_WRITE || + m_phase == PHASE_WRITEs ) + { + pos.x = 0.10f; + pos.y = 0.10f; + ddim.x = 0.80f; + ddim.y = 0.80f; + pw = m_interface->CreateWindows(pos, ddim, 13, EVENT_WINDOW5); + pw->SetClosable(true); + GetResource(RES_TEXT, RT_TITLE_WRITE, name); + pw->SetName(name); + + pos.x = 0.10f; + pos.y = 0.40f; + ddim.x = 0.50f; + ddim.y = 0.50f; + pw->CreateGroup(pos, ddim, 5, EVENT_INTERFACE_GLINTl); // orange corner + pos.x = 0.40f; + pos.y = 0.10f; + ddim.x = 0.50f; + ddim.y = 0.50f; + pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner + +#if _NEWLOOK + pos.x = 100.0f/640.0f; + pos.y = 66.0f/480.0f; + ddim.x = 438.0f/640.0f; + ddim.y = 42.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet + pg->SetState(STATE_SHADOW); +#endif + + pos.x = 290.0f/640.0f; + ddim.x = 245.0f/640.0f; + + pos.y = 146.0f/480.0f; + ddim.y = 18.0f/480.0f; + GetResource(RES_EVENT, EVENT_INTERFACE_IOLABEL, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_INTERFACE_IOLABEL, name); + pl->SetJustif(1); + + pos.y = 130.0f/480.0f; + ddim.y = 18.0f/480.0f; + pe = pw->CreateEdit(pos, ddim, 0, EVENT_INTERFACE_IONAME); + pe->SetState(STATE_SHADOW); + pe->SetFontType(FONT_COLOBOT); + pe->SetMaxChar(35); + IOReadName(); + + pos.y = 190.0f/480.0f; + ddim.y = 190.0f/480.0f; + pli = pw->CreateList(pos, ddim, 0, EVENT_INTERFACE_IOLIST); + pli->SetState(STATE_SHADOW); + + pos.y = oy+sy*2; + ddim.y = dim.y*1; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_IOWRITE); + pb->SetState(STATE_SHADOW); + + pos.x = 105.0f/640.0f; + pos.y = 190.0f/480.0f; + ddim.x = 170.0f/640.0f; + ddim.y = dim.y*1; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_IODELETE); + pb->SetState(STATE_SHADOW); + + pos.x = 105.0f/640.0f; + pos.y = 250.0f/480.0f; + ddim.x = 170.0f/640.0f; + ddim.y = 128.0f/480.0f; + pi = pw->CreateImage(pos, ddim, 0, EVENT_INTERFACE_IOIMAGE); + pi->SetState(STATE_SHADOW); + + ddim.x = dim.x*4; + ddim.y = dim.y*1; + pos.x = ox+sx*3; + pos.y = oy+sy*2; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_BACK); + pb->SetState(STATE_SHADOW); + + IOReadList(); + IOUpdateList(); + } + + if ( m_phase == PHASE_READ || + m_phase == PHASE_READs ) + { + pos.x = 0.10f; + pos.y = 0.10f; + ddim.x = 0.80f; + ddim.y = 0.80f; + pw = m_interface->CreateWindows(pos, ddim, 14, EVENT_WINDOW5); + pw->SetClosable(true); + GetResource(RES_TEXT, RT_TITLE_READ, name); + pw->SetName(name); + + pos.x = 0.10f; + pos.y = 0.40f; + ddim.x = 0.50f; + ddim.y = 0.50f; + pw->CreateGroup(pos, ddim, 5, EVENT_INTERFACE_GLINTl); // orange corner + pos.x = 0.40f; + pos.y = 0.10f; + ddim.x = 0.50f; + ddim.y = 0.50f; + pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner + +#if _NEWLOOK + pos.x = 100.0f/640.0f; + pos.y = 66.0f/480.0f; + ddim.x = 438.0f/640.0f; + ddim.y = 42.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet + pg->SetState(STATE_SHADOW); +#endif + + pos.x = 290.0f/640.0f; + ddim.x = 245.0f/640.0f; + + pos.y = 160.0f/480.0f; + ddim.y = 190.0f/480.0f; + pli = pw->CreateList(pos, ddim, 0, EVENT_INTERFACE_IOLIST); + pli->SetState(STATE_SHADOW); + + pos.y = oy+sy*2; + ddim.y = dim.y*1; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_IOREAD); + pb->SetState(STATE_SHADOW); + if ( m_phase == PHASE_READs ) + { + pb->SetState(STATE_WARNING); + } + + pos.x = 105.0f/640.0f; + pos.y = 160.0f/480.0f; + ddim.x = 170.0f/640.0f; + ddim.y = dim.y*1; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_IODELETE); + pb->SetState(STATE_SHADOW); + + pos.x = 105.0f/640.0f; + pos.y = 220.0f/480.0f; + ddim.x = 170.0f/640.0f; + ddim.y = 128.0f/480.0f; + pi = pw->CreateImage(pos, ddim, 0, EVENT_INTERFACE_IOIMAGE); + pi->SetState(STATE_SHADOW); + + ddim.x = dim.x*4; + ddim.y = dim.y*1; + pos.x = ox+sx*3; + pos.y = oy+sy*2; + pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_BACK); + pb->SetState(STATE_SHADOW); + + IOReadList(); + IOUpdateList(); + + if ( m_phase == PHASE_READ ) + { + m_engine->SetBackground("inter01.tga", 0,0, 0,0, true, true); + m_engine->SetBackForce(true); + } + } + + if ( m_phase == PHASE_LOADING ) + { + pos.x = 0.35f; + pos.y = 0.10f; + ddim.x = 0.30f; + ddim.y = 0.80f; +#if _TEEN + pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5); +#else + pw = m_interface->CreateWindows(pos, ddim, 10, EVENT_WINDOW5); +#endif + pw->SetName(" "); + + pos.x = 0.35f; + pos.y = 0.60f; + ddim.x = 0.30f; + ddim.y = 0.30f; + pw->CreateGroup(pos, ddim, 5, EVENT_INTERFACE_GLINTl); // orange corner + pos.x = 0.35f; + pos.y = 0.10f; + ddim.x = 0.30f; + ddim.y = 0.30f; + pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner + + pos.x = 254.0f/640.0f; + pos.y = 208.0f/480.0f; + ddim.x = 132.0f/640.0f; + ddim.y = 42.0f/480.0f; + pg = pw->CreateGroup(pos, ddim, 22, EVENT_NULL); + pg->SetState(STATE_SHADOW); + + pos.x = 220.0f/640.0f; + pos.y = 210.0f/480.0f; + ddim.x = 200.0f/640.0f; + ddim.y = 20.0f/480.0f; + GetResource(RES_TEXT, RT_DIALOG_LOADING, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, name); + pl->SetFontSize(12.0f); + pl->SetJustif(0); + + m_engine->SetBackground("inter01.tga", 0,0, 0,0, true, true); + m_engine->SetBackForce(true); + + m_loadingCounter = 1; // enough time to display! + } + + if ( m_phase == PHASE_WELCOME1 ) + { + m_sound->StopMusic(); + m_sound->PlayMusic(11, false); + + pos.x = 0.0f; + pos.y = 0.0f; + ddim.x = 0.0f; + ddim.y = 0.0f; + pw = m_interface->CreateWindows(pos, ddim, -1, EVENT_WINDOW5); + + m_engine->SetOverColor(RetColor(1.0f), D3DSTATETCb); + m_engine->SetOverFront(true); + +#if _FRENCH + m_engine->SetBackground("alsyd.tga", 0,0, 0,0, true, false); +#endif +#if _POLISH + m_engine->SetBackground("manta.tga", 0,0, 0,0, true, false); +#endif +#if _WG + m_engine->SetBackground("wg.tga", 0,0, 0,0, true, false); +#endif + m_engine->SetBackForce(true); + } + if ( m_phase == PHASE_WELCOME2 ) + { +#if _ENGLISH + m_sound->StopMusic(); + m_sound->PlayMusic(11, false); +#endif +#if _POLISH + m_sound->StopMusic(); + m_sound->PlayMusic(11, false); +#endif + + pos.x = 0.0f; + pos.y = 0.0f; + ddim.x = 0.0f; + ddim.y = 0.0f; + pw = m_interface->CreateWindows(pos, ddim, -1, EVENT_WINDOW5); + + m_engine->SetOverColor(RetColor(1.0f), D3DSTATETCb); + m_engine->SetOverFront(true); + + m_engine->SetBackground("colobot.tga", 0,0, 0,0, true, false); + m_engine->SetBackForce(true); + } + if ( m_phase == PHASE_WELCOME3 ) + { + pos.x = 0.0f; + pos.y = 0.0f; + ddim.x = 0.0f; + ddim.y = 0.0f; + pw = m_interface->CreateWindows(pos, ddim, -1, EVENT_WINDOW5); + + m_engine->SetOverColor(RetColor(0.0f), D3DSTATETCw); + m_engine->SetOverFront(true); + +#if _FRENCH + m_engine->SetBackground("epsitecf.tga", 0,0, 0,0, true, false); +#endif +#if _ENGLISH + m_engine->SetBackground("epsitece.tga", 0,0, 0,0, true, false); +#endif +#if _GERMAN | _WG + m_engine->SetBackground("epsitecd.tga", 0,0, 0,0, true, false); +#endif +#if _POLISH + m_engine->SetBackground("epsitecp.tga", 0,0, 0,0, true, false); +#endif + m_engine->SetBackForce(true); + } + + if ( m_phase == PHASE_GENERIC ) + { + pos.x = 0.0f; + pos.y = 0.0f; + ddim.x = 0.0f; + ddim.y = 0.0f; + pw = m_interface->CreateWindows(pos, ddim, -1, EVENT_WINDOW5); + +#if _FULL | _NET + pos.x = 80.0f/640.0f; + pos.y = 240.0f/480.0f; + ddim.x = 490.0f/640.0f; + ddim.y = 110.0f/480.0f; + pe = pw->CreateEdit(pos, ddim, 0, EVENT_EDIT1); + pe->SetGenericMode(true); + pe->SetEditCap(false); + pe->SetHiliteCap(false); + pe->SetFontType(FONT_COURIER); + pe->SetFontSize(8.0f); + pe->ReadText("help\\authors.txt"); + + pos.x = 80.0f/640.0f; + pos.y = 140.0f/480.0f; + ddim.x = 490.0f/640.0f; + ddim.y = 100.0f/480.0f; + pe = pw->CreateEdit(pos, ddim, 0, EVENT_EDIT2); + pe->SetGenericMode(true); + pe->SetEditCap(false); + pe->SetHiliteCap(false); + pe->SetFontType(FONT_COURIER); + pe->SetFontSize(6.5f); + pe->ReadText("help\\licences.txt"); +#endif +#if _SCHOOL +#if _CEEBOTDEMO + pos.x = 80.0f/640.0f; + pos.y = 210.0f/480.0f; + ddim.x = 490.0f/640.0f; + ddim.y = 150.0f/480.0f; +#else + pos.x = 80.0f/640.0f; + pos.y = 200.0f/480.0f; + ddim.x = 490.0f/640.0f; + ddim.y = 150.0f/480.0f; +#endif + pe = pw->CreateEdit(pos, ddim, 0, EVENT_EDIT1); + pe->SetGenericMode(true); + pe->SetEditCap(false); + pe->SetHiliteCap(false); + pe->SetFontType(FONT_COURIER); + pe->SetFontSize(8.0f); + pe->ReadText("help\\authors.txt"); +#endif +#if _DEMO +//? pos.x = 80.0f/640.0f; +//? pos.y = 240.0f/480.0f; +//? ddim.x = 490.0f/640.0f; +//? ddim.y = 110.0f/480.0f; +//? pe = pw->CreateEdit(pos, ddim, 0, EVENT_EDIT1); +//? pe->SetGenericMode(true); +//? pe->SetEditCap(false); +//? pe->SetHiliteCap(false); +//? pe->SetFontType(FONT_COURIER); +//? pe->SetFontSize(8.0f); +//? pe->ReadText("help\\demo.txt"); + +//? pos.x = 80.0f/640.0f; +//? pos.y = 140.0f/480.0f; +//? ddim.x = 490.0f/640.0f; +//? ddim.y = 100.0f/480.0f; +//? pe = pw->CreateEdit(pos, ddim, 0, EVENT_EDIT2); +//? pe->SetGenericMode(true); +//? pe->SetEditCap(false); +//? pe->SetHiliteCap(false); +//? pe->SetFontType(FONT_COURIER); +//? pe->SetFontSize(8.0f); +//? pe->ReadText("help\\authors.txt"); +#endif + +#if !_DEMO + pos.x = 40.0f/640.0f; + pos.y = 83.0f/480.0f; + ddim.x = 246.0f/640.0f; + ddim.y = 16.0f/480.0f; + GetResource(RES_TEXT, RT_GENERIC_DEV1, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, name); + pl->SetFontType(FONT_COURIER); + pl->SetFontSize(8.0f); + + pos.y = 13.0f/480.0f; + GetResource(RES_TEXT, RT_GENERIC_DEV2, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL2, name); + pl->SetFontType(FONT_COURIER); + pl->SetFontSize(8.0f); + + pos.x = 355.0f/640.0f; + pos.y = 83.0f/480.0f; + ddim.x = 246.0f/640.0f; + ddim.y = 16.0f/480.0f; + GetResource(RES_TEXT, RT_GENERIC_EDIT1, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL3, name); + pl->SetFontType(FONT_COURIER); + pl->SetFontSize(8.0f); + + pos.y = 13.0f/480.0f; + GetResource(RES_TEXT, RT_GENERIC_EDIT2, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL4, name); + pl->SetFontType(FONT_COURIER); + pl->SetFontSize(8.0f); +#endif + +#if _DEMO + pos.x = 481.0f/640.0f; + pos.y = 51.0f/480.0f; + ddim.x = 30.0f/640.0f; + ddim.y = 30.0f/480.0f; + pb = pw->CreateButton(pos, ddim, 49, EVENT_INTERFACE_ABORT); + pb->SetState(STATE_SHADOW); +#else + pos.x = 306.0f/640.0f; + pos.y = 17.0f/480.0f; + ddim.x = 30.0f/640.0f; + ddim.y = 30.0f/480.0f; + pb = pw->CreateButton(pos, ddim, 49, EVENT_INTERFACE_ABORT); + pb->SetState(STATE_SHADOW); +#endif + +#if _NEWLOOK +#if _CEEBOTDEMO +#if _TEEN + m_engine->SetBackground("genedt.tga", 0,0, 0,0, true, true); +#else + m_engine->SetBackground("geneda.tga", 0,0, 0,0, true, true); +#endif +#else + m_engine->SetBackground("genern.tga", 0,0, 0,0, true, true); +#endif +#else +#if _FRENCH +#if _DEMO + m_engine->SetBackground("genedf.tga", 0,0, 0,0, true, true); +#else + m_engine->SetBackground("generf.tga", 0,0, 0,0, true, true); +#endif +#endif +#if _ENGLISH +#if _DEMO + m_engine->SetBackground("genede.tga", 0,0, 0,0, true, true); +#else + m_engine->SetBackground("genere.tga", 0,0, 0,0, true, true); +#endif +#endif +#if _GERMAN +#if _DEMO + m_engine->SetBackground("genedd.tga", 0,0, 0,0, true, true); +#else + m_engine->SetBackground("genere.tga", 0,0, 0,0, true, true); +#endif +#endif +#if _WG +#if _DEMO + m_engine->SetBackground("genedd.tga", 0,0, 0,0, true, true); +#else + m_engine->SetBackground("generd.tga", 0,0, 0,0, true, true); +#endif +#endif +#if _POLISH +#if _DEMO + m_engine->SetBackground("genedp.tga", 0,0, 0,0, true, true); +#else + m_engine->SetBackground("generp.tga", 0,0, 0,0, true, true); +#endif +#endif +#endif + m_engine->SetBackForce(true); + } + + if ( m_phase == PHASE_INIT || + m_phase == PHASE_NAME || + m_phase == PHASE_TRAINER || + m_phase == PHASE_DEFI || + m_phase == PHASE_MISSION || + m_phase == PHASE_FREE || + m_phase == PHASE_TEEN || + m_phase == PHASE_USER || + m_phase == PHASE_PROTO || + m_phase == PHASE_SETUPd || + m_phase == PHASE_SETUPg || + m_phase == PHASE_SETUPp || + m_phase == PHASE_SETUPc || + m_phase == PHASE_SETUPs || + m_phase == PHASE_READ || + m_phase == PHASE_LOADING ) + { +#if _SCHOOL +#if _TEEN + pos.x = 50.0f/640.0f; + pos.y = 430.0f/480.0f; + ddim.x = 200.0f/640.0f; + ddim.y = 10.0f/480.0f; +#else + pos.x = 450.0f/640.0f; + pos.y = 0.0f/480.0f; + ddim.x = 170.0f/640.0f; + ddim.y = 9.0f/480.0f; +#endif +#else + pos.x = 540.0f/640.0f; + pos.y = 9.0f/480.0f; + ddim.x = 90.0f/640.0f; + ddim.y = 10.0f/480.0f; +#endif + GetResource(RES_TEXT, RT_VERSION_ID, name); + pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, name); + pl->SetFontType(FONT_COURIER); + pl->SetFontSize(9.0f); + } + + m_engine->LoadAllTexture(); +} + + +// Processing an event. +// Returns false if the event has been processed completely. + +bool CMainDialog::EventProcess(const Event &event) +{ + CWindow* pw; + CList* pl; + CButton* pb; + CCheck* pc; + Event newEvent; + float welcomeLength; + + if ( event.event == EVENT_FRAME ) + { + m_phaseTime += event.rTime; + +//? if ( m_phase == PHASE_WELCOME1 ) welcomeLength = WELCOME_LENGTH+2.0f; +//? else welcomeLength = WELCOME_LENGTH; + welcomeLength = WELCOME_LENGTH; + + if ( m_phase == PHASE_WELCOME1 || + m_phase == PHASE_WELCOME2 || + m_phase == PHASE_WELCOME3 ) + { + float intensity; + int mode = D3DSTATETCb; + + if ( m_phaseTime < 1.5f ) + { + intensity = 1.0f-(m_phaseTime-0.5f); + } + else if ( m_phaseTime < welcomeLength-1.0f ) + { + intensity = 0.0f; + } + else + { + intensity = m_phaseTime-(welcomeLength-1.0f); + } + if ( intensity < 0.0f ) intensity = 0.0f; + if ( intensity > 1.0f ) intensity = 1.0f; + + if ( (m_phase == PHASE_WELCOME2 && m_phaseTime > welcomeLength/2.0f) || + m_phase == PHASE_WELCOME3 ) + { + intensity = 1.0f-intensity; + mode = D3DSTATETCw; + } + + m_engine->SetOverColor(RetColor(intensity), mode); + } + + if ( m_phase == PHASE_WELCOME1 && m_phaseTime >= welcomeLength ) + { + ChangePhase(PHASE_WELCOME2); + return true; + } + if ( m_phase == PHASE_WELCOME2 && m_phaseTime >= welcomeLength ) + { + ChangePhase(PHASE_WELCOME3); + return true; + } + if ( m_phase == PHASE_WELCOME3 && m_phaseTime >= welcomeLength ) + { + ChangePhase(PHASE_NAME); + return true; + } + + if ( m_shotDelay > 0 && !m_bDialog ) // screenshot done? + { + m_shotDelay --; + if ( m_shotDelay == 0 ) + { + m_engine->WriteScreenShot(m_shotName, 320, 240); +//? m_engine->WriteScreenShot(m_shotName, 160, 120); + } + } + + if ( m_phase == PHASE_LOADING ) + { + if ( m_loadingCounter == 0 ) + { + m_main->ChangePhase(PHASE_SIMUL); + } + m_loadingCounter --; + return false; + } + + m_glintTime += event.rTime; + GlintMove(); // moves reflections + + FrameParticule(event.rTime); + + if ( m_bDialog ) // this dialogue? + { + FrameDialog(event.rTime); + } + + return true; + } + + if ( event.event == EVENT_MOUSEMOVE ) + { + m_glintMouse = event.pos; + NiceParticule(event.pos, event.keyState&KS_MLEFT); + } + + if ( m_bDialog ) // this dialogue? + { + m_interface->EventProcess(event); + + if ( event.event == EVENT_DIALOG_OK || + (event.event == EVENT_KEYDOWN && event.param == VK_RETURN ) ) + { + StopDialog(); + if ( m_phase == PHASE_NAME ) + { + NameDelete(); + } + if ( m_phase == PHASE_INIT ) + { +//? m_event->MakeEvent(newEvent, EVENT_QUIT); +//? m_event->AddEvent(newEvent); + m_main->ChangePhase(PHASE_GENERIC); + } + if ( m_phase == PHASE_SIMUL ) + { + if ( m_bDialogDelete ) + { + m_main->DeleteObject(); + } + else + { + m_main->ChangePhase(PHASE_TERM); + } + } + } + if ( event.event == EVENT_DIALOG_CANCEL || + (event.event == EVENT_KEYDOWN && event.param == VK_ESCAPE ) ) + { + StopDialog(); + } + if ( event.event == EVENT_INTERFACE_SETUP ) + { + StopDialog(); + StartSuspend(); + if ( m_phaseSetup == PHASE_SETUPd ) ChangePhase(PHASE_SETUPds); + if ( m_phaseSetup == PHASE_SETUPg ) ChangePhase(PHASE_SETUPgs); + if ( m_phaseSetup == PHASE_SETUPp ) ChangePhase(PHASE_SETUPps); + if ( m_phaseSetup == PHASE_SETUPc ) ChangePhase(PHASE_SETUPcs); + if ( m_phaseSetup == PHASE_SETUPs ) ChangePhase(PHASE_SETUPss); + } + if ( event.event == EVENT_INTERFACE_AGAIN ) + { + StopDialog(); + m_main->ChangePhase(PHASE_LOADING); + } + if ( event.event == EVENT_INTERFACE_WRITE ) + { + StopDialog(); + StartSuspend(); + ChangePhase(PHASE_WRITEs); + } + if ( event.event == EVENT_INTERFACE_READ ) + { + StopDialog(); + StartSuspend(); + ChangePhase(PHASE_READs); + } + + return false; + } + + if ( !m_engine->RetMouseHide() && + !m_interface->EventProcess(event) ) + { + return false; + } + + if ( m_phase == PHASE_INIT ) + { + switch( event.event ) + { + case EVENT_KEYDOWN: + if ( event.param == VK_ESCAPE ) + { +//? StartQuit(); // would you leave? + m_sound->Play(SOUND_TZOING); + m_main->ChangePhase(PHASE_GENERIC); + } + break; + + case EVENT_INTERFACE_QUIT: +//? StartQuit(); // would you leave? + m_sound->Play(SOUND_TZOING); + m_main->ChangePhase(PHASE_GENERIC); + break; + + case EVENT_INTERFACE_TRAINER: + m_main->ChangePhase(PHASE_TRAINER); + break; + + case EVENT_INTERFACE_DEFI: + m_main->ChangePhase(PHASE_DEFI); + break; + + case EVENT_INTERFACE_MISSION: + m_main->ChangePhase(PHASE_MISSION); + break; + + case EVENT_INTERFACE_FREE: + m_main->ChangePhase(PHASE_FREE); + break; + + case EVENT_INTERFACE_TEEN: + m_main->ChangePhase(PHASE_TEEN); + break; + + case EVENT_INTERFACE_USER: + m_main->ChangePhase(PHASE_USER); + break; + + case EVENT_INTERFACE_PROTO: + m_main->ChangePhase(PHASE_PROTO); + break; + + case EVENT_INTERFACE_SETUP: + m_main->ChangePhase(m_phaseSetup); + break; + + case EVENT_INTERFACE_NAME: + m_main->ChangePhase(PHASE_NAME); + break; + } + return false; + } + + if ( m_phase == PHASE_NAME ) + { + switch( event.event ) + { + case EVENT_KEYDOWN: + if ( event.param == VK_RETURN ) + { + NameSelect(); + } + if ( event.param == VK_ESCAPE ) + { + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) break; + pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_NCANCEL); + if ( pb == 0 ) break; + if ( pb->TestState(STATE_ENABLE) ) + { + m_main->ChangePhase(PHASE_INIT); + } + } + break; + + case EVENT_INTERFACE_NEDIT: + UpdateNameList(); + UpdateNameControl(); + break; + + case EVENT_INTERFACE_NLIST: + UpdateNameEdit(); + break; + + case EVENT_INTERFACE_NOK: + NameSelect(); + break; + + case EVENT_INTERFACE_PERSO: + NameSelect(); + m_main->ChangePhase(PHASE_PERSO); + break; + + case EVENT_INTERFACE_NCANCEL: + m_main->ChangePhase(PHASE_INIT); + break; + + case EVENT_INTERFACE_NDELETE: + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) break; + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); + if ( pl == 0 ) break; + StartDeleteGame(pl->RetName(pl->RetSelect())); + break; + } + } + + if ( m_phase == PHASE_PERSO ) + { + switch( event.event ) + { + case EVENT_KEYDOWN: + if ( event.param == VK_RETURN ) + { + m_main->ChangePhase(PHASE_INIT); + } + if ( event.param == VK_ESCAPE ) + { + m_main->ChangePhase(PHASE_NAME); + } + break; + + case EVENT_INTERFACE_PHEAD: + m_persoTab = 0; + UpdatePerso(); + m_main->ScenePerso(); + CameraPerso(); + break; + case EVENT_INTERFACE_PBODY: + m_persoTab = 1; + UpdatePerso(); + m_main->ScenePerso(); + CameraPerso(); + break; + + case EVENT_INTERFACE_PFACE1: + case EVENT_INTERFACE_PFACE2: + case EVENT_INTERFACE_PFACE3: + case EVENT_INTERFACE_PFACE4: + m_perso.face = event.event-EVENT_INTERFACE_PFACE1; + WriteGamerPerso(m_main->RetGamerName()); + UpdatePerso(); + m_main->ScenePerso(); + break; + + case EVENT_INTERFACE_PGLASS0: + case EVENT_INTERFACE_PGLASS1: + case EVENT_INTERFACE_PGLASS2: + case EVENT_INTERFACE_PGLASS3: + case EVENT_INTERFACE_PGLASS4: + case EVENT_INTERFACE_PGLASS5: + case EVENT_INTERFACE_PGLASS6: + case EVENT_INTERFACE_PGLASS7: + case EVENT_INTERFACE_PGLASS8: + case EVENT_INTERFACE_PGLASS9: + m_perso.glasses = event.event-EVENT_INTERFACE_PGLASS0; + WriteGamerPerso(m_main->RetGamerName()); + UpdatePerso(); + m_main->ScenePerso(); + break; + + case EVENT_INTERFACE_PC0a: + case EVENT_INTERFACE_PC1a: + case EVENT_INTERFACE_PC2a: + case EVENT_INTERFACE_PC3a: + case EVENT_INTERFACE_PC4a: + case EVENT_INTERFACE_PC5a: + case EVENT_INTERFACE_PC6a: + case EVENT_INTERFACE_PC7a: + case EVENT_INTERFACE_PC8a: + case EVENT_INTERFACE_PC9a: + FixPerso(event.event-EVENT_INTERFACE_PC0a, 0); + WriteGamerPerso(m_main->RetGamerName()); + UpdatePerso(); + m_main->ScenePerso(); + break; + + case EVENT_INTERFACE_PC0b: + case EVENT_INTERFACE_PC1b: + case EVENT_INTERFACE_PC2b: + case EVENT_INTERFACE_PC3b: + case EVENT_INTERFACE_PC4b: + case EVENT_INTERFACE_PC5b: + case EVENT_INTERFACE_PC6b: + case EVENT_INTERFACE_PC7b: + case EVENT_INTERFACE_PC8b: + case EVENT_INTERFACE_PC9b: + FixPerso(event.event-EVENT_INTERFACE_PC0b, 1); + WriteGamerPerso(m_main->RetGamerName()); + UpdatePerso(); + m_main->ScenePerso(); + break; + + case EVENT_INTERFACE_PCRa: + case EVENT_INTERFACE_PCGa: + case EVENT_INTERFACE_PCBa: + case EVENT_INTERFACE_PCRb: + case EVENT_INTERFACE_PCGb: + case EVENT_INTERFACE_PCBb: + ColorPerso(); + WriteGamerPerso(m_main->RetGamerName()); + UpdatePerso(); + m_main->ScenePerso(); + break; + + case EVENT_INTERFACE_PDEF: + DefPerso(); + WriteGamerPerso(m_main->RetGamerName()); + UpdatePerso(); + m_main->ScenePerso(); + break; + + case EVENT_INTERFACE_PLROT: + m_persoAngle += 0.2f; + break; + case EVENT_INTERFACE_PRROT: + m_persoAngle -= 0.2f; + break; + + case EVENT_INTERFACE_POK: + m_main->ChangePhase(PHASE_INIT); + break; + + case EVENT_INTERFACE_PCANCEL: + m_perso = m_persoCopy; + WriteGamerPerso(m_main->RetGamerName()); + m_main->ChangePhase(PHASE_NAME); + break; + } + } + + if ( m_phase == PHASE_TRAINER || + m_phase == PHASE_DEFI || + m_phase == PHASE_MISSION || + m_phase == PHASE_FREE || + m_phase == PHASE_TEEN || + m_phase == PHASE_USER || + m_phase == PHASE_PROTO ) + { + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return false; + + if ( event.event == pw->RetEventMsgClose() || + event.event == EVENT_INTERFACE_BACK || + (event.event == EVENT_KEYDOWN && event.param == VK_ESCAPE) ) + { + m_main->ChangePhase(PHASE_INIT); + return false; + } + } + + if ( m_phase == PHASE_TRAINER || + m_phase == PHASE_DEFI || + m_phase == PHASE_MISSION || + m_phase == PHASE_FREE || + m_phase == PHASE_TEEN || + m_phase == PHASE_USER || + m_phase == PHASE_PROTO ) + { + switch( event.event ) + { + case EVENT_INTERFACE_CHAP: + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_CHAP); + if ( pl == 0 ) break; + m_chap[m_index] = pl->RetSelect(); + UpdateSceneList(m_chap[m_index], m_sel[m_index]); + UpdateSceneResume((m_chap[m_index]+1)*100+(m_sel[m_index]+1)); + break; + + case EVENT_INTERFACE_LIST: + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_LIST); + if ( pl == 0 ) break; + m_sel[m_index] = pl->RetSelect(); + UpdateSceneResume((m_chap[m_index]+1)*100+(m_sel[m_index]+1)); + break; + + case EVENT_INTERFACE_SOLUCE: + pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_SOLUCE); + if ( pb == 0 ) break; + m_bSceneSoluce = !m_bSceneSoluce; + pb->SetState(STATE_CHECK, m_bSceneSoluce); + break; + + case EVENT_INTERFACE_PLAY: + if ( m_phase == PHASE_PROTO && m_chap[m_index] == 0 && m_sel[m_index] == 0 ) + { + m_main->ChangePhase(PHASE_MODEL); + break; + } + m_sceneRank = (m_chap[m_index]+1)*100+(m_sel[m_index]+1); + m_phaseTerm = m_phase; + m_main->ChangePhase(PHASE_LOADING); + break; + + case EVENT_INTERFACE_READ: + m_phaseTerm = m_phase; + m_main->ChangePhase(PHASE_READ); + break; + } + return false; + } + + if ( m_phase == PHASE_SETUPd || + m_phase == PHASE_SETUPg || + m_phase == PHASE_SETUPp || + m_phase == PHASE_SETUPc || + m_phase == PHASE_SETUPs ) + { + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return false; + + if ( event.event == pw->RetEventMsgClose() || + event.event == EVENT_INTERFACE_BACK || + (event.event == EVENT_KEYDOWN && event.param == VK_ESCAPE) ) + { + SetupMemorize(); + m_engine->ApplyChange(); + m_main->ChangePhase(PHASE_INIT); + return false; + } + + switch( event.event ) + { + case EVENT_INTERFACE_SETUPd: + m_main->ChangePhase(PHASE_SETUPd); + break; + + case EVENT_INTERFACE_SETUPg: + m_main->ChangePhase(PHASE_SETUPg); + break; + + case EVENT_INTERFACE_SETUPp: + m_main->ChangePhase(PHASE_SETUPp); + break; + + case EVENT_INTERFACE_SETUPc: + m_main->ChangePhase(PHASE_SETUPc); + break; + + case EVENT_INTERFACE_SETUPs: + m_main->ChangePhase(PHASE_SETUPs); + break; + } + } + + if ( m_phase == PHASE_SETUPds || + m_phase == PHASE_SETUPgs || + m_phase == PHASE_SETUPps || + m_phase == PHASE_SETUPcs || + m_phase == PHASE_SETUPss ) + { + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return false; + + if ( event.event == pw->RetEventMsgClose() || + event.event == EVENT_INTERFACE_BACK || + (event.event == EVENT_KEYDOWN && event.param == VK_ESCAPE) ) + { + SetupMemorize(); + m_engine->ApplyChange(); + m_interface->DeleteControl(EVENT_WINDOW5); + ChangePhase(PHASE_SIMUL); + StopSuspend(); + return false; + } + + switch( event.event ) + { + case EVENT_INTERFACE_SETUPd: + ChangePhase(PHASE_SETUPds); + break; + + case EVENT_INTERFACE_SETUPg: + ChangePhase(PHASE_SETUPgs); + break; + + case EVENT_INTERFACE_SETUPp: + ChangePhase(PHASE_SETUPps); + break; + + case EVENT_INTERFACE_SETUPc: + ChangePhase(PHASE_SETUPcs); + break; + + case EVENT_INTERFACE_SETUPs: + ChangePhase(PHASE_SETUPss); + break; + } + } + + if ( m_phase == PHASE_SETUPd || // setup/display ? + m_phase == PHASE_SETUPds ) + { + switch( event.event ) + { + case EVENT_LIST1: + case EVENT_LIST2: + UpdateApply(); + break; + + case EVENT_INTERFACE_FULL: + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) break; + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_FULL); + if ( pc == 0 ) break; + pl = (CList*)pw->SearchControl(EVENT_LIST2); + if ( pl == 0 ) break; + if ( pc->TestState(STATE_CHECK) ) + { + pc->ClearState(STATE_CHECK); // window + pl->ClearState(STATE_ENABLE); + } + else + { + pc->SetState(STATE_CHECK); // fullscreen + pl->SetState(STATE_ENABLE); + } + UpdateApply(); + break; + + case EVENT_INTERFACE_APPLY: + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) break; + pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_APPLY); + if ( pb == 0 ) break; + pb->ClearState(STATE_PRESS); + pb->ClearState(STATE_HILIGHT); + ChangeDisplay(); + UpdateApply(); + break; + } + return false; + } + + if ( m_phase == PHASE_SETUPg || // setup/graphic ? + m_phase == PHASE_SETUPgs ) + { + switch( event.event ) + { + case EVENT_INTERFACE_SHADOW: + m_engine->SetShadow(!m_engine->RetShadow()); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_GROUND: + m_engine->SetGroundSpot(!m_engine->RetGroundSpot()); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_DIRTY: + m_engine->SetDirty(!m_engine->RetDirty()); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_FOG: + m_engine->SetFog(!m_engine->RetFog()); + m_camera->SetOverBaseColor(RetColor(RetColor(0.0f))); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_LENS: + m_engine->SetLensMode(!m_engine->RetLensMode()); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_SKY: + m_engine->SetSkyMode(!m_engine->RetSkyMode()); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_PLANET: + m_engine->SetPlanetMode(!m_engine->RetPlanetMode()); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_LIGHT: + m_engine->SetLightMode(!m_engine->RetLightMode()); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_PARTI: + case EVENT_INTERFACE_CLIP: + case EVENT_INTERFACE_DETAIL: + case EVENT_INTERFACE_GADGET: + case EVENT_INTERFACE_TEXTURE: + ChangeSetupButtons(); + break; + + case EVENT_INTERFACE_MIN: + ChangeSetupQuality(-1); + UpdateSetupButtons(); + break; + case EVENT_INTERFACE_NORM: + ChangeSetupQuality(0); + UpdateSetupButtons(); + break; + case EVENT_INTERFACE_MAX: + ChangeSetupQuality(1); + UpdateSetupButtons(); + break; + } + return false; + } + + if ( m_phase == PHASE_SETUPp || // setup/game ? + m_phase == PHASE_SETUPps ) + { + switch( event.event ) + { + case EVENT_INTERFACE_TOTO: + m_engine->SetTotoMode(!m_engine->RetTotoMode()); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_TOOLTIP: + m_bTooltip = !m_bTooltip; + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_GLINT: + m_bGlint = !m_bGlint; + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_RAIN: + m_bRain = !m_bRain; + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_MOUSE: + m_engine->SetNiceMouse(!m_engine->RetNiceMouse()); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_EDITMODE: + m_engine->SetEditIndentMode(!m_engine->RetEditIndentMode()); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_EDITVALUE: + if ( m_engine->RetEditIndentValue() == 2 ) + { + m_engine->SetEditIndentValue(4); + } + else + { + m_engine->SetEditIndentValue(2); + } + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_SOLUCE4: + m_bSoluce4 = !m_bSoluce4; + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_MOVIES: + m_bMovies = !m_bMovies; + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_NICERST: + m_bNiceReset = !m_bNiceReset; + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_HIMSELF: + m_bHimselfDamage = !m_bHimselfDamage; + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_SCROLL: + m_bCameraScroll = !m_bCameraScroll; + m_camera->SetCameraScroll(m_bCameraScroll); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_INVERTX: + m_bCameraInvertX = !m_bCameraInvertX; + m_camera->SetCameraInvertX(m_bCameraInvertX); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_INVERTY: + m_bCameraInvertY = !m_bCameraInvertY; + m_camera->SetCameraInvertY(m_bCameraInvertY); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_EFFECT: + m_bEffect = !m_bEffect; + m_camera->SetEffect(m_bEffect); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + } + return false; + } + + if ( m_phase == PHASE_SETUPc || // setup/commands ? + m_phase == PHASE_SETUPcs ) + { + switch( event.event ) + { + case EVENT_INTERFACE_KSCROLL: + UpdateKey(); + break; + + case EVENT_INTERFACE_KLEFT: + case EVENT_INTERFACE_KRIGHT: + case EVENT_INTERFACE_KUP: + case EVENT_INTERFACE_KDOWN: + case EVENT_INTERFACE_KGUP: + case EVENT_INTERFACE_KGDOWN: + case EVENT_INTERFACE_KCAMERA: + case EVENT_INTERFACE_KDESEL: + case EVENT_INTERFACE_KACTION: + case EVENT_INTERFACE_KNEAR: + case EVENT_INTERFACE_KAWAY: + case EVENT_INTERFACE_KNEXT: + case EVENT_INTERFACE_KHUMAN: + case EVENT_INTERFACE_KQUIT: + case EVENT_INTERFACE_KHELP: + case EVENT_INTERFACE_KPROG: + case EVENT_INTERFACE_KCBOT: + case EVENT_INTERFACE_KSPEED10: + case EVENT_INTERFACE_KSPEED15: + case EVENT_INTERFACE_KSPEED20: + case EVENT_INTERFACE_KSPEED30: + case EVENT_INTERFACE_KVISIT: + ChangeKey(event.event); + UpdateKey(); + break; + + case EVENT_INTERFACE_KDEF: + m_engine->ResetKey(); + UpdateKey(); + break; + + case EVENT_INTERFACE_JOYSTICK: + m_engine->SetJoystick(!m_engine->RetJoystick()); + UpdateSetupButtons(); + break; + } + return false; + } + + if ( m_phase == PHASE_SETUPs || // setup/sound ? + m_phase == PHASE_SETUPss ) + { + switch( event.event ) + { + case EVENT_INTERFACE_VOLSOUND: + case EVENT_INTERFACE_VOLMUSIC: + ChangeSetupButtons(); + break; + + case EVENT_INTERFACE_SOUND3D: + m_sound->SetSound3D(!m_sound->RetSound3D()); + ChangeSetupButtons(); + UpdateSetupButtons(); + break; + + case EVENT_INTERFACE_SILENT: + m_sound->SetAudioVolume(0); + m_sound->SetMidiVolume(0); + UpdateSetupButtons(); + break; + case EVENT_INTERFACE_NOISY: + m_sound->SetAudioVolume(MAXVOLUME); + m_sound->SetMidiVolume(MAXVOLUME*3/4); + UpdateSetupButtons(); + break; + } + return false; + } + + if ( m_phase == PHASE_READ ) + { + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return false; + + if ( event.event == pw->RetEventMsgClose() || + event.event == EVENT_INTERFACE_BACK || + (event.event == EVENT_KEYDOWN && event.param == VK_ESCAPE) ) + { + ChangePhase(m_phaseTerm); + } + + if ( event.event == EVENT_INTERFACE_IOLIST ) + { + IOUpdateList(); + } + if ( event.event == EVENT_INTERFACE_IODELETE ) + { + IODeleteScene(); + IOUpdateList(); + } + if ( event.event == EVENT_INTERFACE_IOREAD ) + { + if ( IOReadScene() ) + { + m_main->ChangePhase(PHASE_LOADING); + } + } + + return false; + } + + if ( m_phase == PHASE_WRITEs || + m_phase == PHASE_READs ) + { + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return false; + + if ( event.event == pw->RetEventMsgClose() || + event.event == EVENT_INTERFACE_BACK || + (event.event == EVENT_KEYDOWN && event.param == VK_ESCAPE) ) + { + m_interface->DeleteControl(EVENT_WINDOW5); + ChangePhase(PHASE_SIMUL); + StopSuspend(); + } + + if ( event.event == EVENT_INTERFACE_IOLIST ) + { + IOUpdateList(); + } + if ( event.event == EVENT_INTERFACE_IODELETE ) + { + IODeleteScene(); + IOUpdateList(); + } + if ( event.event == EVENT_INTERFACE_IOWRITE ) + { + IOWriteScene(); + m_interface->DeleteControl(EVENT_WINDOW5); + ChangePhase(PHASE_SIMUL); + StopSuspend(); + } + if ( event.event == EVENT_INTERFACE_IOREAD ) + { + if ( IOReadScene() ) + { + m_interface->DeleteControl(EVENT_WINDOW5); + ChangePhase(PHASE_SIMUL); + StopSuspend(); + m_main->ChangePhase(PHASE_LOADING); + } + } + + return false; + } + + if ( m_phase == PHASE_WELCOME1 ) + { + if ( event.event == EVENT_KEYDOWN || + event.event == EVENT_LBUTTONDOWN || + event.event == EVENT_RBUTTONDOWN ) + { + ChangePhase(PHASE_WELCOME2); + return true; + } + } + if ( m_phase == PHASE_WELCOME2 ) + { + if ( event.event == EVENT_KEYDOWN || + event.event == EVENT_LBUTTONDOWN || + event.event == EVENT_RBUTTONDOWN ) + { + ChangePhase(PHASE_WELCOME3); + return true; + } + } + if ( m_phase == PHASE_WELCOME3 ) + { + if ( event.event == EVENT_KEYDOWN || + event.event == EVENT_LBUTTONDOWN || + event.event == EVENT_RBUTTONDOWN ) + { + ChangePhase(PHASE_NAME); + return true; + } + } + + if ( m_phase == PHASE_GENERIC ) + { + if ( event.event == EVENT_INTERFACE_ABORT ) + { + ChangePhase(PHASE_INIT); + } + + if ( event.event == EVENT_KEYDOWN ) + { + if ( event.param == VK_ESCAPE ) + { + ChangePhase(PHASE_INIT); + } + else + { + m_event->MakeEvent(newEvent, EVENT_QUIT); + m_event->AddEvent(newEvent); + } + } + + if ( event.event == EVENT_LBUTTONDOWN || + event.event == EVENT_RBUTTONDOWN ) + { + m_event->MakeEvent(newEvent, EVENT_QUIT); + m_event->AddEvent(newEvent); + } + } + + return true; +} + + +// Moves the reflections. + +void CMainDialog::GlintMove() +{ + CWindow* pw; + CGroup* pg; + Math::Point pos, dim, zoom; + + if ( m_phase == PHASE_SIMUL ) return; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + + if ( m_phase == PHASE_INIT ) + { + pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTl); + if ( pg != 0 ) + { + zoom.x = sinf(m_glintTime*0.23f); + zoom.y = sinf(m_glintTime*0.37f); + pos.x = 0.35f; + pos.y = 0.90f; + dim.x = 0.30f-0.10f*(zoom.x+1.0f)/2.0f; + dim.y = 0.50f-0.30f*(zoom.y+1.0f)/2.0f; + pos.y -= dim.y; + pg->SetPos(pos); + pg->SetDim(dim); + } + + pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTr); + if ( pg != 0 ) + { + zoom.x = sinf(m_glintTime*0.21f); + zoom.y = sinf(m_glintTime*0.26f); + pos.x = 0.65f; + pos.y = 0.10f; + dim.x = 0.30f-0.10f*(zoom.x+1.0f)/2.0f; + dim.y = 0.50f-0.30f*(zoom.y+1.0f)/2.0f; + pos.x -= dim.x; + pg->SetPos(pos); + pg->SetDim(dim); + } + } + + if ( m_phase == PHASE_NAME || + m_phase == PHASE_TRAINER || + m_phase == PHASE_MISSION || + m_phase == PHASE_FREE || + m_phase == PHASE_TEEN || + m_phase == PHASE_USER || + m_phase == PHASE_PROTO ) + { + pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTl); + if ( pg != 0 ) + { + zoom.x = sinf(m_glintTime*0.22f); + zoom.y = sinf(m_glintTime*0.37f); + pos.x = 0.10f; + pos.y = 0.90f; + dim.x = 0.60f+0.30f*zoom.x; + dim.y = 0.60f+0.30f*zoom.y; + pos.y -= dim.y; + pg->SetPos(pos); + pg->SetDim(dim); + } + + pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTr); + if ( pg != 0 ) + { + zoom.x = sinf(m_glintTime*0.19f); + zoom.y = sinf(m_glintTime*0.28f); + pos.x = 0.90f; + pos.y = 0.10f; + dim.x = 0.60f+0.30f*zoom.x; + dim.y = 0.60f+0.30f*zoom.y; + pos.x -= dim.x; + pg->SetPos(pos); + pg->SetDim(dim); + } + } + + if ( m_phase == PHASE_SETUPd || + m_phase == PHASE_SETUPg || + m_phase == PHASE_SETUPp || + m_phase == PHASE_SETUPc || + m_phase == PHASE_SETUPs || + m_phase == PHASE_SETUPds || + m_phase == PHASE_SETUPgs || + m_phase == PHASE_SETUPps || + m_phase == PHASE_SETUPcs || + m_phase == PHASE_SETUPss ) + { + pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTu); + if ( pg != 0 ) + { + zoom.y = sinf(m_glintTime*0.27f); + pos.x = 0.10f; + pos.y = 0.76f; + dim.x = 0.80f; + dim.y = 0.32f+0.20f*zoom.y; + pos.y -= dim.y; + pg->SetPos(pos); + pg->SetDim(dim); + } + + pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTr); + if ( pg != 0 ) + { + zoom.x = sinf(m_glintTime*0.29f); + zoom.y = sinf(m_glintTime*0.14f); + pos.x = 0.90f; + pos.y = 0.10f; + dim.x = 0.40f+0.20f*zoom.x; + dim.y = 0.40f+0.20f*zoom.y; + pos.x -= dim.x; + pg->SetPos(pos); + pg->SetDim(dim); + } + } + + if ( m_phase == PHASE_WRITE || + m_phase == PHASE_READ || + m_phase == PHASE_WRITEs || + m_phase == PHASE_READs ) + { + pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTl); + if ( pg != 0 ) + { + zoom.x = sinf(m_glintTime*0.22f); + zoom.y = sinf(m_glintTime*0.37f); + pos.x = 0.10f; + pos.y = 0.90f; + dim.x = 0.60f+0.30f*zoom.x; + dim.y = 0.60f+0.30f*zoom.y; + pos.y -= dim.y; + pg->SetPos(pos); + pg->SetDim(dim); + } + + pg = (CGroup*)pw->SearchControl(EVENT_INTERFACE_GLINTr); + if ( pg != 0 ) + { + zoom.x = sinf(m_glintTime*0.19f); + zoom.y = sinf(m_glintTime*0.28f); + pos.x = 0.90f; + pos.y = 0.10f; + dim.x = 0.60f+0.30f*zoom.x; + dim.y = 0.60f+0.30f*zoom.y; + pos.x -= dim.x; + pg->SetPos(pos); + pg->SetDim(dim); + } + } +} + + +// Returns the position for a sound. + +Math::Vector SoundPos(Math::Point pos) +{ + Math::Vector s; + + s.x = (pos.x-0.5f)*2.0f; + s.y = (pos.y-0.5f)*2.0f; + s.z = 0.0f; + + return s; +} + +// Returns a random position for a sound. + +Math::Vector SoundRand() +{ + Math::Vector s; + + s.x = (Math::Rand()-0.5f)*2.0f; + s.y = (Math::Rand()-0.5f)*2.0f; + s.z = 0.0f; + + return s; +} + +// Makes pretty qq particles evolve. + +void CMainDialog::FrameParticule(float rTime) +{ +#if _NEWLOOK +#else + Math::Vector pos, speed; + Math::Point dim; + float *pParti, *pGlint; + int nParti, nGlint; + int i, r, ii; + + static float partiPosInit[1+5*12] = + { // x x t2 t2 type + 12.0f, + 607.0f, 164.0f, 0.2f, 0.8f, 1.0f, // upper cable + 604.0f, 205.0f, 0.1f, 0.3f, 1.0f, // middle cable + 603.0f, 247.0f, 0.1f, 0.3f, 1.0f, // lower cable + 119.0f, 155.0f, 0.2f, 0.4f, 2.0f, // left pipe + 366.0f, 23.0f, 0.5f, 1.5f, 4.0f, // upper pipe + 560.0f, 414.0f, 0.1f, 0.1f, 1.0f, // button lower/right + 20.0f, 413.0f, 0.1f, 0.1f, 2.0f, // button lower/left + 39.0f, 78.0f, 0.1f, 0.2f, 1.0f, // left pot + 39.0f, 78.0f, 0.5f, 0.9f, 1.0f, // left pot + 170.0f, 229.0f, 0.5f, 0.5f, 3.0f, // left smoke + 170.0f, 229.0f, 0.5f, 0.5f, 3.0f, // left smoke + 474.0f, 229.0f, 0.5f, 0.5f, 3.0f, // right smoke + }; + + static float glintPosInit[1+2*14] = + { + 14.0f, + 15.0f, 407.0f, + 68.0f, 417.0f, + 548.0f, 36.0f, + 611.0f, 37.0f, + 611.0f, 100.0f, + 611.0f, 395.0f, + 36.0f, 35.0f, + 166.0f, 55.0f, + 166.0f, 94.0f, + 477.0f, 56.0f, + 31.0f, 190.0f, + 32.0f, 220.0f, + 65.0f, 221.0f, + 65.0f, 250.0f, + }; + + static float partiPosBig[1+5*12] = + { // x x t2 t2 type + 12.0f, + 607.0f, 164.0f, 0.2f, 0.8f, 1.0f, // upper cable + 604.0f, 205.0f, 0.1f, 0.3f, 1.0f, // middle cable + 603.0f, 247.0f, 0.1f, 0.3f, 1.0f, // lower cable + 64.0f, 444.0f, 0.2f, 0.8f, 1.0f, // down the left cable + 113.0f, 449.0f, 0.1f, 0.3f, 1.0f, // down the left cable + 340.0f, 463.0f, 0.2f, 0.8f, 1.0f, // down the middle cable + 36.0f, 155.0f, 0.2f, 0.4f, 2.0f, // left pipe + 366.0f, 23.0f, 0.5f, 1.5f, 4.0f, // upper pipe + 612.0f, 414.0f, 0.1f, 0.1f, 1.0f, // button lower/right + 20.0f, 413.0f, 0.1f, 0.1f, 2.0f, // button lower/left + 39.0f, 78.0f, 0.1f, 0.2f, 1.0f, // left pot + 39.0f, 78.0f, 0.5f, 0.9f, 1.0f, // left pot + }; + + static float glintPosBig[1+2*12] = + { + 12.0f, + 15.0f, 407.0f, + 48.0f, 399.0f, + 611.0f, 37.0f, + 611.0f, 100.0f, + 611.0f, 395.0f, + 36.0f, 35.0f, + 31.0f, 190.0f, + 32.0f, 220.0f, + 31.0f, 221.0f, + 31.0f, 189.0f, + 255.0f, 18.0f, + 279.0f, 18.0f, + }; + + if ( m_bDialog || !m_bRain ) return; + + if ( m_phase == PHASE_INIT ) + { + pParti = partiPosInit; + pGlint = glintPosInit; + } + else if ( m_phase == PHASE_NAME || + m_phase == PHASE_TRAINER || + m_phase == PHASE_DEFI || + m_phase == PHASE_MISSION || + m_phase == PHASE_FREE || + m_phase == PHASE_TEEN || + m_phase == PHASE_USER || + m_phase == PHASE_PROTO || + m_phase == PHASE_SETUPd || + m_phase == PHASE_SETUPg || + m_phase == PHASE_SETUPp || + m_phase == PHASE_SETUPc || + m_phase == PHASE_SETUPs || + m_phase == PHASE_WRITE || + m_phase == PHASE_READ ) + { + pParti = partiPosBig; + pGlint = glintPosBig; + } + else + { + return; + } + + nParti = (int)(*pParti++); + nGlint = (int)(*pGlint++); + + for ( i=0 ; i<10 ; i++ ) + { + if ( m_partiPhase[i] == 0 ) // waiting? + { + m_partiTime[i] -= rTime; + if ( m_partiTime[i] <= 0.0f ) + { + r = rand()%3; + + if ( r == 0 ) + { + ii = rand()%nParti; + m_partiPos[i].x = pParti[ii*5+0]/640.0f; + m_partiPos[i].y = (480.0f-pParti[ii*5+1])/480.0f; + m_partiTime[i] = pParti[ii*5+2]+Math::Rand()*pParti[ii*5+3]; + m_partiPhase[i] = (int)pParti[ii*5+4]; + if ( m_partiPhase[i] == 3 ) + { + m_sound->Play(SOUND_PSHHH, SoundPos(m_partiPos[i]), 0.3f+Math::Rand()*0.3f); + } + else + { + m_sound->Play(SOUND_GGG, SoundPos(m_partiPos[i]), 0.1f+Math::Rand()*0.4f); + } + } + + if ( r == 1 ) + { + ii = rand()%nGlint; + pos.x = pGlint[ii*2+0]/640.0f; + pos.y = (480.0f-pGlint[ii*2+1])/480.0f; + pos.z = 0.0f; + speed.x = 0.0f; + speed.y = 0.0f; + speed.z = 0.0f; + dim.x = 0.04f+Math::Rand()*0.04f; + dim.y = dim.x/0.75f; + m_particule->CreateParticule(pos, speed, dim, + rand()%2?PARTIGLINT:PARTICONTROL, + Math::Rand()*0.4f+0.4f, 0.0f, 0.0f, + SH_INTERFACE); + m_partiTime[i] = 0.5f+Math::Rand()*0.5f; + } + + if ( r == 2 ) + { + ii = rand()%7; + if ( ii == 0 ) + { + m_sound->Play(SOUND_ENERGY, SoundRand(), 0.2f+Math::Rand()*0.2f); + m_partiTime[i] = 1.0f+Math::Rand()*1.0f; + } + if ( ii == 1 ) + { + m_sound->Play(SOUND_STATION, SoundRand(), 0.2f+Math::Rand()*0.2f); + m_partiTime[i] = 1.0f+Math::Rand()*2.0f; + } + if ( ii == 2 ) + { + m_sound->Play(SOUND_ALARM, SoundRand(), 0.1f+Math::Rand()*0.1f); + m_partiTime[i] = 2.0f+Math::Rand()*4.0f; + } + if ( ii == 3 ) + { + m_sound->Play(SOUND_INFO, SoundRand(), 0.1f+Math::Rand()*0.1f); + m_partiTime[i] = 2.0f+Math::Rand()*4.0f; + } + if ( ii == 4 ) + { + m_sound->Play(SOUND_RADAR, SoundRand(), 0.2f+Math::Rand()*0.2f); + m_partiTime[i] = 0.5f+Math::Rand()*1.0f; + } + if ( ii == 5 ) + { + m_sound->Play(SOUND_GFLAT, SoundRand(), 0.3f+Math::Rand()*0.3f); + m_partiTime[i] = 2.0f+Math::Rand()*4.0f; + } + if ( ii == 6 ) + { + m_sound->Play(SOUND_ALARMt, SoundRand(), 0.1f+Math::Rand()*0.1f); + m_partiTime[i] = 2.0f+Math::Rand()*4.0f; + } + } + } + } + + if ( m_partiPhase[i] != 0 ) // generates? + { + m_partiTime[i] -= rTime; + if ( m_partiTime[i] > 0.0f ) + { + if ( m_partiPhase[i] == 1 ) // sparks? + { + pos.x = m_partiPos[i].x; + pos.y = m_partiPos[i].y; + pos.z = 0.0f; + pos.x += (Math::Rand()-0.5f)*0.01f; + pos.y += (Math::Rand()-0.5f)*0.01f; + speed.x = (Math::Rand()-0.5f)*0.2f; + speed.y = (Math::Rand()-0.5f)*0.2f; + speed.z = 0.0f; + dim.x = 0.005f+Math::Rand()*0.005f; + dim.y = dim.x/0.75f; + m_particule->CreateParticule(pos, speed, dim, PARTIBLITZ, + Math::Rand()*0.2f+0.2f, 0.0f, 0.0f, + SH_INTERFACE); + pos.x = m_partiPos[i].x; + pos.y = m_partiPos[i].y; + pos.z = 0.0f; + speed.x = (Math::Rand()-0.5f)*0.5f; + speed.y = (0.3f+Math::Rand()*0.3f); + speed.z = 0.0f; + dim.x = 0.01f+Math::Rand()*0.01f; + dim.y = dim.x/0.75f; + m_particule->CreateParticule(pos, speed, dim, + (ParticuleType)(PARTILENS1+rand()%3), + Math::Rand()*0.5f+0.5f, 2.0f, 0.0f, + SH_INTERFACE); + } + if ( m_partiPhase[i] == 2 ) // sparks? + { + pos.x = m_partiPos[i].x; + pos.y = m_partiPos[i].y; + pos.z = 0.0f; + pos.x += (Math::Rand()-0.5f)*0.01f; + pos.y += (Math::Rand()-0.5f)*0.01f; + speed.x = (Math::Rand()-0.5f)*0.2f; + speed.y = (Math::Rand()-0.5f)*0.2f; + speed.z = 0.0f; + dim.x = 0.005f+Math::Rand()*0.005f; + dim.y = dim.x/0.75f; + m_particule->CreateParticule(pos, speed, dim, PARTIBLITZ, + Math::Rand()*0.2f+0.2f, 0.0f, 0.0f, + SH_INTERFACE); + pos.x = m_partiPos[i].x; + pos.y = m_partiPos[i].y; + pos.z = 0.0f; + speed.x = (Math::Rand()-0.5f)*0.5f; + speed.y = (0.3f+Math::Rand()*0.3f); + speed.z = 0.0f; + dim.x = 0.005f+Math::Rand()*0.005f; + dim.y = dim.x/0.75f; + m_particule->CreateParticule(pos, speed, dim, PARTISCRAPS, + Math::Rand()*0.5f+0.5f, 2.0f, 0.0f, + SH_INTERFACE); + } + if ( m_partiPhase[i] == 3 ) // smoke? + { + pos.x = m_partiPos[i].x; + pos.y = m_partiPos[i].y; + pos.z = 0.0f; + pos.x += (Math::Rand()-0.5f)*0.03f; + pos.y += (Math::Rand()-0.5f)*0.03f; + speed.x = (Math::Rand()-0.5f)*0.2f; + speed.y = Math::Rand()*0.5f; + speed.z = 0.0f; + dim.x = 0.03f+Math::Rand()*0.07f; + dim.y = dim.x/0.75f; + m_particule->CreateParticule(pos, speed, dim, PARTICRASH, + Math::Rand()*0.4f+0.4f, 0.0f, 0.0f, + SH_INTERFACE); + } + } + else + { + m_partiPhase[i] = 0; + m_partiTime[i] = 2.0f+Math::Rand()*4.0f; + } + } + } +#endif +} + +// Some nice particles following the mouse. + +void CMainDialog::NiceParticule(Math::Point mouse, bool bPress) +{ + Math::Vector pos, speed; + Math::Point dim; + + if ( !m_bRain ) return; + if ( (m_phase == PHASE_SIMUL || + m_phase == PHASE_WIN || + m_phase == PHASE_LOST || + m_phase == PHASE_MODEL ) && + !m_bDialog ) return; + + if ( bPress ) + { + pos.x = mouse.x; + pos.y = mouse.y; + pos.z = 0.0f; + speed.x = (Math::Rand()-0.5f)*0.5f; + speed.y = (0.3f+Math::Rand()*0.3f); + speed.z = 0.0f; + dim.x = 0.005f+Math::Rand()*0.005f; + dim.y = dim.x/0.75f; + m_particule->CreateParticule(pos, speed, dim, PARTISCRAPS, + Math::Rand()*0.5f+0.5f, 2.0f, 0.0f, + SH_INTERFACE); + } + else + { + pos.x = mouse.x; + pos.y = mouse.y; + pos.z = 0.0f; + speed.x = (Math::Rand()-0.5f)*0.5f; + speed.y = (0.3f+Math::Rand()*0.3f); + speed.z = 0.0f; + dim.x = 0.01f+Math::Rand()*0.01f; + dim.y = dim.x/0.75f; + m_particule->CreateParticule(pos, speed, dim, + (ParticuleType)(PARTILENS1+rand()%3), + Math::Rand()*0.5f+0.5f, 2.0f, 0.0f, + SH_INTERFACE); + } +} + + + +// Specifies the special user folder if needed. + +void CMainDialog::SetUserDir(char *base, int rank) +{ + char dir[100]; + + if ( strcmp(base, "user") == 0 && rank >= 100 ) + { + sprintf(dir, "%s\\%s", m_userDir, m_userList[rank/100-1]); + UserDir(true, dir); + } + else + { + UserDir(false, ""); + } +} + +// Builds the file name of a mission. + +void CMainDialog::BuildSceneName(char *filename, char *base, int rank) +{ + if ( strcmp(base, "user") == 0 ) + { + sprintf(filename, "%s\\%s\\scene%.2d.txt", m_userDir, m_userList[rank/100-1], rank%100); + } + else + { + sprintf(filename, "%s\\%s%.3d.txt", m_sceneDir, base, rank); + } +} + +// Built the default descriptive name of a mission. + +void CMainDialog::BuildResumeName(char *filename, char *base, int rank) +{ + sprintf(filename, "Scene %s %d", base, rank); +} + +// Returns the name of the file or save the files. + +char* CMainDialog::RetFilesDir() +{ + return m_filesDir; +} + + +// Updates the list of players after checking the files on disk. + +void CMainDialog::ReadNameList() +{ + CWindow* pw; + CList* pl; + long hFile; + struct _finddata_t fBuffer; + bool bDo; + char dir[_MAX_FNAME]; + char temp[_MAX_FNAME]; + char filenames[_MAX_FNAME][100]; + int nbFilenames, i; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); + if ( pl == 0 ) return; + pl->Flush(); + + nbFilenames = 0; + sprintf(dir, "%s\\*", m_savegameDir); + hFile = _findfirst(dir, &fBuffer); + if ( hFile != -1 ) + { + do + { + if ( (fBuffer.attrib & _A_SUBDIR) && fBuffer.name[0] != '.' ) + { + strcpy(filenames[nbFilenames++], fBuffer.name); + } + } + while ( _findnext(hFile, &fBuffer) == 0 && nbFilenames < 100 ); + } + do // sorts all names: + { + bDo = false; + for ( i=0 ; i 0 ) + { + strcpy(temp, filenames[i]); + strcpy(filenames[i], filenames[i+1]); + strcpy(filenames[i+1], temp); + bDo = true; + } + } + } + while ( bDo ); + + for ( i=0 ; iSetName(i, filenames[i]); + } +} + +// Updates the controls of the players. + +void CMainDialog::UpdateNameControl() +{ + CWindow* pw; + CList* pl; + CButton* pb; + CEdit* pe; + char name[100]; + char* gamer; + int total, sel; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); + if ( pl == 0 ) return; + pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_NEDIT); + if ( pe == 0 ) return; + + gamer = m_main->RetGamerName(); + total = pl->RetTotal(); + sel = pl->RetSelect(); + pe->GetText(name, 100); + + pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_NCANCEL); + if ( pb != 0 ) + { + pb->SetState(STATE_ENABLE, gamer[0]!=0); + } + + pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_NDELETE); + if ( pb != 0 ) + { + pb->SetState(STATE_ENABLE, total>0 && sel!=-1); + } + + pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_NOK); + if ( pb != 0 ) + { + pb->SetState(STATE_ENABLE, name[0]!=0 || sel!=-1); + } + + pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_PERSO); + if ( pb != 0 ) + { + pb->SetState(STATE_ENABLE, name[0]!=0 || sel!=-1); + } +} + +// Updates the list of players by name frape. + +void CMainDialog::UpdateNameList() +{ + CWindow* pw; + CList* pl; + CEdit* pe; + char name[100]; + int total, sel, i; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); + if ( pl == 0 ) return; + pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_NEDIT); + if ( pe == 0 ) return; + + pe->GetText(name, 100); + total = pl->RetTotal(); + sel = pl->RetSelect(); + + for ( i=0 ; iRetName(i)) == 0 ) + { + pl->SetSelect(i); + pl->ShowSelect(false); + return; + } + } + + pl->SetSelect(-1); +} + +// Updates the player's name and function of the selected list. + +void CMainDialog::UpdateNameEdit() +{ + CWindow* pw; + CList* pl; + CEdit* pe; + char* name; + int sel; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); + if ( pl == 0 ) return; + pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_NEDIT); + if ( pe == 0 ) return; + + sel = pl->RetSelect(); + if ( sel == -1 ) + { + pe->SetText(""); + pe->SetCursor(0, 0); + } + else + { + name = pl->RetName(sel); + pe->SetText(name); + pe->SetCursor(strlen(name), 0); + } + + UpdateNameControl(); +} + +// Updates the representation of the player depending on the selected list. + +void CMainDialog::UpdateNameFace() +{ + CWindow* pw; + CList* pl; + char* name; + int sel; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); + if ( pl == 0 ) return; + + sel = pl->RetSelect(); + if ( sel == -1 ) return; + name = pl->RetName(sel); + + ReadGamerPerso(name); +} + +// Selects a player. + +void CMainDialog::NameSelect() +{ + CWindow* pw; + CList* pl; + CEdit* pe; + char name[100]; + int sel; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); + if ( pl == 0 ) return; + pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_NEDIT); + if ( pe == 0 ) return; + + pe->GetText(name, 100); + sel = pl->RetSelect(); + + if ( sel == -1 ) + { + NameCreate(); + } + else + { + m_main->SetGamerName(pl->RetName(sel)); + m_main->ChangePhase(PHASE_INIT); + } + + RetGamerFace(m_main->RetGamerName()); + + SetProfileString("Gamer", "LastName", m_main->RetGamerName()); +} + +// Creates a new player. + +void CMainDialog::NameCreate() +{ + CWindow* pw; + CEdit* pe; + char name[100]; + char dir[100]; + char c; + int len, i, j; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_NEDIT); + if ( pe == 0 ) return; + + pe->GetText(name, 100); + if ( name[0] == 0 ) + { + m_sound->Play(SOUND_TZOING); + return; + } + + len = strlen(name); + j = 0; + for ( i=0 ; i= '0' && c <= '9') || + (c >= 'a' && c <= 'z') || + c == ' ' || + c == '-' || + c == '_' || + c == '.' || + c == ',' || + c == '\'' ) + { + name[j++] = name[i]; + } + } + name[j] = 0; + if ( j == 0 ) + { + m_sound->Play(SOUND_TZOING); + return; + } + + _mkdir(m_savegameDir); // if does not exist yet! + + sprintf(dir, "%s\\%s", m_savegameDir, name); + if ( _mkdir(dir) != 0 ) + { + m_sound->Play(SOUND_TZOING); + pe->SetText(name); + pe->SetCursor(strlen(name), 0); + pe->SetFocus(true); + return; + } + + SetGamerFace(name, 0); + + m_main->SetGamerName(name); + m_main->ChangePhase(PHASE_INIT); +} + +// Deletes a folder and all its offspring. + +bool RemoveDir(char *dirname) +{ + long hFile; + struct _finddata_t fBuffer; + char filename[100]; + + sprintf(filename, "%s\\*", dirname); + hFile = _findfirst(filename, &fBuffer); + if ( hFile != -1 ) + { + do + { + if ( fBuffer.name[0] != '.' ) + { + if ( fBuffer.attrib & _A_SUBDIR ) + { + sprintf(filename, "%s\\%s", dirname, fBuffer.name); + RemoveDir(filename); + } + else + { + sprintf(filename, "%s\\%s", dirname, fBuffer.name); + remove(filename); + } + } + } + while ( _findnext(hFile, &fBuffer) == 0 ); + } + + if ( _rmdir(dirname) != 0 ) + { + return false; + } + return true; +} + +// Removes a player. + +void CMainDialog::NameDelete() +{ + CWindow* pw; + CList* pl; + int sel; + char* gamer; + char dir[100]; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_NLIST); + if ( pl == 0 ) return; + + sel = pl->RetSelect(); + if ( sel == -1 ) + { + m_sound->Play(SOUND_TZOING); + return; + } + gamer = pl->RetName(sel); + + // Deletes all the contents of the file. + sprintf(dir, "%s\\%s", m_savegameDir, gamer); + if ( !RemoveDir(dir) ) + { + m_sound->Play(SOUND_TZOING); + return; + } + + m_main->SetGamerName(""); + pl->SetSelect(-1); + + ReadNameList(); + UpdateNameList(); + UpdateNameControl(); +} + + + +// ests whether two colors are equal or nearly are. + +bool EqColor(const D3DCOLORVALUE &c1, const D3DCOLORVALUE &c2) +{ + return (fabs(c1.r-c2.r) < 0.01f && + fabs(c1.g-c2.g) < 0.01f && + fabs(c1.b-c2.b) < 0.01f ); +} + +// Updates all the buttons for the character. + +void CMainDialog::UpdatePerso() +{ + CWindow* pw; + CLabel* pl; + CButton* pb; + CColor* pc; + CSlider* ps; + D3DCOLORVALUE color; + char name[100]; + int i; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + + pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_PHEAD); + if ( pb != 0 ) + { + pb->SetState(STATE_CHECK, m_persoTab==0); + } + pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_PBODY); + if ( pb != 0 ) + { + pb->SetState(STATE_CHECK, m_persoTab==1); + } + + pl = (CLabel*)pw->SearchControl(EVENT_LABEL11); + if ( pl != 0 ) + { + if ( m_persoTab == 0 ) + { + pl->SetState(STATE_VISIBLE); + GetResource(RES_TEXT, RT_PERSO_FACE, name); + pl->SetName(name); + } + else + { + pl->ClearState(STATE_VISIBLE); + } + } + + pl = (CLabel*)pw->SearchControl(EVENT_LABEL12); + if ( pl != 0 ) + { + if ( m_persoTab == 0 ) + { + pl->SetState(STATE_VISIBLE); + GetResource(RES_TEXT, RT_PERSO_GLASSES, name); + pl->SetName(name); + } + else + { + pl->ClearState(STATE_VISIBLE); + } + } + + pl = (CLabel*)pw->SearchControl(EVENT_LABEL13); + if ( pl != 0 ) + { + if ( m_persoTab == 0 ) GetResource(RES_TEXT, RT_PERSO_HAIR, name); + else GetResource(RES_TEXT, RT_PERSO_BAND, name); + pl->SetName(name); + } + + pl = (CLabel*)pw->SearchControl(EVENT_LABEL14); + if ( pl != 0 ) + { + if ( m_persoTab == 0 ) + { + pl->ClearState(STATE_VISIBLE); + } + else + { + pl->SetState(STATE_VISIBLE); + GetResource(RES_TEXT, RT_PERSO_COMBI, name); + pl->SetName(name); + } + } + + for ( i=0 ; i<4 ; i++ ) + { + pb = (CButton*)pw->SearchControl((EventMsg)(EVENT_INTERFACE_PFACE1+i)); + if ( pb == 0 ) break; + pb->SetState(STATE_VISIBLE, m_persoTab==0); + pb->SetState(STATE_CHECK, i==m_perso.face); + } + + for ( i=0 ; i<10 ; i++ ) + { + pb = (CButton*)pw->SearchControl((EventMsg)(EVENT_INTERFACE_PGLASS0+i)); + if ( pb == 0 ) break; + pb->SetState(STATE_VISIBLE, m_persoTab==0); + pb->SetState(STATE_CHECK, i==m_perso.glasses); + } + + for ( i=0 ; i<3*3 ; i++ ) + { + pc = (CColor*)pw->SearchControl((EventMsg)(EVENT_INTERFACE_PC0a+i)); + if ( pc == 0 ) break; + if ( m_persoTab == 0 ) + { + pc->ClearState(STATE_VISIBLE); + } + else + { + pc->SetState(STATE_VISIBLE); + color.r = perso_color[3*10*1+3*i+0]/255.0f; + color.g = perso_color[3*10*1+3*i+1]/255.0f; + color.b = perso_color[3*10*1+3*i+2]/255.0f; + color.a = 0.0f; + pc->SetColor(color); + pc->SetState(STATE_CHECK, EqColor(color, m_perso.colorCombi)); + } + + pc = (CColor*)pw->SearchControl((EventMsg)(EVENT_INTERFACE_PC0b+i)); + if ( pc == 0 ) break; + color.r = perso_color[3*10*2*m_persoTab+3*i+0]/255.0f; + color.g = perso_color[3*10*2*m_persoTab+3*i+1]/255.0f; + color.b = perso_color[3*10*2*m_persoTab+3*i+2]/255.0f; + color.a = 0.0f; + pc->SetColor(color); + pc->SetState(STATE_CHECK, EqColor(color, m_persoTab?m_perso.colorBand:m_perso.colorHair)); + } + + for ( i=0 ; i<3 ; i++ ) + { + ps = (CSlider*)pw->SearchControl((EventMsg)(EVENT_INTERFACE_PCRa+i)); + if ( ps == 0 ) break; + ps->SetState(STATE_VISIBLE, m_persoTab==1); + } + + if ( m_persoTab == 1 ) + { + color = m_perso.colorCombi; + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCRa); + if ( ps != 0 ) ps->SetVisibleValue(color.r*255.0f); + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCGa); + if ( ps != 0 ) ps->SetVisibleValue(color.g*255.0f); + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCBa); + if ( ps != 0 ) ps->SetVisibleValue(color.b*255.0f); + } + + if ( m_persoTab == 0 ) color = m_perso.colorHair; + else color = m_perso.colorBand; + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCRb); + if ( ps != 0 ) ps->SetVisibleValue(color.r*255.0f); + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCGb); + if ( ps != 0 ) ps->SetVisibleValue(color.g*255.0f); + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCBb); + if ( ps != 0 ) ps->SetVisibleValue(color.b*255.0f); +} + +// Updates the camera for the character. + +void CMainDialog::CameraPerso() +{ + if ( m_persoTab == 0 ) + { +//? m_camera->Init(Math::Vector(4.0f, 0.0f, 0.0f), +//? Math::Vector(0.0f, 0.0f, 1.0f), 0.0f); + m_camera->Init(Math::Vector(6.0f, 0.0f, 0.0f), + Math::Vector(0.0f, 0.2f, 1.5f), 0.0f); + } + else + { + m_camera->Init(Math::Vector(18.0f, 0.0f, 4.5f), + Math::Vector(0.0f, 1.6f, 4.5f), 0.0f); + } + + m_camera->SetType(CAMERA_SCRIPT); + m_camera->FixCamera(); +} + +// Sets a fixed color. + +void CMainDialog::FixPerso(int rank, int index) +{ + if ( m_persoTab == 0 ) + { + if ( index == 1 ) + { + m_perso.colorHair.r = perso_color[3*10*0+rank*3+0]/255.0f; + m_perso.colorHair.g = perso_color[3*10*0+rank*3+1]/255.0f; + m_perso.colorHair.b = perso_color[3*10*0+rank*3+2]/255.0f; + } + } + if ( m_persoTab == 1 ) + { + if ( index == 0 ) + { + m_perso.colorCombi.r = perso_color[3*10*1+rank*3+0]/255.0f; + m_perso.colorCombi.g = perso_color[3*10*1+rank*3+1]/255.0f; + m_perso.colorCombi.b = perso_color[3*10*1+rank*3+2]/255.0f; + } + if ( index == 1 ) + { + m_perso.colorBand.r = perso_color[3*10*2+rank*3+0]/255.0f; + m_perso.colorBand.g = perso_color[3*10*2+rank*3+1]/255.0f; + m_perso.colorBand.b = perso_color[3*10*2+rank*3+2]/255.0f; + } + } +} + +// Updates the color of the character. + +void CMainDialog::ColorPerso() +{ + CWindow* pw; + CSlider* ps; + D3DCOLORVALUE color; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + + color.a = 0.0f; + + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCRa); + if ( ps != 0 ) color.r = ps->RetVisibleValue()/255.0f; + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCGa); + if ( ps != 0 ) color.g = ps->RetVisibleValue()/255.0f; + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCBa); + if ( ps != 0 ) color.b = ps->RetVisibleValue()/255.0f; + if ( m_persoTab == 1 ) m_perso.colorCombi = color; + + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCRb); + if ( ps != 0 ) color.r = ps->RetVisibleValue()/255.0f; + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCGb); + if ( ps != 0 ) color.g = ps->RetVisibleValue()/255.0f; + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_PCBb); + if ( ps != 0 ) color.b = ps->RetVisibleValue()/255.0f; + if ( m_persoTab == 0 ) m_perso.colorHair = color; + else m_perso.colorBand = color; +} + +// Updates the default settings of the character. + +void CMainDialog::DefPerso() +{ + m_perso.colorCombi.r = 206.0f/256.0f; + m_perso.colorCombi.g = 206.0f/256.0f; + m_perso.colorCombi.b = 204.0f/256.0f; // ~white + m_perso.colorBand.r = 255.0f/256.0f; + m_perso.colorBand.g = 132.0f/256.0f; + m_perso.colorBand.b = 1.0f/256.0f; // orange + + if ( m_perso.face == 0 ) // normal ? + { + m_perso.glasses = 0; + m_perso.colorHair.r = 90.0f/256.0f; + m_perso.colorHair.g = 95.0f/256.0f; + m_perso.colorHair.b = 85.0f/256.0f; // black + } + if ( m_perso.face == 1 ) // bald ? + { + m_perso.glasses = 0; + m_perso.colorHair.r = 83.0f/256.0f; + m_perso.colorHair.g = 64.0f/256.0f; + m_perso.colorHair.b = 51.0f/256.0f; // brown + } + if ( m_perso.face == 2 ) // carlos ? + { + m_perso.glasses = 1; + m_perso.colorHair.r = 85.0f/256.0f; + m_perso.colorHair.g = 48.0f/256.0f; + m_perso.colorHair.b = 9.0f/256.0f; // brown + } + if ( m_perso.face == 3 ) // blond ? + { + m_perso.glasses = 4; + m_perso.colorHair.r = 255.0f/256.0f; + m_perso.colorHair.g = 255.0f/256.0f; + m_perso.colorHair.b = 181.0f/256.0f; // yellow + } + + m_perso.colorHair.a = 0.0f; + m_perso.colorCombi.a = 0.0f; + m_perso.colorBand.a = 0.0f; +} + + +// Indicates if there is at least one backup. + +bool CMainDialog::IsIOReadScene() +{ + FILE* file; + char filename[100]; + + sprintf(filename, "%s\\%s\\save%c%.3d\\data.sav", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], 0); + file = fopen(filename, "r"); + if ( file == NULL ) return false; + fclose(file); + return true; +} + +// Builds the file name by default. + +void CMainDialog::IOReadName() +{ + FILE* file; + CWindow* pw; + CEdit* pe; + char filename[_MAX_FNAME]; + char op[100]; + char line[500]; + char resume[100]; + char name[100]; + time_t now; + int i; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_IONAME); + if ( pe == 0 ) return; + + sprintf(resume, "%s %d", m_sceneName, m_chap[m_index]+1); + BuildSceneName(filename, m_sceneName, (m_chap[m_index]+1)*100); + file = fopen(filename, "r"); + if ( file != NULL ) + { + while ( fgets(line, 500, file) != NULL ) + { + for ( i=0 ; i<500 ; i++ ) + { + if ( line[i] == '\t' ) line[i] = ' '; // replaces tab by space + if ( line[i] == '/' && line[i+1] == '/' ) + { + line[i] = 0; + break; + } + } + + sprintf(op, "Title.%c", RetLanguageLetter()); + if ( Cmd(line, op) ) + { + OpString(line, "resume", resume); + break; + } + } + fclose(file); + } + + time(&now); + TimeToAscii(now, line); + sprintf(name, "%s %d - %s", resume, m_sel[m_index]+1, line); + pe->SetText(name); + pe->SetCursor(strlen(name), 0); + pe->SetFocus(true); +} + +// Updates the list of games recorded on disk. + +void CMainDialog::IOReadList() +{ + FILE* file = NULL; + CWindow* pw; + CList* pl; + char filename[100]; + char line[500]; + char name[100]; + int i, j; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_IOLIST); + if ( pl == 0 ) return; + + pl->Flush(); + + for ( j=0 ; j<999 ; j++ ) + { + sprintf(filename, "%s\\%s\\save%c%.3d\\data.sav", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], j); + file = fopen(filename, "r"); + if ( file == NULL ) break; + + strcmp(name, filename); // default name + while ( fgets(line, 500, file) != NULL ) + { + for ( i=0 ; i<500 ; i++ ) + { + if ( line[i] == '\t' ) line[i] = ' '; // replaces tab by space + if ( line[i] == '/' && line[i+1] == '/' ) + { + line[i] = 0; + break; + } + } + + if ( Cmd(line, "Title") ) + { + OpString(line, "text", name); + break; + } + } + fclose(file); + + pl->SetName(j, name); + } + + if ( m_phase == PHASE_WRITE || + m_phase == PHASE_WRITEs ) + { + GetResource(RES_TEXT, RT_IO_NEW, name); + pl->SetName(j, name); + j ++; + } + + pl->SetSelect(j-1); + pl->ShowSelect(false); // shows the selected columns +} + +// Updates the buttons according to the selected part in the list. + +void CMainDialog::IOUpdateList() +{ + FILE* file = NULL; + CWindow* pw; + CList* pl; + CButton* pb; + CImage* pi; + char filename[100]; + int sel, max; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_IOLIST); + if ( pl == 0 ) return; + pi = (CImage*)pw->SearchControl(EVENT_INTERFACE_IOIMAGE); + if ( pi == 0 ) return; + + sel = pl->RetSelect(); + max = pl->RetTotal(); + + sprintf(filename, "%s\\%s\\save%c%.3d\\screen.bmp", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); + + if ( m_phase == PHASE_WRITE || + m_phase == PHASE_WRITEs ) + { + if ( sel < max-1 ) + { + pi->SetFilenameImage(filename); + } + else + { + pi->SetFilenameImage(""); + } + + pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_IODELETE); + if ( pb != 0 ) + { + pb->SetState(STATE_ENABLE, sel < max-1); + } + } + else + { + pi->SetFilenameImage(filename); + } +} + +// Deletes the selected scene. + +void CMainDialog::IODeleteScene() +{ + CWindow* pw; + CList* pl; + char dir[100]; + char old[100]; + long hFile; + struct _finddata_t fBuffer; + int sel, max, i; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_IOLIST); + if ( pl == 0 ) return; + + sel = pl->RetSelect(); + if ( sel == -1 ) + { + m_sound->Play(SOUND_TZOING); + return; + } + + // Deletes all the contents of the file. + sprintf(dir, "%s\\%s\\save%c%.3d\\*", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); + hFile = _findfirst(dir, &fBuffer); + if ( hFile != -1 ) + { + do + { + if ( fBuffer.name[0] != '.' ) + { + sprintf(dir, "%s\\%s\\save%c%.3d\\%s", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel, fBuffer.name); + remove(dir); + } + } + while ( _findnext(hFile, &fBuffer) == 0 ); + } + + sprintf(dir, "%s\\%s\\save%c%.3d", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); + if ( _rmdir(dir) != 0 ) + { + m_sound->Play(SOUND_TZOING); + return; + } + + max = pl->RetTotal(); + for ( i=sel+1 ; iRetGamerName(), m_sceneName[0], i); + sprintf(dir, "%s\\%s\\save%c%.3d", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], i-1); + rename(old, dir); + } + IOReadList(); +} + +// Writes the scene. + +bool CMainDialog::IOWriteScene() +{ + CWindow* pw; + CList* pl; + CEdit* pe; + char filename[100]; + char filecbot[100]; + char info[100]; + int sel; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return false; + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_IOLIST); + if ( pl == 0 ) return false; + pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_IONAME); + if ( pe == 0 ) return false; + + sel = pl->RetSelect(); + if ( sel == -1 ) return false; + + _mkdir("Savegame"); // if doesn't exist yet! + sprintf(filename, "%s\\%s", m_savegameDir, m_main->RetGamerName()); + _mkdir(filename); + sprintf(filename, "%s\\%s\\save%c%.3d", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); + _mkdir(filename); + + sprintf(filename, "%s\\%s\\save%c%.3d\\data.sav", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); + sprintf(filecbot, "%s\\%s\\save%c%.3d\\cbot.run", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); + pe->GetText(info, 100); + m_main->IOWriteScene(filename, filecbot, info); + + m_shotDelay = 3; + sprintf(m_shotName, "%s\\%s\\save%c%.3d\\screen.bmp", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); + + return true; +} + +// Reads the scene. + +bool CMainDialog::IOReadScene() +{ + FILE* file; + CWindow* pw; + CList* pl; + char filename[100]; + char filecbot[100]; + char line[500]; + char dir[100]; + int sel, i; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return false; + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_IOLIST); + if ( pl == 0 ) return false; + + sel = pl->RetSelect(); + if ( sel == -1 ) return false; + + sprintf(filename, "%s\\%s\\save%c%.3d\\data.sav", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); + sprintf(filecbot, "%s\\%s\\save%c%.3d\\cbot.run", m_savegameDir, m_main->RetGamerName(), m_sceneName[0], sel); + + file = fopen(filename, "r"); + if ( file == NULL ) return false; + + while ( fgets(line, 500, file) != NULL ) + { + for ( i=0 ; i<500 ; i++ ) + { + if ( line[i] == '\t' ) line[i] = ' '; // replaces tab by space + if ( line[i] == '/' && line[i+1] == '/' ) + { + line[i] = 0; + break; + } + } + + if ( Cmd(line, "Mission") ) + { + OpString(line, "base", m_sceneName); + m_sceneRank = OpInt(line, "rank", 0); + + if ( strcmp(m_sceneName, "user") == 0 ) + { + m_sceneRank = m_sceneRank%100; + OpString(line, "dir", dir); + for ( i=0 ; iRetShowAll() ) return 9; + + for ( j=0 ; j<9 ; j++ ) + { + if ( !RetGamerInfoPassed((j+1)*100) ) + { + return j; + } + } + return 9; +} + +// Updates the lists according to the cheat code. + +void CMainDialog::AllMissionUpdate() +{ + if ( m_phase == PHASE_TRAINER || + m_phase == PHASE_DEFI || + m_phase == PHASE_MISSION || + m_phase == PHASE_FREE || + m_phase == PHASE_TEEN || + m_phase == PHASE_USER || + m_phase == PHASE_PROTO ) + { + UpdateSceneChap(m_chap[m_index]); + UpdateSceneList(m_chap[m_index], m_sel[m_index]); + } +} + +// Updates the chapters of exercises or missions. + +void CMainDialog::UpdateSceneChap(int &chap) +{ + FILE* file = NULL; + CWindow* pw; + CList* pl; + long hFile; + struct _finddata_t fileBuffer; + char filename[_MAX_FNAME]; + char op[100]; + char line[500]; + char name[100]; + int i, j; + bool bPassed, bDo; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_CHAP); + if ( pl == 0 ) return; + + pl->Flush(); + + if ( m_phase == PHASE_USER ) + { + j = 0; + hFile = _findfirst("user\\*", &fileBuffer); + if ( hFile != -1 ) + { + do + { + if ( (fileBuffer.attrib & _A_SUBDIR) != 0 && + fileBuffer.name[0] != '.' ) + { + strcpy(m_userList[j++], fileBuffer.name); + } + } + while ( _findnext(hFile, &fileBuffer) == 0 && j < 100 ); + } + m_userTotal = j; + + do // sorts all names: + { + bDo = false; + for ( i=0 ; i 0 ) + { + strcpy(name, m_userList[i]); + strcpy(m_userList[i], m_userList[i+1]); + strcpy(m_userList[i+1], name); + bDo = true; + } + } + } + while ( bDo ); + + for ( j=0 ; jSetName(j, name); + pl->SetEnable(j, true); + } + } + else + { + for ( j=0 ; j<9 ; j++ ) + { +#if _SCHOOL + if ( m_phase == PHASE_MISSION ) break; + if ( m_phase == PHASE_FREE ) break; +#if _CEEBOTDEMO + if ( m_phase == PHASE_TRAINER && j >= 2 ) break; +#endif +#endif +#if _DEMO + if ( m_phase == PHASE_MISSION && j >= 4 ) break; + if ( m_phase == PHASE_TRAINER && j >= 1 ) break; +#endif + BuildSceneName(filename, m_sceneName, (j+1)*100); + file = fopen(filename, "r"); + if ( file == NULL ) break; + + BuildResumeName(name, m_sceneName, j+1); // default name + while ( fgets(line, 500, file) != NULL ) + { + for ( i=0 ; i<500 ; i++ ) + { + if ( line[i] == '\t' ) line[i] = ' '; // replaces tab by space + if ( line[i] == '/' && line[i+1] == '/' ) + { + line[i] = 0; + break; + } + } + + sprintf(op, "Title.%c", RetLanguageLetter()); + if ( Cmd(line, op) ) + { + OpString(line, "text", name); + break; + } + } + fclose(file); + + bPassed = RetGamerInfoPassed((j+1)*100); + sprintf(line, "%d: %s", j+1, name); + pl->SetName(j, line); + pl->SetCheck(j, bPassed); + pl->SetEnable(j, true); + + if ( m_phase == PHASE_MISSION && !m_main->RetShowAll() && !bPassed ) + { + j ++; + break; + } + +#if _TEEN + if ( m_phase == PHASE_TRAINER && !m_main->RetShowAll() && !bPassed ) + { + j ++; + break; + } +#endif + + if ( m_phase == PHASE_FREE && j == m_accessChap ) + { + j ++; + break; + } + } + } + + if ( chap > j-1 ) chap = j-1; + + pl->SetSelect(chap); + pl->ShowSelect(false); // shows the selected columns +} + +// Updates the list of exercises or missions. + +void CMainDialog::UpdateSceneList(int chap, int &sel) +{ + FILE* file = NULL; + CWindow* pw; + CList* pl; + char filename[_MAX_FNAME]; + char op[100]; + char line[500]; + char name[100]; + int i, j; + bool bPassed; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pl = (CList*)pw->SearchControl(EVENT_INTERFACE_LIST); + if ( pl == 0 ) return; + + pl->Flush(); + + for ( j=0 ; j<99 ; j++ ) + { +#if _SCHOOL + if ( m_phase == PHASE_MISSION ) break; + if ( m_phase == PHASE_FREE ) break; +#if _CEEBOTDEMO +#if _TEEN + if ( m_phase == PHASE_TRAINER && j >= 5 ) break; +#else + if ( m_phase == PHASE_TRAINER && j >= 3 ) break; +#endif +#endif +#endif +#if _DEMO + if ( m_phase == PHASE_MISSION && j >= 3 ) break; + if ( m_phase == PHASE_TRAINER && j >= 5 ) break; +#endif + BuildSceneName(filename, m_sceneName, (chap+1)*100+(j+1)); + file = fopen(filename, "r"); + if ( file == NULL ) break; + + BuildResumeName(name, m_sceneName, j+1); // default name + while ( fgets(line, 500, file) != NULL ) + { + for ( i=0 ; i<500 ; i++ ) + { + if ( line[i] == '\t' ) line[i] = ' '; // replaces tab by space + if ( line[i] == '/' && line[i+1] == '/' ) + { + line[i] = 0; + break; + } + } + + sprintf(op, "Title.%c", RetLanguageLetter()); + if ( Cmd(line, op) ) + { + OpString(line, "text", name); + break; + } + } + fclose(file); + + bPassed = RetGamerInfoPassed((chap+1)*100+(j+1)); + sprintf(line, "%d: %s", j+1, name); + pl->SetName(j, line); + pl->SetCheck(j, bPassed); + pl->SetEnable(j, true); + + if ( m_phase == PHASE_MISSION && !m_main->RetShowAll() && !bPassed ) + { + j ++; + break; + } + +#if _TEEN + if ( m_phase == PHASE_TRAINER && !m_main->RetShowAll() && !bPassed ) + { + j ++; + break; + } +#endif + } + + BuildSceneName(filename, m_sceneName, (chap+1)*100+(j+1)); + file = fopen(filename, "r"); + if ( file == NULL ) + { + m_maxList = j; + } + else + { + m_maxList = j+1; // this is not the last! + fclose(file); + } + + if ( sel > j-1 ) sel = j-1; + + pl->SetSelect(sel); + pl->ShowSelect(false); // shows the selected columns +} + +// Updates the button "solution" according to cheat code. + +void CMainDialog::ShowSoluceUpdate() +{ + CWindow* pw; + CEdit* pe; + CCheck* pc; + + if ( m_phase == PHASE_TRAINER || + m_phase == PHASE_DEFI || + m_phase == PHASE_MISSION || + m_phase == PHASE_FREE || + m_phase == PHASE_TEEN || + m_phase == PHASE_USER || + m_phase == PHASE_PROTO ) + { + m_bSceneSoluce = false; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_RESUME); + if ( pe == 0 ) return; + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_SOLUCE); + if ( pc == 0 ) return; + + if ( m_main->RetShowSoluce() ) + { + pc->SetState(STATE_VISIBLE); + pc->SetState(STATE_CHECK); + m_bSceneSoluce = true; + } + else + { + pc->ClearState(STATE_VISIBLE); + pc->ClearState(STATE_CHECK); + m_bSceneSoluce = false; + } + } +} + +// Updates a summary of exercise or mission. + +void CMainDialog::UpdateSceneResume(int rank) +{ + FILE* file = NULL; + CWindow* pw; + CEdit* pe; + CCheck* pc; + char filename[_MAX_FNAME]; + char op[100]; + char line[500]; + char name[500]; + int i, numTry; + bool bPassed, bVisible; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pe = (CEdit*)pw->SearchControl(EVENT_INTERFACE_RESUME); + if ( pe == 0 ) return; + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_SOLUCE); + + if ( pc == 0 ) + { + m_bSceneSoluce = false; + } + else + { + numTry = RetGamerInfoTry(rank); + bPassed = RetGamerInfoPassed(rank); + bVisible = ( numTry > 2 || bPassed || m_main->RetShowSoluce() ); + if ( !RetSoluce4() ) bVisible = false; + pc->SetState(STATE_VISIBLE, bVisible); + if ( !bVisible ) + { + pc->ClearState(STATE_CHECK); + m_bSceneSoluce = false; + } + } + + BuildSceneName(filename, m_sceneName, rank); + file = fopen(filename, "r"); + if ( file == NULL ) return; + + name[0] = 0; + while ( fgets(line, 500, file) != NULL ) + { + for ( i=0 ; i<500 ; i++ ) + { + if ( line[i] == '\t' ) line[i] = ' '; // replaces tab by space + if ( line[i] == '/' && line[i+1] == '/' ) + { + line[i] = 0; + break; + } + } + + sprintf(op, "Resume.%c", RetLanguageLetter()); + if ( Cmd(line, op) ) + { + OpString(line, "text", name); + break; + } + } + fclose(file); + + pe->SetText(name); +} + +// Updates the list of devices. + +void CMainDialog::UpdateDisplayDevice() +{ + CWindow* pw; + CList* pl; + char bufDevices[1000]; + char bufModes[5000]; + int i, j, totalDevices, selectDevices, totalModes, selectModes; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pl = (CList*)pw->SearchControl(EVENT_LIST1); + if ( pl == 0 ) return; + pl->Flush(); + + m_engine->EnumDevices(bufDevices, 1000, + bufModes, 5000, + totalDevices, selectDevices, + totalModes, selectModes); + + i = 0; + j = 0; + while ( bufDevices[i] != 0 ) + { + pl->SetName(j++, bufDevices+i); + while ( bufDevices[i++] != 0 ); + } + + pl->SetSelect(selectDevices); + pl->ShowSelect(false); + + m_setupSelDevice = selectDevices; +} + +// Updates the list of modes. + +void CMainDialog::UpdateDisplayMode() +{ + CWindow* pw; + CList* pl; + char bufDevices[1000]; + char bufModes[5000]; + int i, j, totalDevices, selectDevices, totalModes, selectModes; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + pl = (CList*)pw->SearchControl(EVENT_LIST2); + if ( pl == 0 ) return; + pl->Flush(); + + m_engine->EnumDevices(bufDevices, 1000, + bufModes, 5000, + totalDevices, selectDevices, + totalModes, selectModes); + + i = 0; + j = 0; + while ( bufModes[i] != 0 ) + { + pl->SetName(j++, bufModes+i); + while ( bufModes[i++] != 0 ); + } + + pl->SetSelect(selectModes); + pl->ShowSelect(false); + + m_setupSelMode = selectModes; +} + +// Change the graphics mode. + +void CMainDialog::ChangeDisplay() +{ + CWindow* pw; + CList* pl; + CCheck* pc; + char* device; + char* mode; + bool bFull; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + + pl = (CList*)pw->SearchControl(EVENT_LIST1); + if ( pl == 0 ) return; + m_setupSelDevice = pl->RetSelect(); + device = pl->RetName(m_setupSelDevice); + + pl = (CList*)pw->SearchControl(EVENT_LIST2); + if ( pl == 0 ) return; + m_setupSelMode = pl->RetSelect(); + mode = pl->RetName(m_setupSelMode); + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_FULL); + if ( pc == 0 ) return; + bFull = pc->TestState(STATE_CHECK); + m_setupFull = bFull; + + m_engine->ChangeDevice(device, mode, bFull); + + if ( m_bSimulSetup ) + { + m_main->ChangeColor(); + m_main->UpdateMap(); + } +} + + + +// Updates the "apply" button. + +void CMainDialog::UpdateApply() +{ + CWindow* pw; + CButton* pb; + CList* pl; + CCheck* pc; + int sel1, sel2; + bool bFull; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + + pb = (CButton*)pw->SearchControl(EVENT_INTERFACE_APPLY); + if ( pb == 0 ) return; + + pl = (CList*)pw->SearchControl(EVENT_LIST1); + if ( pl == 0 ) return; + sel1 = pl->RetSelect(); + + pl = (CList*)pw->SearchControl(EVENT_LIST2); + if ( pl == 0 ) return; + sel2 = pl->RetSelect(); + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_FULL); + bFull = pc->TestState(STATE_CHECK); + + if ( sel1 == m_setupSelDevice && + sel2 == m_setupSelMode && + bFull == m_setupFull ) + { + pb->ClearState(STATE_ENABLE); + } + else + { + pb->SetState(STATE_ENABLE); + } +} + +// Updates the buttons during the setup phase. + +void CMainDialog::UpdateSetupButtons() +{ + CWindow* pw; + CCheck* pc; + CEditValue* pv; + CSlider* ps; + float value; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_TOTO); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_engine->RetTotoMode()); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_TOOLTIP); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_bTooltip); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_GLINT); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_bGlint); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_RAIN); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_bRain); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_MOUSE); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_engine->RetNiceMouse()); + pc->SetState(STATE_ENABLE, m_engine->RetNiceMouseCap()); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_EDITMODE); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_engine->RetEditIndentMode()); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_EDITVALUE); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_engine->RetEditIndentValue()>2); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_SOLUCE4); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_bSoluce4); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_MOVIES); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_bMovies); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_NICERST); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_bNiceReset); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_HIMSELF); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_bHimselfDamage); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_SCROLL); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_bCameraScroll); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_INVERTX); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_bCameraInvertX); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_INVERTY); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_bCameraInvertY); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_EFFECT); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_bEffect); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_SHADOW); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_engine->RetShadow()); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_GROUND); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_engine->RetGroundSpot()); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_DIRTY); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_engine->RetDirty()); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_FOG); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_engine->RetFog()); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_LENS); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_engine->RetLensMode()); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_SKY); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_engine->RetSkyMode()); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_PLANET); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_engine->RetPlanetMode()); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_LIGHT); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_engine->RetLightMode()); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_JOYSTICK); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_engine->RetJoystick()); + } + + pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_PARTI); + if ( pv != 0 ) + { + value = m_engine->RetParticuleDensity(); + pv->SetValue(value); + } + + pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_CLIP); + if ( pv != 0 ) + { + value = m_engine->RetClippingDistance(); + pv->SetValue(value); + } + + pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_DETAIL); + if ( pv != 0 ) + { + value = m_engine->RetObjectDetail(); + pv->SetValue(value); + } + + pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_GADGET); + if ( pv != 0 ) + { + value = m_engine->RetGadgetQuantity(); + pv->SetValue(value); + } + + pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_TEXTURE); + if ( pv != 0 ) + { + value = (float)m_engine->RetTextureQuality(); + pv->SetValue(value); + } + + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_VOLSOUND); + if ( ps != 0 ) + { + value = (float)m_sound->RetAudioVolume(); + ps->SetVisibleValue(value); + } + + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_VOLMUSIC); + if ( ps != 0 ) + { + value = (float)m_sound->RetMidiVolume(); + ps->SetVisibleValue(value); + } + + pc = (CCheck*)pw->SearchControl(EVENT_INTERFACE_SOUND3D); + if ( pc != 0 ) + { + pc->SetState(STATE_CHECK, m_sound->RetSound3D()); + pc->SetState(STATE_ENABLE, m_sound->RetSound3DCap()); + } +} + +// Updates the engine function of the buttons after the setup phase. + +void CMainDialog::ChangeSetupButtons() +{ + CWindow* pw; + CEditValue* pv; + CSlider* ps; + float value; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + + pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_PARTI); + if ( pv != 0 ) + { + value = pv->RetValue(); + m_engine->SetParticuleDensity(value); + } + + pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_CLIP); + if ( pv != 0 ) + { + value = pv->RetValue(); + m_engine->SetClippingDistance(value); + } + + pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_DETAIL); + if ( pv != 0 ) + { + value = pv->RetValue(); + m_engine->SetObjectDetail(value); + } + + pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_GADGET); + if ( pv != 0 ) + { + value = pv->RetValue(); + m_engine->SetGadgetQuantity(value); + } + + pv = (CEditValue*)pw->SearchControl(EVENT_INTERFACE_TEXTURE); + if ( pv != 0 ) + { + value = pv->RetValue(); + m_engine->SetTextureQuality((int)value); + } + + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_VOLSOUND); + if ( ps != 0 ) + { + value = ps->RetVisibleValue(); + m_sound->SetAudioVolume((int)value); + } + + ps = (CSlider*)pw->SearchControl(EVENT_INTERFACE_VOLMUSIC); + if ( ps != 0 ) + { + value = ps->RetVisibleValue(); + m_sound->SetMidiVolume((int)value); + } +} + + +// Memorizes all the settings. + +void CMainDialog::SetupMemorize() +{ + float fValue; + int iValue, i, j; + char key[500]; + char num[10]; + + SetProfileString("Directory", "scene", m_sceneDir); + SetProfileString("Directory", "savegame", m_savegameDir); + SetProfileString("Directory", "public", m_publicDir); + SetProfileString("Directory", "user", m_userDir); + SetProfileString("Directory", "files", m_filesDir); + + iValue = m_engine->RetTotoMode(); + SetProfileInt("Setup", "TotoMode", iValue); + + iValue = m_bTooltip; + SetProfileInt("Setup", "Tooltips", iValue); + + iValue = m_bGlint; + SetProfileInt("Setup", "InterfaceGlint", iValue); + + iValue = m_bRain; + SetProfileInt("Setup", "InterfaceGlint", iValue); + + iValue = m_engine->RetNiceMouse(); + SetProfileInt("Setup", "NiceMouse", iValue); + + iValue = m_bSoluce4; + SetProfileInt("Setup", "Soluce4", iValue); + + iValue = m_bMovies; + SetProfileInt("Setup", "Movies", iValue); + + iValue = m_bNiceReset; + SetProfileInt("Setup", "NiceReset", iValue); + + iValue = m_bHimselfDamage; + SetProfileInt("Setup", "HimselfDamage", iValue); + + iValue = m_bCameraScroll; + SetProfileInt("Setup", "CameraScroll", iValue); + + iValue = m_bCameraInvertX; + SetProfileInt("Setup", "CameraInvertX", iValue); + + iValue = m_bEffect; + SetProfileInt("Setup", "InterfaceEffect", iValue); + + iValue = m_engine->RetShadow(); + SetProfileInt("Setup", "GroundShadow", iValue); + + iValue = m_engine->RetGroundSpot(); + SetProfileInt("Setup", "GroundSpot", iValue); + + iValue = m_engine->RetDirty(); + SetProfileInt("Setup", "ObjectDirty", iValue); + + iValue = m_engine->RetFog(); + SetProfileInt("Setup", "FogMode", iValue); + + iValue = m_engine->RetLensMode(); + SetProfileInt("Setup", "LensMode", iValue); + + iValue = m_engine->RetSkyMode(); + SetProfileInt("Setup", "SkyMode", iValue); + + iValue = m_engine->RetPlanetMode(); + SetProfileInt("Setup", "PlanetMode", iValue); + + iValue = m_engine->RetLightMode(); + SetProfileInt("Setup", "LightMode", iValue); + + iValue = m_engine->RetJoystick(); + SetProfileInt("Setup", "UseJoystick", iValue); + + fValue = m_engine->RetParticuleDensity(); + SetProfileFloat("Setup", "ParticuleDensity", fValue); + + fValue = m_engine->RetClippingDistance(); + SetProfileFloat("Setup", "ClippingDistance", fValue); + + fValue = m_engine->RetObjectDetail(); + SetProfileFloat("Setup", "ObjectDetail", fValue); + + fValue = m_engine->RetGadgetQuantity(); + SetProfileFloat("Setup", "GadgetQuantity", fValue); + + iValue = m_engine->RetTextureQuality(); + SetProfileInt("Setup", "TextureQuality", iValue); + + iValue = m_sound->RetAudioVolume(); + SetProfileInt("Setup", "AudioVolume", iValue); + + iValue = m_sound->RetMidiVolume(); + SetProfileInt("Setup", "MidiVolume", iValue); + + iValue = m_sound->RetSound3D(); + SetProfileInt("Setup", "Sound3D", iValue); + + iValue = m_engine->RetEditIndentMode(); + SetProfileInt("Setup", "EditIndentMode", iValue); + + iValue = m_engine->RetEditIndentValue(); + SetProfileInt("Setup", "EditIndentValue", iValue); + + key[0] = 0; + for ( i=0 ; i<100 ; i++ ) + { + if ( m_engine->RetKey(i, 0) == 0 ) break; + + for ( j=0 ; j<2 ; j++ ) + { + iValue = m_engine->RetKey(i, j); + sprintf(num, "%d%c", iValue, j==0?'+':' '); + strcat(key, num); + } + } + SetProfileString("Setup", "KeyMap", key); + +#if _NET + if ( m_accessEnable ) + { + iValue = m_accessMission; + SetProfileInt("Setup", "AccessMission", iValue); + + iValue = m_accessUser; + SetProfileInt("Setup", "AccessUser", iValue); + } +#endif + + iValue = m_bDeleteGamer; + SetProfileInt("Setup", "DeleteGamer", iValue); + + m_engine->WriteProfile(); +} + +// Remember all the settings. + +void CMainDialog::SetupRecall() +{ + float fValue; + int iValue, i, j; + char key[500]; + char* p; + + if ( GetProfileString("Directory", "scene", key, _MAX_FNAME) ) + { + strcpy(m_sceneDir, key); + } + + if ( GetProfileString("Directory", "savegame", key, _MAX_FNAME) ) + { + strcpy(m_savegameDir, key); + } + + if ( GetProfileString("Directory", "public", key, _MAX_FNAME) ) + { + strcpy(m_publicDir, key); + } + + if ( GetProfileString("Directory", "user", key, _MAX_FNAME) ) + { + strcpy(m_userDir, key); + } + + if ( GetProfileString("Directory", "files", key, _MAX_FNAME) ) + { + strcpy(m_filesDir, key); + } + + + if ( GetProfileInt("Setup", "TotoMode", iValue) ) + { + m_engine->SetTotoMode(iValue); + } + + if ( GetProfileInt("Setup", "Tooltips", iValue) ) + { + m_bTooltip = iValue; + } + + if ( GetProfileInt("Setup", "InterfaceGlint", iValue) ) + { + m_bGlint = iValue; + } + + if ( GetProfileInt("Setup", "InterfaceGlint", iValue) ) + { + m_bRain = iValue; + } + + if ( GetProfileInt("Setup", "NiceMouse", iValue) ) + { + m_engine->SetNiceMouse(iValue); + } + + if ( GetProfileInt("Setup", "Soluce4", iValue) ) + { + m_bSoluce4 = iValue; + } + + if ( GetProfileInt("Setup", "Movies", iValue) ) + { + m_bMovies = iValue; + } + + if ( GetProfileInt("Setup", "NiceReset", iValue) ) + { + m_bNiceReset = iValue; + } + + if ( GetProfileInt("Setup", "HimselfDamage", iValue) ) + { + m_bHimselfDamage = iValue; + } + + if ( GetProfileInt("Setup", "CameraScroll", iValue) ) + { + m_bCameraScroll = iValue; + m_camera->SetCameraScroll(m_bCameraScroll); + } + + if ( GetProfileInt("Setup", "CameraInvertX", iValue) ) + { + m_bCameraInvertX = iValue; + m_camera->SetCameraInvertX(m_bCameraInvertX); + } + + if ( GetProfileInt("Setup", "CameraInvertY", iValue) ) + { + m_bCameraInvertY = iValue; + m_camera->SetCameraInvertY(m_bCameraInvertY); + } + + if ( GetProfileInt("Setup", "InterfaceEffect", iValue) ) + { + m_bEffect = iValue; + } + + if ( GetProfileInt("Setup", "GroundShadow", iValue) ) + { + m_engine->SetShadow(iValue); + } + + if ( GetProfileInt("Setup", "GroundSpot", iValue) ) + { + m_engine->SetGroundSpot(iValue); + } + + if ( GetProfileInt("Setup", "ObjectDirty", iValue) ) + { + m_engine->SetDirty(iValue); + } + + if ( GetProfileInt("Setup", "FogMode", iValue) ) + { + m_engine->SetFog(iValue); + m_camera->SetOverBaseColor(RetColor(RetColor(0.0f))); + } + + if ( GetProfileInt("Setup", "LensMode", iValue) ) + { + m_engine->SetLensMode(iValue); + } + + if ( GetProfileInt("Setup", "SkyMode", iValue) ) + { + m_engine->SetSkyMode(iValue); + } + + if ( GetProfileInt("Setup", "PlanetMode", iValue) ) + { + m_engine->SetPlanetMode(iValue); + } + + if ( GetProfileInt("Setup", "LightMode", iValue) ) + { + m_engine->SetLightMode(iValue); + } + + if ( GetProfileInt("Setup", "UseJoystick", iValue) ) + { + m_engine->SetJoystick(iValue); + } + + if ( GetProfileFloat("Setup", "ParticuleDensity", fValue) ) + { + m_engine->SetParticuleDensity(fValue); + } + + if ( GetProfileFloat("Setup", "ClippingDistance", fValue) ) + { + m_engine->SetClippingDistance(fValue); + } + + if ( GetProfileFloat("Setup", "ObjectDetail", fValue) ) + { + m_engine->SetObjectDetail(fValue); + } + + if ( GetProfileFloat("Setup", "GadgetQuantity", fValue) ) + { + m_engine->SetGadgetQuantity(fValue); + } + + if ( GetProfileInt("Setup", "TextureQuality", iValue) ) + { + m_engine->SetTextureQuality(iValue); + } + + if ( GetProfileInt("Setup", "AudioVolume", iValue) ) + { + m_sound->SetAudioVolume(iValue); + } + + if ( GetProfileInt("Setup", "MidiVolume", iValue) ) + { + m_sound->SetMidiVolume(iValue); + } + + if ( GetProfileInt("Setup", "EditIndentMode", iValue) ) + { + m_engine->SetEditIndentMode(iValue); + } + + if ( GetProfileInt("Setup", "EditIndentValue", iValue) ) + { + m_engine->SetEditIndentValue(iValue); + } + + if ( GetProfileString("Setup", "KeyMap", key, 500) ) + { + p = key; + for ( i=0 ; i<100 ; i++ ) + { + if ( p[0] == 0 ) break; + + for ( j=0 ; j<2 ; j++ ) + { + sscanf(p, "%d", &iValue); + m_engine->SetKey(i, j, iValue); + while ( *p >= '0' && *p <= '9' ) p++; + while ( *p == ' ' || *p == '+' ) p++; + } + } + } + +#if _NET + if ( m_accessEnable ) + { + if ( GetProfileInt("Setup", "AccessMission", iValue) ) + { + m_accessMission = iValue; + } + + if ( GetProfileInt("Setup", "AccessUser", iValue) ) + { + m_accessUser = iValue; + } + } +#endif + + if ( GetProfileInt("Setup", "DeleteGamer", iValue) ) + { + m_bDeleteGamer = iValue; + } +} + + +// Changes the general level of quality. + +void CMainDialog::ChangeSetupQuality(int quality) +{ + bool bEnable; + float value; + int iValue; + + bEnable = (quality >= 0); + m_engine->SetShadow(bEnable); + m_engine->SetGroundSpot(bEnable); + m_engine->SetDirty(bEnable); + m_engine->SetFog(bEnable); + m_engine->SetLensMode(bEnable); + m_engine->SetSkyMode(bEnable); + m_engine->SetPlanetMode(bEnable); + m_engine->SetLightMode(bEnable); + m_camera->SetOverBaseColor(RetColor(RetColor(0.0f))); + + if ( quality < 0 ) value = 0.0f; + if ( quality == 0 ) value = 1.0f; + if ( quality > 0 ) value = 2.0f; + m_engine->SetParticuleDensity(value); + + if ( quality < 0 ) value = 0.5f; + if ( quality == 0 ) value = 1.0f; + if ( quality > 0 ) value = 2.0f; + m_engine->SetClippingDistance(value); + + if ( quality < 0 ) value = 0.0f; + if ( quality == 0 ) value = 1.0f; + if ( quality > 0 ) value = 2.0f; + m_engine->SetObjectDetail(value); + + if ( quality < 0 ) value = 0.5f; + if ( quality == 0 ) value = 1.0f; + if ( quality > 0 ) value = 1.0f; + m_engine->SetGadgetQuantity(value); + + if ( quality < 0 ) iValue = 0; + if ( quality == 0 ) iValue = 1; + if ( quality > 0 ) iValue = 2; + m_engine->SetTextureQuality(iValue); + + m_engine->FirstExecuteAdapt(false); +} + + +// Redefinable keys: + +static int key_table[KEY_TOTAL] = +{ +#if _SCHOOL & _TEEN + KEYRANK_LEFT, + KEYRANK_RIGHT, + KEYRANK_UP, + KEYRANK_DOWN, + KEYRANK_CAMERA, + KEYRANK_NEAR, + KEYRANK_AWAY, + KEYRANK_HELP, + KEYRANK_PROG, + KEYRANK_SPEED10, + KEYRANK_SPEED15, + KEYRANK_SPEED20, + KEYRANK_QUIT, +#else + KEYRANK_LEFT, + KEYRANK_RIGHT, + KEYRANK_UP, + KEYRANK_DOWN, + KEYRANK_GUP, + KEYRANK_GDOWN, + KEYRANK_ACTION, + KEYRANK_CAMERA, + KEYRANK_VISIT, + KEYRANK_NEXT, + KEYRANK_HUMAN, + KEYRANK_DESEL, + KEYRANK_NEAR, + KEYRANK_AWAY, + KEYRANK_HELP, + KEYRANK_PROG, + KEYRANK_CBOT, + KEYRANK_SPEED10, + KEYRANK_SPEED15, + KEYRANK_SPEED20, + KEYRANK_QUIT, +#endif +}; + +static EventMsg key_event[KEY_TOTAL] = +{ +#if _SCHOOL & _TEEN + EVENT_INTERFACE_KLEFT, + EVENT_INTERFACE_KRIGHT, + EVENT_INTERFACE_KUP, + EVENT_INTERFACE_KDOWN, + EVENT_INTERFACE_KCAMERA, + EVENT_INTERFACE_KNEAR, + EVENT_INTERFACE_KAWAY, + EVENT_INTERFACE_KHELP, + EVENT_INTERFACE_KPROG, + EVENT_INTERFACE_KSPEED10, + EVENT_INTERFACE_KSPEED15, + EVENT_INTERFACE_KSPEED20, + EVENT_INTERFACE_KQUIT, +#else + EVENT_INTERFACE_KLEFT, + EVENT_INTERFACE_KRIGHT, + EVENT_INTERFACE_KUP, + EVENT_INTERFACE_KDOWN, + EVENT_INTERFACE_KGUP, + EVENT_INTERFACE_KGDOWN, + EVENT_INTERFACE_KACTION, + EVENT_INTERFACE_KCAMERA, + EVENT_INTERFACE_KVISIT, + EVENT_INTERFACE_KNEXT, + EVENT_INTERFACE_KHUMAN, + EVENT_INTERFACE_KDESEL, + EVENT_INTERFACE_KNEAR, + EVENT_INTERFACE_KAWAY, + EVENT_INTERFACE_KHELP, + EVENT_INTERFACE_KPROG, + EVENT_INTERFACE_KCBOT, + EVENT_INTERFACE_KSPEED10, + EVENT_INTERFACE_KSPEED15, + EVENT_INTERFACE_KSPEED20, + EVENT_INTERFACE_KQUIT, +#endif +}; + +// Updates the list of keys. + +void CMainDialog::UpdateKey() +{ + CWindow* pw; + CScroll* ps; + CKey* pk; + Math::Point pos, dim; + int first, i; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + + ps = (CScroll*)pw->SearchControl(EVENT_INTERFACE_KSCROLL); + if ( ps == 0 ) return; + + first = (int)(ps->RetVisibleValue()*(KEY_TOTAL-KEY_VISIBLE)); + + for ( i=0 ; iDeleteControl(key_event[i]); + } + + dim.x = 400.0f/640.0f; + dim.y = 20.0f/480.0f; + pos.x = 110.0f/640.0f; + pos.y = 168.0f/480.0f + dim.y*(KEY_VISIBLE-1); + for ( i=0 ; iCreateKey(pos, dim, -1, key_event[first+i]); + pk = (CKey*)pw->SearchControl(key_event[first+i]); + if ( pk == 0 ) break; + pk->SetKey(0, m_engine->RetKey(key_table[first+i], 0)); + pk->SetKey(1, m_engine->RetKey(key_table[first+i], 1)); + pos.y -= dim.y; + } +} + +// Change a key. + +void CMainDialog::ChangeKey(EventMsg event) +{ + CWindow* pw; + CScroll* ps; + CKey* pk; + int i; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw == 0 ) return; + + ps = (CScroll*)pw->SearchControl(EVENT_INTERFACE_KSCROLL); + if ( ps == 0 ) return; + + for ( i=0 ; iSearchControl(key_event[i]); + if ( pk == 0 ) break; + m_engine->SetKey(key_table[i], 0, pk->RetKey(0)); + m_engine->SetKey(key_table[i], 1, pk->RetKey(1)); + } + } +} + + + +// Do you want to quit the current mission? + +void CMainDialog::StartAbort() +{ + CWindow* pw; + CButton* pb; + Math::Point pos, dim; + char name[100]; + + StartDialog(Math::Point(0.3f, 0.8f), true, false, false); + m_bDialogDelete = false; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW9); + if ( pw == 0 ) return; + + pos.x = 0.35f; + pos.y = 0.60f; + dim.x = 0.30f; + dim.y = 0.30f; + pw->CreateGroup(pos, dim, 5, EVENT_INTERFACE_GLINTl); // orange corner + pos.x = 0.35f; + pos.y = 0.10f; + dim.x = 0.30f; + dim.y = 0.30f; + pw->CreateGroup(pos, dim, 4, EVENT_INTERFACE_GLINTr); // blue corner + + pos.x = 0.40f; + dim.x = 0.20f; +#if _POLISH + pos.x -= 7.0f/640.0f; + dim.x += 14.0f/640.0f; +#endif + dim.y = 32.0f/480.0f; + + pos.y = 0.74f; + pb = pw->CreateButton(pos, dim, -1, EVENT_DIALOG_CANCEL); + pb->SetState(STATE_SHADOW); + GetResource(RES_TEXT, RT_DIALOG_NO, name); + pb->SetName(name); + + if ( m_index == 2 || // missions ? + m_index == 3 || // free games? + m_index == 4 ) // user ? + { + pos.y = 0.62f; + pb = pw->CreateButton(pos, dim, -1, EVENT_INTERFACE_WRITE); + pb->SetState(STATE_SHADOW); + if ( m_main->IsBusy() ) // current task? + { + pb->ClearState(STATE_ENABLE); + } + + pos.y = 0.53f; + pb = pw->CreateButton(pos, dim, -1, EVENT_INTERFACE_READ); + pb->SetState(STATE_SHADOW); + if ( !IsIOReadScene() ) // no file to read? + { + pb->ClearState(STATE_ENABLE); + } + pb->SetState(STATE_WARNING); + } + + if ( m_engine->RetSetupMode() ) + { + pos.y = 0.39f; + pb = pw->CreateButton(pos, dim, -1, EVENT_INTERFACE_SETUP); + pb->SetState(STATE_SHADOW); + } + + pos.y = 0.25f; + pb = pw->CreateButton(pos, dim, -1, EVENT_INTERFACE_AGAIN); + pb->SetState(STATE_SHADOW); + pb->SetState(STATE_WARNING); + + pos.y = 0.16f; + pb = pw->CreateButton(pos, dim, -1, EVENT_DIALOG_OK); + pb->SetState(STATE_SHADOW); + pb->SetState(STATE_WARNING); + GetResource(RES_TEXT, RT_DIALOG_YES, name); + pb->SetName(name); +} + +// Do you want to destroy the building? + +void CMainDialog::StartDeleteObject() +{ + CWindow* pw; + CButton* pb; + Math::Point pos, dim; + char name[100]; + + StartDialog(Math::Point(0.7f, 0.3f), false, true, true); + m_bDialogDelete = true; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW9); + if ( pw == 0 ) return; + + pos.x = 0.00f; + pos.y = 0.50f; + dim.x = 1.00f; + dim.y = 0.05f; + GetResource(RES_TEXT, RT_DIALOG_DELOBJ, name); + pw->CreateLabel(pos, dim, -1, EVENT_DIALOG_LABEL, name); + + pb = (CButton*)pw->SearchControl(EVENT_DIALOG_OK); + if ( pb == 0 ) return; + GetResource(RES_TEXT, RT_DIALOG_YESDEL, name); + pb->SetName(name); + pb->SetState(STATE_WARNING); + + pb = (CButton*)pw->SearchControl(EVENT_DIALOG_CANCEL); + if ( pb == 0 ) return; + GetResource(RES_TEXT, RT_DIALOG_NODEL, name); + pb->SetName(name); +} + +// Do you want to delete the player? + +void CMainDialog::StartDeleteGame(char *gamer) +{ + CWindow* pw; + CButton* pb; + Math::Point pos, dim; + char name[100]; + char text[100]; + + StartDialog(Math::Point(0.7f, 0.3f), false, true, true); + m_bDialogDelete = true; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW9); + if ( pw == 0 ) return; + + pos.x = 0.00f; + pos.y = 0.50f; + dim.x = 1.00f; + dim.y = 0.05f; + GetResource(RES_TEXT, RT_DIALOG_DELGAME, name); + sprintf(text, name, gamer); + pw->CreateLabel(pos, dim, -1, EVENT_DIALOG_LABEL, text); + + pb = (CButton*)pw->SearchControl(EVENT_DIALOG_OK); + if ( pb == 0 ) return; + GetResource(RES_TEXT, RT_DIALOG_YESDEL, name); + pb->SetName(name); + pb->SetState(STATE_WARNING); + + pb = (CButton*)pw->SearchControl(EVENT_DIALOG_CANCEL); + if ( pb == 0 ) return; + GetResource(RES_TEXT, RT_DIALOG_NODEL, name); + pb->SetName(name); +} + +// Would you quit the game? + +void CMainDialog::StartQuit() +{ + CWindow* pw; + CButton* pb; + Math::Point pos, dim; + char name[100]; + + StartDialog(Math::Point(0.6f, 0.3f), false, true, true); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW9); + if ( pw == 0 ) return; + + pos.x = 0.00f; + pos.y = 0.50f; + dim.x = 1.00f; + dim.y = 0.05f; + GetResource(RES_TEXT, RT_DIALOG_QUIT, name); + pw->CreateLabel(pos, dim, -1, EVENT_DIALOG_LABEL, name); + + pb = (CButton*)pw->SearchControl(EVENT_DIALOG_OK); + if ( pb == 0 ) return; + GetResource(RES_TEXT, RT_DIALOG_YESQUIT, name); + pb->SetName(name); + pb->SetState(STATE_WARNING); + + pb = (CButton*)pw->SearchControl(EVENT_DIALOG_CANCEL); + if ( pb == 0 ) return; + GetResource(RES_TEXT, RT_DIALOG_NOQUIT, name); + pb->SetName(name); +} + +// Beginning of displaying a dialog. + +void CMainDialog::StartDialog(Math::Point dim, bool bFire, bool bOK, bool bCancel) +{ + CWindow* pw; + CButton* pb; + Math::Point pos, ddim; + char name[100]; + + StartSuspend(); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW0); + if ( pw != 0 ) pw->ClearState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW1); + if ( pw != 0 ) pw->ClearState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW2); + if ( pw != 0 ) pw->ClearState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW3); + if ( pw != 0 ) pw->ClearState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW4); + if ( pw != 0 ) pw->ClearState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw != 0 ) pw->ClearState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW6); + if ( pw != 0 ) pw->ClearState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW7); + if ( pw != 0 ) pw->ClearState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW8); + if ( pw != 0 ) pw->ClearState(STATE_ENABLE); + + pb = (CButton*)m_interface->SearchControl(EVENT_BUTTON_QUIT); + if ( pb != 0 ) + { + pb->ClearState(STATE_VISIBLE); + } + + m_bDialogFire = bFire; + + pos.x = (1.0f-dim.x)/2.0f; + pos.y = (1.0f-dim.y)/2.0f; + pw = m_interface->CreateWindows(pos, dim, bFire?12:8, EVENT_WINDOW9); + pw->SetState(STATE_SHADOW); + GetResource(RES_TEXT, RT_TITLE_BASE, name); + pw->SetName(name); + + m_dialogPos = pos; + m_dialogDim = dim; + m_dialogTime = 0.0f; + m_dialogParti = 999.0f; + + if ( bOK ) + { + pos.x = 0.50f-0.15f-0.02f; + pos.y = 0.50f-dim.y/2.0f+0.03f; + ddim.x = 0.15f; + ddim.y = 0.06f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_DIALOG_OK); + pb->SetState(STATE_SHADOW); + GetResource(RES_EVENT, EVENT_DIALOG_OK, name); + pb->SetName(name); + } + + if ( bCancel ) + { + pos.x = 0.50f+0.02f; + pos.y = 0.50f-dim.y/2.0f+0.03f; + ddim.x = 0.15f; + ddim.y = 0.06f; + pb = pw->CreateButton(pos, ddim, -1, EVENT_DIALOG_CANCEL); + pb->SetState(STATE_SHADOW); + GetResource(RES_EVENT, EVENT_DIALOG_CANCEL, name); + pb->SetName(name); + } + + m_sound->Play(SOUND_TZOING); + m_bDialog = true; +} + +// Animation of a dialog. + +void CMainDialog::FrameDialog(float rTime) +{ + CWindow* pw; + Math::Vector pos, speed; + Math::Point dim, dpos, ddim; + float zoom; + int i; + + dpos = m_dialogPos; + ddim = m_dialogDim; + + m_dialogTime += rTime; + if ( m_dialogTime < 1.0f ) + { + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW9); + if ( pw != 0 ) + { + if ( m_dialogTime < 0.50f ) + { + zoom = Math::Bounce(m_dialogTime/0.50f); + } + else + { + zoom = 1.0f; + } + + dpos.x += ddim.x/2.0f; + dpos.y += ddim.y/2.0f; + + ddim.x *= zoom; +//? ddim.y *= zoom; + + dpos.x -= ddim.x/2.0f; + dpos.y -= ddim.y/2.0f; + + pw->SetPos(dpos); + pw->SetDim(ddim); + } + } + + if ( !m_bGlint ) return; + + m_dialogParti += rTime; + if ( m_dialogParti < m_engine->ParticuleAdapt(0.05f) ) return; + m_dialogParti = 0.0f; + + if ( !m_bDialogFire ) return; + + dpos = m_dialogPos; + ddim = m_dialogDim; + + pos.z = 0.0f; + speed = Math::Vector(0.0f, 0.0f, 0.0f); + + for ( i=0 ; i<2 ; i++ ) + { + // Bottom. + pos.x = dpos.x + ddim.x*Math::Rand(); + pos.y = dpos.y; + pos.x += (Math::Rand()-0.5f)*(6.0f/640.0f); + pos.y += Math::Rand()*(16.0f/480.0f)-(10.0f/480.0f); + dim.x = 0.01f+Math::Rand()*0.01f; + dim.y = dim.x/0.75f; + m_particule->CreateParticule(pos, speed, dim, + (ParticuleType)(PARTILENS1+rand()%3), + 1.0f, 0.0f, 0.0f, SH_INTERFACE); + + // Top. + pos.x = dpos.x + ddim.x*Math::Rand(); + pos.y = dpos.y + ddim.y; + pos.x += (Math::Rand()-0.5f)*(6.0f/640.0f); + pos.y -= Math::Rand()*(16.0f/480.0f)-(10.0f/480.0f); + dim.x = 0.01f+Math::Rand()*0.01f; + dim.y = dim.x/0.75f; + m_particule->CreateParticule(pos, speed, dim, + (ParticuleType)(PARTILENS1+rand()%3), + 1.0f, 0.0f, 0.0f, SH_INTERFACE); + + // Left. + pos.y = dpos.y + ddim.y*Math::Rand(); + pos.x = dpos.x; + pos.x += Math::Rand()*(16.0f/640.0f)-(10.0f/640.0f); + pos.y += (Math::Rand()-0.5f)*(6.0f/480.0f); + dim.x = 0.01f+Math::Rand()*0.01f; + dim.y = dim.x/0.75f; + m_particule->CreateParticule(pos, speed, dim, + (ParticuleType)(PARTILENS1+rand()%3), + 1.0f, 0.0f, 0.0f, SH_INTERFACE); + + // Right. + pos.y = dpos.y + ddim.y*Math::Rand(); + pos.x = dpos.x + ddim.x; + pos.x -= Math::Rand()*(16.0f/640.0f)-(10.0f/640.0f); + pos.y += (Math::Rand()-0.5f)*(6.0f/480.0f); + dim.x = 0.01f+Math::Rand()*0.01f; + dim.y = dim.x/0.75f; + m_particule->CreateParticule(pos, speed, dim, + (ParticuleType)(PARTILENS1+rand()%3), + 1.0f, 0.0f, 0.0f, SH_INTERFACE); + } +} + +// End of the display of a dialogue. + +void CMainDialog::StopDialog() +{ + CWindow* pw; + CButton* pb; + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW0); + if ( pw != 0 ) pw->SetState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW1); + if ( pw != 0 ) pw->SetState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW2); + if ( pw != 0 ) pw->SetState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW3); + if ( pw != 0 ) pw->SetState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW4); + if ( pw != 0 ) pw->SetState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW5); + if ( pw != 0 ) pw->SetState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW6); + if ( pw != 0 ) pw->SetState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW7); + if ( pw != 0 ) pw->SetState(STATE_ENABLE); + + pw = (CWindow*)m_interface->SearchControl(EVENT_WINDOW8); + if ( pw != 0 ) pw->SetState(STATE_ENABLE); + + pb = (CButton*)m_interface->SearchControl(EVENT_BUTTON_QUIT); + if ( pb != 0 ) + { + pb->SetState(STATE_VISIBLE); + } + + StopSuspend(); + m_interface->DeleteControl(EVENT_WINDOW9); + m_bDialog = false; +} + +// Suspends the simulation for a dialog phase. + +void CMainDialog::StartSuspend() +{ + m_sound->MuteAll(true); + m_main->ClearInterface(); + m_bInitPause = m_engine->RetPause(); + m_engine->SetPause(true); + m_engine->SetOverFront(false); // over flat behind + m_main->CreateShortcuts(); + m_main->StartSuspend(); + m_initCamera = m_camera->RetType(); + m_camera->SetType(CAMERA_DIALOG); +} + +// Resume the simulation after a period of dialog. + +void CMainDialog::StopSuspend() +{ + m_sound->MuteAll(false); + m_main->ClearInterface(); + if ( !m_bInitPause ) m_engine->SetPause(false); + m_engine->SetOverFront(true); // over flat front + m_main->CreateShortcuts(); + m_main->StopSuspend(); + m_camera->SetType(m_initCamera); +} + + +// Whether to use tooltips. + +bool CMainDialog::RetTooltip() +{ + return m_bTooltip; +} + +// Specifies whether a dialog is displayed. + +bool CMainDialog::IsDialog() +{ + return m_bDialog; +} + + + + +// Specifies the name of the scene to read. + +void CMainDialog::SetSceneRead(char* name) +{ + strcpy(m_sceneRead, name); +} + +// Returns the name of the scene to read. + +char* CMainDialog::RetSceneRead() +{ + return m_sceneRead; +} + +// Specifies the name of the scene to read. + +void CMainDialog::SetStackRead(char* name) +{ + strcpy(m_stackRead, name); +} + +// Returns the name of the scene to read. + +char* CMainDialog::RetStackRead() +{ + return m_stackRead; +} + +// Specifies the name of the chosen to play scene. + +void CMainDialog::SetSceneName(char* name) +{ + strcpy(m_sceneName, name); +} + +// Returns the name of the chosen to play scene. + +char* CMainDialog::RetSceneName() +{ + return m_sceneName; +} + +// Specifies the rank of the chosen to play scene. + +void CMainDialog::SetSceneRank(int rank) +{ + m_sceneRank = rank; +} + +// Returns the rank of the chosen to play scene. + +int CMainDialog::RetSceneRank() +{ + return m_sceneRank; +} + +// Returns folder name of the scene that user selected to play. + +char* CMainDialog::RetSceneDir() +{ + int i; + + i = (m_sceneRank/100)-1; + + if ( i < 0 || i >= m_userTotal ) return 0; + return m_userList[i]; +} + +// Whether to show the solution. + +bool CMainDialog::RetSceneSoluce() +{ + return m_bSceneSoluce; +} + +// Returns the name of the folder to save. + +char* CMainDialog::RetSavegameDir() +{ + return m_savegameDir; +} + +// Returns the name of public folder. + +char* CMainDialog::RetPublicDir() +{ + return m_publicDir; +} + + +// Indicates if there are reflections on the buttons. + +bool CMainDialog::RetGlint() +{ + return m_bGlint; +} + +// Whether to show 4:solutions. + +bool CMainDialog::RetSoluce4() +{ + return m_bSoluce4; +} + +// Whether to show the cinematics. + +bool CMainDialog::RetMovies() +{ + return m_bMovies; +} + +// IWhether to make an animation in CTaskReset. + +bool CMainDialog::RetNiceReset() +{ + return m_bNiceReset; +} + +// Indicates whether the fire causes damage to its own units. + +bool CMainDialog::RetHimselfDamage() +{ + return m_bHimselfDamage; +} + + + +// Saves the personalized player. + +void CMainDialog::WriteGamerPerso(char *gamer) +{ + FILE* file; + char filename[100]; + char line[100]; + + sprintf(filename, "%s\\%s\\face.gam", m_savegameDir, gamer); + file = fopen(filename, "w"); + if ( file == NULL ) return; + + sprintf(line, "Head face=%d glasses=%d hair=%.2f;%.2f;%.2f;%.2f\n", + m_perso.face, m_perso.glasses, + m_perso.colorHair.r, m_perso.colorHair.g, m_perso.colorHair.b, m_perso.colorHair.a); + fputs(line, file); + + sprintf(line, "Body combi=%.2f;%.2f;%.2f;%.2f band=%.2f;%.2f;%.2f;%.2f\n", + m_perso.colorCombi.r, m_perso.colorCombi.g, m_perso.colorCombi.b, m_perso.colorCombi.a, + m_perso.colorBand.r, m_perso.colorBand.g, m_perso.colorBand.b, m_perso.colorBand.a); + fputs(line, file); + + fclose(file); +} + +// Reads the personalized player. + +void CMainDialog::ReadGamerPerso(char *gamer) +{ + FILE* file; + char filename[100]; + char line[100]; + D3DCOLORVALUE color; + + m_perso.face = 0; + DefPerso(); + + sprintf(filename, "%s\\%s\\face.gam", m_savegameDir, gamer); + file = fopen(filename, "r"); + if ( file == NULL ) return; + + while ( fgets(line, 100, file) != NULL ) + { + if ( Cmd(line, "Head") ) + { + m_perso.face = OpInt(line, "face", 0); + m_perso.glasses = OpInt(line, "glasses", 0); + + color.r = 0.0f; + color.g = 0.0f; + color.b = 0.0f; + color.a = 0.0f; + m_perso.colorHair = OpColorValue(line, "hair", color); + } + + if ( Cmd(line, "Body") ) + { + color.r = 0.0f; + color.g = 0.0f; + color.b = 0.0f; + color.a = 0.0f; + m_perso.colorCombi = OpColorValue(line, "combi", color); + + color.r = 0.0f; + color.g = 0.0f; + color.b = 0.0f; + color.a = 0.0f; + m_perso.colorBand = OpColorValue(line, "band", color); + } + } + + fclose(file); +} + +// Specifies the face of the player. + +void CMainDialog::SetGamerFace(char *gamer, int face) +{ + m_perso.face = face; + WriteGamerPerso(gamer); +} + +// Gives the face of the player. + +int CMainDialog::RetGamerFace(char *gamer) +{ + ReadGamerPerso(gamer); + return m_perso.face; +} + +// Gives the face of the player. + +int CMainDialog::RetGamerFace() +{ + return m_perso.face; +} + +int CMainDialog::RetGamerGlasses() +{ + return m_perso.glasses; +} + +bool CMainDialog::RetGamerOnlyHead() +{ + return (m_phase == PHASE_PERSO && m_persoTab == 0); +} + +float CMainDialog::RetPersoAngle() +{ + return m_persoAngle; +} + +D3DCOLORVALUE CMainDialog::RetGamerColorHair() +{ + return m_perso.colorHair; +} + +D3DCOLORVALUE CMainDialog::RetGamerColorCombi() +{ + return m_perso.colorCombi; +} + +D3DCOLORVALUE CMainDialog::RetGamerColorBand() +{ + return m_perso.colorBand; +} + + +// Reads the file of the player. + +bool CMainDialog::ReadGamerInfo() +{ + FILE* file; + char line[100]; + int chap, i, numTry, passed; + + for ( i=0 ; iRetGamerName(), m_sceneName); + file = fopen(line, "r"); + if ( file == NULL ) return false; + + if ( fgets(line, 100, file) != NULL ) + { + sscanf(line, "CurrentChapter=%d CurrentSel=%d\n", &chap, &i); + m_chap[m_index] = chap-1; + m_sel[m_index] = i-1; + } + + while ( fgets(line, 100, file) != NULL ) + { + sscanf(line, "Chapter %d: Scene %d: numTry=%d passed=%d\n", + &chap, &i, &numTry, &passed); + + i += chap*100; + if ( i >= 0 && i < MAXSCENE ) + { + m_sceneInfo[i].numTry = numTry; + m_sceneInfo[i].bPassed = passed; + } + } + + fclose(file); + return true; +} + +// Writes the file of the player. + +bool CMainDialog::WriteGamerInfo() +{ + FILE* file; + char line[100]; + int i; + + sprintf(line, "%s\\%s\\%s.gam", m_savegameDir, m_main->RetGamerName(), m_sceneName); + file = fopen(line, "w"); + if ( file == NULL ) return false; + + sprintf(line, "CurrentChapter=%d CurrentSel=%d\n", + m_chap[m_index]+1, m_sel[m_index]+1); + fputs(line, file); + + for ( i=0 ; i= MAXSCENE ) return; + if ( numTry > 100 ) numTry = 100; + m_sceneInfo[rank].numTry = numTry; +} + +int CMainDialog::RetGamerInfoTry(int rank) +{ + if ( rank < 0 || rank >= MAXSCENE ) return 0; + return m_sceneInfo[rank].numTry; +} + +void CMainDialog::SetGamerInfoPassed(int rank, bool bPassed) +{ + int chap, i; + bool bAll; + + if ( rank < 0 || rank >= MAXSCENE ) return; + m_sceneInfo[rank].bPassed = bPassed; + + if ( bPassed ) + { + bAll = true; + chap = rank/100; + for ( i=0 ; i= MAXSCENE ) return false; + return m_sceneInfo[rank].bPassed; +} + + +// Passes to the next mission, and possibly in the next chapter. + +bool CMainDialog::NextMission() +{ + m_sel[m_index] ++; // next mission + + if ( m_sel[m_index] >= m_maxList ) // last mission of the chapter? + { + m_chap[m_index] ++; // next chapter + m_sel[m_index] = 0; // first mission + } + + return true; +} + + -- cgit v1.2.3-1-g7c22