diff --git a/CHANGELOG.txt b/CHANGELOG.txt index c2de13e4e..1c9018f11 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,9 @@ D2X-Rebirth Changelog +20110713 +-------- +arch/sdl/event.c, arch/sdl/key.c, main/kconfig.c, main/menu.c: Stability fixes: avoid somfusions with same named variables in one function; Properly sort out players from player list that use too long filenames; Removed call for gr_set_fontcolor in kconfig where no canvas is set, causing crashes when trying to reassign a button, key or axis + 20110712 -------- main/wall.c: Readded automatic wall-flag setting for opened doors as PLP cannot protect us from negative side-effects due to how gullible multi_do_door_open() works diff --git a/arch/sdl/event.c b/arch/sdl/event.c index cb0977962..0c5b7e4bd 100644 --- a/arch/sdl/event.c +++ b/arch/sdl/event.c @@ -72,8 +72,8 @@ void event_poll() case SDL_JOYBALLMOTION: break; case SDL_QUIT: { - d_event event = { EVENT_QUIT }; - call_default_handler(&event); + d_event qevent = { EVENT_QUIT }; + call_default_handler(&qevent); idle = 0; } break; } @@ -82,10 +82,10 @@ void event_poll() // Send the idle event if there were no other events if (idle) { - d_event event; + d_event ievent; - event.type = EVENT_IDLE; - event_send(&event); + ievent.type = EVENT_IDLE; + event_send(&ievent); } mouse_cursor_autohide(); diff --git a/arch/sdl/key.c b/arch/sdl/key.c index d7b613c2c..3d9cb7bb9 100644 --- a/arch/sdl/key.c +++ b/arch/sdl/key.c @@ -360,22 +360,22 @@ unsigned char key_ascii() return 255; } -void key_handler(SDL_KeyboardEvent *event) +void key_handler(SDL_KeyboardEvent *kevent) { int keycode, event_keysym=-1, key_state; // Read SDLK symbol and state - event_keysym = event->keysym.sym; - key_state = (event->state == SDL_PRESSED)?1:0; + event_keysym = kevent->keysym.sym; + key_state = (kevent->state == SDL_PRESSED)?1:0; // fill the unicode frame-related unicode buffer - if (key_state && event->keysym.unicode > 31 && event->keysym.unicode < 255) + if (key_state && kevent->keysym.unicode > 31 && kevent->keysym.unicode < 255) { int i = 0; for (i = 0; i < KEY_BUFFER_SIZE; i++) if (unicode_frame_buffer[i] == '\0') { - unicode_frame_buffer[i] = event->keysym.unicode; + unicode_frame_buffer[i] = kevent->keysym.unicode; break; } } diff --git a/main/kconfig.c b/main/kconfig.c index 76d5d9ad7..f6c52a2a1 100644 --- a/main/kconfig.c +++ b/main/kconfig.c @@ -594,8 +594,7 @@ void kconfig_start_changing(kc_menu *menu) kc_change_invert(menu, &menu->items[menu->citem]); return; } - - gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); + menu->q_fade_i = 0; // start question mark flasher menu->changing = 1; } diff --git a/main/menu.c b/main/menu.c index ad389938a..c7fe99c5d 100644 --- a/main/menu.c +++ b/main/menu.c @@ -370,12 +370,22 @@ int RegisterPlayer() { char *p; + if (strlen(*f) > FILENAME_LEN-1 || strlen(*f) < 5) // sorry guys, can only have up to eight chars for the player name + { + NumItems--; + continue; + } m[i++] = *f; p = strchr(*f, '.'); if (p) *p = '\0'; // chop the .plr - if ((p - *f) > 8) - *f[8] = 0; // sorry guys, can only have up to eight chars for the player name + } + + if (NumItems <= 1) // so it seems all plr files we found were too long. funny. let's make a real player + { + MakeNewPlayerFile(0); // make a new player without showing listbox + PHYSFS_freeList(list); + return 0; } // Sort by name, except the string