問題:
マップ拡張時にクラッシュする。
http://yuzuru.2ch.net/test/read.cgi/gameama/1286187795/690n で報告されたもの
再現手順:
1. 添付セーブゲームを読み込む。
2. 「マップ拡張」ウィンドウを開いて、サイズを「448x448」から「512x512」に変更し、ボタンをクリックする。
結果:
クラッシュする。
Problem:
Crash when enlarging a map.
How to reproduce:
1. Load attached savegame. (pak64)
2. Open 'Enlarge map' window and set size from 448x448 to 512x512.
3. Click 'Enlarge map' button.
Result:
Crash.
Note:
Many players reported similar crash problems with enlarging maps.
Especially, rotating and enlarging maps seems to cause problems.
How to make this savegame:
1. map number: 614, size: 256x256. Start with this new map.
2. Enlarge map to 320x320.
3. Rotate 2 times (180degree).
4. Enlarge map to 384x384.
5. Rotate 3 times (270degree).
6. Enlarge map to 448x448.
7. Rotate 3 times (270degree).
sim.exe caused an Access Violation at location 005898ee in module sim110rc.exe Reading from location 0686f028.
Registers:
eax=0686f030 ebx=09f90024 ecx=06870020 edx=fffff008 esi=0029fcf4 edi=0676b778
eip=005898ee esp=0023e130 ebp=0023e180 iopl=0 nv up ei pl nz ac po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000216
Call stack:
005898EE sim110rc.exe:005898EE smoothed_noise(int, int) simtools.cc:190
...
if(map) {
const double corners =
> map_noise(x-1, y-1)+map_noise(x+1, y-1)+map_noise(x-1, y+1)+map_noise(x+1, y+1);
const double sides =
...
00589B67 sim110rc.exe:00589B67 interpolated_noise(double, double) simtools.cc:246
...
const double fractional_Y = y - (double)integer_Y;
> const double v1 = smoothed_noise(integer_X, integer_Y);
const double v2 = smoothed_noise(integer_X + 1, integer_Y);
const double v3 = smoothed_noise(integer_X, integer_Y + 1);
...
00589C80 sim110rc.exe:00589C80 perlin_noise_2D(double, double, double) simtools.cc:268
...
const double frequency = (double)(1 << i);
const double amplitude = pow(p, (double)i);
> total += interpolated_noise( (x * frequency) / 64.0, (y * frequency) / 64.0) * amplitude;
}
...
005A9B84 sim110rc.exe:005A9B84 karte_t::perlin_hoehe(einstellungen_t*, koord, koord) simworld.cc:402
...
// return ((int)(perlin_noise_2D(x, y, 0.6)*160.0)) & 0xFFFFFFF0;
k = k + koord(sets->get_origin_x(), sets->get_origin_y());
> return ((int)(perlin_noise_2D(k.x, k.y, sets->get_map_roughness())*(double)sets->get_max_mountain_height())) / 16;
}
...
005AEE90 sim110rc.exe:005AEE90 karte_t::enlarge_map(einstellungen_t*, signed char*) simworld.cc:1378
...
for( sint16 y = (x>=old_x)?0:old_y; y<=new_groesse_y; y++ ) {
koord pos(x,y);
> const sint16 h = perlin_hoehe( einstellungen, pos, koord(old_x,old_y) );
set_grid_hgt( pos, h*Z_TILE_STEP);
}
...
004B14F6 sim110rc.exe:004B14F6 enlarge_map_frame_t::action_triggered(gui_action_creator_t*, value_t) enlarge_map_frame_t.cc:157
...
win_set_pos( this, display_get_width()+2, display_get_height()+2 );
intr_refresh_display( true );
> welt->enlarge_map(sets, NULL);
destroy_all_win( true );
}
...
0063AE80 sim110rc.exe:0063AE80
004835FD sim110rc.exe:004835FD button_t::infowin_event(event_t const*) gui_button.cc:443
...
}
else {
> call_listeners( (long)0 );
}
}
...
004C3234 sim110rc.exe:004C3234 gui_container_t::infowin_event(event_t const*) gui_container.cc:171
...
// CAUTION : call to infowin_event() should not delete the component itself!
> swallowed = komp->infowin_event(&ev2);
// focused component of this container can only be one of its immediate children
...
004C479B sim110rc.exe:004C479B gui_frame_t::infowin_event(event_t const*) gui_frame.cc:88
...
event_t ev2 = *ev;
translate_event(&ev2, 0, -TITLEBAR_HEIGHT);
> return container.infowin_event(&ev2);
}
...
005A783A sim110rc.exe:005A783A check_pos_win(event_t*) simwin.cc:1087
...
event_t wev = *ev;
translate_event(&wev, -wins[i].pos.x, -wins[i].pos.y);
> wins[i].gui->infowin_event( &wev );
}
}
...
005C26F8 sim110rc.exe:005C26F8 karte_t::interactive(unsigned) simworld.cc:5420
...
DBG_DEBUG4("karte_t::interactive", "calling check_pos_win");
> swallowed = check_pos_win(&ev);
if( !swallowed ) {
...
0057DCDF sim110rc.exe:0057DCDF simu_main(int, char**) simmain.cc:1119
...
// run the loop
> welt->interactive(quit_month);
new_world = true;
...
005EF5A7 sim110rc.exe:005EF5A7 WinMain simsys_w16.cc:805
...
}
> simu_main(argc, argv);
timeEndPeriod(1);
...
005F037A sim110rc.exe:005F037A dr_play_sample(int, int) win32_sound.cc:103
...
last_sample_nr = sample_number;
}
> }
...
00401247 sim110rc.exe:00401247
00401298 sim110rc.exe:00401298
7C817077 kernel32.dll:7C817077 RegisterWaitForInputIdle