From f1596273a3e991448ca7e04415a74f916b2c9810 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Mon, 20 Jul 2009 00:37:41 +0000 Subject: Save and display the loading disk icon as a fixed 16x16 square, from an image drawn at the bottom right corner of the screen. This seems to be the same as how Vanilla behaves, and fixes chook3.wad, that uses an STDISK replacement with an offset that pushes the image to the left. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1629 --- src/i_video.c | 65 ++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/i_video.c b/src/i_video.c index 3412051b..582a7fa7 100644 --- a/src/i_video.c +++ b/src/i_video.c @@ -50,6 +50,9 @@ #include "w_wad.h" #include "z_zone.h" +#define LOADING_DISK_W 16 +#define LOADING_DISK_H 16 + // Non aspect ratio-corrected modes (direct multiples of 320x200) static screen_mode_t *screen_modes[] = { @@ -145,7 +148,6 @@ boolean screenvisible; // restored by EndRead static byte *disk_image = NULL; -static int disk_image_w, disk_image_h; static byte *saved_background; static boolean window_focused; @@ -258,6 +260,8 @@ static void LoadDiskImage(void) patch_t *disk; char *disk_name; int y; + int xoffset = SCREENWIDTH - LOADING_DISK_W; + int yoffset = SCREENHEIGHT - LOADING_DISK_H; char buf[20]; SDL_VideoDriverName(buf, 15); @@ -278,19 +282,20 @@ static void LoadDiskImage(void) disk = W_CacheLumpName(disk_name, PU_STATIC); - V_DrawPatch(0, 0, 0, disk); - disk_image_w = SHORT(disk->width); - disk_image_h = SHORT(disk->height); + // Draw the disk to the screen: + + V_DrawPatch(SCREENWIDTH - LOADING_DISK_W, + SCREENHEIGHT - LOADING_DISK_H, + 0, disk); - disk_image = Z_Malloc(disk_image_w * disk_image_h, PU_STATIC, NULL); - saved_background = Z_Malloc(disk_image_w * disk_image_h, PU_STATIC, NULL); + disk_image = Z_Malloc(LOADING_DISK_W * LOADING_DISK_H, PU_STATIC, NULL); + saved_background = Z_Malloc(LOADING_DISK_W * LOADING_DISK_H, PU_STATIC, NULL); - for (y=0; y -typedef BOOL WINAPI (*SetAffinityFunc)(HANDLE hProcess, DWORD_PTR mask); +typedef BOOL (WINAPI *SetAffinityFunc)(HANDLE hProcess, DWORD mask); // This is a bit more complicated than it really needs to be. We really // just need to call the SetProcessAffinityMask function, but that @@ -74,7 +74,7 @@ static void LockCPUAffinity(void) // Find the SetProcessAffinityMask function. - SetAffinity = GetProcAddress(kernel32_dll, "SetProcessAffinityMask"); + SetAffinity = (SetAffinityFunc)GetProcAddress(kernel32_dll, "SetProcessAffinityMask"); // If the function was not found, we are on an old (Win9x) system // that doesn't have this function. That's no problem, because diff --git a/src/i_sdlsound.c b/src/i_sdlsound.c index bb8229e4..ea5c92a5 100644 --- a/src/i_sdlsound.c +++ b/src/i_sdlsound.c @@ -275,12 +275,15 @@ static boolean LoadSoundLump(int sound, uint32_t *length, byte **data_ref) { + int lumplen; + byte *data; + // Load the sound *lumpnum = S_sfx[sound].lumpnum; *data_ref = W_CacheLumpNum(*lumpnum, PU_STATIC); - int lumplen = W_LumpLength(*lumpnum); - byte *data = *data_ref; + lumplen = W_LumpLength(*lumpnum); + data = *data_ref; // Ensure this is a valid sound -- cgit v1.2.3 From 410579ec66f7df8757cb980c0a78e3161b7f20d5 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Wed, 30 Sep 2009 23:07:03 +0000 Subject: Change British English spellings to American English, for consistency. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1699 --- src/d_iwad.c | 2 +- src/d_iwad.h | 2 +- src/d_main.c | 4 ++-- src/d_net.h | 2 +- src/deh_defs.h | 2 +- src/deh_main.c | 4 ++-- src/deh_ptr.c | 2 +- src/deh_text.c | 2 +- src/doomdef.h | 2 +- src/i_joystick.c | 2 +- src/i_pcsound.c | 18 +++++++++--------- src/i_sdlmusic.c | 44 ++++++++++++++++++++++---------------------- src/i_sdlsound.c | 18 +++++++++--------- src/i_timer.c | 2 +- src/i_timer.h | 2 +- src/i_video.c | 22 ++++++++++++---------- src/net_client.c | 4 ++-- src/net_common.c | 4 ++-- src/net_defs.h | 4 ++-- src/net_gui.c | 2 +- src/net_loop.c | 4 ++-- src/net_sdl.c | 2 +- src/net_server.c | 14 +++++++------- src/net_server.h | 2 +- src/s_sound.c | 10 +++++----- src/s_sound.h | 6 +++--- src/w_merge.c | 2 +- 27 files changed, 93 insertions(+), 91 deletions(-) (limited to 'src') diff --git a/src/d_iwad.c b/src/d_iwad.c index d1c2f0bf..0e48420d 100644 --- a/src/d_iwad.c +++ b/src/d_iwad.c @@ -19,7 +19,7 @@ // 02111-1307, USA. // // DESCRIPTION: -// Search for and locate an IWAD file, and initialise according +// Search for and locate an IWAD file, and initialize according // to the IWAD type. // //----------------------------------------------------------------------------- diff --git a/src/d_iwad.h b/src/d_iwad.h index 281d3467..cb101305 100644 --- a/src/d_iwad.h +++ b/src/d_iwad.h @@ -19,7 +19,7 @@ // 02111-1307, USA. // // DESCRIPTION: -// Find IWAD and initialise according to IWAD type. +// Find IWAD and initialize according to IWAD type. // //----------------------------------------------------------------------------- diff --git a/src/d_main.c b/src/d_main.c index c59a8fb7..3580c346 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -666,7 +666,7 @@ static struct { NULL, NULL, 0}, }; -// Initialise the game version +// Initialize the game version static void InitGameVersion(void) { @@ -1450,7 +1450,7 @@ void D_DoomMain (void) I_Init (); #ifdef FEATURE_MULTIPLAYER - printf ("NET_Init: Initialise network subsystem.\n"); + printf ("NET_Init: Init network subsystem.\n"); NET_Init (); #endif diff --git a/src/d_net.h b/src/d_net.h index df3d2d4b..e5980a9b 100644 --- a/src/d_net.h +++ b/src/d_net.h @@ -47,7 +47,7 @@ void D_QuitNetGame (void); //? how many ticks to run? void TryRunTics (void); -// Called at start of game loop to initialise timers +// Called at start of game loop to initialize timers void D_StartGameLoop(void); extern boolean drone; diff --git a/src/deh_defs.h b/src/deh_defs.h index a6650544..e7b76182 100644 --- a/src/deh_defs.h +++ b/src/deh_defs.h @@ -41,7 +41,7 @@ struct deh_section_s { char *name; - // Called on startup to initialise code + // Called on startup to initialize code deh_section_init_t init; diff --git a/src/deh_main.c b/src/deh_main.c index 616b30e0..dcdfb00d 100644 --- a/src/deh_main.c +++ b/src/deh_main.c @@ -108,7 +108,7 @@ void DEH_Checksum(md5_digest_t digest) // Called on startup to call the Init functions -static void InitialiseSections(void) +static void InitializeSections(void) { unsigned int i; @@ -383,7 +383,7 @@ void DEH_Init(void) char *filename; int p; - InitialiseSections(); + InitializeSections(); //! // @category mod diff --git a/src/deh_ptr.c b/src/deh_ptr.c index a819ddc0..9841e38c 100644 --- a/src/deh_ptr.c +++ b/src/deh_ptr.c @@ -56,7 +56,7 @@ static void DEH_PointerInit(void) { int i; - // Initialise list of dehacked pointers + // Initialize list of dehacked pointers for (i=0; iabuf = Z_Malloc(expanded_length, PU_STATIC, &destination->abuf); - // If we can, use the standard / optimised SDL conversion routines. + // If we can, use the standard / optimized SDL conversion routines. if (samplerate <= mixer_freq && ConvertibleRatio(samplerate, mixer_freq) @@ -548,7 +548,7 @@ static void I_SDL_UpdateSoundParams(int handle, int vol, int sep) { int left, right; - if (!sound_initialised) + if (!sound_initialized) { return; } @@ -577,7 +577,7 @@ static int I_SDL_StartSound(int id, int channel, int vol, int sep) { Mix_Chunk *chunk; - if (!sound_initialised) + if (!sound_initialized) { return -1; } @@ -611,7 +611,7 @@ static int I_SDL_StartSound(int id, int channel, int vol, int sep) static void I_SDL_StopSound (int handle) { - if (!sound_initialised) + if (!sound_initialized) { return; } @@ -659,7 +659,7 @@ static void I_SDL_UpdateSound(void) static void I_SDL_ShutdownSound(void) { - if (!sound_initialised) + if (!sound_initialized) { return; } @@ -667,7 +667,7 @@ static void I_SDL_ShutdownSound(void) Mix_CloseAudio(); SDL_QuitSubSystem(SDL_INIT_AUDIO); - sound_initialised = false; + sound_initialized = false; } // Calculate slice size, based on MAX_SOUND_SLICE_TIME. @@ -721,7 +721,7 @@ static boolean I_SDL_InitSound(void) if (Mix_OpenAudio(snd_samplerate, AUDIO_S16SYS, 2, GetSliceSize()) < 0) { - fprintf(stderr, "Error initialising SDL_mixer: %s\n", Mix_GetError()); + fprintf(stderr, "Error initializing SDL_mixer: %s\n", Mix_GetError()); return false; } @@ -751,7 +751,7 @@ static boolean I_SDL_InitSound(void) SDL_PauseAudio(0); - sound_initialised = true; + sound_initialized = true; return true; } diff --git a/src/i_timer.c b/src/i_timer.c index 5fd7fba9..48be83be 100644 --- a/src/i_timer.c +++ b/src/i_timer.c @@ -76,7 +76,7 @@ void I_Sleep(int ms) void I_InitTimer(void) { - // initialise timer + // initialize timer SDL_Init(SDL_INIT_TIMER); } diff --git a/src/i_timer.h b/src/i_timer.h index 83ccecc9..d90094c8 100644 --- a/src/i_timer.h +++ b/src/i_timer.h @@ -38,7 +38,7 @@ int I_GetTimeMS (void); // Pause for a specified number of ms void I_Sleep(int ms); -// Initialise timer +// Initialize timer void I_InitTimer(void); #endif diff --git a/src/i_video.c b/src/i_video.c index 582a7fa7..5f5979d2 100644 --- a/src/i_video.c +++ b/src/i_video.c @@ -101,7 +101,7 @@ static int windowwidth, windowheight; // display has been set up? -static boolean initialised = false; +static boolean initialized = false; // disable mouse? @@ -246,7 +246,7 @@ static void UpdateFocus(void) state = SDL_GetAppState(); // We should have input (keyboard) focus and be visible - // (not minimised) + // (not minimized) window_focused = (state & SDL_APPINPUTFOCUS) && (state & SDL_APPACTIVE); @@ -396,14 +396,14 @@ static int TranslateKey(SDL_keysym *sym) void I_ShutdownGraphics(void) { - if (initialised) + if (initialized) { SDL_ShowCursor(1); SDL_WM_GrabInput(SDL_GRAB_OFF); SDL_QuitSubSystem(SDL_INIT_VIDEO); - initialised = false; + initialized = false; } } @@ -622,7 +622,7 @@ static void I_ReadMouse(void) // void I_StartTic (void) { - if (!initialised) + if (!initialized) { return; } @@ -741,7 +741,7 @@ void I_BeginRead(void) + (SCREENWIDTH - LOADING_DISK_W); int y; - if (!initialised || disk_image == NULL) + if (!initialized || disk_image == NULL) return; // save background and copy the disk image in @@ -769,7 +769,7 @@ void I_EndRead(void) + (SCREENWIDTH - LOADING_DISK_W); int y; - if (!initialised || disk_image == NULL) + if (!initialized || disk_image == NULL) return; // save background and copy the disk image in @@ -797,7 +797,7 @@ void I_FinishUpdate (void) int i; // UNUSED static unsigned char *bigscreen=0; - if (!initialised) + if (!initialized) return; if (noblit) @@ -1500,7 +1500,7 @@ void I_InitGraphics(void) if (SDL_Init(SDL_INIT_VIDEO) < 0) { - I_Error("Failed to initialise video: %s", SDL_GetError()); + I_Error("Failed to initialize video: %s", SDL_GetError()); } // Check for command-line video-related parameters. @@ -1564,6 +1564,8 @@ void I_InitGraphics(void) flags |= SDL_FULLSCREEN; } + flags |= SDL_NOFRAME; + screen = SDL_SetVideoMode(windowwidth, windowheight, 8, flags); if (screen == NULL) @@ -1679,6 +1681,6 @@ void I_InitGraphics(void) CenterMouse(); } - initialised = true; + initialized = true; } diff --git a/src/net_client.c b/src/net_client.c index 36dafe7a..0d6dd2fc 100644 --- a/src/net_client.c +++ b/src/net_client.c @@ -1152,7 +1152,7 @@ boolean NET_CL_Connect(net_addr_t *addr) client_context = NET_NewContext(); - // initialise module for client mode + // initialize module for client mode if (!addr->module->InitClient()) { @@ -1164,7 +1164,7 @@ boolean NET_CL_Connect(net_addr_t *addr) net_client_connected = true; net_client_received_wait_data = false; - // Initialise connection + // Initialize connection NET_Conn_InitClient(&client_connection, addr); diff --git a/src/net_common.c b/src/net_common.c index 5af6aaa7..da3d7fd5 100644 --- a/src/net_common.c +++ b/src/net_common.c @@ -59,7 +59,7 @@ static void NET_Conn_Init(net_connection_t *conn, net_addr_t *addr) conn->reliable_recv_seq = 0; } -// Initialise as a client connection +// Initialize as a client connection void NET_Conn_InitClient(net_connection_t *conn, net_addr_t *addr) { @@ -67,7 +67,7 @@ void NET_Conn_InitClient(net_connection_t *conn, net_addr_t *addr) conn->state = NET_CONN_STATE_CONNECTING; } -// Initialise as a server connection +// Initialize as a server connection void NET_Conn_InitServer(net_connection_t *conn, net_addr_t *addr) { diff --git a/src/net_defs.h b/src/net_defs.h index c575020f..66b17c77 100644 --- a/src/net_defs.h +++ b/src/net_defs.h @@ -45,11 +45,11 @@ struct _net_packet_s struct _net_module_s { - // Initialise this module for use as a client + // Initialize this module for use as a client boolean (*InitClient)(void); - // Initialise this module for use as a server + // Initialize this module for use as a server boolean (*InitServer)(void); diff --git a/src/net_gui.c b/src/net_gui.c index 9816346b..ed9a58e9 100644 --- a/src/net_gui.c +++ b/src/net_gui.c @@ -262,7 +262,7 @@ void NET_WaitForStart(void) { if (!TXT_Init()) { - fprintf(stderr, "Failed to initialise GUI\n"); + fprintf(stderr, "Failed to initialize GUI\n"); exit(-1); } diff --git a/src/net_loop.c b/src/net_loop.c index 890dcbf2..abba96e0 100644 --- a/src/net_loop.c +++ b/src/net_loop.c @@ -99,7 +99,7 @@ static boolean NET_CL_InitClient(void) static boolean NET_CL_InitServer(void) { - I_Error("NET_CL_InitServer: attempted to initialise client pipe end as a server!"); + I_Error("NET_CL_InitServer: attempted to initialize client pipe end as a server!"); return false; } @@ -161,7 +161,7 @@ net_module_t net_loop_client_module = static boolean NET_SV_InitClient(void) { - I_Error("NET_SV_InitClient: attempted to initialise server pipe end as a client!"); + I_Error("NET_SV_InitClient: attempted to initialize server pipe end as a client!"); return false; } diff --git a/src/net_sdl.c b/src/net_sdl.c index 92606fac..9c647cc9 100644 --- a/src/net_sdl.c +++ b/src/net_sdl.c @@ -57,7 +57,7 @@ typedef struct static addrpair_t **addr_table; static int addr_table_size = -1; -// Initialises the address table +// Initializes the address table static void NET_SDL_InitAddrTable(void) { diff --git a/src/net_server.c b/src/net_server.c index a90ed4fd..383608be 100644 --- a/src/net_server.c +++ b/src/net_server.c @@ -119,7 +119,7 @@ typedef struct } net_client_recv_t; static net_server_state_t server_state; -static boolean server_initialised = false; +static boolean server_initialized = false; static net_client_t clients[MAXNETNODES]; static net_client_t *sv_players[MAXPLAYERS]; static net_context_t *server_context; @@ -612,7 +612,7 @@ static void NET_SV_ParseSYN(net_packet_t *packet, return; } - // Activate, initialise connection + // Activate, initialize connection NET_SV_InitNewClient(client, addr, player_name); @@ -1489,13 +1489,13 @@ void NET_SV_AddModule(net_module_t *module) NET_AddModule(server_context, module); } -// Initialise server and wait for connections +// Initialize server and wait for connections void NET_SV_Init(void) { int i; - // initialise send/receive context + // initialize send/receive context server_context = NET_NewContext(); @@ -1510,7 +1510,7 @@ void NET_SV_Init(void) server_state = SERVER_WAITING_START; sv_gamemode = indetermined; - server_initialised = true; + server_initialized = true; } // Run server code to check for new packets/send packets as the server @@ -1522,7 +1522,7 @@ void NET_SV_Run(void) net_packet_t *packet; int i; - if (!server_initialised) + if (!server_initialized) { return; } @@ -1564,7 +1564,7 @@ void NET_SV_Shutdown(void) boolean running; int start_time; - if (!server_initialised) + if (!server_initialized) { return; } diff --git a/src/net_server.h b/src/net_server.h index 3d0cf6e4..93b22fc3 100644 --- a/src/net_server.h +++ b/src/net_server.h @@ -24,7 +24,7 @@ #ifndef NET_SERVER_H #define NET_SERVER_H -// initialise server and wait for connections +// initialize server and wait for connections void NET_SV_Init(void); diff --git a/src/s_sound.c b/src/s_sound.c index 70fa75f3..9b4f71aa 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -176,7 +176,7 @@ static boolean SndDeviceInList(snddevice_t device, snddevice_t *list, return false; } -// Find and initialise a sound_module_t appropriate for the setting +// Find and initialize a sound_module_t appropriate for the setting // in snd_sfxdevice. static void InitSfxModule(void) @@ -194,7 +194,7 @@ static void InitSfxModule(void) sound_modules[i]->sound_devices, sound_modules[i]->num_sound_devices)) { - // Initialise the module + // Initialize the module if (sound_modules[i]->Init()) { @@ -205,7 +205,7 @@ static void InitSfxModule(void) } } -// Initialise music according to snd_musicdevice. +// Initialize music according to snd_musicdevice. static void InitMusicModule(void) { @@ -222,7 +222,7 @@ static void InitMusicModule(void) music_modules[i]->sound_devices, music_modules[i]->num_sound_devices)) { - // Initialise the module + // Initialize the module if (music_modules[i]->Init()) { @@ -268,7 +268,7 @@ void S_Init(int sfxVolume, int musicVolume) nomusic = M_CheckParm("-nomusic") > 0; - // Initialise the sound and music subsystems. + // Initialize the sound and music subsystems. if (!nosound && !screensaver_mode) { diff --git a/src/s_sound.h b/src/s_sound.h index 67071338..b8d0e766 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -54,8 +54,8 @@ typedef struct snddevice_t *sound_devices; int num_sound_devices; - // Initialise sound module - // Returns true if successfully initialised + // Initialize sound module + // Returns true if successfully initialized boolean (*Init)(void); @@ -99,7 +99,7 @@ typedef struct snddevice_t *sound_devices; int num_sound_devices; - // Initialise the music subsystem + // Initialize the music subsystem boolean (*Init)(void); diff --git a/src/w_merge.c b/src/w_merge.c index 372b3583..6b6ae659 100644 --- a/src/w_merge.c +++ b/src/w_merge.c @@ -143,7 +143,7 @@ static void SetupLists(void) SetupList(&pwad_sprites, &pwad, "S_START", "S_END", "SS_START", "SS_END"); } -// Initialise the replace list +// Initialize the replace list static void InitSpriteList(void) { -- cgit v1.2.3 From 508c3fd3fa5b3149d329e15ea3e072ad2a7aa2f2 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Thu, 1 Oct 2009 01:04:00 +0000 Subject: Oops. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1701 --- src/i_sdlmusic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/i_sdlmusic.c b/src/i_sdlmusic.c index 29f00a97..81f492b5 100644 --- a/src/i_sdlmusic.c +++ b/src/i_sdlmusic.c @@ -304,7 +304,7 @@ static void *I_SDL_RegisterSong(void *data, int len) // remove file now -// remove(filename); + remove(filename); Z_Free(filename); -- cgit v1.2.3 From a034c665c088904d9061e13cf73f5de33ef2268b Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Thu, 1 Oct 2009 19:08:21 +0000 Subject: Oops. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1703 --- src/i_video.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'src') diff --git a/src/i_video.c b/src/i_video.c index 5f5979d2..062c9c9c 100644 --- a/src/i_video.c +++ b/src/i_video.c @@ -1564,8 +1564,6 @@ void I_InitGraphics(void) flags |= SDL_FULLSCREEN; } - flags |= SDL_NOFRAME; - screen = SDL_SetVideoMode(windowwidth, windowheight, 8, flags); if (screen == NULL) -- cgit v1.2.3 From a91a40f18eb3a353025b21bf22599c30f65a1cd3 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Mon, 5 Oct 2009 20:25:53 +0000 Subject: Fix desync in ep1-0500.lmp on 64-bit (thanks exp(x)). Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1710 --- src/p_doors.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/p_doors.c b/src/p_doors.c index b681a8d0..89b65328 100644 --- a/src/p_doors.c +++ b/src/p_doors.c @@ -420,8 +420,41 @@ EV_VerticalDoor { if (!thing->player) return; // JDC: bad guys never close doors - - door->direction = -1; // start going down immediately + + // When is a door not a door? + // In Vanilla, door->direction is set, even though + // "specialdata" might not actually point at a door. + + if (door->thinker.function.acp1 == (actionf_p1) T_VerticalDoor) + { + door->direction = -1; // start going down immediately + } + else if (door->thinker.function.acp1 == (actionf_p1) T_PlatRaise) + { + // Erm, this is a plat, not a door. + // This notably causes a problem in ep1-0500.lmp where + // a plat and a door are cross-referenced; the door + // doesn't open on 64-bit. + // The direction field in vldoor_t corresponds to the wait + // field in plat_t. Let's set that to -1 instead. + + plat_t *plat; + + plat = (plat_t *) door; + plat->wait = -1; + } + else + { + // This isn't a door OR a plat. Now we're in trouble. + + fprintf(stderr, "EV_VerticalDoor: Tried to close " + "something that wasn't a door.\n"); + + // Try closing it anyway. At least it will work on 32-bit + // machines. + + door->direction = -1; + } } return; } -- cgit v1.2.3 From cc92d31eeaa40ae966196cfa5402474ffda0bbc7 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Sat, 10 Oct 2009 01:02:58 +0000 Subject: Don't crash when using the donut special type and the joining linedef is one sided (thanks Alexander Waldmann). Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1711 --- src/p_spec.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src') diff --git a/src/p_spec.c b/src/p_spec.c index 27042b5d..5bb6f19d 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -1199,6 +1199,24 @@ int EV_DoDonut(line_t* line) rtn = 1; s2 = getNextSector(s1->lines[0],s1); + + // Vanilla Doom does not check if the linedef is one sided. The + // game does not crash, but reads invalid memory and causes the + // sector floor to move "down" to some unknown height. + // DOSbox prints a warning about an invalid memory access. + // + // I'm not sure exactly what invalid memory is being read. This + // isn't something that should be done, anyway. + // Just print a warning and return. + + if (s2 == NULL) + { + fprintf(stderr, + "EV_DoDonut: linedef had no second sidedef! " + "Unexpected behavior may occur in Vanilla Doom. \n"); + break; + } + for (i = 0;i < s2->linecount;i++) { if ((!s2->lines[i]->flags & ML_TWOSIDED) || -- cgit v1.2.3 From a3ab0a6910f55c6f45a3f4eaf48b4a99c4e16e22 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Sat, 17 Oct 2009 19:29:46 +0000 Subject: Import donut overrun emulation code from PrBoom+ (Thanks entryway). Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1720 --- src/m_misc.c | 8 ++++ src/m_misc.h | 1 + src/p_spec.c | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 129 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/m_misc.c b/src/m_misc.c index acab0a5b..9a5fb84a 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -198,3 +198,11 @@ char *M_TempFile(char *s) return result; } +boolean M_StrToInt(const char *str, int *result) +{ + return sscanf(str, " 0x%x", result) == 1 + || sscanf(str, " 0X%x", result) == 1 + || sscanf(str, " 0%o", result) == 1 + || sscanf(str, " %d", result) == 1; +} + diff --git a/src/m_misc.h b/src/m_misc.h index 0fea7e92..0fe8e62e 100644 --- a/src/m_misc.h +++ b/src/m_misc.h @@ -39,6 +39,7 @@ void M_MakeDirectory(char *dir); char *M_TempFile(char *s); boolean M_FileExists(char *file); long M_FileLength(FILE *handle); +boolean M_StrToInt(const char *str, int *result); #endif diff --git a/src/p_spec.c b/src/p_spec.c index 5bb6f19d..37beb850 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -38,6 +38,7 @@ #include "i_system.h" #include "z_zone.h" #include "m_argv.h" +#include "m_misc.h" #include "m_random.h" #include "w_wad.h" @@ -1169,10 +1170,94 @@ void P_UpdateSpecials (void) memset(&buttonlist[i],0,sizeof(button_t)); } } - } +// +// Donut overrun emulation +// +// Derived from the code from PrBoom+. Thanks go to Andrey Budko (entryway) +// as usual :-) +// + +#define DONUT_FLOORHEIGHT_DEFAULT 0x00000000 +#define DONUT_FLOORPIC_DEFAULT 0x16 + +static void DonutOverrun(fixed_t *s3_floorheight, short *s3_floorpic, + line_t *line, sector_t *pillar_sector) +{ + static int first = 1; + static int tmp_s3_floorheight; + static int tmp_s3_floorpic; + + extern int numflats; + + if (first) + { + int p; + + // This is the first time we have had an overrun. + first = 0; + + // Default values + tmp_s3_floorheight = DONUT_FLOORHEIGHT_DEFAULT; + tmp_s3_floorpic = DONUT_FLOORPIC_DEFAULT; + + //! + // @category compat + // @arg + // + // Use the specified magic values when emulating behavior caused + // by memory overruns from improperly constructed donuts. + // In Vanilla Doom this can differ depending on the operating + // system. The default (if this option is not specified) is to + // emulate the behavior when running under Windows 98. + + p = M_CheckParm("-donut"); + + if (p > 0 && p < myargc - 2) + { + // Dump of needed memory: (fixed_t)0000:0000 and (short)0000:0008 + // + // C:\>debug + // -d 0:0 + // + // DOS 6.22: + // 0000:0000 (57 92 19 00) F4 06 70 00-(16 00) + // DOS 7.1: + // 0000:0000 (9E 0F C9 00) 65 04 70 00-(16 00) + // Win98: + // 0000:0000 (00 00 00 00) 65 04 70 00-(16 00) + // DOSBox under XP: + // 0000:0000 (00 00 00 F1) ?? ?? ?? 00-(07 00) + + M_StrToInt(myargv[p + 1], &tmp_s3_floorheight); + M_StrToInt(myargv[p + 2], &tmp_s3_floorpic); + + if (tmp_s3_floorpic >= numflats) + { + fprintf(stderr, + "DonutOverrun: The second parameter for \"-donut\" " + "switch should be greater than 0 and less than number " + "of flats (%d). Using default value (%d) instead. \n", + numflats, DONUT_FLOORPIC_DEFAULT); + tmp_s3_floorpic = DONUT_FLOORPIC_DEFAULT; + } + } + } + + /* + fprintf(stderr, + "Linedef: %d; Sector: %d; " + "New floor height: %d; New floor pic: %d\n", + line->iLineID, pillar_sector->iSectorID, + tmp_s3_floorheight >> 16, tmp_s3_floorpic); + */ + + *s3_floorheight = (fixed_t) tmp_s3_floorheight; + *s3_floorpic = (short) tmp_s3_floorpic; +} + // // Special Stuff that can not be categorized @@ -1186,17 +1271,19 @@ int EV_DoDonut(line_t* line) int rtn; int i; floormove_t* floor; - + fixed_t s3_floorheight; + short s3_floorpic; + secnum = -1; rtn = 0; while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0) { s1 = §ors[secnum]; - + // ALREADY MOVING? IF SO, KEEP GOING... if (s1->specialdata) continue; - + rtn = 1; s2 = getNextSector(s1->lines[0],s1); @@ -1217,13 +1304,34 @@ int EV_DoDonut(line_t* line) break; } - for (i = 0;i < s2->linecount;i++) + for (i = 0; i < s2->linecount; i++) { - if ((!s2->lines[i]->flags & ML_TWOSIDED) || - (s2->lines[i]->backsector == s1)) - continue; s3 = s2->lines[i]->backsector; - + + if (s3 == s1) + continue; + + if (s3 == NULL) + { + // e6y + // s3 is NULL, so + // s3->floorheight is an int at 0000:0000 + // s3->floorpic is a short at 0000:0008 + // Trying to emulate + + fprintf(stderr, + "EV_DoDonut: WARNING: emulating buffer overrun due to " + "NULL back sector. " + "Unexpected behavior may occur in Vanilla Doom.\n"); + + DonutOverrun(&s3_floorheight, &s3_floorpic, line, s1); + } + else + { + s3_floorheight = s3->floorheight; + s3_floorpic = s3->floorpic; + } + // Spawn rising slime floor = Z_Malloc (sizeof(*floor), PU_LEVSPEC, 0); P_AddThinker (&floor->thinker); @@ -1234,9 +1342,9 @@ int EV_DoDonut(line_t* line) floor->direction = 1; floor->sector = s2; floor->speed = FLOORSPEED / 2; - floor->texture = s3->floorpic; + floor->texture = s3_floorpic; floor->newspecial = 0; - floor->floordestheight = s3->floorheight; + floor->floordestheight = s3_floorheight; // Spawn lowering donut-hole floor = Z_Malloc (sizeof(*floor), PU_LEVSPEC, 0); @@ -1248,7 +1356,7 @@ int EV_DoDonut(line_t* line) floor->direction = -1; floor->sector = s1; floor->speed = FLOORSPEED / 2; - floor->floordestheight = s3->floorheight; + floor->floordestheight = s3_floorheight; break; } } -- cgit v1.2.3 From 1290c2496e85105871ab457b91e159d43c4cc7b4 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Sat, 17 Oct 2009 19:39:37 +0000 Subject: Use M_StrToInt() when processing values passed with -spechit, so that hex values can be specified. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1721 --- src/p_map.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/p_map.c b/src/p_map.c index 42f2a60f..db512673 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -36,6 +36,7 @@ #include "doomdef.h" #include "m_argv.h" +#include "m_misc.h" #include "p_local.h" #include "s_sound.h" @@ -1412,7 +1413,7 @@ static void SpechitOverrun(line_t *ld) if (p > 0) { - baseaddr = atoi(myargv[p+1]); + M_StrToInt(atoi(myargv[p+1]), &baseaddr); } else { -- cgit v1.2.3 From 42454af827d204444874558ccb340fc6e65f9ac1 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Sat, 17 Oct 2009 20:13:54 +0000 Subject: Fix error in last change. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1722 --- src/p_map.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/p_map.c b/src/p_map.c index db512673..89f8f3f8 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -1413,7 +1413,7 @@ static void SpechitOverrun(line_t *ld) if (p > 0) { - M_StrToInt(atoi(myargv[p+1]), &baseaddr); + M_StrToInt(myargv[p+1], (int *) &baseaddr); } else { -- cgit v1.2.3 From 3771126689527293eb4ad658b338d7910bf79012 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Mon, 26 Oct 2009 19:28:12 +0000 Subject: Initial hacks for compiling under SDL 1.3. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1726 --- src/i_video.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/i_video.c b/src/i_video.c index 062c9c9c..481ee0ea 100644 --- a/src/i_video.c +++ b/src/i_video.c @@ -334,7 +334,9 @@ static int TranslateKey(SDL_keysym *sym) case SDLK_PAUSE: return KEY_PAUSE; +#if !SDL_VERSION_ATLEAST(1, 3, 0) case SDLK_EQUALS: return KEY_EQUALS; +#endif case SDLK_MINUS: return KEY_MINUS; @@ -347,9 +349,11 @@ static int TranslateKey(SDL_keysym *sym) return KEY_RCTRL; case SDLK_LALT: - case SDLK_LMETA: case SDLK_RALT: +#if !SDL_VERSION_ATLEAST(1, 3, 0) + case SDLK_LMETA: case SDLK_RMETA: +#endif return KEY_RALT; case SDLK_CAPSLOCK: return KEY_CAPSLOCK; @@ -420,9 +424,15 @@ void I_StartFrame (void) static int MouseButtonState(void) { - Uint8 state = SDL_GetMouseState(NULL, NULL); + Uint8 state; int result = 0; +#if SDL_VERSION_ATLEAST(1, 3, 0) + state = SDL_GetMouseState(0, NULL, NULL); +#else + state = SDL_GetMouseState(NULL, NULL); +#endif + // Note: button "0" is left, button "1" is right, // button "2" is middle for Doom. This is different // to how SDL sees things. @@ -585,7 +595,11 @@ static void CenterMouse(void) // Clear any relative movement caused by warping SDL_PumpEvents(); +#if SDL_VERSION_ATLEAST(1, 3, 0) + SDL_GetRelativeMouseState(0, NULL, NULL); +#else SDL_GetRelativeMouseState(NULL, NULL); +#endif } // @@ -599,7 +613,11 @@ static void I_ReadMouse(void) int x, y; event_t ev; +#if SDL_VERSION_ATLEAST(1, 3, 0) + SDL_GetRelativeMouseState(0, &x, &y); +#else SDL_GetRelativeMouseState(&x, &y); +#endif if (x != 0 || y != 0) { @@ -1553,7 +1571,9 @@ void I_InitGraphics(void) // has to be done before the call to SDL_SetVideoMode. I_SetWindowCaption(); +#if !SDL_VERSION_ATLEAST(1, 3, 0) I_SetWindowIcon(); +#endif // Set the video mode. -- cgit v1.2.3 From 43b0dbd272da1d590797d2974e94413971131129 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Thu, 19 Nov 2009 21:49:13 +0000 Subject: Rework the OS X MIDI disabling code, as SDL_mixer 1.2.11 fixes the crash. Check and disable MIDI by default if using an older version of SDL on OS X. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1730 --- src/i_sdlmusic.c | 32 +++++++++++++++++++++----------- src/m_config.c | 19 +++++++++++++++++++ src/s_sound.c | 10 +--------- 3 files changed, 41 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/i_sdlmusic.c b/src/i_sdlmusic.c index 81f492b5..7f9bd8ec 100644 --- a/src/i_sdlmusic.c +++ b/src/i_sdlmusic.c @@ -81,18 +81,28 @@ static boolean SDLIsInitialized(void) // Initialize music subsystem static boolean I_SDL_InitMusic(void) -{ - // When trying to run with music enabled on OSX, display - // a warning message. - -#ifdef __APPLE__ - printf("\n" - " *** WARNING ***\n" - " Music playback on OSX may cause crashes and\n" - " is disabled by default.\n" - "\n"); +{ + // SDL_mixer prior to v1.2.11 has a bug that causes crashes + // with MIDI playback. Print a warning message if we are + // using an old version. + +#ifdef __MACOSX__ + { + const SDL_version *v = Mix_Linked_Version(); + + if (SDL_VERSIONNUM(v->major, v->minor, v->patch) + < SDL_VERSIONNUM(1, 2, 11)) + { + printf("\n" + " *** WARNING ***\n" + " You are using an old version of SDL_mixer.\n" + " Music playback on this version may cause crashes\n" + " under OS X and is disabled by default.\n" + "\n"); + } + } #endif - + // If SDL_mixer is not initialized, we have to initialize it // and have the responsibility to shut it down later on. diff --git a/src/m_config.c b/src/m_config.c index 4f789845..73f0da2c 100644 --- a/src/m_config.c +++ b/src/m_config.c @@ -36,6 +36,8 @@ #include #endif +#include "SDL_mixer.h" + #include "config.h" #include "deh_main.h" #include "doomdef.h" @@ -53,6 +55,7 @@ #include "i_swap.h" #include "i_system.h" #include "i_video.h" +#include "s_sound.h" #include "v_video.h" #include "hu_stuff.h" @@ -1456,5 +1459,21 @@ void M_ApplyPlatformDefaults(void) #ifdef _WIN32_WCE M_ApplyWindowsCEDefaults(); #endif + + // Before SDL_mixer version 1.2.11, MIDI music caused the game + // to crash when it looped. If this is an old SDL_mixer version, + // disable MIDI. + +#ifdef __MACOSX__ + { + const SDL_version *v = Mix_Linked_Version(); + + if (SDL_VERSIONNUM(v->major, v->minor, v->patch) + < SDL_VERSIONNUM(1, 2, 11)) + { + snd_musicdevice = SNDDEVICE_NONE; + } + } +#endif } diff --git a/src/s_sound.c b/src/s_sound.c index 9b4f71aa..1c56efb2 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -69,14 +69,6 @@ #define NORM_PRIORITY 64 #define NORM_SEP 128 -// Disable music on OSX by default; there are problems with SDL_mixer. - -#ifndef __APPLE__ -#define DEFAULT_MUSIC_DEVICE SNDDEVICE_SB -#else -#define DEFAULT_MUSIC_DEVICE SNDDEVICE_NONE -#endif - typedef struct { // sound information (if null, channel avail.) @@ -128,7 +120,7 @@ static musicinfo_t *mus_playing = NULL; int numChannels = 8; -int snd_musicdevice = DEFAULT_MUSIC_DEVICE; +int snd_musicdevice = SNDDEVICE_SB; int snd_sfxdevice = SNDDEVICE_SB; // Sound modules -- cgit v1.2.3 From 1dfad75870fa6b8e0a3aa41b3f9bb6ea260c9d9f Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Sat, 21 Nov 2009 00:38:16 +0000 Subject: Don't crash if key settings are set in a configuration file that are out of range (thanks entryway). Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1732 --- src/m_config.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/m_config.c b/src/m_config.c index 73f0da2c..a2f3ac58 100644 --- a/src/m_config.c +++ b/src/m_config.c @@ -1237,7 +1237,14 @@ static void LoadDefaultCollection(default_collection_t *collection) intparm = ParseIntParameter(strparm); defaults[i].untranslated = intparm; - intparm = scantokey[intparm]; + if (intparm >= 0 && intparm < 128) + { + intparm = scantokey[intparm]; + } + else + { + intparm = 0; + } defaults[i].original_translated = intparm; * (int *) def->location = intparm; -- cgit v1.2.3