CFMOD::CFMOD() { FirstSample=0; svol=50; fmusic=0; Log=new CLog("fmod.log"); // Cab=new CCab("snd.dlz",NFCOMP_BEST); InitializeSound(); LoadCabSamples(); }
void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settings) { /* Make sure there isn't any window that can influence anything * related to the new game we're about to start/load. */ UnInitWindowSystem(); AllocateMap(size_x, size_y); _pause_mode = PM_UNPAUSED; _fast_forward = 0; _tick_counter = 0; _cur_tileloop_tile = 0; _thd.redsq = INVALID_TILE; if (reset_settings) MakeNewgameSettingsLive(); if (reset_date) { SetDate(ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1), 0); InitializeOldNames(); } PoolBase::Clean(PT_NORMAL); ResetPersistentNewGRFData(); InitializeSound(); InitializeMusic(); InitializeVehicles(); InitNewsItemStructs(); InitializeLandscape(); InitializeRailGui(); InitializeRoadGui(); InitializeAirportGui(); InitializeDockGui(); InitializeObjectGui(); InitializeAIGui(); InitializeTrees(); InitializeIndustries(); InitializeObjects(); InitializeBuildingCounts(); InitializeNPF(); InitializeCompanies(); AI::Initialize(); Game::Initialize(); InitializeCheats(); InitTextEffects(); #ifdef ENABLE_NETWORK NetworkInitChatMessage(); #endif /* ENABLE_NETWORK */ InitializeAnimatedTiles(); InitializeEconomy(); ResetObjectToPlace(); GamelogReset(); GamelogStartAction(GLAT_START); GamelogRevision(); GamelogMode(); GamelogGRFAddList(_grfconfig); GamelogStopAction(); }
int CALLBACK WinMain(HINSTANCE instance, HINSTANCE previousInstance, LPSTR commandLine, int showCode) { WNDCLASS window = {}; ResizeDibSection(backBuffer, 1280, 720); window.style = CS_HREDRAW | CS_VREDRAW; window.lpfnWndProc = MainWindowCallback; window.hInstance = instance; //window.hIcon; window.lpszClassName = "Handmade Hero Take 1"; DefineControllerFuntions(); if (RegisterClass(&window)) { HWND handle = CreateWindowEx(0, window.lpszClassName, "Handmade Hero", WS_VISIBLE | WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, instance, 0); if (handle) { int samplesPerSecond = 48000; int blueOffset = 0, greenOffset = 0; uint32 runningSampleIndex = 0; int hertz = 256; int squareWavePeriod = samplesPerSecond / hertz; int halfPeriod = squareWavePeriod / 2; int bytesPerSample = sizeof(int16) * 2; int audioBufferSize = samplesPerSecond * bytesPerSample; int16 toneVolume = 6000; InitializeSound(handle, samplesPerSecond, audioBufferSize); audioBuffer->Play(0, 0, 0); MSG message; BOOL messageResult; while (isRunning) { // GetMessageA blocks. PeekMessage does not while (PeekMessage(&message, 0, 0, 0, PM_REMOVE)) { if (message.message == WM_QUIT) { isRunning = false; } TranslateMessage(&message); DispatchMessage(&message); } for (DWORD controllerIndex = 0; controllerIndex < XUSER_MAX_COUNT; controllerIndex++) { XINPUT_STATE controllerState; if (XInputGetState(controllerIndex, &controllerState) == ERROR_SUCCESS) { // The controller is plugged in XINPUT_GAMEPAD *pad = &controllerState.Gamepad; if (pad->wButtons & XINPUT_GAMEPAD_DPAD_UP) { greenOffset++; } if (pad->wButtons & XINPUT_GAMEPAD_DPAD_DOWN) { greenOffset--; } if (pad->wButtons & XINPUT_GAMEPAD_DPAD_LEFT) { blueOffset -= 2; } if ((pad->wButtons & XINPUT_GAMEPAD_DPAD_RIGHT) || pad->sThumbLX < 0) { blueOffset++; } bool leftShoulderPressed = (pad->wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER); bool rightShoulderPressed = (pad->wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER); bool aButtonPressed = (pad->wButtons & XINPUT_GAMEPAD_A); bool bButtonPressed = (pad->wButtons & XINPUT_GAMEPAD_B); bool xButtonPressed = (pad->wButtons & XINPUT_GAMEPAD_X); bool yButtonPressed = (pad->wButtons & XINPUT_GAMEPAD_Y); } else { // Controller not available. } XINPUT_VIBRATION goodVibrations; goodVibrations.wLeftMotorSpeed = 6000; goodVibrations.wRightMotorSpeed = 6000; XInputSetState(0, &goodVibrations); } renderGradient(backBuffer, blueOffset++, greenOffset); // DirectSound output test DWORD playCursor; DWORD writeCurser; if(SUCCEEDED(audioBuffer->GetCurrentPosition(&playCursor, &writeCurser))) { DWORD byteToLock = runningSampleIndex * bytesPerSample % samplesPerSecond; int32 bytesToWrite; if(byteToLock > playCursor) { bytesToWrite = (audioBufferSize - byteToLock); bytesToWrite += playCursor; } else{ bytesToWrite = playCursor - byteToLock; } VOID *region1; DWORD region1Size; VOID *region2; DWORD region2Size; HRESULT response = audioBuffer->Lock(byteToLock, bytesToWrite, ®ion1, ®ion1Size, ®ion2, ®ion2Size, 0); if(SUCCEEDED(response)) { int16 *sampleOutput = (int16 *)region1; DWORD region1SampleCount = region1Size / bytesPerSample; for (int32 sampleIndex = 0; sampleIndex < region1SampleCount; sampleIndex++) { int16 sampleValue = ((runningSampleIndex++ > halfPeriod) % 2) ? toneVolume : -toneVolume; *sampleOutput++ = sampleValue; *sampleOutput++ = sampleValue; } DWORD region2SampleCount = region2Size / bytesPerSample; for (int32 sampleIndex = 0; sampleIndex < region2SampleCount; sampleIndex++) { int16 sampleValue = ((runningSampleIndex++ > halfPeriod) % 2) ? toneVolume : -toneVolume; *sampleOutput++ = sampleValue; *sampleOutput++ = sampleValue; } audioBuffer->Unlock(region1, region1Size, region2, region2Size); } } HDC deviceContext = GetDC(handle); window_dimensions updateScreen = GetWindowDimensions(handle); DisplayBufferInWindow(deviceContext, updateScreen, backBuffer); ReleaseDC(handle, deviceContext); } } } return 0; }