投稿者 トピック: [r4049] マップ拡張時にクラッシュする  (参照数 2652 回)

z9999+

  • 管理人
  • 急行
  • *
  • 投稿: 381
問題:
マップ拡張時にクラッシュする。
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