/* This file has been generated by the Hex-Rays decompiler. Copyright (c) 2007-2012 Hex-Rays Detected compiler: Visual C++ */ #include #include //------------------------------------------------------------------------- // Function declarations #define __thiscall __cdecl // Test compile in C mode editManager *__thiscall editManager::editManager(editManager *this); int __thiscall editManager::Open(editManager *this, int a2); // idb editManager *__thiscall editManager::Close(editManager *this); signed int __thiscall editManager::GetOverlayID(int this, int x, int y); void __thiscall sub_401AD9(void *ecx0); signed int __thiscall editManager::Main(editManager *this, int a2); void *__cdecl CopyMap(); void __cdecl RedrawEditPane(); void __thiscall editManager::HighlightCursorCoordinates(editManager *this); void __thiscall editManager::HighlightCoordinates(editManager *this, int left, int top, int x, int y); void __thiscall editManager::ToCellIdx(editManager *this, int *x, int *y); void __thiscall editManager::UpdateCursor(editManager *this); void __thiscall editManager::UpdateCursorTo(editManager *this, int left, int top); void __thiscall sub_40365F(editManager *this, int a2); void __thiscall editManager__RenderCell(editManager *this, int mapX, int mapY, int editWindowX, int editWindowY, char renderPass); void __thiscall sub_404A83(editManager *ecx0); void __thiscall editManager::SelectToolbox(editManager *this, int toolBoxNo); void __thiscall sub_404EC0(int this, int a2, int a3); mouseManager *__thiscall sub_404FDC(int this, int a2); void __thiscall sub_40518A(editManager *this, int paneX, int paneY, int width, int height, int a6); _DWORD __stdcall sub_40527B(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // weak int __fastcall sub_40537D(int x, int y, int terrainType, int a4); // idb void __thiscall sub_405425(void *ecx0); int __thiscall sub_4058D6(_DWORD); // weak int __thiscall sub_405B25(_DWORD); // weak void __thiscall editManager::CheckPairedObjects(editManager *); int __cdecl sub_4060C9(); FILE *__thiscall sub_40614C(void *this); FILE *__fastcall sub_4061D6(int a1, int a2, int a3); int __cdecl sub_406223(); int __thiscall editManager::PrepareSave6(editManager *); bool __stdcall YesNoDialog(char *text); int __cdecl CountPlacedEvents(); int __cdecl CountTowns(); int __cdecl CountMines(); void __thiscall editManager::WriteTowns(editManager *, int fd); int __thiscall editManager::WriteMines(editManager *, int fd); void __thiscall editManager::WriteNumObelisks(editManager *, int fd); signed int __thiscall editManager::Save(editManager *this, char *Dest); signed int __thiscall editManager::Load(editManager *this, const char *name); // idb int __thiscall sub_407FBF(void *this); void __thiscall editManager::ResetErrorMessages(editManager *); heroWindowManager *__cdecl ShowMapErrors(); void __stdcall AddErrorMessage(const char *msg); // idb void __stdcall sub_408334(int x, int y, int width, int height, int a5, int a6, int a7); void __stdcall sub_408633(int link); void __stdcall EraseRegion(int left, int top, int width, int height); editManager *__thiscall editManager::ResetObjectData(editManager *this); void __thiscall editManager::InitializeMap(editManager *this, int random, int width, int height); signed int __thiscall editManager::CellIsShadow(editManager *this, int x, int y); void __thiscall editManager::SetLocationSpecialThingyForSpacesAroundBoats(editManager *this, int x, int y); void __fastcall ShowErrorMessage(const char *str); int __fastcall SelectTerrainTile(int a1, int a2, int a3, int a4, int a5, int a6, float a7); bool __fastcall InMapArea(signed int x, signed int y); // idb void __stdcall sub_409D94(int a2, int a3, int a4, int a5, int a6); void __cdecl sub_40C704(); void __thiscall editManager::ScreenScroll(editManager *this, int a2, int a3); DWORD __thiscall advManager::CheckScreenScroll(void *this); void __cdecl FillInOverlayTiles(); int __fastcall HasExtraObjectData(int id); int __fastcall LocationHasSpecialDetails(int loc); void __fastcall DeleteExtraObjectData(unsigned int idx); void *__thiscall editManager::CoalesceObjectData(editManager *this); void __cdecl CalculatePlayerNumbers(); void __cdecl ResetPlayerAvailability(); int __thiscall editManager::RandomizeTownNames(editManager *); signed int __stdcall sub_40E52F(int a1, int a2, int a3); signed int __stdcall sub_40E634(int a1, int a2, int a3); int __cdecl sub_40E712(); signed int __thiscall sub_40E7FD(int this); LSTATUS __cdecl combatManager::CombatSystemOptions(); mouseManager *__thiscall UpdateCombatSystemOptions(void *this); signed int __thiscall CombatSystemOptionsHandler(void *this); void __thiscall sub_40F0A7(void *this); void __thiscall sub_40F1D8(void *ecx0, int a2); char __cdecl IsExpansionMap(); int __cdecl sub_40F74A(); void __cdecl sub_40F7A7(); // idb void __cdecl PollSound(); void __cdecl sub_40F8AC(); int __cdecl oldmain(); // __int32 __thiscall DelayTil(void *this); // DWORD __fastcall DelayTilMilli(__int32 a1); void __thiscall FileError(void *this); void __thiscall ShutDown(void *this); signed int __cdecl InterpretCommandLine(); void __fastcall EarlyShutdown(const CHAR *a1, const CHAR *a2); signed int __cdecl EarlySetup(); void __cdecl MemError(); editManager *__cdecl InitMainClasses(); int __cdecl DeleteMainClasses(); int __fastcall NormalDialog(char *text, int a2, int a3, signed int a4, int a5, int a6, int a7, int a8, int a9, int a10); signed int __thiscall sub_410918(int this); // void __fastcall QuickViewWait(); weak void __fastcall ShowDebugMessage(const char *str); void __cdecl sub_410B3A(); BOOL __cdecl CleanUpMenus(); void __cdecl sub_410BFA(); // signed int __cdecl sub_410C24(); signed int __thiscall sub_410C39(void *this); void __stdcall sub_410D1D(int a1, int a2); // void __cdecl doNothing_0(); int __fastcall SetWinText(heroWindow *a1, int a2); lineManager *__thiscall lineManager::lineManager(lineManager *this); int __thiscall lineManager::Open(lineManager *this, int idx); // idb void __thiscall lineManager::Close(lineManager *this); signed int __thiscall lineManager::Main(lineManager *this, tag_message *a2); void __fastcall sub_411292(int isRiver); int __fastcall sub_411317(_DWORD, _DWORD); // weak int __fastcall IsSomeSpecialKindOfRoadOrRiverTile(int objTileset, int objIndex, int a3); // idb int __fastcall sub_4114F4(int left, int top, int right, int bottom, int a5); // idb int __fastcall sub_4117C6(int a1, signed int a2, int a3, int a4); int __fastcall sub_411CC5(int a1, signed int a2, int a3, int a4); int __fastcall sub_411ED6(int a1, signed int a2, int a3, int a4); void __fastcall sub_411F4C(int a1, signed int a2, int a3, signed int a4, signed int a5); void __fastcall sub_4122F9(int a1, int a2, int a3, int a4); baseManager *__thiscall clearManager::clearManager(baseManager *this); int __thiscall sub_4123F0(void *ecx0, int a2); void *__thiscall sub_412507(void *this); void __cdecl sub_4125CB(); signed int __thiscall sub_412677(void *this, int a2); editManager *__cdecl sub_412BF4(); signed int __stdcall sub_412D6D(int a1, int a2, int a3); terrainManager *__thiscall terrainManager::terrainManager(terrainManager *this); int __thiscall terrainManager::Open(terrainManager *this, int idx); // idb void __thiscall terrainManager::Close(terrainManager *this); void __thiscall terrainManager::SynchButtons(terrainManager *this); signed int __cdecl GetBrushSize(); void __stdcall SetBrushRegion(int brushSize, int x, int y); const void *__cdecl sub_413555(); signed int __thiscall terrainManager::Main(terrainManager *this, tag_message *msg); // void __cdecl DoNothing2(); void __thiscall terrainManager::ChooseTerrain(terrainManager *this, int terain); eventsManager *__thiscall eventsManager::eventsManager(eventsManager *this); int __thiscall eventsManager::Open(eventsManager *this, int idx); // idb void __thiscall eventsManager::Close(eventsManager *this); signed int __thiscall eventsManager::Main(eventsManager *this, tag_message *msg); int __thiscall eventsManager::DefaultEdit(eventsManager *this, int x, int y); signed int __fastcall DebugCellEditHandler(tag_message *msg); _DWORD __thiscall eventsManager::EditUltimateArtifactOrMonster(eventsManager *, _DWORD, _DWORD, _DWORD); signed int __thiscall sub_4152C8(int this); bool __cdecl sub_415574(); int __cdecl sub_415889(); void __fastcall sub_415A3F(int a1); signed int __thiscall sub_415C06(int this); int __fastcall sub_41608F(int a1, int a2); _DWORD __thiscall eventsManager::EditSign(eventsManager *this, int x, int y); _DWORD __stdcall sub_416620(_DWORD); // weak signed int __thiscall EditSignHandler(tag_message *this); void __cdecl DDRestoreDisplayMode(); signed int __cdecl DDQueryNewPalette(); int __cdecl CreatePrimary(); void __cdecl SetupClipper(); void __cdecl DDInitGraphics(); signed int __fastcall DDAppPaint(HWND a1, void *a2); void __cdecl DDInitializePalette(); signed int __cdecl DDSetPalette(); int __fastcall DDCreateSurface(int a1, int a2, int a3); // void __fastcall DDSD(signed int a1, char *a2, int a3); void __thiscall DDUpdatePalette(void *this); void __cdecl DDCleanUpWinGraphics(); void __thiscall DDSetFullScreenStatus(void *this); signed int __cdecl WGQueryNewPalette(); void __cdecl WGInitGraphics(); heroWindowManager *__thiscall WGUpdatePalette(void *this); void __cdecl WGInitializePalette(); signed int __fastcall WGAppPaint(HWND a1, void *a2); void __cdecl WGCleanUpWinGraphics(); void __cdecl ConnectToDLLs(); BOOL __cdecl DisconnectDLLs(); signed int __cdecl SetPalette(); // void __fastcall GetGraphicsInfo(); weak void __cdecl InitGraphics(); // signed int __fastcall AppPaint(HWND a1, void *a2); void __cdecl InitializePalette(); void __thiscall UpdatePalette(void *this); BOOL __cdecl CleanUpWinGraphics(); void __thiscall SetFullScreenStatus(void *this); signed int __cdecl QueryNewPalette(); signed int __thiscall SetGraphicsType(void *this); void __thiscall sub_418C30(editManager *, void **a1); signed int __fastcall sub_418DE3(tag_message *msg); signed int __fastcall GetMapHeader(char *filnam, SMapHeader *buf); // _DWORD __fastcall ShowThisMap(char *); weak int __thiscall fileRequester::InitializeFiles(void *this, int a2, int a3, int a4); // fileRequester *__thiscall fileRequester::fileRequester(fileRequester *this, int x, int y, int a4, const char *filter, const char *a6, const char *a7); idb bool __thiscall fileRequester::MapExistsForFilter(void *this, int a2); int __thiscall fileRequester::SetupFiles(_DWORD); // weak int __thiscall fileRequester::CleanUpData(int this); int __thiscall fileRequester::Open(void *ecx0, int a2); int __thiscall fileRequester::SetOK(int this, int a2); signed int __thiscall fileRequester::Main(overlayManager *this, tag_message *msg); // idb int __thiscall fileRequester::DoKnob(_DWORD); // weak int __thiscall fileRequester::Update(int this, int a2); int __thiscall fileRequester::GetFilename(int this); int __cdecl sub_41BD90(); signed int __cdecl sub_41BE93(); signed int __thiscall ExpLoadCampaignHandler(void *this); signed int __thiscall SetupMultiPlayerGameHandler(void *this); signed int __thiscall BaseSetupHandler(void *this); signed int __thiscall sub_41C290(void *this); bool __cdecl sub_41C370(); int __cdecl sub_41C876(); signed int __fastcall sub_41CEA6(int a1); int __cdecl sub_41CFDC(); signed int __fastcall sub_41D4C1(int a1); int __cdecl sub_41D5F6(); editManager *__cdecl sub_41DABC(); void *__cdecl sub_41DD01(); void *__cdecl sub_41DE0E(); editManager *__cdecl sub_41DEBF(); void *__cdecl sub_41E0AE(); void *__cdecl sub_41E19B(); signed int __thiscall sub_41E24C(tag_message *msg); // idb void __thiscall eventsManager::EditTown(eventsManager *this, int x, int y); int __stdcall FillInTownEdit(TownExtra *extra); // idb signed int __thiscall EditTownHandler(tag_message *this); signed int __fastcall OverlayMaskBitSet(__int64 *mask, int x, int y); baseManager *__thiscall overlayManager::overlayManager(baseManager *this); int __thiscall overlayManager::Open(overlayManager *this, int idx); // idb overlayManager *__thiscall overlayManager::Close(overlayManager *this); void __thiscall overlayManager::DrawSelection(overlayManager *this, int update); signed int __thiscall overlayManager::Main(overlayManager *this, tag_message *msg); // idb void __thiscall overlayManager::DrawAffectedTileGrid(overlayManager *this, int x, int y, int width, int height, overlay *ovr, signed int a7); // idb signed int __fastcall ValidOverlayPlacement(overlay *ovr, int left, signed int top, int a4); // idb void __fastcall UnknownPlaceOverlayHelper(overlay *ovr, int left, int right); // idb int __fastcall PlaceOverlay(overlay *ovr, int left, int top, int userDemanded); int __fastcall SetMineResourceIcon(overlay *ovr, int x, int y, int a4); void __thiscall overlayManager::DrawOverlay(overlayManager *this, overlay *ovr, int xoff, int yoff, int a4, int width, int height, int draw, signed int a8, int a9); int __thiscall overlayManager::PopulateAvailOverlays(overlayManager *this, int objType); signed int __thiscall sub_422E8D(overlayManager *this, int a2); // void __cdecl DoNothing(); signed int __thiscall sub_422F80(void *ecx0, int a2); void __thiscall sub_4230AC(overlayManager *this, int draw); // idb int __thiscall overlayManager::SelectObject(overlayManager *this, int objType); // idb signed int __thiscall sub_423649(int this); signed int __thiscall overlayManager::SelectOverlayMain(int ecx0, int a2); void __thiscall sub_423A53(void *this, int a2, int a3, int a4); int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd); signed int __fastcall AppInit(HINSTANCE a1, int a2, int nCmdShow, int a4); signed int __cdecl AppIdle(); // int __stdcall AppWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); signed int __stdcall AppAbout(HWND hDlg, int a2, __int16 a3, int a4); // int __cdecl AppExit(); // __int32 __cdecl Process1WindowsMessage(); // void __fastcall ResizeWindow(_DWORD, _DWORD, _DWORD, _DWORD); weak int __fastcall AppCommand(HWND a1, unsigned int a2, unsigned __int16 a3, __int32 a4); // void __fastcall UpdateDfltMenu(void *); weak // void __fastcall KBChangeMenu(void *); weak void __thiscall SetMenuStatus(BOOL this); void __thiscall SetNoDialogMenus(void *this); void __fastcall SetMenus(HMENU a1, unsigned int a2); // DWORD __cdecl KBTickCount(); _DWORD __thiscall eventsManager::EditHero(eventsManager *this, int x, int y, int isJailed); int __stdcall FillInHeroEdit(HeroExtra *hextra); // idb signed int __thiscall EditHeroHandler(tag_message *this); int __stdcall sub_426180(int a1); int __stdcall sub_42635C(int a1); signed int __thiscall sub_4263A0(int this); _DWORD __thiscall eventsManager::EditSphinx(eventsManager *, _DWORD); int __stdcall sub_42686D(SphinxExtra *sphinx); // idb signed int __thiscall EditSphinxHandler(tag_message *evt2); _DWORD __thiscall eventsManager::EditEvent(eventsManager *this, int mapExtraIdx); int __stdcall sub_427299(EventExtra *eventMapExtra); // idb signed int __thiscall sub_427563(int this); // int __thiscall MapTiles_constructor(_DWORD); weak void __thiscall fullMap::_fullMap(fullMap *this); void __thiscall fullMap::Close(fullMap *this); void __thiscall fullMap::Reset(fullMap *this, int width, int height); mapCellExtra *__thiscall fullMap::ClearCellExtra(fullMap *this, int i); // idb void *__thiscall fullMap::Clone(fullMap *this, fullMap *oth); // idb int __thiscall fullMap::GetNewCellExtraIndex(fullMap *this); mapCellExtra *__thiscall fullMap::GetNewCellExtraOverlay(fullMap *this, int a2, int a3); mapCellExtra *__thiscall fullMap::GetNewCellExtraObject(fullMap *this, int, int); void __thiscall fullMap::RemoveCellExtra(fullMap *this, int idx); void __thiscall fullMap::ClearCell(fullMap *this, int row, int col); void __thiscall fullMap::MoveInfoToCellExtra(fullMap *this, int x, int y); void __thiscall fullMap::ClearOverlay(fullMap *this, int idx); void __thiscall fullMap::RemoveOverlay(fullMap *this, int row, int col); void __thiscall fullMap::RearrangeCellExtras(fullMap *this); void __thiscall fullMap::Write(fullMap *this, int fd); mapCellExtra *__thiscall fullMap::Read(fullMap *this, int fd, int a3); // idb void __thiscall fullMap::ChangeTilesetIndex(fullMap *this, mapCell *cell, int x, int y, int tileset, int idx, int a7, int ovrLink); signed int __fastcall sub_429170(overlay *a1, int a2, int a3); signed int __fastcall sub_4291A2(int a1, int a2, int a3, int a4); void __thiscall editManager::GenerateRandomMap(editManager *this); bool __cdecl sub_429604(); _DWORD __stdcall sub_4296C1(_DWORD, _DWORD, _DWORD); // weak int __cdecl editManager::CleanUpGround(); int __fastcall sub_42A37A(int a1, double *a2); _DWORD __stdcall sub_42A3D9(_DWORD, _DWORD); // weak int __stdcall editManager::PlaceRandomMountainsOrTrees(double *a1, int doMountains); signed int __stdcall sub_42AAF9(int *a1, int *a2, int a3, int doMountains, char tileset); // idb void __cdecl sub_42AD10(); _DWORD __stdcall sub_42CFD8(_DWORD, _DWORD, _DWORD); // weak signed int __thiscall editManager::PlaceRandomObjects(editManager *this, double *a1, signed int a2); char __thiscall editManager::PlaceRandomTreasures(editManager *this, int a1, int a2); int __cdecl sub_42EC3D(); // int __stdcall thunk_WinGCreateBitmap(_DWORD, _DWORD, _DWORD); weak // int __stdcall thunk_WinGCreateDC(); weak // int __stdcall thunk_WinGRecommendDIBFormat(_DWORD); weak // int __stdcall thunk_WinGSetDIBColorTable(_DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall thunk_WinGStretchBlt(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10); // int __fastcall thunk_WinGBitBlt(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // baseManager *__thiscall baseManager::baseManager(baseManager *this); // int __thiscall mouseManager::mouseManager(_DWORD); weak int __stdcall mouseManager::Main(int a1); // _DWORD __stdcall mouseManager::SetPointer(_DWORD, _DWORD, _DWORD); weak // _DWORD __stdcall mouseManager::SetPointer(_DWORD); weak int __thiscall mouseManager::NewUpdate(int this, int a2); // _DWORD __stdcall mouseManager::MouseCoords(_DWORD, _DWORD); weak int __thiscall mouseManager::SaveAndDraw(int this); int __thiscall mouseManager::ReallyHidePointer(int this); int __thiscall mouseManager::ReallyShowPointer(int this); // int __thiscall mouseManager::HideColorPointer(_DWORD); weak // int __thiscall mouseManager::ShowColorPointer(_DWORD); weak bool __thiscall mouseManager::IsVis(int this); int __thiscall mouseManager::SetColorMice(int this, int a2); // heroWindow *__stdcall heroWindow::heroWindow(int, int, char *Source); // _DWORD __thiscall heroWindow::AddWidget(heroWindow *, widget *, int); // _DWORD __stdcall heroWindow::RemoveWidget(_DWORD); weak // int __thiscall heroWindow::BroadcastMessage(heroWindow *this, tag_message *evt); // int __cdecl heroWindow::DrawWindow(); // mouseManager *__thiscall heroWindow::DrawWindow(int this, int a2); // mouseManager *__thiscall heroWindow::DrawWindow(int this, int a2, signed int a3, signed int a4); // baseMAnager *__thiscall resourceManager::resourceManager(baseMAnager *ecx0); // int __thiscall resourceManager::GetBackdrop(void *this, int a2, int a3, int a4); // void *__stdcall resourceManager::GetPalette(int a1); // _DWORD __stdcall resourceManager::GetBitmap(_DWORD); weak // icon *__stdcall resourceManager::GetIcon(_DWORD); // _DWORD __stdcall resourceManager::GetIcon(_DWORD); weak // tileset *__stdcall resourceManager::GetTileset(char *filename); // _DWORD __stdcall resourceManager::GetFont(_DWORD); weak // _DWORD __stdcall resourceManager::Dispose(_DWORD); weak // _DWORD __stdcall resourceManager::AddResource(_DWORD); weak // _DWORD __stdcall resourceManager::Query(_DWORD); weak // int __stdcall resourceManager::Main(int a1); // signed int __thiscall resourceManager::Open(void *this, int a2); // signed int __thiscall resourceManager::LoadAggregateHeader(int this, LPCSTR lpFileName); // _DWORD __stdcall resourceManager::PointToFile(_DWORD); weak // int __thiscall resourceManager::SavePosition(_DWORD); weak // int __thiscall resourceManager::RestorePosition(_DWORD); weak // int __thiscall resourceManager::ReadWord(_DWORD); weak // _DWORD __stdcall resourceManager::MakeId(_DWORD, _DWORD); weak // _DWORD __stdcall resourceManager::Read13(LPVOID lpBuffer); weak // int __stdcall resourceManager::ReadBlock(LPVOID lpBuffer, DWORD nNumberOfBytesToRead); idb void __thiscall CycleColors(void *this); // heroWindowManager *__thiscall heroWindowManager::heroWindowManager(heroWindowManager *this); // _DWORD __stdcall heroWindowManager::AddWindow(_DWORD, _DWORD, _DWORD); weak // _DWORD __stdcall heroWindowManager::RemoveWindow(_DWORD); weak // int __thiscall heroWindowManager::DoDialog(void *ecx0, heroWindow *this, int (__thiscall *a3)(_DWORD), int a4); // void __thiscall heroWindowManager::UpdateScreen(void *this); // void __stdcall heroWindowManager::UpdateScreenRegion(int a1, int a2, int a3, int a4); void __thiscall heroWindowManager::FadeScreen(void *this, int a2, signed int a3, int a4); // int heroWindowManager::ScreenShot(void); weak // int __thiscall iconWidget::iconWidget(_DWORD); weak void *__thiscall iconWidget::_scalar_deleting_destructor_(void *Memory, char a2); // GUIIcon *__thiscall iconWidget::iconWidget(void *this, __int16 x, __int16 y, __int16 width, __int16 height, char *filename, __int16 imgIdx, char mirror, __int16 fieldID, __int16 a10, __int16 a11); // int __thiscall iconWidget::Read(_DWORD); weak // _DWORD __stdcall font::font(_DWORD); weak // int __thiscall font::DrawStringExecute(void *this, char *a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9); void __thiscall font::DrawString(font *this, char *txt, int a3, int a4, int a5); // _DWORD __stdcall font::GetCharacterWidth(char); weak // int __thiscall font::DrawBoundedString(font *thisa, const char *a2, int a6, int a7, int a8, int a9, int arg14, int arg18); idb // int __stdcall font::LineLength(const char *a1, int a2); // _DWORD __stdcall font::LineWidth(_DWORD); weak // _DWORD __stdcall icon::icon(_DWORD); weak // _DWORD __stdcall icon::DrawToBuffer(_DWORD, _DWORD, _DWORD, _DWORD); weak _DWORD __thiscall icon::FillToBuffer(icon *, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); void __fastcall FillBitmapArea(int a1, int a2, int a3, unsigned int a4, int a5, char a6); int __fastcall sub_4336F0(int a1, int a2, int a3, unsigned int a4, int a5, char a6, int a7, int a8, int a9, int a10); // _DWORD __stdcall DimBitmapArea(_DWORD, _DWORD, _DWORD, _DWORD); weak int __fastcall IconToBitmapScale(icon *a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, signed int a11); // void *__fastcall BaseAlloc(size_t Size, int a2, int a3); // void __fastcall BaseFree(void *mem, char *callerFile, int callerLineno); idb void __cdecl PrintMemoryLeaks(); __int32 __fastcall FadeIn(int a1); int __fastcall FadeOut(signed int a1); // int __fastcall Random(_DWORD, _DWORD); weak // void __fastcall ProcessAssert(int a1, char *a2, int a3); // int __fastcall FindToken(_DWORD, _DWORD); weak int __fastcall FindLastToken(const char *a1, char a2); int __cdecl SetGameDefaults(); // LSTATUS __cdecl ReadPrefsFromRegistry(); int __cdecl ReadPrefs(); // LSTATUS __cdecl WritePrefsToRegistry(); LSTATUS __cdecl WritePrefs(); // signed int __cdecl SetupCDDrive(); // int __thiscall BitmapToScreen(_DWORD); weak // void __fastcall SetPalette(signed __int8 *, _DWORD); weak int __stdcall BlitBitmapToScreenNoMouseCheck(int a1, int a2, int a3, int a4, int a5); // _DWORD __stdcall BlitBitmapToScreen(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __cdecl LogTruncate(); // void __thiscall LogStr(void *this); // _DWORD __stdcall LogInt(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // IconEntry *__fastcall GetIconEntry(_DWORD, _DWORD); int __fastcall GetDataEntry(void *a1, char *a2, int a3, const char *a4, unsigned int a5, int a6); signed int __thiscall DataEntryWindowHandler(int evt); int __fastcall sub_436460(icon *icn, bitmap *bmp, int a3, int a4, int a5, signed int a6, int a7, int a8, unsigned int a9, int a10, signed int a11); // idb char __fastcall RenderTile(tileset *a1, int a2, int a3, int a4, int a5, int a6); // int __thiscall executive::executive(_DWORD); weak // int __thiscall executive::InitSystem(void *this); // int __thiscall executive::ShutDownSystem(_DWORD); weak // _DWORD __stdcall executive::DoDialog(_DWORD); weak // signed int __thiscall executive::AddManager(int this, int a2, int a3); // _DWORD __stdcall executive::RemoveManager(_DWORD); weak // int __thiscall executive::MainLoop(void *this); signed int __fastcall KeyboardMessageHandler(void *a1, unsigned int a2, unsigned int a3, unsigned int a4); // _DWORD __fastcall MouseMessageHandler(void *, unsigned int, unsigned int, __int32); weak // baseMAnager *__thiscall inputManager::inputManager(baseMAnager *this); int __cdecl _getmbcp(); // int __thiscall inputManager::Flush(_DWORD); weak // tag_message *__thiscall inputManager::GetEvent(tag_message *this, inputManager *retstr); // _DWORD __stdcall inputManager::PeekEvent(_DWORD); weak // _DWORD __stdcall inputManager::AsciiConvert(_DWORD); weak int __fastcall CheckChangeCursor(signed int a1, signed int a2, int a3); // int __thiscall palette::palette(_DWORD); weak void *__thiscall palette::palette(void *this, int a2); void __fastcall soundManager::SoundError(MCIERROR a1, int a2); _DWORD __stdcall soundManager::UnimportantMethod5(_DWORD); // weak void __thiscall soundManager::UnimportantMethod4(int this); void __thiscall soundManager::UnimportantMethod3(int this); void __thiscall soundManager::UnimportantMethod2(int this); MMRESULT __thiscall soundManager::UnimportantMethod1(MMRESULT this, signed int a2, int a3); void __thiscall soundManager::CDPlay(void *this, int a2, int a3, int a4, int a5); soundManager *__stdcall SetReady2Poll(unsigned __int32 a1); soundManager *__stdcall UpdateTimers(unsigned __int32 a1); baseMAnager *__thiscall soundManager::soundManager(baseMAnager *ecx0); // _DWORD __stdcall WAVE_init_driver(_DWORD, _DWORD); weak int __thiscall soundManager::Open(int this, int a2); void __thiscall soundManager::AllocateSampleHandles(int this); int __thiscall soundManager::Close(int this); // int __stdcall soundManager::Main(int a1); // int __thiscall soundManager::ServiceSound(_DWORD); weak // int __thiscall textWidget::textWidget(_DWORD); weak // _DWORD __stdcall textWidget::textWidget(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, __int16, _DWORD, _DWORD, char); weak // int __thiscall textWidget::Read(_DWORD); weak __int16 __thiscall textWidget::SetText(int this, const char *a2); // border *__thiscall border::border(border *this); // border *__thiscall border::border(border *this, __int16 x, __int16 y, __int16 width, __int16 height, __int16 fieldID, __int16 a7, __int16 color, const char *filename); // __int16 __thiscall border::Read(int this); int __fastcall MonoIconToBitmap(int a1, int a2, int a3, int a4, int a5, char a6, signed int a7, int a8, int a9, unsigned int a10, int a11); // _DWORD __stdcall bitmap::bitmap(__int16, __int16, __int16); weak // _DWORD __stdcall bitmap::bitmap(_DWORD); weak // _DWORD __stdcall bitmap::DrawToBuffer(__int16, __int16); weak // _DWORD __stdcall bitmap::GrabScreen(__int16, __int16); weak // _DWORD __stdcall bitmap::CopyToCareful(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __fastcall IconToBitmap(icon *a1, bitmap *a2, int a3, int a4, int a5, signed int a6, int a7, int a8, unsigned int a9, int a10, int a11); // int __thiscall listBoxWidget::listBoxWidget(_DWORD); weak void *__thiscall listBoxWidget::_scalar_deleting_destructor_(void *Memory, char a2); void __thiscall listBoxWidget::_listBoxWidget(int this); // int __thiscall listBoxWidget::Read(_DWORD); weak void __thiscall listBoxWidget::DeleteItem(int this, int a2); void __thiscall listBoxWidget::Draw(int this); void __thiscall listBoxWidget::DrawLBStuff(int this, int a2); signed int __thiscall listBoxWidget::ProcessMouseMessage(int this, int a2); // int __thiscall dropListWidget::dropListWidget(_DWORD); weak void *__thiscall dropListWidget::_scalar_deleting_destructor_(void *Memory, char a2); void __thiscall dropListWidget::_dropListWidget(int this); __int16 __thiscall dropListWidget::Read(int this); void __thiscall dropListWidget::DeleteItem(int this, int a2); // signed int __thiscall dropListWidget::Main(int this, int a2); int __thiscall dropListWidget::Draw(int this); void __thiscall dropListWidget::DrawDropStuff(int this); void __thiscall dropListWidget::ProcessSelectDialog(int this); // int __thiscall textEntryWidget::textEntryWidget(_DWORD); weak void *__thiscall textEntryWidget::textEntryWidget(void *this, int a2, __int16 a3, __int16 a4, int a5, unsigned __int16 a6, const char *a7, int a8, __int16 a9, int a10, __int16 a11, int a12, int a13, __int16 a14, __int16 a15, __int16 a16); // _DWORD __stdcall textEntryWidget::Read(_DWORD); weak signed int __thiscall textEntryWidget::SetupDisplayString(void *this, const char *Source, unsigned __int16 a3); void *__thiscall dimmerWidget::dimmerWidget(void *this); void *__thiscall dimmerWidget::_scalar_deleting_destructor_(void *Memory, char a2); int __thiscall dimmerWidget::Read(_DWORD); // weak int __stdcall dimmerWidget::Main(int a1); // int __thiscall button::button(_DWORD); weak void *__thiscall button::_scalar_deleting_destructor_(void *Memory, char a2); // int __thiscall button::Read(_DWORD); weak signed __int16 __thiscall button::Select(int this, int a2); // _DWORD __stdcall widget::widget(__int16, __int16, __int16, __int16, __int16, __int16); weak void __thiscall widget::_widget(void *this); // _DWORD __stdcall widget::Main(_DWORD); weak __int16 __thiscall dimmerWidget::Draw(int this); // tileset *__thiscall tileset::tileset(tileset *this, int a2); // _DWORD __stdcall resource::resource(__int16, _DWORD, __int16, _DWORD); weak void __thiscall resource::_resource(void *this); // _DWORD __stdcall IconToBitmapColorTable(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak int __fastcall FlipMonoIconToBitmap(int a1, int a2, int a3, int a4, int a5, char a6, signed int a7, int a8, int a9, int a10, int a11); // _DWORD __stdcall BlitBitmapToScreenVesa(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak char __cdecl TileToBitmap(tileset *, int a2, int a3, int a4, int a5); int __thiscall soundManager::MIDIStartup(void *this); void __thiscall soundManager::MIDIShutdown(int this); // char *__cdecl strcpy(char *Dest, const char *Source); // char *__cdecl strcat(char *Dest, const char *Source); // size_t __cdecl strlen(const char *Str); // int __cdecl operator new(SIZE_T dwBytes); idb // int __cdecl operator delete(void *Memory); idb // int sprintf(char *Dest, const char *Format, ...); // int __cdecl toupper(int chr); // void *__cdecl memset(void *Dst, int Val, size_t sz); // int __cdecl fclose(FILE *File); // int __cdecl fputs(const char *Str, FILE *File); // FILE *__cdecl fopen(const char *Filename, const char *Mode); // void *__cdecl memcpy(void *Dst, const void *Src, size_t sz); // void *__cdecl memmove(void *Dst, const void *Src, size_t sz); // int __cdecl strcmp(const char *Str1, const char *Str2); // void __cdecl exit(int Code); // int __cdecl abs(int X); // int __cdecl atoi(const char *Str); // char *__cdecl strncpy(char *Dest, const char *Source, size_t Count); // void __cdecl srand(unsigned int Seed); // int __cdecl rand(); // _DWORD __cdecl _amsg_exit(_DWORD); weak // int __cdecl _close(int); // int __cdecl _write(int, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite); idb // int __cdecl _write_lk(int, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite); idb // int __cdecl open(LPCSTR lpFileName, int, int); idb // int __cdecl _unlink(const char *Filename); // int __cdecl strnicmp(const char *Str1, const char *Str2, size_t MaxCount); // int __cdecl _read(int, LPVOID lpBuffer, DWORD nNumberOfBytesToRead); idb // int __cdecl stricmp(const char *Str1, const char *Str2); // int *__cdecl _errno(); // unsigned __int32 *__cdecl __doserrno(); // void *__cdecl malloc(size_t sz); // void __cdecl free(void *Memory); // int __cdecl _lseek(int, LONG lDistanceToMove, DWORD dwMoveMethod); idb // int __cdecl _chdir(LPCSTR lpPathName); idb int __cdecl sub_442310(); // _DWORD __cdecl _lock(_DWORD); weak // _DWORD __cdecl _unlock(_DWORD); weak // _DWORD __cdecl _lock_file2(_DWORD, _DWORD); weak // _DWORD __cdecl _unlock_file2(_DWORD, _DWORD); weak // _DWORD __cdecl _fflush_lk(_DWORD); weak int __cdecl _flushall(); // signed int __cdecl flsall(int a1); // int __cdecl _global_unwind2(PVOID TargetFrame); idb // _DWORD __cdecl _local_unwind2(_DWORD, _DWORD); weak // _DWORD __stdcall _NLG_Notify(_DWORD); weak // signed int __usercall _except_handler3(int a1); // _DWORD __cdecl _lock_fhandle(_DWORD); weak // _DWORD __cdecl _unlock_fhandle(_DWORD); weak int __cdecl __initstdio(); signed int __cdecl sub_445E80(); int __cdecl sub_446130(); // int __cdecl __crtGetStringTypeW(DWORD dwInfoType, LPCWSTR lpWideCharStr, int cchWideChar, LPWORD Dst, UINT CodePage, LCID Locale); idb // int __cdecl __crtGetStringTypeA(DWORD dwInfoType, LPCSTR lpMultiByteStr, int cbMultiByte, LPWORD lpCharType, UINT CodePage, LCID Locale); idb // _DWORD __cdecl _ld12cvt(_DWORD, _DWORD, _DWORD); weak _DWORD __cdecl _ld12tof(_DWORD, _DWORD); // weak void __cdecl abort(); int __cdecl sub_446B00(int a1, int a2); int __cdecl _atodbl(_CRT_DOUBLE *Result, char *Str); // void *__cdecl calloc(size_t NumOfElements, size_t SizeOfElements); // int __cdecl __getlocaleinfo(int, LCID Locale, LCTYPE LCType, int); idb // _DWORD __cdecl __strgtold12(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // LSTATUS __stdcall RegCreateKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult); // LSTATUS __stdcall RegQueryValueExA(HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData); // LSTATUS __stdcall RegCloseKey(HKEY hKey); // LSTATUS __stdcall RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE *lpData, DWORD cbData); // LSTATUS __stdcall RegOpenKeyExA(HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult); // UINT __stdcall GetSystemPaletteEntries(HDC hdc, UINT iStart, UINT cEntries, LPPALETTEENTRY pPalEntries); // HGDIOBJ __stdcall SelectObject(HDC hdc, HGDIOBJ h); // HPALETTE __stdcall CreatePalette(const LOGPALETTE *plpal); // BOOL __stdcall PatBlt(HDC hdc, int x, int y, int w, int h, DWORD rop); // BOOL __stdcall AnimatePalette(HPALETTE hPal, UINT iStartIndex, UINT cEntries, const PALETTEENTRY *ppe); // BOOL __stdcall DeleteDC(HDC hdc); // HPALETTE __stdcall SelectPalette(HDC hdc, HPALETTE hPal, BOOL bForceBkgd); // UINT __stdcall RealizePalette(HDC hdc); // DWORD __stdcall GdiSetBatchLimit(DWORD dw); // BOOL __stdcall DeleteObject(HGDIOBJ ho); // BOOL __stdcall FindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData); // BOOL __stdcall FindClose(HANDLE hFindFile); // DWORD __stdcall GetTickCount(); // HANDLE __stdcall FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData); // BOOL __stdcall FreeLibrary(HMODULE hLibModule); // HANDLE __stdcall CreateEventA(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCSTR lpName); // DWORD __stdcall GetLastError(); // HMODULE __stdcall LoadLibraryA(LPCSTR lpLibFileName); // FARPROC __stdcall GetProcAddress(HMODULE hModule, LPCSTR lpProcName); // DWORD __stdcall GetLogicalDrives(); // BOOL __stdcall GetCPInfo(UINT CodePage, LPCPINFO lpCPInfo); // void __stdcall OutputDebugStringA(LPCSTR lpOutputString); // UINT __stdcall GetDriveTypeA(LPCSTR lpRootPathName); // int __stdcall lstrlenA(LPCSTR lpString); // void __stdcall Sleep(DWORD dwMilliseconds); // BOOL __stdcall CloseHandle(HANDLE hObject); // BOOL __stdcall OffsetRect(LPRECT lprc, int dx, int dy); // BOOL __stdcall ClientToScreen(HWND hWnd, LPPOINT lpPoint); // BOOL __stdcall GetClientRect(HWND hWnd, LPRECT lpRect); // HDC __stdcall BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint); // int __stdcall ReleaseDC(HWND hWnd, HDC hDC); // HDC __stdcall GetDC(HWND hWnd); // BOOL __stdcall InvalidateRect(HWND hWnd, const RECT *lpRect, BOOL bErase); // BOOL __stdcall WaitMessage(); // LRESULT __stdcall DispatchMessageA(const MSG *lpMsg); // BOOL __stdcall TranslateMessage(const MSG *lpMsg); // BOOL __stdcall PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg); // HCURSOR __stdcall SetCursor(HCURSOR hCursor); // LONG __stdcall SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong); // int __stdcall GetMenuItemCount(HMENU hMenu); // UINT __stdcall GetMenuItemID(HMENU hMenu, int nPos); // HMENU __stdcall GetSubMenu(HMENU hMenu, int nPos); // BOOL __stdcall EnableMenuItem(HMENU hMenu, UINT uIDEnableItem, UINT uEnable); // INT_PTR __stdcall DialogBoxParamA(HINSTANCE hInstance, LPCSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam); // BOOL __stdcall WinHelpA(HWND hWndMain, LPCSTR lpszHelp, UINT uCommand, ULONG_PTR dwData); // BOOL __stdcall GetMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax); // BOOL __stdcall EndDialog(HWND hDlg, INT_PTR nResult); // UINT_PTR __stdcall SetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc); // BOOL __stdcall GetWindowRect(HWND hWnd, LPRECT lpRect); // LONG __stdcall GetWindowLongA(HWND hWnd, int nIndex); // BOOL __stdcall DestroyWindow(HWND hWnd); // void __stdcall PostQuitMessage(int nExitCode); // LRESULT __stdcall DefWindowProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); // ATOM __stdcall RegisterClassA(const WNDCLASSA *lpWndClass); // BOOL __stdcall AdjustWindowRect(LPRECT lpRect, DWORD dwStyle, BOOL bMenu); // HWND __stdcall CreateWindowExA(DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam); // HICON __stdcall LoadIconA(HINSTANCE hInstance, LPCSTR lpIconName); // BOOL __stdcall ShowWindow(HWND hWnd, int nCmdShow); // HCURSOR __stdcall LoadCursorA(HINSTANCE hInstance, LPCSTR lpCursorName); // BOOL __stdcall SetMenu(HWND hWnd, HMENU hMenu); // int __stdcall ShowCursor(BOOL bShow); // BOOL __stdcall PostMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); // BOOL __stdcall EndPaint(HWND hWnd, const PAINTSTRUCT *lpPaint); // SHORT __stdcall GetAsyncKeyState(int vKey); // BOOL __stdcall MessageBeep(UINT uType); // int __stdcall MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType); // HMENU __stdcall LoadMenuA(HINSTANCE hInstance, LPCSTR lpMenuName); // BOOL __stdcall DestroyMenu(HMENU hMenu); // int _wsprintfA(LPSTR, LPCSTR, ...); // BOOL __stdcall ScreenToClient(HWND hWnd, LPPOINT lpPoint); // BOOL __stdcall GetCursorPos(LPPOINT lpPoint); // MCIERROR __stdcall mciSendStringA(LPCSTR lpstrCommand, LPSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback); // BOOL __stdcall mciGetErrorStringA(MCIERROR mcierr, LPSTR pszText, UINT cchText); // MMRESULT __stdcall auxSetVolume(UINT uDeviceID, DWORD dwVolume); // signed __int32 __stdcall AIL_startup(); // int __stdcall AIL_allocate_sample_handle(_DWORD); weak // void __stdcall AIL_shutdown(); // void __stdcall AIL_midiOutClose(HMDIDRIVER mdi); // void __stdcall AIL_release_sequence_handle(HSEQUENCE S); // signed __int32 __stdcall AIL_midiOutOpen(HMDIDRIVER *drvr, LPHMIDIOUT *lphMidiOut, signed __int32 dwDeviceID); // void __stdcall AIL_stop_sequence(HSEQUENCE S); // unsigned __int32 __stdcall AIL_sequence_status(HSEQUENCE S); // int __stdcall _WinGStretchBlt(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak //------------------------------------------------------------------------- // Data declarations int (__stdcall *editManager::_vftable_)(int) = &editManager::Open; // weak int (__stdcall *lineManager::_vftable_)(int) = &lineManager::Open; // weak int (__stdcall *off_449080)(int) = &sub_4123F0; // weak int (__stdcall *terrainManager::vftable)(int) = &terrainManager::Open; // weak int (__stdcall *eventsManager_vtable)(int) = &eventsManager::Open; // weak int (__stdcall *overlayManager::_vftable_)(int) = &overlayManager::Open; // weak int (*iconWidget::_vftable_)() = &iconWidget::Draw; // weak int (__thiscall *bitmap::_vftable_)(void *Memory, int) = &bitmap::_scalar_deleting_destructor_; // weak int (__stdcall *soundManager::_vftable_)(int) = &soundManager::Open; // weak int (*listBoxWidget::_vftable_)() = &listBoxWidget::Draw; // weak int (*dropListWidget::_vftable_)() = &dropListWidget::Draw; // weak int (*textEntryWidget::_vftable_)() = &textEntryWidget::Draw; // weak int (*dimmerWidget::_vftable_)() = &dimmerWidget::Draw; // weak int (*button::_vftable_)() = &button::Draw; // weak int (*widget::_vftable_[3])() = { &_purecall, &_purecall, &_purecall }; // weak int (*resource::_vftable_)() = &_purecall; // weak char gOverlayTypeCategories[] = { '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\x05', '\x02', '\a', '\x03', '\x01' }; // idb int gObjTypeTerrains[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 4095, 4095, 4095, 4095, 4095 }; // idb overlay gOverlayDatabase[956] = { { 0, 0, 0, 27, 0, 0, '\x06', 4485373087541362688i64, 4094, 4094, 2162009296114548736i64, 2314885427200262144i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 1, 1, 1, 27, 0, 0, '\x06', 2251587865639124992i64, 4094, 4094, 1085367510196289536i64, 1161964025672630272i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 2, 2, 2, 27, 0, 0, '\x06', 3957172413136896i64, 4094, 4094, 1688849860263936i64, 2260613086576640i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 3, 3, 3, 27, 0, 0, '\x06', 1986877640933376i64, 4094, 4094, 844424930131968i64, 1134730359603200i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 4, 4, 4, 27, 0, 0, '\x06', 15423227559936i64, 4094, 4094, 0i64, 8813272891392i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 5, 5, 5, 27, 0, 0, '\x06', 7756710936576i64, 4094, 4094, 0i64, 4432406249472i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 6, 5001, 6, 27, 0, 0, '\x06', 34218004447232i64, 4094, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\0', '\x02', 8589934592i64, '\0', 23, '\b', 9999, "" }, { 7, 5001, 7, 27, 0, 0, '\x06', 34218004447232i64, 4094, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x01', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 8, 5001, 8, 27, 0, 0, '\x06', 34218004447232i64, 4094, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x02', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 9, 5001, 9, 27, 0, 0, '\x06', 34218004447232i64, 4094, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x03', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 10, 5001, 10, 27, 0, 0, '\x06', 34218004447232i64, 4094, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x04', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 11, 11, 11, 31, 0, 0, '\x06', 4485373087541362688i64, 128, 4094, 2162009296114548736i64, 2314885427200262144i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 12, 12, 12, 31, 0, 0, '\x06', 2251587865639124992i64, 128, 4094, 1085367510196289536i64, 1161964025672630272i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 13, 13, 13, 31, 0, 0, '\x06', 17520782213120000i64, 128, 4094, 7884597882781696i64, 9605367939989504i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 14, 14, 14, 31, 0, 0, '\x06', 8795251208617984i64, 128, 4094, 1996713116041216i64, 6790721252098048i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 15, 15, 15, 31, 0, 0, '\x06', 3957172413136896i64, 128, 4094, 1688849860263936i64, 2260613086576640i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 16, 16, 16, 31, 0, 0, '\x06', 1986877640933376i64, 128, 4094, 848822976643072i64, 1134730359603200i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 17, 17, 17, 31, 0, 0, '\x06', 15423227559936i64, 128, 4094, 0i64, 8813272891392i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 18, 18, 18, 31, 0, 0, '\x06', 7756710936576i64, 128, 4094, 0i64, 4432406249472i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 19, 5001, 19, 31, 0, 0, '\x06', 34218004447232i64, 128, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\0', '\x02', 8589934592i64, '\0', 23, '\b', 9999, "" }, { 20, 5001, 20, 31, 0, 0, '\x06', 34218004447232i64, 128, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x01', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 21, 5001, 21, 31, 0, 0, '\x06', 34218004447232i64, 128, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x02', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 22, 5001, 22, 31, 0, 0, '\x06', 34218004447232i64, 128, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x03', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 23, 5001, 23, 31, 0, 0, '\x06', 34218004447232i64, 128, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x04', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 24, 24, 24, 32, 0, 0, '\x06', 4485373087541362688i64, 2, 4094, 2162009296114548736i64, 2314885427200262144i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 25, 25, 25, 32, 0, 0, '\x06', 2251587865639124992i64, 2, 4094, 1013309916158361600i64, 1161964025672630272i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 26, 26, 26, 32, 0, 0, '\x06', 3957172413136896i64, 2, 4094, 0i64, 2260613086576640i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 27, 27, 27, 32, 0, 0, '\x06', 1986877640933376i64, 2, 4094, 0i64, 1134730359603200i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 28, 28, 28, 32, 0, 0, '\x06', 15423227559936i64, 2, 4094, 0i64, 8813272891392i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 29, 29, 29, 32, 0, 0, '\x06', 7756710936576i64, 2, 4094, 0i64, 4432406249472i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 30, 5001, 30, 32, 0, 0, '\x06', 34218004447232i64, 2, 4094, 6597069766656i64, 26491358281728i64, 0i64, 8589934592i64, '\0', '\x02', 8589934592i64, '\0', 23, '\b', 9999, "" }, { 31, 5001, 31, 32, 0, 0, '\x06', 34218004447232i64, 2, 4094, 6597069766656i64, 26491358281728i64, 0i64, 8589934592i64, '\x01', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 32, 5001, 32, 32, 0, 0, '\x06', 34218004447232i64, 2, 4094, 6597069766656i64, 26491358281728i64, 0i64, 8589934592i64, '\x02', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 33, 5001, 33, 32, 0, 0, '\x06', 34218004447232i64, 2, 4094, 6597069766656i64, 26491358281728i64, 0i64, 8589934592i64, '\x03', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 34, 5001, 34, 32, 0, 0, '\x06', 34218004447232i64, 2, 4094, 6597069766656i64, 26491358281728i64, 0i64, 8589934592i64, '\x04', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 35, 35, 35, 22, 0, 0, '\x06', 4485373087541362688i64, 4, 4094, 2162009296114548736i64, 2314885427200262144i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 36, 36, 36, 22, 0, 0, '\x06', 2251587865639124992i64, 4, 4094, 1085367510196289536i64, 1161964025672630272i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 37, 37, 37, 22, 0, 0, '\x06', 3957172413136896i64, 4, 4094, 1688849860263936i64, 2260613086576640i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 38, 38, 38, 22, 0, 0, '\x06', 1986877640933376i64, 4, 4094, 848822976643072i64, 1134730359603200i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 39, 39, 39, 22, 0, 0, '\x06', 15423227559936i64, 4, 4094, 0i64, 8813272891392i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 40, 40, 40, 22, 0, 0, '\x06', 7756710936576i64, 4, 4094, 0i64, 4432406249472i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 41, 5001, 41, 22, 0, 0, '\x06', 34218004447232i64, 4, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\0', '\x02', 8589934592i64, '\0', 23, '\b', 9999, "" }, { 42, 5001, 42, 22, 0, 0, '\x06', 34218004447232i64, 4, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x01', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 43, 5001, 43, 22, 0, 0, '\x06', 34218004447232i64, 4, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x02', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 44, 5001, 44, 22, 0, 0, '\x06', 34218004447232i64, 4, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x03', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 45, 5001, 45, 22, 0, 0, '\x06', 34218004447232i64, 4, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x04', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 46, 46, 46, 23, 0, 0, '\x06', 4485373087541362688i64, 8, 4094, 2162009296114548736i64, 2314885427200262144i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 47, 47, 47, 23, 0, 0, '\x06', 2251587865639124992i64, 8, 4094, 1080863910568919040i64, 1161964025672630272i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 48, 48, 48, 23, 0, 0, '\x06', 3957172413136896i64, 8, 4094, 1689949371891712i64, 2260613086576640i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 49, 49, 49, 23, 0, 0, '\x06', 1986877640933376i64, 8, 4094, 848822976643072i64, 1134730359603200i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 50, 50, 50, 23, 0, 0, '\x06', 15423227559936i64, 8, 4094, 0i64, 8813272891392i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 51, 51, 51, 23, 0, 0, '\x06', 7756710936576i64, 8, 4094, 0i64, 4432406249472i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 52, 5001, 52, 23, 0, 0, '\x06', 34218004447232i64, 8, 4094, 6597069766656i64, 26491358281728i64, 0i64, 8589934592i64, '\0', '\x02', 8589934592i64, '\0', 23, '\b', 9999, "" }, { 53, 5001, 53, 23, 0, 0, '\x06', 34218004447232i64, 8, 4094, 6597069766656i64, 26491358281728i64, 0i64, 8589934592i64, '\x01', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 54, 5001, 54, 23, 0, 0, '\x06', 34218004447232i64, 8, 4094, 6597069766656i64, 26491358281728i64, 0i64, 8589934592i64, '\x02', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 55, 5001, 55, 23, 0, 0, '\x06', 34218004447232i64, 8, 4094, 6597069766656i64, 26491358281728i64, 0i64, 8589934592i64, '\x03', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 56, 5001, 56, 23, 0, 0, '\x06', 34218004447232i64, 8, 4094, 6597069766656i64, 26491358281728i64, 0i64, 8589934592i64, '\x04', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 57, 57, 57, 24, 0, 0, '\x06', 4485373087541362688i64, 16, 4094, 2162009296114548736i64, 2314885427200262144i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 58, 58, 58, 24, 0, 0, '\x06', 2251587865639124992i64, 16, 4094, 1085367510196289536i64, 1161964025672630272i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 59, 59, 59, 24, 0, 0, '\x06', 3957172413136896i64, 16, 4094, 1688849860263936i64, 2260613086576640i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 60, 60, 60, 24, 0, 0, '\x06', 1986877640933376i64, 16, 4094, 848822976643072i64, 1134730359603200i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 61, 61, 61, 24, 0, 0, '\x06', 15423227559936i64, 16, 4094, 0i64, 8813272891392i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 62, 62, 62, 24, 0, 0, '\x06', 7756710936576i64, 16, 4094, 0i64, 4432406249472i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 63, 5001, 63, 24, 0, 0, '\x06', 34218004447232i64, 16, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\0', '\x02', 8589934592i64, '\0', 23, '\b', 9999, "" }, { 64, 5001, 64, 24, 0, 0, '\x06', 34218004447232i64, 16, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x01', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 65, 5001, 65, 24, 0, 0, '\x06', 34218004447232i64, 16, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x02', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 66, 5001, 66, 24, 0, 0, '\x06', 34218004447232i64, 16, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x03', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 67, 5001, 67, 24, 0, 0, '\x06', 34218004447232i64, 16, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x04', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 68, 68, 68, 25, 0, 0, '\x06', 4485373087541362688i64, 288, 4094, 2161727821137838080i64, 2314885427200262144i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 69, 69, 69, 25, 0, 0, '\x06', 2251587865639124992i64, 288, 4094, 1085367510196289536i64, 1161964025672630272i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 70, 70, 70, 25, 0, 0, '\x06', 3957172413136896i64, 288, 4094, 1688849860263936i64, 2260613086576640i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 71, 71, 71, 25, 0, 0, '\x06', 1986877640933376i64, 288, 4094, 844424930131968i64, 1134730359603200i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 72, 72, 72, 25, 0, 0, '\x06', 15423227559936i64, 288, 4094, 0i64, 8813272891392i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 73, 73, 73, 25, 0, 0, '\x06', 7756710936576i64, 288, 4094, 0i64, 4432406249472i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 74, 5001, 74, 25, 0, 0, '\x06', 34218004447232i64, 288, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\0', '\x02', 8589934592i64, '\0', 23, '\b', 9999, "" }, { 75, 5001, 75, 25, 0, 0, '\x06', 34218004447232i64, 288, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x01', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 76, 5001, 76, 25, 0, 0, '\x06', 34218004447232i64, 288, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x02', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 77, 5001, 77, 25, 0, 0, '\x06', 34218004447232i64, 288, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x03', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 78, 5001, 78, 25, 0, 0, '\x06', 34218004447232i64, 288, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x04', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 79, 79, 79, 26, 0, 0, '\x06', 4485373087541362688i64, 64, 4094, 2162009296114548736i64, 2314885427200262144i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 80, 80, 80, 26, 0, 0, '\x06', 2251587865639124992i64, 64, 4094, 1085367510196289536i64, 1161964025672630272i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 81, 81, 81, 26, 0, 0, '\x06', 17520782213120000i64, 64, 4094, 7883498371153920i64, 9605367939989504i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 82, 82, 82, 26, 0, 0, '\x06', 8795251208617984i64, 64, 4094, 1996713116041216i64, 6790721252098048i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 83, 83, 83, 26, 0, 0, '\x06', 3957172413136896i64, 64, 4094, 562949953421312i64, 2260613086576640i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 84, 84, 84, 26, 0, 0, '\x06', 1986877640933376i64, 64, 4094, 562949953421312i64, 1134730359603200i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 85, 85, 85, 26, 0, 0, '\x06', 15423227559936i64, 64, 4094, 0i64, 8813272891392i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 86, 86, 86, 26, 0, 0, '\x06', 7756710936576i64, 64, 4094, 0i64, 4432406249472i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 100, '\b', 9999, "" }, { 87, 5001, 87, 26, 0, 0, '\x06', 34218004447232i64, 64, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\0', '\x02', 8589934592i64, '\0', 23, '\b', 9999, "" }, { 88, 5001, 88, 26, 0, 0, '\x06', 34218004447232i64, 64, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x01', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 89, 5001, 89, 26, 0, 0, '\x06', 34218004447232i64, 64, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x02', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 90, 5001, 90, 26, 0, 0, '\x06', 34218004447232i64, 64, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x03', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 91, 5001, 91, 26, 0, 0, '\x06', 34218004447232i64, 64, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x04', '\x02', 8589934592i64, '\0', 23, '\b', 1111, "" }, { 92, 92, 104, 43, 0, 0, '\x06', 3957172413136896i64, 66, 4094, 1689949371891712i64, 2260613086576640i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 93, 93, 105, 43, 0, 0, '\x06', 1986877640933376i64, 66, 4094, 848822976643072i64, 1134730359603200i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 94, 94, 106, 43, 0, 0, '\x06', 15423227559936i64, 66, 4094, 0i64, 8813272891392i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 95, 95, 107, 43, 0, 0, '\x06', 7756710936576i64, 66, 4094, 0i64, 4432406249472i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 96, 96, 108, 43, 0, 0, '\x06', 12884901888i64, 66, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 97, 97, 109, 43, 0, 0, '\x06', 12884901888i64, 66, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 98, 98, 110, 49, 0, 0, '\x06', 3957172413136896i64, 10, 4094, 1689949371891712i64, 2260613086576640i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 99, 99, 111, 49, 0, 0, '\x06', 1986877640933376i64, 10, 4094, 848822976643072i64, 1134730359603200i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 100, 100, 112, 49, 0, 0, '\x06', 15423227559936i64, 10, 4094, 0i64, 8813272891392i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 101, 101, 113, 49, 0, 0, '\x06', 7756710936576i64, 10, 4094, 0i64, 4432406249472i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 102, 102, 114, 49, 0, 0, '\x06', 12884901888i64, 10, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 103, 103, 115, 49, 0, 0, '\x06', 12884901888i64, 10, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 104, 104, 122, 42, 0, 0, '\x06', 3957172413136896i64, 4, 4094, 1689949371891712i64, 2260613086576640i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 105, 105, 123, 42, 0, 0, '\x06', 1986877640933376i64, 4, 4094, 848822976643072i64, 1134730359603200i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 106, 106, 124, 42, 0, 0, '\x06', 15423227559936i64, 4, 4094, 0i64, 8813272891392i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 107, 107, 125, 42, 0, 0, '\x06', 7756710936576i64, 4, 4094, 0i64, 4432406249472i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 108, 108, 126, 42, 0, 0, '\x06', 12884901888i64, 4, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 109, 109, 127, 42, 0, 0, '\x06', 12884901888i64, 4, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 110, 110, 92, 44, 0, 0, '\x06', 3957172413136896i64, 66, 4094, 1689949371891712i64, 2260613086576640i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 111, 111, 93, 44, 0, 0, '\x06', 1986877640933376i64, 66, 4094, 848822976643072i64, 1134730359603200i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 112, 112, 94, 44, 0, 0, '\x06', 15423227559936i64, 66, 4094, 0i64, 8813272891392i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 113, 113, 95, 44, 0, 0, '\x06', 7756710936576i64, 66, 4094, 0i64, 4432406249472i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 114, 114, 96, 44, 0, 0, '\x06', 12884901888i64, 66, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 115, 115, 97, 44, 0, 0, '\x06', 12884901888i64, 66, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 116, 116, 116, 33, 0, 0, '\x06', 3957172413136896i64, 10, 4094, 1689949371891712i64, 2260613086576640i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 117, 117, 117, 33, 0, 0, '\x06', 1986877640933376i64, 10, 4094, 848822976643072i64, 1134730359603200i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 118, 118, 118, 33, 0, 0, '\x06', 15423227559936i64, 10, 4094, 0i64, 8813272891392i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 119, 119, 119, 33, 0, 0, '\x06', 7756710936576i64, 10, 4094, 0i64, 4432406249472i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 120, 120, 120, 33, 0, 0, '\x06', 12884901888i64, 10, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 121, 121, 121, 33, 0, 0, '\x06', 12884901888i64, 10, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 122, 122, 98, 34, 0, 0, '\x06', 3957172413136896i64, 28, 4094, 1689949371891712i64, 2260613086576640i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 123, 123, 99, 34, 0, 0, '\x06', 1986877640933376i64, 28, 4094, 848822976643072i64, 1134730359603200i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 124, 124, 100, 34, 0, 0, '\x06', 15423227559936i64, 28, 4094, 0i64, 8813272891392i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 125, 125, 101, 34, 0, 0, '\x06', 7756710936576i64, 28, 4094, 0i64, 4432406249472i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 126, 126, 102, 34, 0, 0, '\x06', 12884901888i64, 28, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 127, 127, 103, 34, 0, 0, '\x06', 12884901888i64, 28, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 128, 128, 226, 29, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\x01', 4294967296i64, '\0', 56, '\b', 9999, "" }, { 129, 129, 227, 29, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\x01', 4294967296i64, '\0', 56, '\b', 9999, "" }, { 130, 130, 228, 29, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\x01', 4294967296i64, '\0', 56, '\b', 9999, "" }, { 131, 131, 229, 29, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\x01', 4294967296i64, '\0', 56, '\b', 9999, "" }, { 132, 132, 230, 29, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\x01', 4294967296i64, '\0', 56, '\b', 9999, "" }, { 133, 133, 230, 29, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\x01', 4294967296i64, '\0', 56, '\b', 9999, "" }, { 134, 134, 231, 14, 6, 0, '\x06', 4294967296i64, 4094, 4094, 4294967296i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 135, 135, 232, 14, 6, 0, '\x06', 4294967296i64, 4094, 4094, 4294967296i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 136, 136, 233, 14, 6, 0, '\x06', 4294967296i64, 4094, 4094, 4294967296i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 137, 137, 234, 14, 6, 0, '\x06', 4294967296i64, 4094, 4094, 4294967296i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 138, 138, 235, 14, 6, 0, '\x06', 4294967296i64, 4094, 4094, 4294967296i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 139, 139, 236, 14, 6, 0, '\x06', 4294967296i64, 4094, 4094, 4294967296i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 140, 140, 237, 14, 6, 0, '\x06', 4294967296i64, 4094, 4094, 4294967296i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 141, 141, 238, 14, 6, 0, '\x06', 4294967296i64, 4094, 4094, 4294967296i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 142, 142, 239, 14, 6, 0, '\x06', 4294967296i64, 4094, 4094, 4294967296i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 143, 143, 240, 14, 6, 0, '\x06', 4294967296i64, 4094, 4094, 4294967296i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 144, 144, 241, 14, 6, 0, '\x06', 4294967296i64, 4094, 4094, 4294967296i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 145, 145, 242, 14, 6, 0, '\x06', 4294967296i64, 4094, 4094, 4294967296i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 146, 146, 243, 14, 6, 0, '\x06', 4294967296i64, 4094, 4094, 4294967296i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 147, 147, 244, 14, 6, 0, '\x06', 4294967296i64, 4094, 4094, 4294967296i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 148, 148, 245, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 149, 149, 246, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 150, 150, 247, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 151, 151, 248, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 152, 152, 249, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 153, 153, 250, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 154, 154, 251, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 155, 155, 252, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 156, 156, 253, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 157, 157, 254, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 158, 158, 255, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 159, 159, 256, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 160, 160, 257, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 161, 161, 258, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 162, 162, 259, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 163, 163, 260, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 164, 164, 261, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 165, 165, 262, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 166, 166, 263, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 167, 167, 264, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 168, 168, 265, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 169, 169, 266, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 170, 170, 267, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 171, 171, 268, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 172, 172, 269, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 173, 173, 270, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 174, 174, 271, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 175, 175, 272, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 176, 176, 273, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 177, 177, 274, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 178, 178, 275, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 179, 179, 276, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 180, 180, 277, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 181, 181, 278, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 182, 182, 279, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 183, 183, 280, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 184, 184, 281, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 185, 185, 282, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 186, 186, 283, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 187, 187, 284, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 188, 188, 285, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 189, 189, 286, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 190, 190, 287, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 191, 191, 288, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 192, 192, 289, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 193, 193, 290, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 194, 194, 291, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 195, 195, 292, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 196, 196, 293, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 197, 197, 294, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 198, 198, 295, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 199, 199, 296, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 200, 200, 297, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 201, 201, 298, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 202, 202, 299, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 203, 203, 300, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 204, 204, 301, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 205, 205, 302, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 206, 206, 303, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 207, 207, 304, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 208, 208, 305, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 209, 209, 306, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 210, 210, 307, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 211, 211, 308, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 212, 212, 309, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 213, 213, 310, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 24, '\b', 9999, "" }, { 214, 214, 311, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 47, '\b', 9999, "" }, { 215, 215, 312, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 51, '\b', 9999, "" }, { 216, 216, 313, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 52, '\b', 9999, "" }, { 217, 217, 314, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 53, '\b', 9999, "" }, { 218, 218, 315, 12, 2, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 54, '\b', 9999, "" }, { 219, 219, 316, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 220, 220, 317, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 221, 221, 318, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 222, 222, 319, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 223, 223, 320, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 224, 224, 321, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 225, 225, 322, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 226, 226, 323, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 227, 227, 324, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 228, 228, 325, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 229, 229, 326, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 230, 230, 327, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 231, 231, 328, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 232, 232, 329, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 233, 233, 330, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 234, 234, 331, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 235, 235, 332, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 236, 236, 333, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 237, 237, 334, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 238, 238, 335, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 239, 239, 336, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 240, 240, 337, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 241, 241, 338, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 242, 242, 339, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 243, 243, 340, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 244, 244, 341, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 245, 245, 342, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 246, 246, 343, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 247, 247, 344, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 248, 248, 345, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 249, 249, 346, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 250, 250, 347, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 251, 251, 348, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 252, 252, 349, 13, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 45, '\b', 9999, "" }, { 253, 253, 10, 11, 6, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 254, 254, 10, 11, 6, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 255, 255, 10, 11, 6, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 256, 256, 10, 11, 6, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 257, 257, 10, 11, 6, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 258, 258, 10, 11, 6, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 259, 259, 10, 11, 6, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 260, 260, 10, 11, 6, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 261, 261, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 262, 262, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 263, 263, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 264, 264, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 265, 265, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 266, 266, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 267, 267, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 268, 268, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 269, 269, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 270, 270, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 271, 271, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 272, 272, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 273, 273, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 274, 274, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 275, 275, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 276, 276, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 277, 277, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 278, 278, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 279, 279, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 280, 280, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 281, 281, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 282, 282, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 283, 283, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 284, 284, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 285, 285, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 286, 286, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 287, 287, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 288, 288, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 289, 289, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 290, 290, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 291, 291, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 292, 292, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 293, 293, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 294, 294, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 295, 295, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 296, 296, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 297, 297, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 298, 298, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 299, 299, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 300, 300, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 301, 301, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 302, 302, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 303, 303, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 304, 304, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 305, 305, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 306, 306, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 307, 307, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 308, 308, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 309, 309, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 310, 310, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 311, 311, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 312, 312, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 313, 313, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 314, 314, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 315, 315, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 316, 316, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 317, 317, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 318, 318, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 319, 319, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 320, 320, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 321, 321, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 322, 322, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 323, 323, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 324, 324, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 325, 325, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 326, 326, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 327, 327, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 328, 328, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 329, 329, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 330, 330, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 331, 331, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 332, 332, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 333, 333, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 334, 334, 0, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 45, '\b', 9999, "" }, { 335, 335, 1, 11, 3, 0, '\x06', 4294967296i64, 4094, 4095, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 44, '\b', 9999, "" }, { 336, 336, 0, 11, 6, 0, '\x06', 4294967296i64, 4094, 4095, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 44, '\b', 9999, "" }, { 337, 337, 0, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 116, '\b', 9999, "" }, { 338, 338, 0, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 117, '\b', 9999, "" }, { 339, 339, 0, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 118, '\b', 9999, "" }, { 340, 340, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 341, 341, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 342, 342, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 343, 343, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 344, 344, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 345, 345, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 346, 346, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 347, 347, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 348, 348, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 349, 349, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 350, 350, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 351, 351, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 352, 352, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 353, 353, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 354, 354, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 355, 355, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 356, 356, 10, 11, 3, 0, '\x06', 12884901888i64, 4094, 4095, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 41, '\b', 9999, "" }, { 357, 357, 350, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 358, 358, 351, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 359, 359, 352, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 360, 360, 353, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 361, 361, 354, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 362, 362, 355, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 363, 363, 356, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 364, 364, 357, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 365, 365, 358, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 366, 366, 359, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 367, 367, 360, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 368, 368, 361, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 369, 369, 362, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 370, 370, 363, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 371, 371, 364, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 372, 372, 365, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 373, 373, 366, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 374, 374, 367, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 375, 375, 368, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 376, 376, 369, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 377, 377, 370, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 378, 378, 371, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 379, 379, 372, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 380, 380, 373, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 381, 381, 374, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 382, 382, 375, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 383, 383, 376, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 384, 384, 377, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 385, 385, 378, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 386, 386, 379, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 387, 387, 380, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 388, 388, 381, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 389, 389, 382, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 390, 390, 383, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 391, 391, 384, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 392, 392, 385, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 393, 393, 386, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 394, 394, 387, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 395, 395, 388, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 396, 396, 389, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 397, 397, 390, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 398, 398, 391, 21, 7, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 55, '\b', 9999, "" }, { 399, 399, 392, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 400, 400, 393, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 401, 401, 394, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 402, 402, 395, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 403, 403, 396, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 404, 404, 397, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 405, 405, 398, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 406, 406, 399, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 407, 407, 400, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 408, 408, 401, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 409, 409, 402, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 410, 410, 403, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 411, 411, 404, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 412, 412, 405, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 413, 413, 406, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 414, 414, 407, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 415, 415, 408, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 416, 416, 409, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 417, 417, 410, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 418, 418, 411, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 419, 419, 412, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 420, 420, 413, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 421, 421, 414, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 422, 422, 415, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 423, 423, 416, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 424, 424, 417, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 425, 425, 417, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 426, 426, 417, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 427, 427, 417, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 428, 428, 417, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 429, 429, 417, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 430, 430, 417, 30, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 18, '\b', 9999, "" }, { 431, 431, 418, 45, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 98, '\b', 9999, "" }, { 432, 432, 419, 45, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 98, '\b', 9999, "" }, { 433, 433, 420, 45, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 98, '\b', 9999, "" }, { 434, 434, 421, 45, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 98, '\b', 9999, "" }, { 435, 435, 422, 45, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 98, '\b', 9999, "" }, { 436, 436, 423, 45, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 98, '\b', 9999, "" }, { 437, 437, 424, 45, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 98, '\b', 9999, "" }, { 438, 438, 425, 45, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 98, '\b', 9999, "" }, { 439, 439, 426, 45, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 98, '\b', 9999, "" }, { 440, 440, 427, 45, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 98, '\b', 9999, "" }, { 441, 441, 428, 45, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 98, '\b', 9999, "" }, { 442, 442, 429, 45, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 98, '\b', 9999, "" }, { 443, 443, 430, 45, 6, 0, '\x06', 4294967296i64, 4094, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 98, '\b', 9999, "" }, { 444, 444, 7, 50, 0, 0, '\v', 4294967296i64, 1, 1, 0i64, 0i64, 4294967296i64, 0i64, '\0', '\0', 4294967296i64, '\0', 93, '\b', 9999, "" }, { 445, 445, 8, 50, 0, 10, '\x06', 12884901888i64, 1, 1, 0i64, 8589934592i64, 12884901888i64, 0i64, '\0', '\0', 4294967296i64, '\0', 6, '\b', 9999, "" }, { 446, 446, 15, 50, 6, 0, '\x06', 7726646165504i64, 1, 1, 6597069766656i64, 1099511627776i64, 2199023255552i64, 0i64, '\0', '\0', 8589934592i64, '\0', 91, '\b', 9999, "" }, { 447, 447, 9, 50, 0, 10, '\x06', 12884901888i64, 1, 1, 0i64, 8589934592i64, 12884901888i64, 0i64, '\0', '\0', 4294967296i64, '\0', 90, '\b', 9999, "" }, { 448, 448, 10, 50, 0, 10, '\x06', 7726646165504i64, 1, 1, 3298534883328i64, 4415226380288i64, 30064771072i64, 0i64, '\0', '\0', 8589934592i64, '\0', 89, '\b', 9999, "" }, { 449, 449, 1, 50, 0, 25, '\x06', 30064771072i64, 1, 1, 0i64, 30064771072i64, 30064771072i64, 0i64, '\0', '\0', 0i64, '\x01', 57, '\b', 9999, "" }, { 450, 450, 2, 50, 0, 25, '\x06', 12884901888i64, 1, 1, 0i64, 12884901888i64, 12884901888i64, 0i64, '\0', '\0', 0i64, '\x01', 57, '\b', 9999, "" }, { 451, 451, 11, 50, 0, 25, '\x06', 4294967296i64, 1, 1, 0i64, 0i64, 4294967296i64, 0i64, '\0', '\0', 4294967296i64, '\0', 92, '\b', 9999, "" }, { 452, 452, 3, 50, 0, 10, '\x0F', 7726646165504i64, 1, 1, 3298534883328i64, 4415226380288i64, 7713761263616i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 453, 453, 4, 50, 6, 0, '\x06', 4294967296i64, 1, 1, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 454, 454, 5, 50, 0, 25, '\x06', 4294967296i64, 1, 1, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 455, 455, 6, 50, 0, 25, '\x06', 12884901888i64, 1, 1, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 456, 456, 12, 50, 0, 5, '\x06', 12884901888i64, 1, 1, 0i64, 8589934592i64, 12884901888i64, 0i64, '\0', '\0', 4294967296i64, '\0', 3, '\b', 9999, "" }, { 457, 457, 13, 50, 0, 0, '\x03', 7726646165504i64, 1, 1, 0i64, 0i64, 7726646165504i64, 0i64, '\0', '\0', 7726646165504i64, '\x01', 39, '\b', 9999, "" }, { 458, 458, 14, 50, 0, 0, '\x06', 3328599654400i64, 1, 1, 3298534883328i64, 17179869184i64, 3311419785216i64, 0i64, '\0', '\0', 8589934592i64, '\0', 32, '\b', 9999, "" }, { 459, 459, 4, 40, 0, 25, '\x06', 1112396529664i64, 1, 1, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 460, 460, 15, 40, 0, 0, '\x06', 852151576297472i64, 1, 1, 567347999932416i64, 281474976710656i64, 565148976676864i64, 0i64, '\0', '\0', 8589934592i64, '\0', 91, '\b', 9999, "" }, { 461, 461, 16, 40, 0, 0, '\x06', 4294967296i64, 1, 1, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 43, '\b', 9999, "" }, { 462, 462, 91, 51, 0, 5, '\x06', 16557098926080i64, 2, 4094, 6597069766656i64, 8830452760576i64, 0i64, 8589934592i64, '\x05', '\x02', 8589934592i64, '\0', 64, '\b', 9999, "" }, { 463, 463, 447, 51, 0, 15, '\x06', 12884901888i64, 2, 4094, 0i64, 12884901888i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 57, '\b', 9999, "" }, { 464, 464, 448, 51, 0, 15, '\x06', 16522739187712i64, 2, 4094, 0i64, 16522739187712i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 108, '\b', 9999, "" }, { 465, 465, 449, 51, 0, 15, '\x06', 1978051483140096i64, 2, 4094, 0i64, 1978051483140096i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 108, '\b', 9999, "" }, { 466, 466, 450, 51, 0, 15, '\x06', 1112396529664i64, 2, 4094, 0i64, 1112396529664i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 108, '\b', 9999, "" }, { 467, 467, 486, 51, 0, 10, '\x06', 30064771072i64, 2, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 7, '\b', 9999, "" }, { 468, 468, 452, 51, 0, 15, '\x06', 30064771072i64, 258, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 469, 469, 453, 51, 0, 15, '\x06', 2229088026624i64, 258, 4094, 2199023255552i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 470, 470, 454, 51, 0, 15, '\x06', 12884901888i64, 258, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 471, 471, 455, 51, 0, 15, '\x06', 4294967296i64, 258, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 472, 472, 456, 51, 0, 15, '\x06', 12884901888i64, 258, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 473, 473, 457, 51, 0, 15, '\x06', 12884901888i64, 258, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 474, 474, 458, 51, 0, 15, '\x06', 12884901888i64, 258, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 475, 475, 459, 51, 0, 15, '\x06', 12884901888i64, 258, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 476, 476, 460, 51, 0, 15, '\x06', 4256342655107072i64, 2, 4094, 4222124650659840i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 104, '\b', 9999, "" }, { 477, 477, 474, 51, 0, 15, '\x06', 4294967296i64, 2, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 478, 478, 462, 51, 0, 15, '\x06', 16557098926080i64, 2, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 104, '\b', 9999, "" }, { 479, 479, 463, 51, 0, 15, '\x06', 30064771072i64, 2, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 104, '\b', 9999, "" }, { 480, 480, 464, 51, 0, 15, '\x06', 30064771072i64, 2, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 110, '\b', 9999, "" }, { 481, 481, 465, 51, 0, 15, '\x06', 7761005903872i64, 2, 4094, 7696581394432i64, 34359738368i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 482, 482, 466, 51, 0, 15, '\x06', 3328599654400i64, 2, 4094, 3298534883328i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 483, 483, 467, 51, 0, 15, '\x06', 1112396529664i64, 2, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 484, 484, 468, 51, 0, 15, '\x06', 64424509440i64, 2, 4094, 0i64, 34359738368i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 485, 485, 469, 51, 0, 15, '\x06', 64424509440i64, 2, 4094, 0i64, 34359738368i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 486, 486, 470, 51, 0, 15, '\x06', 30064771072i64, 2, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 487, 487, 471, 51, 0, 15, '\x06', 30064771072i64, 2, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 488, 488, 472, 51, 0, 15, '\x06', 30064771072i64, 2, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 489, 489, 473, 51, 0, 15, '\x06', 12884901888i64, 2, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 490, 490, 474, 51, 0, 15, '\x06', 64424509440i64, 2, 4094, 0i64, 34359738368i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 491, 491, 475, 51, 0, 15, '\x06', 7761005903872i64, 2, 4094, 7696581394432i64, 34359738368i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 492, 492, 476, 51, 0, 15, '\x06', 64424509440i64, 2, 4094, 0i64, 34359738368i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 493, 493, 477, 51, 0, 15, '\x06', 64424509440i64, 2, 4094, 0i64, 34359738368i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 494, 494, 478, 51, 0, 15, '\x06', 3328599654400i64, 2, 4094, 3298534883328i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 495, 495, 479, 51, 0, 15, '\x06', 4294967296i64, 2, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 102, '\b', 9999, "" }, { 496, 496, 480, 51, 0, 15, '\x06', 30064771072i64, 2, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 497, 497, 481, 51, 0, 15, '\x06', 12884901888i64, 2, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 498, 498, 482, 51, 0, 15, '\x06', 12884901888i64, 2, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 499, 499, 483, 51, 0, 15, '\x06', 12884901888i64, 2, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 500, 500, 484, 51, 0, 15, '\x06', 12884901888i64, 2, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 501, 501, 485, 51, 0, 15, '\x06', 12884901888i64, 2, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 110, '\b', 9999, "" }, { 502, 502, 486, 48, 0, 10, '\x06', 3328599654400i64, 2, 4094, 3298534883328i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 71, '\b', 9999, "" }, { 503, 503, 491, 48, 0, 10, '\x06', 64424509440i64, 2, 4094, 0i64, 34359738368i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 72, '\b', 9999, "" }, { 504, 504, 485, 48, 0, 0, '\x06', 4294967296i64, 2, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 114, '\b', 9999, "" }, { 505, 505, 485, 48, 0, 15, '\x06', 12884901888i64, 2, 4094, 0i64, 12884901888i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 115, '\b', 9999, "" }, { 506, 506, 485, 48, 0, 15, '\x06', 12884901888i64, 2, 4094, 0i64, 12884901888i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 115, '\b', 9999, "" }, { 507, 507, 485, 48, 0, 15, '\x06', 30064771072i64, 2, 4094, 0i64, 30064771072i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 115, '\b', 9999, "" }, { 508, 508, 492, 48, 0, 10, '\x06', 3362959392768i64, 2, 4094, 3298534883328i64, 51539607552i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 60, '\b', 9999, "" }, { 509, 509, 493, 48, 0, 10, '\x03', 860982029058048i64, 2, 4094, 847723465015296i64, 13245679140864i64, 860982029058048i64, 0i64, '\0', '\0', 8589934592i64, '\0', 40, '\b', 9999, "" }, { 510, 510, 494, 48, 0, 10, '\x06', 1129576398848i64, 66, 4094, 1099511627776i64, 25769803776i64, 1129576398848i64, 0i64, '\0', '\0', 4294967296i64, '\0', 13, '\b', 9999, "" }, { 511, 511, 495, 48, 0, 10, '\x06', 12884901888i64, 66, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 14, '\b', 9999, "" }, { 512, 512, 496, 48, 0, 10, '\x06', 1129576398848i64, 66, 4094, 1099511627776i64, 25769803776i64, 1129576398848i64, 0i64, '\0', '\0', 4294967296i64, '\0', 15, '\b', 9999, "" }, { 513, 513, 497, 48, 0, 15, '\x06', 7726646165504i64, 2, 4094, 3298534883328i64, 4415226380288i64, 0i64, 0i64, '\0', '\0', 12884901888i64, '\0', 30, '\b', 9999, "" }, { 514, 514, 498, 48, 0, 0, '\x06', 1112396529664i64, 2, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 25, '\b', 9999, "" }, { 515, 515, 499, 52, 0, 15, '\x06', 12884901888i64, 4, 4094, 0i64, 12884901888i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 57, '\b', 9999, "" }, { 516, 516, 532, 52, 0, 15, '\x06', 12884901888i64, 4, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 87, '\b', 9999, "" }, { 517, 517, 532, 52, 0, 15, '\x06', 4294967296i64, 4, 4094, 0i64, 0i64, 4294967296i64, 0i64, '\0', '\0', 4294967296i64, '\0', 8, '\b', 9999, "" }, { 518, 518, 502, 52, 0, 0, '\x06', 4294967296i64, 4, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 114, '\b', 9999, "" }, { 519, 519, 532, 52, 0, 15, '\x06', 12884901888i64, 4, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 88, '\b', 9999, "" }, { 520, 520, 504, 52, 0, 15, '\x06', 12884901888i64, 4, 4094, 0i64, 12884901888i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 115, '\b', 9999, "" }, { 521, 521, 505, 52, 0, 15, '\x06', 12884901888i64, 4, 4094, 0i64, 12884901888i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 115, '\b', 9999, "" }, { 522, 522, 506, 52, 0, 15, '\x06', 30064771072i64, 4, 4094, 0i64, 30064771072i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 115, '\b', 9999, "" }, { 523, 523, 507, 52, 0, 15, '\x06', 12884901888i64, 4, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 524, 524, 508, 52, 0, 15, '\x06', 3328599654400i64, 4, 4094, 3298534883328i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 525, 525, 509, 52, 0, 15, '\x06', 4294967296i64, 4, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 103, '\b', 9999, "" }, { 526, 526, 510, 52, 0, 15, '\x06', 12884901888i64, 4, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 527, 527, 511, 52, 0, 15, '\x06', 12884901888i64, 4, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 528, 528, 512, 52, 0, 15, '\x06', 30064771072i64, 4, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 529, 529, 513, 52, 0, 15, '\x06', 12884901888i64, 4, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 530, 530, 514, 52, 0, 15, '\x06', 12884901888i64, 4, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 531, 531, 515, 52, 0, 15, '\x06', 12884901888i64, 4, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 107, '\b', 9999, "" }, { 532, 532, 516, 52, 0, 15, '\x06', 4294967296i64, 4, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 107, '\b', 9999, "" }, { 533, 533, 517, 52, 0, 15, '\x06', 4294967296i64, 260, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 534, 534, 518, 52, 0, 15, '\x06', 4294967296i64, 260, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 535, 535, 519, 52, 0, 15, '\x06', 4294967296i64, 260, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 536, 536, 520, 52, 0, 15, '\x06', 3328599654400i64, 4, 4094, 3298534883328i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 537, 537, 128, 52, 0, 15, '\x06', 7761005903872i64, 4, 4094, 7696581394432i64, 34359738368i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 538, 538, 128, 52, 0, 15, '\x06', 1112396529664i64, 4, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 539, 539, 128, 52, 0, 15, '\x06', 3328599654400i64, 4, 4094, 3298534883328i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 540, 540, 128, 52, 0, 15, '\x06', 1112396529664i64, 4, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 541, 541, 129, 52, 0, 15, '\x06', 1112396529664i64, 4, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 542, 542, 129, 52, 0, 15, '\x06', 1112396529664i64, 4, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 543, 543, 128, 52, 0, 15, '\x06', 1112396529664i64, 4, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 544, 544, 128, 52, 0, 15, '\x06', 1112396529664i64, 4, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 545, 545, 529, 52, 0, 15, '\x06', 33118492819456i64, 4, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 104, '\b', 9999, "" }, { 546, 546, 530, 52, 0, 15, '\x06', 30064771072i64, 4, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 104, '\b', 9999, "" }, { 547, 547, 531, 52, 0, 15, '\x06', 30064771072i64, 4, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 104, '\b', 9999, "" }, { 548, 548, 532, 52, 0, 15, '\x03', 860982029058048i64, 4, 4094, 847723465015296i64, 13245679140864i64, 860982029058048i64, 0i64, '\0', '\0', 8589934592i64, '\0', 40, '\b', 9999, "" }, { 549, 549, 533, 52, 0, 15, '\x06', 1112396529664i64, 4, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 58, '\b', 9999, "" }, { 550, 550, 534, 52, 0, 0, '\x06', 1112396529664i64, 4, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 25, '\b', 9999, "" }, { 551, 551, 535, 52, 0, 15, '\x06', 12884901888i64, 4, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 2, '\b', 9999, "" }, { 552, 552, 536, 52, 0, 0, '\x06', 16557098926080i64, 4, 4094, 7696581394432i64, 8830452760576i64, 4294967296i64, 0i64, '\0', '\0', 8589934592i64, '\0', 1, '\b', 9999, "" }, { 553, 553, 537, 52, 6, 0, '\x06', 30064771072i64, 4, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 12, '\b', 9999, "" }, { 554, 554, 538, 52, 0, 0, '\x06', 570676599586816i64, 4, 4094, 570646534815744i64, 0i64, 6622839570432i64, 0i64, '\0', '\0', 4294967296i64, '\0', 22, '\b', 9999, "" }, { 555, 555, 538, 52, 0, 15, '\x06', 1112396529664i64, 4, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 94, '\b', 9999, "" }, { 556, 556, 539, 52, 0, 0, '\x06', 16557098926080i64, 4, 4094, 13194139533312i64, 0i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 29, '\b', 9999, "" }, { 557, 557, 537, 52, 0, 15, '\x06', 16557098926080i64, 4, 4094, 7696581394432i64, 8830452760576i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 12, '\b', 9999, "" }, { 558, 558, 741, 53, 0, 15, '\x06', 282604553109504i64, 4094, 4094, 282574488338432i64, 25769803776i64, 282595963174912i64, 0i64, '\0', '\0', 4294967296i64, '\0', 85, '\b', 9999, "" }, { 559, 559, 540, 53, 0, 15, '\x06', 12884901888i64, 8, 4094, 0i64, 12884901888i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 57, '\b', 9999, "" }, { 560, 560, 541, 53, 0, 15, '\x06', 30064771072i64, 264, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 561, 561, 579, 53, 0, 15, '\x06', 2004542841421824i64, 8, 4094, 1986817511391232i64, 17660905521152i64, 1150140702261248i64, 0i64, '\0', '\0', 8589934592i64, '\0', 86, '\b', 9999, "" }, { 562, 562, 579, 53, 0, 15, '\x06', 30064771072i64, 8, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 7, '\b', 9999, "" }, { 563, 563, 544, 53, 0, 0, '\x06', 4294967296i64, 8, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 57, '\b', 9999, "" }, { 564, 564, 545, 53, 0, 5, '\x06', 35606030503116800i64, 8, 4094, 0i64, 18649095891582976i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 104, '\b', 9999, "" }, { 565, 565, 546, 53, 0, 10, '\x06', 16557098926080i64, 8, 4094, 0i64, 8834747727872i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 104, '\b', 9999, "" }, { 566, 566, 547, 53, 0, 15, '\x06', 1705406959190016i64, 8, 4094, 0i64, 9934259355648i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 104, '\b', 9999, "" }, { 567, 567, 548, 53, 0, 15, '\x06', 12884901888i64, 8, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 105, '\b', 9999, "" }, { 568, 568, 549, 53, 0, 15, '\x06', 30064771072i64, 8, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 105, '\b', 9999, "" }, { 569, 569, 550, 53, 0, 15, '\x06', 12884901888i64, 8, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 105, '\b', 9999, "" }, { 570, 570, 551, 53, 0, 15, '\x06', 64424509440i64, 8, 4094, 0i64, 34359738368i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 105, '\b', 9999, "" }, { 571, 571, 552, 53, 0, 15, '\x06', 12884901888i64, 8, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 105, '\b', 9999, "" }, { 572, 572, 553, 53, 0, 15, '\x06', 12884901888i64, 8, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 57, '\b', 9999, "" }, { 573, 573, 579, 53, 0, 0, '\x06', 4294967296i64, 8, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 2, '\b', 9999, "" }, { 574, 574, 555, 53, 0, 15, '\x06', 16625818402816i64, 8, 4094, 0i64, 8796093022208i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 104, '\b', 9999, "" }, { 575, 575, 556, 53, 0, 15, '\x06', 30064771072i64, 8, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 56, '\b', 9999, "" }, { 576, 576, 557, 53, 0, 15, '\x06', 30064771072i64, 8, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 113, '\b', 9999, "" }, { 577, 577, 558, 53, 0, 15, '\x06', 30064771072i64, 8, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 56, '\b', 9999, "" }, { 578, 578, 559, 53, 0, 15, '\x06', 12884901888i64, 8, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 56, '\b', 9999, "" }, { 579, 579, 560, 53, 0, 15, '\x06', 852134396428288i64, 8, 4094, 847723465015296i64, 4398046511104i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 580, 580, 561, 53, 0, 15, '\x06', 3328599654400i64, 8, 4094, 3298534883328i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 581, 581, 562, 53, 0, 15, '\x06', 3328599654400i64, 8, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 582, 582, 485, 53, 0, 15, '\x06', 270582939648i64, 266, 4094, 0i64, 137438953472i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 56, '\b', 9999, "" }, { 583, 583, 485, 53, 0, 15, '\x06', 30064771072i64, 266, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 56, '\b', 9999, "" }, { 584, 584, 485, 53, 0, 15, '\x06', 4294967296i64, 266, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 56, '\b', 9999, "" }, { 585, 585, 566, 53, 0, 15, '\x06', 12884901888i64, 8, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 586, 586, 567, 53, 0, 15, '\x06', 12884901888i64, 8, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 587, 587, 568, 53, 0, 15, '\x06', 4294967296i64, 8, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 588, 588, 569, 53, 0, 15, '\x06', 12884901888i64, 8, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 589, 589, 570, 53, 0, 15, '\x06', 12884901888i64, 8, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 590, 590, 571, 53, 0, 15, '\x06', 12884901888i64, 8, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 591, 591, 572, 53, 0, 15, '\x06', 12884901888i64, 8, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 592, 592, 573, 53, 0, 15, '\x06', 4294967296i64, 8, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 593, 593, 574, 53, 0, 15, '\x06', 12884901888i64, 8, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 594, 594, 575, 53, 0, 15, '\x06', 12884901888i64, 8, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 595, 595, 576, 53, 0, 15, '\x06', 1129576398848i64, 8, 4094, 1099511627776i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 596, 596, 577, 53, 0, 15, '\x06', 4294967296i64, 8, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 597, 597, 578, 53, 0, 15, '\x06', 30064771072i64, 8, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 598, 598, 579, 53, 0, 0, '\x06', 1112396529664i64, 8, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 25, '\b', 9999, "" }, { 599, 599, 580, 54, 0, 15, '\x06', 12884901888i64, 16, 4094, 0i64, 12884901888i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 57, '\b', 9999, "" }, { 600, 600, 581, 54, 0, 15, '\x06', 16557098926080i64, 16, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 108, '\b', 9999, "" }, { 601, 601, 582, 54, 0, 15, '\x06', 217020518463700992i64, 16, 4094, 216172782113783808i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 108, '\b', 9999, "" }, { 602, 602, 583, 54, 0, 15, '\x06', 1112396529664i64, 16, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 112, '\b', 9999, "" }, { 603, 603, 584, 54, 0, 15, '\x06', 3328599654400i64, 16, 4094, 0i64, 3328599654400i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 112, '\b', 9999, "" }, { 604, 604, 585, 54, 0, 0, '\x06', 4294967296i64, 16, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 114, '\b', 9999, "" }, { 605, 605, 586, 54, 0, 15, '\x06', 69539815489536i64, 16, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 112, '\b', 9999, "" }, { 606, 606, 587, 54, 0, 15, '\x06', 7726646165504i64, 16, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 112, '\b', 9999, "" }, { 607, 607, 588, 54, 0, 15, '\x06', 16557098926080i64, 16, 4094, 0i64, 8830452760576i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 112, '\b', 9999, "" }, { 608, 608, 589, 54, 0, 15, '\x06', 3311419785216i64, 16, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 112, '\b', 9999, "" }, { 609, 609, 590, 54, 0, 15, '\x06', 1112396529664i64, 16, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 112, '\b', 9999, "" }, { 610, 610, 591, 54, 0, 15, '\x06', 3311419785216i64, 16, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 112, '\b', 9999, "" }, { 611, 611, 592, 54, 0, 15, '\x06', 3328599654400i64, 16, 4094, 2199023255552i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 112, '\b', 9999, "" }, { 612, 612, 593, 54, 0, 15, '\x06', 6627134537728i64, 16, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 112, '\b', 9999, "" }, { 613, 613, 599, 54, 0, 15, '\x06', 3311419785216i64, 16, 4094, 3298534883328i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 101, '\b', 9999, "" }, { 614, 614, 595, 54, 0, 15, '\t', 1112396529664i64, 16, 4094, 1099511627776i64, 0i64, 1112396529664i64, 0i64, '\0', '\0', 0i64, '\0', 101, '\b', 9999, "" }, { 615, 615, 603, 54, 0, 0, '\x06', 1112396529664i64, 16, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 25, '\b', 9999, "" }, { 616, 616, 603, 54, 0, 15, '\x06', 3328599654400i64, 16, 4094, 3298534883328i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 5, '\b', 9999, "" }, { 617, 617, 603, 54, 0, 15, '\x06', 12884901888i64, 16, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 2, '\b', 9999, "" }, { 618, 618, 752, 54, 0, 0, '\x06', 16557098926080i64, 16, 4094, 13194139533312i64, 0i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 29, '\b', 9999, "" }, { 619, 619, 599, 60, 0, 15, '\x06', 592701191880704i64, 16, 4094, 566248488304640i64, 26422638804992i64, 591537255743488i64, 0i64, '\0', '\0', 0i64, '\0', 101, '\b', 9999, "" }, { 620, 620, 600, 60, 0, 15, '\n', 595999726764032i64, 16, 4094, 569547023187968i64, 26422638804992i64, 591537255743488i64, 0i64, '\0', '\0', 0i64, '\0', 101, '\b', 9999, "" }, { 621, 621, 601, 58, 0, 15, '\x0E', 2256019868161671182i64, 16, 4094, 2237741458012504078i64, 18278350019624960i64, 2256004346149863438i64, 0i64, '\0', '\0', 0i64, '\0', 101, '\b', 9999, "" }, { 622, 622, 602, 55, 0, 15, '\x06', 12884901888i64, 32, 4094, 0i64, 12884901888i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 57, '\b', 9999, "" }, { 623, 623, 603, 55, 0, 15, '\x06', 12884901888i64, 288, 4094, 8589934592i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 624, 624, 604, 55, 0, 15, '\x06', 1112396529664i64, 288, 4094, 1108101562368i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 625, 625, 605, 55, 0, 15, '\x06', 1112396529664i64, 288, 4094, 1108101562368i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 626, 626, 606, 55, 0, 15, '\x06', 1112396529664i64, 288, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 627, 627, 607, 55, 0, 15, '\x06', 30064771072i64, 32, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 111, '\b', 9999, "" }, { 628, 628, 608, 55, 0, 15, '\x06', 30064771072i64, 32, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 111, '\b', 9999, "" }, { 629, 629, 609, 55, 0, 15, '\x06', 64424509440i64, 32, 4094, 0i64, 34359738368i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 111, '\b', 9999, "" }, { 630, 630, 610, 55, 0, 15, '\x06', 12884901888i64, 32, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 631, 631, 611, 55, 0, 15, '\x06', 12884901888i64, 32, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 632, 632, 612, 55, 0, 15, '\x06', 12884901888i64, 32, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 633, 633, 613, 55, 0, 15, '\x06', 12884901888i64, 32, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 109, '\b', 9999, "" }, { 634, 634, 614, 55, 0, 15, '\x06', 4294967296i64, 32, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 109, '\b', 9999, "" }, { 635, 635, 615, 55, 0, 15, '\x06', 4294967296i64, 32, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 109, '\b', 9999, "" }, { 636, 636, 616, 55, 0, 15, '\x06', 12884901888i64, 32, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 109, '\b', 9999, "" }, { 637, 637, 617, 55, 0, 15, '\x06', 12884901888i64, 32, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 109, '\b', 9999, "" }, { 638, 638, 618, 55, 0, 15, '\x06', 1112396529664i64, 32, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 109, '\b', 9999, "" }, { 639, 639, 619, 55, 0, 15, '\x06', 4294967296i64, 32, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 109, '\b', 9999, "" }, { 640, 640, 620, 55, 0, 15, '\x06', 12884901888i64, 32, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 109, '\b', 9999, "" }, { 641, 641, 621, 55, 0, 15, '\x06', 1112396529664i64, 32, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 109, '\b', 9999, "" }, { 642, 642, 622, 55, 0, 15, '\x06', 1112396529664i64, 32, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 109, '\b', 9999, "" }, { 643, 643, 623, 55, 0, 15, '\x06', 4294967296i64, 32, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 109, '\b', 9999, "" }, { 644, 644, 624, 55, 0, 15, '\x06', 12884901888i64, 32, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 109, '\b', 9999, "" }, { 645, 645, 625, 55, 0, 15, '\x06', 12884901888i64, 32, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 109, '\b', 9999, "" }, { 646, 646, 626, 55, 0, 15, '\x06', 12884901888i64, 32, 4094, 0i64, 8589934592i64, 12884901888i64, 0i64, '\0', '\0', 4294967296i64, '\0', 8, '\b', 9999, "" }, { 647, 647, 625, 55, 0, 0, '\x06', 4294967296i64, 32, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 57, '\b', 9999, "" }, { 648, 648, 628, 55, 0, 15, '\x06', 3328599654400i64, 32, 4094, 3298534883328i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 34, '\b', 9999, "" }, { 649, 649, 606, 55, 0, 15, '\x06', 1112396529664i64, 288, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 650, 650, 630, 55, 0, 15, '\x06', 7726646165504i64, 32, 4094, 3298534883328i64, 4415226380288i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 76, '\b', 9999, "" }, { 651, 651, 631, 55, 0, 15, '\x06', 12884901888i64, 32, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 12884901888i64, '\0', 4, '\b', 9999, "" }, { 652, 652, 632, 55, 0, 15, '\x06', 2229088026624i64, 32, 4094, 2199023255552i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 79, '\b', 9999, "" }, { 653, 653, 633, 55, 0, 15, '\x06', 34218004447232i64, 32, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 17179869184i64, '\0', 77, '\b', 9999, "" }, { 654, 654, 634, 55, 0, 15, '\x06', 30064771072i64, 32, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 78, '\b', 9999, "" }, { 655, 655, 635, 55, 0, 0, '\x06', 1112396529664i64, 32, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 25, '\b', 9999, "" }, { 656, 656, 636, 55, 0, 15, '\x06', 3328599654400i64, 32, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 12884901888i64, '\0', 26, '\b', 9999, "" }, { 657, 657, 625, 55, 0, 15, '\x06', 30064771072i64, 32, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 56, '\b', 9999, "" }, { 658, 658, 638, 55, 0, 15, '\x06', 3328599654400i64, 32, 4094, 3298534883328i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 5, '\b', 9999, "" }, { 659, 659, 639, 55, 0, 15, '\x06', 12884901888i64, 288, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 2, '\b', 9999, "" }, { 660, 660, 640, 55, 6, 0, '\x06', 30064771072i64, 32, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 12, '\b', 9999, "" }, { 661, 661, 752, 55, 0, 0, '\x06', 16557098926080i64, 32, 4094, 13194139533312i64, 0i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 29, '\b', 9999, "" }, { 662, 662, 91, 56, 0, 15, '\x06', 34218004447232i64, 64, 4094, 7696581394432i64, 26491358281728i64, 0i64, 8589934592i64, '\x05', '\x02', 8589934592i64, '\0', 64, '\b', 9999, "" }, { 663, 663, 642, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 12884901888i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 57, '\b', 9999, "" }, { 664, 664, 643, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 110, '\b', 9999, "" }, { 665, 665, 644, 56, 0, 15, '\x06', 30064771072i64, 64, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 110, '\b', 9999, "" }, { 666, 666, 645, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 108, '\b', 9999, "" }, { 667, 667, 646, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 108, '\b', 9999, "" }, { 668, 668, 647, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 108, '\b', 9999, "" }, { 669, 669, 648, 56, 0, 15, '\x06', 72057589742960640i64, 64, 4094, 0i64, 554050781184i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 104, '\b', 9999, "" }, { 670, 670, 649, 56, 0, 15, '\x06', 34218004447232i64, 64, 4094, 0i64, 17660905521152i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 104, '\b', 9999, "" }, { 671, 671, 650, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 104, '\b', 9999, "" }, { 672, 672, 651, 56, 0, 15, '\x06', 30064771072i64, 64, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 673, 673, 652, 56, 0, 15, '\x06', 30064771072i64, 64, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 674, 674, 653, 56, 0, 15, '\x06', 30064771072i64, 64, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 675, 675, 654, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 676, 676, 655, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 677, 677, 656, 56, 0, 15, '\x06', 30064771072i64, 64, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 678, 678, 657, 56, 0, 15, '\x06', 30064771072i64, 64, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 679, 679, 658, 56, 0, 15, '\x06', 30064771072i64, 64, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 680, 680, 659, 56, 0, 15, '\x06', 30064771072i64, 64, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 681, 681, 660, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 682, 682, 661, 56, 0, 15, '\x06', 4294967296i64, 64, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 102, '\b', 9999, "" }, { 683, 683, 662, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 684, 684, 663, 56, 0, 15, '\x06', 4294967296i64, 64, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 102, '\b', 9999, "" }, { 685, 685, 664, 56, 0, 15, '\x06', 4294967296i64, 64, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 686, 686, 665, 56, 0, 15, '\x06', 30064771072i64, 64, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 687, 687, 666, 56, 0, 15, '\x06', 7726646165504i64, 64, 4094, 3298534883328i64, 4415226380288i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 688, 688, 667, 56, 0, 15, '\x06', 30064771072i64, 64, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 689, 689, 668, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 690, 690, 669, 56, 0, 15, '\x06', 4294967296i64, 64, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 691, 691, 670, 56, 0, 15, '\x06', 4294967296i64, 64, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 692, 692, 671, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 693, 693, 672, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 694, 694, 673, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 695, 695, 674, 56, 0, 15, '\x06', 4294967296i64, 64, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 696, 696, 675, 56, 0, 15, '\x06', 7726646165504i64, 64, 4094, 3302829850624i64, 4415226380288i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 697, 697, 676, 56, 0, 15, '\x06', 3328599654400i64, 64, 4094, 3320009719808i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 698, 698, 677, 56, 0, 15, '\x06', 1112396529664i64, 64, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 99, '\b', 9999, "" }, { 699, 699, 678, 56, 0, 15, '\x06', 30064771072i64, 64, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 7, '\b', 9999, "" }, { 700, 700, 679, 56, 0, 15, '\x06', 3328599654400i64, 64, 4094, 3298534883328i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 71, '\b', 9999, "" }, { 701, 701, 680, 56, 0, 15, '\x06', 64424509440i64, 64, 4094, 0i64, 34359738368i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 72, '\b', 9999, "" }, { 702, 702, 678, 56, 0, 0, '\x06', 4294967296i64, 64, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 114, '\b', 9999, "" }, { 703, 703, 677, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 12884901888i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 115, '\b', 9999, "" }, { 704, 704, 677, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 12884901888i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 115, '\b', 9999, "" }, { 705, 705, 677, 56, 0, 15, '\x06', 12884901888i64, 64, 4094, 0i64, 12884901888i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 115, '\b', 9999, "" }, { 706, 706, 685, 56, 0, 15, '\x06', 3362959392768i64, 64, 4094, 3298534883328i64, 51539607552i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 60, '\b', 9999, "" }, { 707, 707, 686, 56, 0, 15, '\x03', 860982029058048i64, 64, 4094, 847723465015296i64, 13245679140864i64, 860982029058048i64, 0i64, '\0', '\0', 8589934592i64, '\0', 40, '\b', 9999, "" }, { 708, 708, 687, 56, 0, 15, '\x06', 7726646165504i64, 64, 4094, 3298534883328i64, 4415226380288i64, 0i64, 0i64, '\0', '\0', 12884901888i64, '\0', 30, '\b', 9999, "" }, { 709, 709, 688, 56, 0, 0, '\x06', 1112396529664i64, 64, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 25, '\b', 9999, "" }, { 710, 710, 713, 57, 0, 15, '\x06', 3328599654400i64, 128, 4094, 3298534883328i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 12884901888i64, '\0', 82, '\b', 9999, "" }, { 711, 711, 690, 57, 0, 15, '\x06', 12884901888i64, 128, 4094, 0i64, 12884901888i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 57, '\b', 9999, "" }, { 712, 712, 691, 57, 0, 15, '\x06', 3328599654400i64, 128, 4094, 3298534883328i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 713, 713, 692, 57, 0, 15, '\x06', 1112396529664i64, 128, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 109, '\b', 9999, "" }, { 714, 714, 693, 57, 0, 15, '\x06', 12884901888i64, 128, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 109, '\b', 9999, "" }, { 715, 715, 694, 57, 0, 15, '\x06', 4294967296i64, 128, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 716, 716, 695, 57, 0, 15, '\x06', 4294967296i64, 128, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 717, 717, 696, 57, 0, 15, '\x06', 2229088026624i64, 128, 4094, 2199023255552i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 718, 718, 697, 57, 0, 15, '\x06', 30064771072i64, 128, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 719, 719, 698, 57, 0, 15, '\x06', 3328599654400i64, 128, 4094, 3298534883328i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 720, 720, 699, 57, 0, 15, '\x06', 12884901888i64, 128, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 721, 721, 700, 57, 0, 15, '\x06', 30064771072i64, 128, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 722, 722, 701, 57, 0, 15, '\x06', 30064771072i64, 128, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 723, 723, 702, 57, 0, 15, '\x06', 30064771072i64, 128, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 724, 724, 703, 57, 0, 15, '\x06', 12884901888i64, 128, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 725, 725, 704, 57, 0, 15, '\x06', 1112396529664i64, 128, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 726, 726, 705, 57, 0, 15, '\x06', 1112396529664i64, 128, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 727, 727, 706, 57, 0, 15, '\x06', 1112396529664i64, 128, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 728, 728, 707, 57, 0, 15, '\x06', 1112396529664i64, 128, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 729, 729, 708, 57, 0, 15, '\x06', 12884901888i64, 128, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 730, 730, 709, 57, 0, 15, '\x06', 4238681749585920i64, 128, 4094, 0i64, 844476469739520i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 108, '\b', 9999, "" }, { 731, 731, 710, 57, 0, 0, '\x06', 4294967296i64, 128, 4094, 0i64, 4294967296i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 114, '\b', 9999, "" }, { 732, 732, 711, 57, 0, 15, '\x06', 4294967296i64, 128, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 733, 733, 712, 57, 0, 15, '\x06', 4294967296i64, 128, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 734, 734, 713, 57, 0, 15, '\x06', 12884901888i64, 128, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 80, '\b', 9999, "" }, { 735, 735, 714, 57, 0, 15, '\n', 17520988371550208i64, 128, 4094, 0i64, 9570149208162304i64, 68298569940992i64, 0i64, '\0', '\0', 0i64, '\x01', 81, '\b', 9999, "" }, { 736, 736, 715, 57, 0, 15, '\x06', 16557098926080i64, 128, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\x01', 83, '\b', 9999, "" }, { 737, 737, 716, 57, 0, 15, '\n', 1129576398848i64, 128, 4094, 1099511627776i64, 17179869184i64, 1108101562368i64, 0i64, '\0', '\0', 4294967296i64, '\0', 63, '\b', 9999, "" }, { 738, 738, 717, 57, 0, 15, '\x06', 15457587298304i64, 128, 4094, 15393162788864i64, 0i64, 0i64, 0i64, '\0', '\0', 64424509440i64, '\x01', 84, '\b', 9999, "" }, { 739, 739, 700, 57, 0, 15, '\x06', 7726646165504i64, 128, 4094, 4294967296i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 108, '\b', 9999, "" }, { 740, 740, 700, 57, 0, 15, '\x06', 847736349917184i64, 128, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 108, '\b', 9999, "" }, { 741, 741, 700, 57, 0, 15, '\x06', 30064771072i64, 128, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 108, '\b', 9999, "" }, { 742, 742, 721, 57, 0, 0, '\x06', 1112396529664i64, 128, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 25, '\b', 9999, "" }, { 743, 743, 752, 57, 0, 0, '\x06', 16557098926080i64, 128, 4094, 13194139533312i64, 0i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 29, '\b', 9999, "" }, { 744, 744, 200, 59, 0, 15, '\x06', 1112396529664i64, 66, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 745, 745, 201, 59, 0, 15, '\x06', 12884901888i64, 66, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 56, '\b', 9999, "" }, { 746, 746, 496, 59, 0, 15, '\t', 1129576398848i64, 66, 4094, 1099511627776i64, 25769803776i64, 1125281431552i64, 0i64, '\0', '\0', 4294967296i64, '\0', 16, '\b', 9999, "" }, { 747, 747, 725, 59, 0, 15, '\b', 579472692609024i64, 66, 4094, 566248488304640i64, 13211319402496i64, 571746046443520i64, 0i64, '\0', '\0', 4294967296i64, '\0', 62, '\b', 9999, "" }, { 748, 748, 726, 59, 0, 15, '\x06', 1112396529664i64, 66, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 10, '\b', 9999, "" }, { 749, 749, 202, 59, 0, 15, '\x06', 30064771072i64, 66, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 113, '\b', 9999, "" }, { 750, 750, 728, 59, 0, 15, '\x06', 1129576398848i64, 66, 4094, 1099511627776i64, 25769803776i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 69, '\b', 9999, "" }, { 751, 751, 729, 59, 0, 15, '\x06', 30064771072i64, 66, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 73, '\b', 9999, "" }, { 752, 752, 730, 59, 0, 15, '\x06', 12884901888i64, 66, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 61, '\b', 9999, "" }, { 753, 753, 732, 59, 0, 15, '\x06', 12884901888i64, 66, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 74, '\b', 9999, "" }, { 754, 754, 733, 59, 0, 15, '\x06', 12884901888i64, 66, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 75, '\b', 9999, "" }, { 755, 755, 731, 59, 0, 15, '\x06', 12884901888i64, 66, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 31, '\b', 9999, "" }, { 756, 756, 734, 59, 0, 15, '\x06', 12884901888i64, 66, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 67, '\b', 9999, "" }, { 757, 757, 735, 59, 0, 15, '\x06', 30064771072i64, 66, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 12884901888i64, '\0', 66, '\b', 9999, "" }, { 758, 758, 736, 59, 0, 15, '\x06', 3311419785216i64, 66, 4094, 3298534883328i64, 0i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 70, '\b', 9999, "" }, { 759, 759, 737, 59, 0, 15, '\x06', 1129576398848i64, 66, 4094, 1099511627776i64, 17179869184i64, 1125281431552i64, 0i64, '\0', '\0', 4294967296i64, '\0', 63, '\b', 9999, "" }, { 760, 760, 738, 59, 0, 15, '\x06', 1112396529664i64, 66, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 59, '\b', 9999, "" }, { 761, 761, 739, 59, 0, 15, '\x06', 12884901888i64, 66, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 58, '\b', 9999, "" }, { 762, 762, 740, 59, 0, 15, '\x06', 847753529786368i64, 66, 4094, 847723465015296i64, 25769803776i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 68, '\b', 9999, "" }, { 763, 763, 741, 59, 0, 15, '\x06', 12884901888i64, 4058, 4094, 0i64, 8589934592i64, 12884901888i64, 0i64, '\0', '\0', 4294967296i64, '\0', 8, '\b', 9999, "" }, { 764, 764, 203, 41, 0, 0, '\x06', 570676599586816i64, 4094, 4095, 0i64, 570676599586816i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 98, '\b', 9999, "" }, { 765, 765, 204, 41, 0, 0, '\x06', 1978030008303616i64, 4094, 4095, 0i64, 1978030008303616i64, 0i64, 0i64, '\0', '\0', 0i64, '\x01', 98, '\b', 9999, "" }, { 766, 766, 747, 41, 0, 15, '\x06', 12884901888i64, 238, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 9, '\b', 9999, "" }, { 767, 767, 206, 41, 0, 15, '\x06', 4294967296i64, 206, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 768, 768, 207, 41, 0, 15, '\x06', 12884901888i64, 206, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 769, 769, 208, 41, 0, 15, '\x06', 4294967296i64, 206, 4094, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 106, '\b', 9999, "" }, { 770, 770, 748, 41, 0, 0, '\x06', 16557098926080i64, 254, 4094, 7696581394432i64, 8830452760576i64, 4294967296i64, 0i64, '\0', '\0', 8589934592i64, '\0', 1, '\b', 9999, "" }, { 771, 771, 749, 41, 0, 15, '\x06', 1017672224246595584i64, 254, 4094, 1017561727622971392i64, 105965433126912i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 20, '\b', 9999, "" }, { 772, 772, 750, 41, 6, 0, '\x06', 30064771072i64, 254, 4094, 0i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 12, '\b', 9999, "" }, { 773, 773, 751, 41, 0, 15, '\t', 287002599620608i64, 4094, 4094, 282574488338432i64, 4423816314880i64, 1099511627776i64, 0i64, '\0', '\0', 4294967296i64, '\0', 21, '\b', 9999, "" }, { 774, 774, 752, 41, 0, 0, '\t', 16557098926080i64, 64, 4094, 13194139533312i64, 0i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 29, '\b', 9999, "" }, { 775, 775, 753, 41, 0, 0, '\x06', 570676599586816i64, 78, 4094, 570646534815744i64, 0i64, 6622839570432i64, 0i64, '\0', '\0', 4294967296i64, '\0', 22, '\b', 9999, "" }, { 776, 776, 754, 41, 0, 15, '\x06', 12884901888i64, 194, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 2, '\b', 9999, "" }, { 777, 777, 755, 41, 0, 0, '\x06', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 36, '\b', 9999, "" }, { 778, 778, 756, 41, 0, 0, '\x06', 1112396529664i64, 4094, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 36, '\b', 9999, "" }, { 779, 779, 757, 41, 0, 0, '\x06', 1112396529664i64, 78, 4094, 1099511627776i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 36, '\b', 9999, "" }, { 780, 780, 758, 41, 0, 15, '\x06', 16557098926080i64, 66, 4094, 0i64, 8830452760576i64, 8589934592i64, 0i64, '\0', '\0', 8589934592i64, '\0', 37, '\b', 9999, "" }, { 781, 781, 759, 41, 6, 0, '\x06', 1044693547132911620i64, 4095, 4095, 1017532040809021444i64, 27127305499312128i64, 0i64, 0i64, '\0', '\0', 4398046511104i64, '\0', 18, '\b', 9999, "" }, { 782, 782, 758, 41, 0, 15, '\x06', 12884901888i64, 10, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 94, '\b', 9999, "" }, { 783, 783, 999, 41, 0, 0, '\x06', 4294967296i64, 4095, 4095, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 19, '\b', 9999, "" }, { 784, 784, 758, 41, 0, 15, '\x06', 12884901888i64, 224, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 94, '\b', 9999, "" }, { 785, 785, 757, 41, 0, 15, '\x06', 3328599654400i64, 4094, 4094, 3298534883328i64, 17179869184i64, 3315714752512i64, 0i64, '\0', '\0', 4294967296i64, '\0', 97, '\b', 9999, "" }, { 786, 786, 757, 41, 0, 15, '\a', 12884901888i64, 138, 4094, 0i64, 8589934592i64, 4294967296i64, 0i64, '\0', '\0', 4294967296i64, '\0', 95, '\b', 9999, "" }, { 787, 787, 757, 41, 0, 15, '\x06', 1129576398848i64, 138, 4094, 1099511627776i64, 25769803776i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 96, '\b', 9999, "" }, { 788, 788, 759, 41, 0, 15, '\x06', 16557098926080i64, 4090, 4094, 7696581394432i64, 8830452760576i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 12, '\b', 9999, "" }, { 789, 789, 760, 41, 0, 0, '\x06', 16557098926080i64, 10, 4094, 13194139533312i64, 0i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 29, '\b', 9999, "" }, { 790, 790, 999, 61, 0, 15, '\x06', 1129576398848i64, 4094, 4094, 1099511627776i64, 25769803776i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 122, '\b', 9999, "" }, { 791, 791, 999, 61, 0, 15, '\b', 1986950655377408i64, 4094, 4094, 1970324836974592i64, 8899172237312i64, 1984687207612416i64, 0i64, '\0', '\0', 8589934592i64, '\0', 122, '\b', 9999, "" }, { 792, 792, 999, 61, 0, 0, '\x06', 7726646165504i64, 4094, 4094, 3298534883328i64, 4415226380288i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 121, '\b', 9999, "" }, { 793, 793, 999, 61, 0, 15, '\b', 34218004447232i64, 4094, 4094, 7696581394432i64, 26491358281728i64, 30064771072i64, 0i64, '\0', '\0', 8589934592i64, '\0', 121, '\b', 9999, "" }, { 794, 794, 999, 61, 0, 15, '\x06', 16557098926080i64, 4094, 4094, 7696581394432i64, 8830452760576i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 121, '\b', 9999, "" }, { 795, 795, 999, 61, 0, 15, '\x06', 16625818402816i64, 4094, 4094, 7696581394432i64, 8899172237312i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 121, '\b', 9999, "" }, { 796, 796, 999, 61, 0, 15, '\x06', 16557098926080i64, 4094, 4094, 7696581394432i64, 8830452760576i64, 0i64, 0i64, '\0', '\0', 8589934592i64, '\0', 121, '\b', 9999, "" }, { 815, 815, 999, 62, 0, 15, '\x06', 3328599654400i64, 4094, 4094, 3298534883328i64, 17179869184i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 122, '\b', 9999, "" }, { 816, 816, 999, 62, 0, 0, '\x06', 3328599654400i64, 4094, 4094, 3298534883328i64, 25769803776i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 123, '\b', 9999, "" }, { 817, 817, 999, 62, 0, 10, '\b', 6627134537728i64, 1, 1, 2199023255552i64, 4398046511104i64, 6622839570432i64, 0i64, '\0', '\0', 8589934592i64, '\0', 122, '\b', 9999, "" }, { 818, 818, 999, 62, 0, 10, '\b', 16557098926080i64, 1, 1, 7696581394432i64, 8830452760576i64, 16548508991488i64, 0i64, '\0', '\0', 8589934592i64, '\0', 122, '\b', 9999, "" }, { 819, 819, 999, 62, 0, 10, '\x06', 852147281330176i64, 1, 1, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 820, 820, 999, 62, 0, 10, '\x06', 1696559326560256i64, 1, 1, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 821, 821, 999, 62, 0, 10, '\x06', 3311419785216i64, 1, 1, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 822, 822, 999, 62, 0, 10, '\x06', 1112396529664i64, 1, 1, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 823, 823, 999, 62, 0, 10, '\x06', 12884901888i64, 1, 1, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 824, 824, 999, 62, 0, 10, '\x06', 1103806595072i64, 1, 1, 0i64, 0i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 103, '\b', 9999, "" }, { 797, 797, 999, 63, 0, 0, '\b', 16557098926080i64, 4094, 4094, 3298534883328i64, 13249974108160i64, 11029476016128i64, 0i64, '\0', '\0', 8589934592i64, '\0', 122, '\b', 9999, "" }, { 798, 798, 999, 63, 0, 0, '\b', 1112396529664i64, 4094, 4094, 1099511627776i64, 8589934592i64, 1112396529664i64, 0i64, '\0', '\0', 4294967296i64, '\0', 122, '\b', 9999, "" }, { 799, 799, 999, 63, 0, 0, '\x04', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 4294967296i64, 0i64, '\0', '\0', 4294967296i64, '\0', 119, '\b', 9999, "" }, { 800, 800, 999, 63, 0, 0, '\x04', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 4294967296i64, 0i64, '\0', '\0', 4294967296i64, '\0', 119, '\b', 9999, "" }, { 801, 801, 999, 63, 0, 0, '\x04', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 4294967296i64, 0i64, '\0', '\0', 4294967296i64, '\0', 119, '\b', 9999, "" }, { 802, 802, 999, 63, 0, 0, '\x04', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 4294967296i64, 0i64, '\0', '\0', 4294967296i64, '\0', 119, '\b', 9999, "" }, { 803, 803, 999, 63, 0, 0, '\x04', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 4294967296i64, 0i64, '\0', '\0', 4294967296i64, '\0', 119, '\b', 9999, "" }, { 804, 804, 999, 63, 0, 0, '\x04', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 4294967296i64, 0i64, '\0', '\0', 4294967296i64, '\0', 119, '\b', 9999, "" }, { 805, 805, 999, 63, 0, 0, '\x04', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 4294967296i64, 0i64, '\0', '\0', 4294967296i64, '\0', 119, '\b', 9999, "" }, { 806, 806, 999, 63, 0, 0, '\x04', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 4294967296i64, 0i64, '\0', '\0', 4294967296i64, '\0', 119, '\b', 9999, "" }, { 807, 807, 999, 63, 0, 0, '\x06', 1129576398848i64, 4094, 4094, 1099511627776i64, 25769803776i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 120, '\b', 9999, "" }, { 808, 808, 999, 63, 0, 0, '\x06', 1129576398848i64, 4094, 4094, 1099511627776i64, 25769803776i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 120, '\b', 9999, "" }, { 809, 809, 999, 63, 0, 0, '\x06', 1129576398848i64, 4094, 4094, 1099511627776i64, 25769803776i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 120, '\b', 9999, "" }, { 810, 810, 999, 63, 0, 0, '\x06', 1129576398848i64, 4094, 4094, 1099511627776i64, 25769803776i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 120, '\b', 9999, "" }, { 811, 811, 999, 63, 0, 0, '\x06', 1129576398848i64, 4094, 4094, 1099511627776i64, 25769803776i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 120, '\b', 9999, "" }, { 812, 812, 999, 63, 0, 0, '\x06', 1129576398848i64, 4094, 4094, 1099511627776i64, 25769803776i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 120, '\b', 9999, "" }, { 813, 813, 999, 63, 0, 0, '\x06', 1129576398848i64, 4094, 4094, 1099511627776i64, 25769803776i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 120, '\b', 9999, "" }, { 814, 814, 999, 63, 0, 0, '\x06', 1129576398848i64, 4094, 4094, 1099511627776i64, 25769803776i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 120, '\b', 9999, "" }, { 825, 825, 761, 46, 1, 0, '\x06', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 27, '\b', 9999, "" }, { 826, 826, 762, 46, 1, 0, '\x06', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 27, '\b', 9999, "" }, { 827, 827, 763, 46, 1, 0, '\x06', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 27, '\b', 9999, "" }, { 828, 828, 764, 46, 1, 0, '\x06', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 27, '\b', 9999, "" }, { 829, 829, 765, 46, 1, 0, '\x06', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 27, '\b', 9999, "" }, { 830, 830, 766, 46, 1, 0, '\x06', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 27, '\b', 9999, "" }, { 831, 831, 767, 46, 1, 0, '\x06', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 27, '\b', 9999, "" }, { 832, 832, 768, 46, 1, 0, '\x06', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 11, '\b', 9999, "" }, { 833, 833, 769, 46, 1, 0, '\x06', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 46, '\b', 9999, "" }, { 834, 834, 768, 46, 1, 0, '\x06', 12884901888i64, 4094, 4094, 0i64, 8589934592i64, 0i64, 0i64, '\0', '\0', 4294967296i64, '\0', 6, '\b', 9999, "" }, { 835, 835, 0, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\0', '\0', 4398046511104i64, '\0', 35, '\b', 0, "" }, { 836, 836, 1, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\0', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 837, 837, 2, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\0', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 838, 838, 3, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\0', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 839, 839, 4, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\0', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 840, 840, 5, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\0', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 841, 841, 6, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\0', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 842, 842, 7, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\0', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 843, 843, 8, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\0', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 844, 844, 9, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\0', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 845, 845, 10, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\0', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 846, 846, 11, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\0', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 847, 847, 20, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x01', '\0', 4398046511104i64, '\0', 35, '\b', 0, "" }, { 848, 848, 21, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x01', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 849, 849, 22, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x01', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 850, 850, 23, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x01', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 851, 851, 24, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x01', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 852, 852, 25, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x01', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 853, 853, 26, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x01', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 854, 854, 27, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x01', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 855, 855, 28, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x01', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 856, 856, 29, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x01', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 857, 857, 30, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x01', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 858, 858, 31, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x01', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 859, 859, 40, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x02', '\0', 4398046511104i64, '\0', 35, '\b', 0, "" }, { 860, 860, 41, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x02', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 861, 861, 42, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x02', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 862, 862, 43, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x02', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 863, 863, 44, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x02', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 864, 864, 45, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x02', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 865, 865, 46, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x02', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 866, 866, 47, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x02', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 867, 867, 48, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x02', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 868, 868, 49, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x02', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 869, 869, 50, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x02', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 870, 870, 51, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x02', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 871, 871, 60, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x03', '\0', 4398046511104i64, '\0', 35, '\b', 0, "" }, { 872, 872, 61, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x03', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 873, 873, 62, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x03', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 874, 874, 63, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x03', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 875, 875, 64, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x03', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 876, 876, 65, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x03', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 877, 877, 66, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x03', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 878, 878, 67, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x03', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 879, 879, 68, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x03', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 880, 880, 69, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x03', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 881, 881, 70, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x03', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 882, 882, 71, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x03', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 883, 883, 80, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x04', '\0', 4398046511104i64, '\0', 35, '\b', 0, "" }, { 884, 884, 81, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x04', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 885, 885, 82, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x04', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 886, 886, 83, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x04', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 887, 887, 84, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x04', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 888, 888, 85, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x04', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 889, 889, 86, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x04', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 890, 890, 87, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x04', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 891, 891, 88, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x04', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 892, 892, 89, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x04', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 893, 893, 90, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x04', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 894, 894, 91, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x04', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 895, 895, 100, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x05', '\0', 4398046511104i64, '\0', 35, '\b', 0, "" }, { 896, 896, 101, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x05', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 897, 897, 102, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x05', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 898, 898, 103, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x05', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 899, 899, 104, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x05', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 900, 900, 105, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x05', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 901, 901, 106, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x05', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 902, 902, 107, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x05', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 903, 903, 108, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x05', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 904, 904, 109, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x05', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 905, 905, 110, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x05', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 906, 906, 111, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x05', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 907, 907, 120, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x06', '\0', 4398046511104i64, '\0', 35, '\b', 0, "" }, { 908, 908, 121, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x06', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 909, 909, 122, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x06', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 910, 910, 123, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x06', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 911, 911, 124, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x06', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 912, 912, 125, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x06', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 913, 913, 126, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x06', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 914, 914, 127, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x06', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 915, 915, 128, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x06', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 916, 916, 129, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x06', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 917, 917, 130, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x06', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 918, 918, 131, 35, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x06', '\0', 4398046511104i64, '\0', 35, '\b', 9999, "" }, { 919, 919, 0, 37, 6, 0, '\x06', 8716849260689096704i64, 4094, 4094, 0i64, 8716849260689096704i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 920, 919, 0, 37, 6, 0, '\x06', 8716849260689096704i64, 4094, 4094, 0i64, 8716849260689096704i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 921, 919, 0, 37, 6, 0, '\x06', 8716849260689096704i64, 4094, 4094, 0i64, 8716849260689096704i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 922, 919, 0, 37, 6, 0, '\x06', 8716849260689096704i64, 4094, 4094, 0i64, 8716849260689096704i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 923, 919, 0, 37, 6, 0, '\x06', 8716849260689096704i64, 4094, 4094, 0i64, 8716849260689096704i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 924, 919, 0, 37, 6, 0, '\x06', 8716849260689096704i64, 4094, 4094, 0i64, 8716849260689096704i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 925, 919, 0, 37, 6, 0, '\x06', 8716849260689096704i64, 4094, 4094, 0i64, 8716849260689096704i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 926, 919, 0, 37, 6, 0, '\x06', 8716849260689096704i64, 4094, 4094, 0i64, 8716849260689096704i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 927, 919, 0, 37, 6, 0, '\x06', 8716849260689096704i64, 4094, 4094, 0i64, 8716849260689096704i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 928, 919, 0, 37, 6, 0, '\x06', 8716849260689096704i64, 4094, 4094, 0i64, 8716849260689096704i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 929, 919, 0, 37, 6, 0, '\x06', 8716849260689096704i64, 4094, 4094, 0i64, 8716849260689096704i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 930, 919, 0, 37, 6, 0, '\x06', 8716849260689096704i64, 4094, 4094, 0i64, 8716849260689096704i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 931, 931, 0, 36, 6, 0, '\x06', 34218004447232i64, 4094, 4094, 0i64, 4415226380288i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 932, 932, 0, 36, 6, 0, '\x06', 34218004447232i64, 4094, 4094, 0i64, 4415226380288i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 933, 933, 0, 36, 6, 0, '\x06', 34218004447232i64, 4094, 4094, 0i64, 4415226380288i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 934, 934, 0, 36, 6, 0, '\x06', 34218004447232i64, 4094, 4094, 0i64, 4415226380288i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 935, 935, 0, 36, 6, 0, '\x06', 34218004447232i64, 4094, 4094, 0i64, 4415226380288i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 936, 936, 0, 36, 6, 0, '\x06', 34218004447232i64, 4094, 4094, 0i64, 4415226380288i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 937, 937, 0, 36, 6, 0, '\x06', 34218004447232i64, 4094, 4094, 0i64, 4415226380288i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 938, 938, 0, 36, 6, 0, '\x06', 34218004447232i64, 4094, 4094, 0i64, 4415226380288i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 939, 939, 12, 38, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\0', '\0', 4398046511104i64, '\0', 49, '\b', 9999, "" }, { 940, 940, 13, 38, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\0', '\0', 4398046511104i64, '\0', 48, '\b', 9999, "" }, { 941, 941, 0, 38, 6, 0, '\x06', 8716849260689096704i64, 4094, 4094, 0i64, 8716849260689096704i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 942, 942, 0, 38, 6, 0, '\x06', 8716849260689096704i64, 4094, 4094, 0i64, 8716849260689096704i64, 0i64, 0i64, '\0', '\0', 0i64, '\0', 35, '\b', 9999, "" }, { 943, 943, 32, 38, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x01', '\0', 4398046511104i64, '\0', 49, '\b', 0, "" }, { 944, 944, 33, 38, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x01', '\0', 4398046511104i64, '\0', 48, '\b', 9999, "" }, { 945, 945, 52, 38, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x02', '\0', 4398046511104i64, '\0', 49, '\b', 0, "" }, { 946, 946, 53, 38, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x02', '\0', 4398046511104i64, '\0', 48, '\b', 9999, "" }, { 947, 947, 72, 38, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x03', '\0', 4398046511104i64, '\0', 49, '\b', 0, "" }, { 948, 948, 73, 38, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x03', '\0', 4398046511104i64, '\0', 48, '\b', 9999, "" }, { 949, 949, 92, 38, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x04', '\0', 4398046511104i64, '\0', 49, '\b', 0, "" }, { 950, 950, 93, 38, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x04', '\0', 4398046511104i64, '\0', 48, '\b', 9999, "" }, { 951, 951, 112, 38, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x05', '\0', 4398046511104i64, '\0', 49, '\b', 0, "" }, { 952, 952, 113, 38, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x05', '\0', 4398046511104i64, '\0', 48, '\b', 9999, "" }, { 953, 953, 132, 38, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x06', '\0', 4398046511104i64, '\0', 49, '\b', 0, "" }, { 954, 954, 133, 38, 5, 0, '\x06', 2242545224314257412i64, 4094, 4094, 2238600176593797124i64, 0i64, 0i64, 0i64, '\x06', '\0', 4398046511104i64, '\0', 48, '\b', 9999, "" }, { 955, 955, 0, 38, 6, 0, '\x06', 9223230470437732356i64, 4094, 4094, 2238570489779847172i64, 6980685112979488768i64, 0i64, 0i64, '\0', '\0', 4415226380288i64, '\0', 35, '\b', 9999, "" } }; _UNKNOWN unk_4685F0; // weak _UNKNOWN unk_4685F4; // weak LPCSTR unk_4685F8 = NULL; // idb int dword_468600[] = { 0 }; // weak int terrainTilesPreprocessed = 0; // weak int iLastScrollTime = 0; // weak _UNKNOWN unk_468AC4; // weak _UNKNOWN unk_468B30; // weak _UNKNOWN unk_468B44; // weak _UNKNOWN unk_468B5C; // weak _UNKNOWN unk_468B60; // weak _UNKNOWN unk_468B70; // weak _UNKNOWN unk_468B74; // weak _UNKNOWN unk_468B78; // weak _UNKNOWN unk_468B98; // weak _UNKNOWN unk_468B9C; // weak _UNKNOWN unk_468BA0; // weak _UNKNOWN unk_468BE8; // weak _UNKNOWN unk_468BEC; // weak unsigned __int8 gTileTerrainTypes[] = { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 3u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 5u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 7u, 8u, 8u, 8u, 8u, 8u, 8u, 8u, 8u, 8u, 8u, 8u, 8u, 8u, 8u, 8u, 8u, 8u }; unsigned __int8 unknownTerrainTileAttribute[] = { 16u, 16u, 1u, 1u, 2u, 2u, 2u, 2u, 17u, 17u, 3u, 3u, 4u, 4u, 4u, 4u, 0u, 0u, 0u, 0u, 18u, 18u, 18u, 18u, 20u, 20u, 21u, 21u, 19u, 19u, 1u, 1u, 1u, 1u, 2u, 2u, 2u, 2u, 3u, 3u, 3u, 3u, 4u, 4u, 4u, 4u, 5u, 5u, 5u, 5u, 6u, 6u, 6u, 6u, 7u, 7u, 7u, 7u, 8u, 8u, 8u, 8u, 10u, 11u, 12u, 13u, 14u, 15u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 1u, 1u, 1u, 1u, 2u, 2u, 2u, 2u, 3u, 3u, 3u, 3u, 4u, 4u, 4u, 4u, 5u, 5u, 5u, 5u, 6u, 6u, 6u, 6u, 7u, 7u, 7u, 7u, 8u, 8u, 8u, 8u, 10u, 11u, 12u, 13u, 14u, 15u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 1u, 1u, 1u, 1u, 2u, 2u, 2u, 2u, 3u, 3u, 3u, 3u, 4u, 4u, 4u, 4u, 5u, 5u, 5u, 5u, 6u, 6u, 6u, 6u, 7u, 7u, 7u, 7u, 8u, 8u, 8u, 8u, 10u, 11u, 12u, 13u, 14u, 15u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 1u, 1u, 1u, 1u, 2u, 2u, 2u, 2u, 3u, 3u, 3u, 3u, 4u, 4u, 4u, 4u, 5u, 5u, 5u, 5u, 6u, 6u, 6u, 6u, 7u, 7u, 7u, 7u, 8u, 8u, 8u, 8u, 10u, 11u, 12u, 13u, 14u, 15u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 1u, 1u, 1u, 1u, 2u, 2u, 2u, 2u, 3u, 3u, 3u, 3u, 4u, 4u, 4u, 4u, 5u, 5u, 5u, 5u, 6u, 6u, 6u, 6u, 7u, 7u, 7u, 7u, 8u, 8u, 8u, 8u, 10u, 11u, 12u, 13u, 14u, 15u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 5u, 5u, 5u, 5u, 6u, 6u, 6u, 6u, 7u, 7u, 7u, 7u, 8u, 8u, 8u, 8u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 1u, 1u, 1u, 1u, 2u, 2u, 2u, 2u, 3u, 3u, 3u, 3u, 4u, 4u, 4u, 4u, 5u, 5u, 5u, 5u, 6u, 6u, 6u, 6u, 7u, 7u, 7u, 7u, 8u, 8u, 8u, 8u, 10u, 11u, 12u, 13u, 14u, 15u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u, 213u, 213u, 213u, 213u, 213u, 213u, 213u, 213u, 213u, 213u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 200u, 201u, 203u, 204u, 206u, 207u, 208u, 209u, 210u, 211u, 213u, 213u, 213u, 213u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 199u, 200u, 201u, 203u, 204u, 205u, 207u, 207u, 209u, 210u, 211u, 212u, 198u, 198u, 198u, 198u, 198u, 201u, 203u, 205u, 207u, 208u, 210u, 210u, 211u, 212u, 212u, 213u, 213u, 213u, 213u, 213u, 213u, 213u, 198u, 198u, 198u, 199u, 201u, 203u, 204u, 206u, 207u, 208u, 209u, 210u, 211u, 212u, 213u, 213u, 213u, 213u, 213u, 213u, 213u, 213u, 213u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 200u, 201u, 203u, 204u, 206u, 207u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 200u, 201u, 203u, 204u, 206u, 207u, 208u, 209u, 210u, 212u, 213u, 213u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 199u, 201u, 203u, 204u, 206u, 207u, 208u, 209u, 211u, 212u, 213u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 199u, 201u, 202u, 204u, 206u, 207u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 199u, 202u, 205u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 198u, 200u, 203u, 204u, 207u, 208u, 209u, 201u, 203u, 207u, 209u, 206u, 209u, 208u, 198u, 198u, 207u, 213u, 198u, 201u, 206u, 208u, 213u, 213u, 213u, 213u, 213u, 213u, 213u, 213u, 213u, 213u, 36u, 36u, 36u, 36u, 36u, 36u, 36u, 36u, 36u, 36u, 10u, 11u, 12u, 13u, 14u, 15u, 16u, 17u, 18u, 19u, 20u, 21u, 22u, 23u, 24u, 25u, 26u, 27u, 28u, 29u, 30u, 31u, 32u, 33u, 34u, 35u, 36u, 10u, 11u, 12u, 12u, 13u, 14u, 15u, 16u, 17u, 18u, 18u, 19u, 20u, 20u, 21u, 22u, 22u, 23u, 24u, 25u, 26u, 26u, 27u, 28u, 29u, 31u, 14u, 16u, 17u, 18u, 20u, 21u, 22u, 24u, 25u, 26u, 28u, 28u, 29u, 30u, 31u, 32u, 32u, 33u, 33u, 33u, 34u, 34u, 16u, 17u, 18u, 20u, 21u, 22u, 23u, 24u, 25u, 26u, 27u, 28u, 30u, 31u, 32u, 32u, 33u, 34u, 35u, 35u, 36u, 36u, 36u, 11u, 11u, 11u, 11u, 11u, 12u, 12u, 12u, 13u, 13u, 14u, 15u, 16u, 17u, 18u, 19u, 20u, 21u, 21u, 22u, 23u, 24u, 25u, 12u, 13u, 14u, 16u, 17u, 18u, 19u, 20u, 21u, 22u, 24u, 24u, 25u, 26u, 27u, 28u, 29u, 31u, 32u, 32u, 33u, 11u, 12u, 12u, 13u, 14u, 14u, 16u, 16u, 17u, 18u, 18u, 19u, 20u, 21u, 22u, 23u, 24u, 25u, 26u, 27u, 29u, 30u, 32u, 10u, 11u, 11u, 12u, 12u, 12u, 13u, 13u, 14u, 14u, 15u, 15u, 16u, 16u, 17u, 18u, 19u, 20u, 21u, 22u, 23u, 24u, 26u, 10u, 10u, 11u, 11u, 11u, 12u, 12u, 12u, 12u, 14u, 16u, 17u, 18u, 20u, 22u, 24u, 17u, 10u, 12u, 15u, 19u, 10u, 10u, 15u, 17u, 18u, 20u, 21u, 22u, 23u, 25u, 26u, 27u, 27u, 24u, 21u, 22u, 26u, 26u, 27u, 36u, 12u, 18u, 25u, 19u, 21u, 24u, 26u, 36u, 36u, 36u, 36u, 36u, 36u, 36u, 36u, 36u, 36u }; int MAP_WIDTH = 72; // idb int MAP_HEIGHT = 72; // idb int gbClosingApp = 0; // weak int gbForegroundApp = 0; // weak int giMainVideoModeColorDepth = 8; // weak int giMainVideoModeWidth = 640; // weak unsigned __int32 glMilliCounter = 0u; // weak char byte_469B40[] = { 'M' }; // weak char *gTilesetFiles[80] = { &unk_46D9DC, &unk_46D9E0, &unk_46D9E4, &unk_46D9E8, &unk_46D9EC, &unk_46D9F0, &unk_46D9F4, &unk_46D9F8, &unk_46D9FC, &unk_46DA00, "objnhaun.icn", "objnarti.icn", "mons32.icn", "art32.icn", "flag32.icn", "ressmall.icn", "hourglas.icn", "route.icn", &unk_46DA74, "stonback.icn", "minimon.icn", "minihero.icn", "mtnsnow.icn", "mtnswmp.icn", "mtnlava.icn", "mtndsrt.icn", "mtndirt.icn", "mtnmult.icn", &unk_46DAEC, "extraovr.icn", "road.icn", "mtncrck.icn", "mtngras.icn", "trejngl.icn", "treevil.icn", "objntown.icn", "objntwba.icn", "objntwsh.icn", "objntwrd.icn", "objnxtra.icn", "objnwat2.icn", "objnmul2.icn", "tresnow.icn", "trefir.icn", "trefall.icn", "stream.icn", "objnrsrc.icn", "dummy.icn", "objngra2.icn", "tredeci.icn", "objnwatr.icn", "objngras.icn", "objnsnow.icn", "objnswmp.icn", "objnlava.icn", "objndsrt.icn", "objndirt.icn", "objncrck.icn", "objnlav3.icn", "objnmult.icn", "objnlav2.icn", "x_loc1.icn", "x_loc2.icn", "x_loc3.icn", NULL, NULL, NULL, NULL, NULL, (char *)0x1010000, (char *)0x1010101, (char *)0x1010100, (char *)0x1010101, (char *)0x10101, (char *)0x1010101, (char *)0x101, (char *)0x1010101, (char *)0x1010101, (char *)0x1010101, (char *)0x1010101 }; font *smalFont = NULL; int bigFont = 0; // weak int gbAllowTextEntryEscape = 1; // weak int giCycleType = 0; // weak int dword_46AABC = 1; // weak int giMenuCommand = 4294967295; // weak int gbSendMouseMoveMessages = 0; // weak int gbColorMice = 1; // weak int gTownEligibleBuildMask[] = { 1073266591, 469286815, 267960223, 1777909663, 905494431, 536395675 }; // idb unsigned __int8 *giMapSizes = (unsigned __int8 *)0x906C4824; // weak char *off_46ABF0 = "SURRENDR.ICN"; // idb char gcAnimPath[15] = "\\HEROES2\\ANIM\\"; // weak int gbPutzingWithMouseCtr = 0; // weak int dword_46ADA8 = 0; // weak int gbDontTryMIDI = 0; // weak int gbDontTryDigital = 0; // weak int dword_46ADD4 = 0; // weak int gJVCMode = 0; // weak int gbCurrArmyDrawn = 0; // weak int dword_46AE10 = 0; // weak int gbNoSound = 1; // weak int giScrollX = 0; // weak int giScrollY = 0; // weak int giCurExe = 1; // weak int giBrushLeft = 4294967295; // idb int giSelectedObjType = 0; // idb int dword_46AE48 = 4; // weak double gProportionTerrain[] = { 30.0 }; // weak double dbl_46AE58 = 30.0; // weak double dbl_46AE90[] = { 50.0 }; // weak double dbl_46AE98 = 50.0; // weak double dbl_46AEA0 = 50.0; // weak double dbl_46AEA8 = 50.0; // weak double dbl_46AEB0 = 50.0; // weak int dword_46AEB8 = 1; // weak int gbQueuedDebugMessage = 0; // weak int gbMinimized = 0; // weak int dword_46AEC8 = 0; // weak struct SMenuEnableStatus *gsMenuEnableStatus = NULL; // weak char byte_46AED4[] = { '\0' }; // weak char byte_46AED5[] = { '\0' }; // weak int dword_46B0BC = 0; // weak int dword_46B0C0 = 0; // weak int gbInSmackMgr = 0; // weak int dword_46B0CC = 0; // weak int dword_46B0D0[] = { 1 }; // weak int dword_46B0E0[] = { 32 }; // weak int gCursorPixelSize[] = { 14 }; // weak int tileSizes[] = { 32 }; // weak HMENU hmnuDflt = NULL; // idb char byte_46B120[] = { '\xFF' }; // weak char byte_46B220[] = { '\0' }; // weak char byte_46B320[] = { '\x03' }; // weak char somethingWithRoadTiles1[] = { '\x01', '\0', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\0', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\0', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\0', '\0', '\x01', '\0', '\x01', '\x01', '\x01', '\x01' }; // idb char somethingWithRoadTiles2[] = { '\x01', '\0', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\0', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\0', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\0', '\0', '\0', '\0', '\x01', '\0', '\x01', '\x01', '\x01', '\x01' }; // idb char *terrainDescs = &unk_46E144; // idb char *off_46B3A8 = "{Small Brush}\n\nDraws objects in 1 square increments."; // idb char *off_46B400 = &unk_46E950; // idb char *gpTerrainNames2[9] = { "Water", "Grass", "Snow", "Swamp", "Lava", "Desert", "Dirt", "Cracked", "Beach" }; // weak char *gpObjClassNames[] = { "Water Objs" }; char *off_46B4A8 = "Start from scratch with a blank map."; // idb char *gSetupMultiPlayerGameHelp = "Create a map that is 36 squares wide by 36 squares high. (For reference, all the maps in Heroes 1 were 72 x 72)"; // idb char *off_46B4D0 = "Create a new map, either from scratch or using the random map generator."; // idb char *off_46B4E0[11] = { "Never", "Every Day", "Every 2 Days", "Every 3 Days", "Every 4 Days", "Every 5 Days", "Every 6 Days", "Every 7 Days", "Every 14 Days", "Every 21 Days", "Every 28 Days" }; // weak char *gpTownNames[] = { "Blackridge" }; char *off_46B630 = "Start a new map."; // idb char *off_46B648 = "{OK}\n\nExit this menu."; // idb char *off_46B660[10] = { "None", "Capture a particular castle", "Defeat a particular hero", "Find a particular artifact", "One side defeats another", "Accumulate gold", "None", "Lose a particular castle", "Lose a particular hero", "Run out of time" }; // weak char *off_46B678[4] = { "None", "Lose a particular castle", "Lose a particular hero", "Run out of time" }; // weak struct SWinSetup gWinSetup[] = { { 16, 500, "Ultimate Artifact Detail\n\n\n\nEnter the allowable radius\n\nfrom this location" }, { 3, 100, "Animation" }, { 3, 101, "Cycling" }, { 3, 103, "Grid" }, { 3, 105, "Mouse Cursor" }, { 4, 100, "Event Detail" }, { 4, 101, "Message Text" }, { 4, 102, "Resources to give (or take if a negative qty.)" }, { 4, 103, "Wood" }, { 4, 104, "Mercury" }, { 4, 105, "Ore" }, { 4, 106, "Sulfur" }, { 4, 107, "Crystal" }, { 4, 108, "Gems" }, { 4, 109, "Gold" }, { 4, 400, "Day of first occurrence" }, { 4, 420, "Subsequent occurrences" }, { 4, 300, "Artifact to give" }, { 4, 305, "Allow computer to get event" }, { 4, 302, "Cancel event after first visit" }, { 4, 600, "Colors allowed to get event" }, { 5, 100, "Hero Detail" }, { 5, 200, "Troops" }, { 5, 201, "Standard" }, { 5, 202, "Custom" }, { 5, 210, "Type" }, { 5, 211, "Qty" }, { 5, 212, "Mon 1" }, { 5, 213, "Mon 2" }, { 5, 214, "Mon 3" }, { 5, 215, "Mon 4" }, { 5, 216, "Mon 5" }, { 5, 300, "Artifacts" }, { 5, 304, "Slot 1" }, { 5, 305, "Slot 2" }, { 5, 306, "Slot 3" }, { 5, 800, "Patrol" }, { 5, 400, "Experience" }, { 5, 500, "Secondary Skills" }, { 5, 501, "Standard" }, { 5, 502, "Custom" }, { 5, 510, "Skill 1" }, { 5, 511, "Skill 2" }, { 5, 512, "Skill 3" }, { 5, 513, "Skill 4" }, { 5, 514, "Skill 5" }, { 5, 515, "Skill 6" }, { 5, 516, "Skill 7" }, { 5, 517, "Skill 8" }, { 5, 600, "Name" }, { 5, 601, "Standard" }, { 5, 602, "Custom" }, { 5, 700, "Picture" }, { 8, 500, "Monster Detail\n\n\n\n0 for random qty\n\nor enter a positive number" }, { 10, 100, "Riddle Detail" }, { 10, 101, "Riddle Text" }, { 10, 102, "Reward for correct answer\n(negative quantities are OK, too)" }, { 10, 103, "Wood" }, { 10, 104, "Mercury" }, { 10, 105, "Ore" }, { 10, 106, "Sulfur" }, { 10, 107, "Crystal" }, { 10, 108, "Gems" }, { 10, 109, "Gold" }, { 10, 300, "Artifact to give" }, { 10, 400, "Answer(s)" }, { 11, 100, "Rumor Detail" }, { 13, 200, "Special Victory Condition" }, { 13, 220, "Comp. also wins via Special VC" }, { 13, 221, "Also allow normal victory" }, { 13, 250, "Victory Condition Extra" }, { 13, 300, "Special Loss Condition" }, { 13, 320, "Loss Condition Extra" }, { 13, 400, "Map Name" }, { 13, 401, "Map Filename:" }, { 13, 500, "Description" }, { 13, 600, "Difficulty" }, { 13, 610, "Easy" }, { 13, 611, "Normal" }, { 13, 612, "Tough" }, { 13, 613, "Expert" }, { 13, 100, "Players" }, { 13, 700, "Start with hero in each player's main castle" }, { 13, 800, "Rumors" }, { 13, 900, "Events" }, { 15, 100, "Town Detail" }, { 15, 200, "Troops" }, { 15, 201, "Standard" }, { 15, 202, "Custom" }, { 15, 210, "Type" }, { 15, 211, "Qty" }, { 15, 212, "Mon 1" }, { 15, 213, "Mon 2" }, { 15, 214, "Mon 3" }, { 15, 215, "Mon 4" }, { 15, 216, "Mon 5" }, { 15, 600, "Name" }, { 15, 601, "Standard" }, { 15, 602, "Custom" }, { 15, 300, "Captain" }, { 15, 310, "Allow castle" }, { 15, 400, "Buildings" }, { 15, 401, "Standard" }, { 15, 402, "Custom" }, { 15, 470, "Mage Guild" }, { 15, 510, "Dwelling 1" }, { 15, 512, "Dwelling 2" }, { 15, 513, "Upgd" }, { 15, 514, "Dwelling 3" }, { 15, 515, "Upgd" }, { 15, 516, "Dwelling 4" }, { 15, 517, "Upgd" }, { 15, 518, "Dwelling 5" }, { 15, 519, "Upgd" }, { 15, 520, "Dwelling 6" }, { 15, 521, "Upgd" } }; char *gArtifactNames[] = { "Ultimate Book of Knowledge" }; char *off_46BEB8 = "Knight"; // idb char *gArmyNames[133] = { "peasant", "archer", "ranger", "pikeman", "veteran pikeman", "swordsman", "master swordsman", "cavalry", "champion", "paladin", "crusader", "goblin", "orc", "orc chief", "wolf", "ogre", "ogre lord", "troll", "war troll", "cyclops", "sprite", "dwarf", "battle dwarf", "elf", "grand elf", "druid", "greater druid", "unicorn", "phoenix", "centaur", "gargoyle", "griffin", "minotaur", "minotaur king", "hydra", "green dragon", "red dragon", "black dragon", "halfling", "boar", "iron golem", "steel golem", "roc", "mage", "archmage", "giant", "titan", "skeleton", "zombie", "mutant zombie", "mummy", "royal mummy", "vampire", "vampire lord", "lich", "power lich", "bone dragon", "rogue", "nomad", "ghost", "genie", "medusa", "earth elemental", "air elemental", "fire elemental", "water elemental", "peasants", "archers", "rangers", "pikemen", "veteran pikemen", "swordsmen", "master swordsmen", "cavalries", "champions", "paladins", "crusaders", "goblins", "orcs", "orc chiefs", "wolves", "ogres", "ogre lords", "trolls", "war trolls", "cyclopes", "sprites", "dwarves", "battle dwarves", "elves", "grand elves", "druids", "greater druids", "unicorns", "phoenix", "centaurs", "gargoyles", "griffins", "minotaurs", "minotaur kings", "hydras", "green dragons", "red dragons", "black dragons", "halflings", "boars", "iron golems", "steel golems", "rocs", "magi", "archmagi", "giants", "titans", "skeletons", "zombies", "mutant zombies", "mummies", "royal mummies", "vampires", "vampire lords", "liches", "power liches", "bone dragons", "rogues", "nomads", "ghosts", "genies", "medusas", "earth elementals", "air elementals", "fire elementals", "water elementals", "Ocean" }; // weak char *gpTerrainNames[] = { "Ocean", "Grass", "Snow", "Swamp", "Lava", "Desert", "Dirt", "Wasteland", "Beach" }; char *off_46C238 = &unk_477AE8; // idb char **onOffText = &aOff; // weak char *off_46C6B8 = "blue"; // idb char **cDifficulty = &aEasy; // weak char *off_46CE80[65] = { "Fireball", "Fireblast", "Lightning Bolt", "Chain Lightning", "Teleport", "Cure", "Mass Cure", "Resurrect", "Resurrect True", "Haste", "Mass Haste", "Slow", "Mass Slow", "Blind ", "Bless", "Mass Bless", "Stoneskin", "Steelskin", "Curse", "Mass Curse", "Holy Word", "Holy Shout", "Anti-Magic", "Dispel Magic", "Mass Dispel", "Magic Arrow", "Berzerker", "Armageddon", "Elemental Storm", "Meteor Shower", "Paralyze", "Hypnotize", "Cold Ray", "Cold Ring", "Disrupting Ray", "Death Ripple", "Death Wave", "Dragon Slayer", "Blood Lust", "Animate Dead", "Mirror Image", "Shield", "Mass Shield", "Summon Earth Elemental", "Summon Air Elemental", "Summon Fire Elemental", "Summon Water Elemental", "Earthquake", "View Mines", "View Resources", "View Artifacts", "View Towns", "View Heroes", "View All", "Identify Hero", "Summon Boat", "Dimension Door", "Town Gate", "Town Portal", "Visions", "Haunt", "Set Earth Guardian", "Set Air Guardian", "Set Fire Guardian", "Set Water Guardian" }; // weak char *off_46CF88[3] = { "Basic", "Advanced", "Expert" }; // weak char *off_46CF98[25] = { "Pathfinding", "Archery", "Logistics", "Scouting", "Diplomacy", "Navigation", "Leadership", "Wisdom", "Mysticism", "Luck", "Ballistics", "Eagle Eye", "Necromancy", "Estates", "Mage Guild", "Thieves' Guild", "Tavern", "Shipyard", "Well", "Tent", "Castle", "Statue", "Left Turret", "Right Turret", "Marketplace" }; // weak char *gpGeneralBuildings[] = { "Mage Guild", "Thieves' Guild", "Tavern", "Shipyard", "Well", "Tent", "Castle", "Statue", "Left Turret", "Right Turret", "Marketplace", &unk_47F768, "Moat", &unk_47F774, "Dock with boat", "Captain's Quarters", &unk_47F79C, &unk_47F7A0, &unk_47F7A4 }; char *gWellExtraNames[] = { "Farm", "Garbage Heap", "Crystal Garden", "Waterfall", "Orchard", "Skull Pile", "1st Lvl Growth" }; char *gSpecialBuildingNames[7] = { "Fortifications", "Coliseum", "Rainbow", "Dungeon", "Library", "Storm", "Special" }; char *gFileRequestHelp = "{Small Maps}\n\nView only maps of size small (36 x 36)."; // idb char *gpBarrierColors[15] = { "aqua", "blue", "brown", "gold", "green", "orange", "purple", "red", "Alchemist's Tower", "Arena", "Hut of the Magi", "Eye of the Magi", "Stables", "Mermaid", "Sirens" }; // weak char *off_46D5E0 = "Alchemist's Tower"; // idb char *off_46D600 = "Barrow Mounds"; // idb int gbLowMemory = 0; // weak int gbFirstTimeThrough = 0; // weak int dword_46D620 = 0; // weak char funnyMapNameList[36][2][13] = { { { 'B', 'E', 'L', 'T', 'W', 'A', 'Y', '.', 'M', 'P', '2', '\0', '\0' }, "_BELTWAY.MP2" }, { "BROKENA.MP2", "_BROKENA.MP2" }, { "DEATHG.MP2", "_DEATHG.MP2" }, { "DRAGONR.MP2", "_DRAGONR.MP2" }, { "DRAGONW.MP2", "_DRAGONW.MP2" }, { "ENROTH.MP2", "_ENROTH.MP2" }, { "FORSAKEN.MP2", "_FORSAKE.MP2" }, { "GOODVS.MP2", "_GOODVS.MP2" }, { "HEROES.MP2", "_HEROES.MP2" }, { "HOTSPOT.MP2", "_HOTSPOT.MP2" }, { "LOSTCON.MP2", "_LOSTCON.MP2" }, { "LOSTRELI.MP2", "_LOSTREL.MP2" }, { "MIGHTV.MP2", "_MIGHTV.MP2" }, { "MINERALW.MP2", "_MINERAL.MP2" }, { "MOUNT.MP2", "_MOUNT.MP2" }, { "OVERLORD.MP2", "_OVERLOR.MP2" }, { "PANDAMON.MP2", "_PANDAMO.MP2" }, { "PYRAMID.MP2", "_PYRAMID.MP2" }, { "REVOLU.MP2", "_REVOLU.MP2" }, { "RIVER.MP2", "_RIVER.MP2" }, { "SCORCH.MP2", "_SCORCH.MP2" }, { "SEVENL.MP2", "_SEVENL.MP2" }, { "SHIPW.MP2", "_SHIPW.MP2" }, { "SLUGFEST.MP2", "_SLUGFES.MP2" }, { "SPELLC.MP2", "_SPELLC.MP2" }, { "TELEPORT.MP2", "_TELEPOR.MP2" }, { "TERRAF.MP2", "_TERRAF.MP2" }, { "THECLEAR.MP2", "_THECLEA.MP2" }, { "THEOTHER.MP2", "_THEOTHE.MP2" }, { "UNDEADA.MP2", "_UNDEADA.MP2" }, { "UNHOLY.MP2", "_UNHOLY.MP2" }, { "VIKINGS.MP2", "_VIKINGS.MP2" }, { "WARIORK.MP2", "_WARIORK.MP2" }, { "WASTL.MP2", "_WASTL.MP2" }, { "WHOAM.MP2", "_WHOAM.MP2" }, { "WINTERL.MP2", "_WINTERL.MP2" } }; int dword_46D9D0 = 0; // weak int dword_46D9D4 = 0; // weak int gbInMemError = 0; // weak void *Dst = NULL; // idb int gbIsPlacingRiver = 0; // idb int linePlacementRelated1 = 30; // weak int linePlacementRelated2 = 399; // weak int dword_4840A0 = 1; // weak int dword_4840A4 = 0; // weak int gBrushType = 1; // weak __int16 terrainButtonLocations[9][2] = { { 510, 243 }, { 539, 243 }, { 568, 243 }, { 510, 272 }, { 539, 272 }, { 568, 272 }, { 510, 301 }, { 539, 301 }, { 568, 301 } }; int giTerrainChoice = 0; // weak int dword_4840F8 = 0; // weak const char byte_48412C[4] = { '\0', '\0', '\0', '\0' }; heroWindow *dword_484160 = NULL; // idb char *gpSignTextBuf = NULL; // idb char byte_48437C[4] = { '\0', '\0', '\0', '\0' }; // idb int gbWinGAttached = 1; // weak int gbDDrawAttached = 0; // weak int giGraphicsType = 1; // weak __int32 Orientation = 1; // weak LOGPALETTE LogicalPalette = { 768, 256, { 0u, 0u, 0u, 0u } }; // idb char byte_4847CC[] = { '\0' }; // weak char byte_4847CD[] = { '\0' }; // weak char byte_4847CE[] = { '\0' }; // weak char byte_4847CF[] = { '\0' }; // weak void *lpInitWin = NULL; // weak int dword_4847FC = 0; // weak int gbWinGraphBusy = 0; // weak __int32 (__stdcall *lpDirectDrawCreate)(struct _GUID *, struct IDirectDraw **, struct IUnknown *) = NULL; // weak struct IDirectDraw *lpDD = NULL; // weak struct IDirectDrawSurface *lpDDSPrimary = NULL; // weak struct IDirectDrawSurface *lpDDSOne = NULL; // weak struct IDirectDrawClipper *lpClipper = NULL; // weak struct IDirectDrawPalette *lpDDPal = NULL; // weak int iBusyRetry = 0; // weak HDC hdcImage = NULL; // idb HGDIOBJ gbmOldMonoBitmap = NULL; // idb HPALETTE hpalApp = NULL; // idb HMODULE hDDrawLibrary = NULL; // idb int giMapSizeFilter = 4; // weak void *off_4850E4 = &unk_4850E8; // weak char byte_485104[4] = { '\0', '\0', '\0', '\0' }; // idb char byte_485108[4] = { '\0', '\0', '\0', '\0' }; // idb char byte_48511C[4] = { '\0', '\0', '\0', '\0' }; // idb char byte_485174[4] = { '\0', '\0', '\0', '\0' }; // idb char byte_4851D0[4] = { '\0', '\0', '\0', '\0' }; // idb int gbDoRandomMap = 0; // weak int dimensions = 72; // idb int dword_485244 = 0; // weak heroWindow *dword_485248 = NULL; // idb _UNKNOWN unk_485284; // weak _UNKNOWN unk_4852A8; // weak char byte_4852D4[4] = { '\0', '\0', '\0', '\0' }; // idb _UNKNOWN unk_4852FC; // weak _UNKNOWN unk_485320; // weak int gBuildingIdxtoId[11] = { 1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13 }; __int16 gObjButtonPositions[][2] = { { 495, 244 }, { 524, 244 }, { 553, 244 }, { 582, 244 }, { 495, 272 }, { 524, 272 }, { 553, 272 }, { 582, 272 }, { 495, 300 }, { 524, 300 }, { 553, 300 }, { 582, 300 }, { 495, 328 }, { 582, 328 } }; int giSelectedObj = 4294967295; // weak int giOverlaySelectMaybeNumUnseen = 0; // weak int dword_485570 = 0; // weak char byte_4855B0[4] = { '\0', '\0', '\0', '\0' }; // idb HWND hwndApp = NULL; // idb void *hmnuApp = NULL; // weak HANDLE gEventHandle = NULL; // idb int gbNoDialogMenusOn = 0; // weak char *dword_485988 = NULL; // idb char *curRiddleText = NULL; // idb char *gpCurEvtDataThingy = NULL; // idb int gbGeneratingRandomMap = 0; // weak int dword_485D00[] = { 1 }; // weak int dword_485D04[] = { 4294967294 }; // weak int dword_485D40[8][4] = { { 1, 3, 4294967295, 0 }, { 1, 0, 0, 0 }, { 0, 0, 1, 0 }, { 4294967295, 0, 4294967293, 1 }, { 4294967295, 4294967293, 4294967295, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 1, 0, 3, 4294967295 } }; char byte_485F00[4] = { '\0', '\0', '\0', '\0' }; // idb signed __int8 (*iMouseSize)[2] = (signed __int8 (*)[2])0x1516150F; // weak char byte_4860B9[] = { '\x15' }; // weak signed __int8 (*iHotSpot)[2] = (signed __int8 (*)[2])0x3020302; // weak char byte_486179[] = { '\x03' }; // weak int bInNewMouseUpdate = 0; // weak _UNKNOWN unk_486384; // weak int iCombatCycleFrame = 0; // weak int gbEveryOtherCycle = 1; // weak int iCycle1Count = 0; // weak int iCycle2Count = 0; // weak int iCycle3Count = 0; // weak int gpMemEntry = 0; // weak char byte_48684C[] = { 'A' }; // weak __int16 word_487140 = 10; // weak _UNKNOWN unk_48726C; // weak _UNKNOWN unk_487280; // weak _UNKNOWN unk_4872A0; // weak int bLastMouseOffscreen = 0; // weak int bLastOnscreenMouseColor = 0; // weak int bInCheckChangeCursor = 0; // weak char byte_4875C8[] = { '\0' }; // weak int dword_487950 = 0; // weak int iCalibrateLoop = 0; // weak char aNotify[8] = " notify"; // weak _UNKNOWN unk_487BE8; // weak char aNotify_0[8] = " notify"; // weak _UNKNOWN unk_487C08; // weak char aNotify_1[8] = " notify"; // weak _UNKNOWN unk_487C2C; // weak char aNotify_2[8] = " notify"; // weak _UNKNOWN unk_487C4C; // weak int iLeftRightSave = 0; // weak int dword_48830C = 0; // weak int dword_488310 = 0; // weak HMDIDRIVER hMDI = NULL; // idb int CurrentMidiFile = 4294967295; // weak _UNKNOWN aMs1_1; // weak _UNKNOWN aMs2_1; // weak LCID Locale = 0u; // idb UINT __lc_codepage = 0u; // idb const unsigned __int16 *_pctype = (const unsigned __int16 *)0x48880A; void *off_488804 = (void *)0x48880A; // weak unsigned __int16 _ctype[] = { 0u, 32u }; int __mb_cur_max = 1; // idb FILE _iob[] = ; _UNKNOWN unk_488DC8; // weak _UNKNOWN unk_488E28; // weak void *dword_489054 = NULL; // idb void *dword_489058 = NULL; // idb LCID word_48906C = 0u; // idb _UNKNOWN unk_489888; // weak _UNKNOWN unk_4898A0; // weak char byte_489DD0[] = { '\0' }; // weak char byte_489DDB = '\0'; // weak char byte_489DDC = '\0'; // weak char byte_489DE4 = '\0'; // weak char byte_489DF3 = '\0'; // weak char byte_489DF4 = '\0'; // weak char byte_489DF5 = '\0'; // weak char byte_489DF6 = '\0'; // weak int dword_489E10; // weak int bCPrefsChanged; // weak mapCellExtra *gpCurrentlyDrawingMapCellExtra; int dword_489E24; // weak int screenX; // idb SMapHeader gpMapHeader; int screenY; // idb int displayFlagsGroundIndex; int dword_489FE0; // weak mapCell *gpCurrentlyDrawingMapCell; char *gpErrorMessages[100]; int dword_48A178; // weak int dword_48A17C; // weak int dword_48A180; // weak int dword_48A184; // weak __int16 word_48A188[9][22][2][20]; __int16 word_48DF68[9][22][2]; heroWindow *CSPanel; // idb int giDebugLevel; // weak char bSaveMusicPosition[]; // weak char byte_48E2AB; // weak char byte_48E2AC; // weak char byte_48E2AD; // weak char byte_48E2AE; // weak char byte_48E2AF; // weak char byte_48E2B0; // weak char byte_48E2B1; // weak char byte_48E2B2; // weak char byte_48E2BC; // weak char byte_48E2CA; // weak unsigned __int16 gpEventDataIndices[]; _UNKNOWN unk_48E2E2; // weak mouseManager *gpMouseManager; const char *gText; LPCSTR EXPANSION_AGGREGATE_NAME; // idb char byte_48E658[352]; // idb LPCSTR DEFAULT_AGGREGATE_NAME; // idb fullMap gpMap; // idb fullMap gMap2; // idb int giBrushWidth; // idb int gbTextEntryEscaped; // weak heroWindowManager *gpWindowManager; editManager *gpEditManager; char mapFilename[16]; // idb char byte_48E808[200]; // idb int giBrushTop; // idb int gpResourceManager; // weak unsigned __int16 gpRumorIndices[]; _UNKNOWN unk_48E8DA; // weak heroWindow *dword_48E914; // idb char bMusicIsLooping[]; // weak char byte_48E91D; // weak char byte_48E91E; // weak char byte_48E91F; // weak char byte_48E920; // weak char byte_48E921; // weak char byte_48E922; // weak char byte_48E923; // weak char byte_48E924; // weak char byte_48E925; // weak char byte_48E926; // weak char byte_48E927; // weak char byte_48E928; // weak char byte_48E929; // weak char byte_48E92A; // weak char byte_48E92E; // weak char byte_48E930; // weak char byte_48E934; // weak char byte_48E942; // weak char byte_48E943; // weak heroWindow *gpCellEditDialog; // idb int giBrushHeight; // idb soundManager *gpSoundManager; char gLastFilename[352]; // idb int dword_48EAC0; // weak mapCell *gpExaminedCell; int gpBufferPalette; // weak int gPalette; // weak char byte_48EAD8[352]; // idb int giMaxExtentX; // weak int giMaxExtentY; // weak tag_message *gpInputManager; // idb int giCurOverlayIdx; // idb char gcCommandLine[2]; BYTE gConfig; // idb BYTE walkSpeed; // idb BYTE Data; // idb BYTE soundVolume; // idb BYTE shouldAutosave; // idb BYTE showRoute; // idb BYTE blackoutComputer; // idb BOOL bMenu; // idb BYTE X; // idb BYTE Y; // idb BYTE dword_48EE30; // idb BYTE dword_48EE34; // idb BYTE dword_48EE38; // idb BYTE dword_48EE3C; // idb int firstMapOffset; int currentMapOffset; BYTE showObjectBoxes; // idb BYTE editorScreenAnimation; // idb BYTE editorPaletteCycling; // idb BYTE showCombatGrid; // idb BYTE showCombatMouseHex; // idb BYTE combatShadeLevel; // idb BYTE combatArmyInfoLevel; // idb BYTE evilInterfaceUsage; // idb char byte_48EE9E; // weak char byte_48EE9F; // weak BYTE useCDMusic; // idb BYTE uniqueSystemID; // idb BYTE useOpera; // idb BYTE quickCombatLevel; // idb BYTE combatSpeed; // idb BYTE autoCombatUseSpells; // idb BYTE slowVideo; // idb char byte_48EF42[13]; // idb char byte_48EF4F[13]; // idb char byte_48EF5C[13]; // idb char byte_48EF69[13]; // idb char byte_48EF76[13]; // idb char byte_48EF83[13]; // idb BYTE networkDefaultName; // idb int giMinExtentX; // weak int giMinExtentY; // weak int gpExec; // weak int dword_48EFB8; // weak DWORD giCurWindowsStyleFlags; // idb int *glTimers; // weak int dword_48F128; // weak int dword_48F130; // weak int dword_48F138; // weak int dword_48F13C; // weak _DWORD dword_48F158; // idb _DWORD dword_48F170; // idb _DWORD dword_48F190; // idb int dword_48F1A4; // weak _DWORD dword_48F1A8; // idb int dword_48F1C8; // weak char gEditSignHeader[10]; struct tagRECT Rect; // idb int dword_48F1F0; // weak int dword_48F214; // weak _UNKNOWN screenImage; // weak int dword_48F264; // weak int dword_48F268; // weak __int16 word_48F26C; // weak __int16 word_48F26E; // weak int dword_48F270; // weak int dword_48F274; // weak int dword_48F280; // weak int dword_48F284; // weak char redBlueSwappedGlobalPaletteEntries[]; // weak char byte_48F289[]; // weak char byte_48F28A[]; // weak char byte_48F28B[]; // weak __int16 word_48F509[]; // weak char byte_48F5F4[]; // weak char byte_48F660[]; // weak char byte_48F661[]; // weak char byte_48F662[]; // weak char byte_48F663[]; // weak int dword_48F688; // weak int dword_48F690; // weak int dword_48F694; // weak int dword_48F698; // weak int dword_48F69C; // weak struct tagRECT rc; // idb __int32 lPaintStart; // weak int errorCode; // weak int dword_48F6B8; // weak float fGutterTravelLength; // weak float fGutterMinY; // weak int iMaxListSize; // weak TownExtra gEditTownExtra; // weak __int16 word_48F710[]; // weak __int16 gOverlayIntersect[]; // weak int giOverlaySelectNRows; // weak int iMainWinScreenHeight; // idb HINSTANCE hInstApp; // idb char bProcessMessage[]; // weak char byte_48FD81; // weak char byte_48FD82; // weak char byte_48FD83; // weak char byte_48FD85; // weak char byte_48FD8F; // weak char byte_48FD90; // weak char byte_48FD92; // weak char byte_48FD94; // weak char byte_48FD9C; // weak char byte_48FE80; // weak char byte_48FE81; // weak char byte_48FE91; // weak char byte_48FE93; // weak int dword_48FEC9[]; // weak int dword_48FF59[]; // weak char byte_48FF80; // weak char byte_48FF81; // weak char byte_48FF82; // weak char byte_48FF83; // weak char byte_48FF84; // weak char byte_48FF85; // weak char byte_48FF86; // weak char byte_48FF9C[]; // weak char byte_48FFA4[]; // weak __int16 word_48FFC3[]; // weak char byte_490067[]; // weak char byte_49008F; // weak char byte_490091; // weak char byte_4900AE[]; // weak char byte_490139; // weak void *hmnuCurrent; // weak int iMainWinScreenWidth; // idb HeroExtra gEditedHeroExtra; int gbModifyingJailedHero; // weak _UNKNOWN unk_4901D8; // weak SphinxExtra curSphinxExtra; EventExtra curEventMapExtra; int dword_4902B0; // weak int dword_490D38; // weak int dword_490D3C; // weak int dword_491948; // weak struct tagPOINT Point; // idb _UNKNOWN gCyclePal; // weak _UNKNOWN unk_4919AB; // weak __int16 word_4919B1; // weak _UNKNOWN unk_4919B4; // weak _UNKNOWN unk_4919B7; // weak _UNKNOWN unk_4919BD; // weak _UNKNOWN unk_4919C0; // weak _UNKNOWN unk_4919DB; // weak _UNKNOWN unk_4919DE; // weak _UNKNOWN unk_4919E7; // weak _UNKNOWN unk_4919EA; // weak __int16 word_4919ED; // weak _UNKNOWN unk_4919F0; // weak _UNKNOWN unk_4919F3; // weak _UNKNOWN unk_4919F9; // weak _UNKNOWN unk_4919FC; // weak _UNKNOWN unk_4919FF; // weak _UNKNOWN unk_491A05; // weak int dword_491A0C; // weak int dword_491A10; // weak int dword_491A14; // weak int bDataEntryTime; // weak int inBoxY; // weak int inBoxX; // weak void *DataEntryWin; // idb char *cDEDest; // idb int iDEMaxLen; // weak int dword_491A58; // weak int dword_491A5C; // weak int dword_491A60; // weak int dword_491A64; // weak int dword_491A68; // weak int dword_491A6C; // weak int dword_491A70; // weak int dword_491A74; // weak int dword_491A78; // weak int dword_491A7C; // weak int dword_491A88; // weak char strCommand[]; // idb char strReturnString[]; // idb __int16 iLastVolume[]; // weak int dword_491CE0; // weak int dword_491CE4; // weak int dword_491CE8; // weak int dword_491CEC; // weak int dword_491CF0; // weak int dword_491CF4; // weak int dword_491CF8; // weak int dword_491CFC; // weak int dword_491D00; // weak int dword_491EA0; // weak int dword_491EA4; // weak int dword_491EA8; // weak int dword_491EAC; // weak int dword_491EB0; // weak int dword_491EB4; // weak int dword_491EB8; // weak int dword_491EBC; // weak int dword_491EC0; // weak int dword_491EC4; // weak int pMIDIWrap[]; // weak HSEQUENCE hSequence; // idb _UNKNOWN lastPositionZ; // weak int __piob; // weak size_t _nstream; // idb int __pioinfo; // weak //----- (00401000) -------------------------------------------------------- editManager *__thiscall editManager::editManager(editManager *this) { baseManager::baseManager((baseManager *)this); this->vtable = &editManager::_vftable_; this->cellLeft = 0; this->cellTop = 0; this->cursorX = 0; this->cursorY = 0; this->editWindow = 0; giCurOverlayIdx = 1; this->zoomLevel = 0; fullMap::Reset(&gpMap, MAP_HEIGHT, MAP_WIDTH); fullMap::Reset(&gMap2, MAP_HEIGHT, MAP_WIDTH); EraseRegion(0, 0, MAP_WIDTH, MAP_HEIGHT); CopyMap(); this->field_27E = 0; this->probablyAnimationTick = 0; this->curToolBoxNo = -1; this->toolManager = 0; this->setOnEventUpdate = 0; this->field_26E = -1; this->field_26A = this->field_26E; this->nMapExtra = 1; this->field_272 = -1; return this; } // 449000: using guessed type int (__stdcall *editManager___vftable_)(int); //----- (00401146) -------------------------------------------------------- int __thiscall editManager::Open(editManager *this, int a2) { void *v4; // [sp+10h] [bp-18h]@13 void *v5; // [sp+14h] [bp-14h]@10 void *v6; // [sp+18h] [bp-10h]@7 void *v7; // [sp+1Ch] [bp-Ch]@4 signed int i; // [sp+24h] [bp-4h]@16 signed int j; // [sp+24h] [bp-4h]@19 FillInOverlayTiles(); editManager::InitializeMap(this, 0, dimensions, dimensions); resourceManager::GetBackdrop((void *)gpResourceManager, (int)"bordedit.icn", (int)gpWindowManager->screenBuffer, 1); if ( operator new(0x44u) ) this->editWindow = heroWindow::heroWindow(0, 0, "editwind.bin"); else this->editWindow = 0; v7 = (void *)operator new(0x2Du); if ( v7 ) this->horizontalScrollBar = iconWidget::iconWidget(v7, 32, 464, 416, 16, "escroll.icn", 0, 0, 10, 16, 1); else this->horizontalScrollBar = 0; v6 = (void *)operator new(0x2Du); if ( v6 ) this->verticalScrollBar = iconWidget::iconWidget(v6, 464, 32, 16, 416, "escroll.icn", 1, 0, 11, 16, 1); else this->verticalScrollBar = 0; v5 = (void *)operator new(0x2Du); if ( v5 ) this->horizontalScrollHandle = iconWidget::iconWidget(v5, 35, 468, 17, 8, "escroll.icn", 2, 0, 12, 16, 1); else this->horizontalScrollHandle = 0; v4 = (void *)operator new(0x2Du); if ( v4 ) this->verticalScrollHandle = iconWidget::iconWidget(v4, 468, 35, 8, 17, "escroll.icn", 3, 0, 13, 16, 1); else this->verticalScrollHandle = 0; heroWindow::AddWidget(this->editWindow, (widget *)this->horizontalScrollBar, -1); heroWindow::AddWidget(this->editWindow, (widget *)this->verticalScrollBar, -1); heroWindow::AddWidget(this->editWindow, (widget *)this->horizontalScrollHandle, -1); heroWindow::AddWidget(this->editWindow, (widget *)this->verticalScrollHandle, -1); heroWindowManager::AddWindow(this->editWindow, -1, 1); this->groundTileset = resourceManager::GetTileset("ground32.til"); this->clof32Tileset = resourceManager::GetTileset("clof32.til"); for ( i = 0; i < 64; ++i ) { this->overlayIcons[i][1] = 0; this->overlayIcons[i][0] = this->overlayIcons[i][1]; } for ( j = 0; j < 64; ++j ) { if ( strlen(gTilesetFiles[j]) > 1 ) this->overlayIcons[j][0] = resourceManager::GetIcon(gTilesetFiles[j]); } this->editButtonIcons = resourceManager::GetIcon("editbtns.icn"); this->radarIcons = resourceManager::GetIcon("radar.icn"); heroWindow::DrawWindow((int)&this->editWindow->idx, 0); sub_40365F(this, 1); editManager::UpdateCursorTo(this, this->cellLeft, this->cellTop); RedrawEditPane(); mouseManager::SetPointer("editor.mse", 0, -999); mouseManager::ShowColorPointer(gpMouseManager); this->type = 16384; this->idx = a2; this->ready = 1; strcpy(this->name, "editManager"); editManager::SelectToolbox(this, 0); return 0; } // 42F190: using guessed type _DWORD __stdcall mouseManager__SetPointer(_DWORD, _DWORD, _DWORD); // 42FDB0: using guessed type int __thiscall mouseManager__ShowColorPointer(_DWORD); // 432040: using guessed type _DWORD __stdcall heroWindowManager__AddWindow(_DWORD, _DWORD, _DWORD); // 48E8D4: using guessed type int gpResourceManager; //----- (0040153D) -------------------------------------------------------- editManager *__thiscall editManager::Close(editManager *this) { editManager *result; // eax@4 editManager *thisa; // [sp+Ch] [bp-10h]@1 signed int i; // [sp+18h] [bp-4h]@1 thisa = this; editManager::InitializeMap(this, 0, 72, 72); editManager::ResetErrorMessages(thisa); editManager::SelectToolbox(thisa, -1); heroWindowManager::RemoveWindow(thisa->editWindow); operator delete(thisa->editWindow); thisa->editWindow = 0; resourceManager::Dispose(thisa->groundTileset); resourceManager::Dispose(thisa->clof32Tileset); for ( i = 0; i < 64; ++i ) resourceManager::Dispose(thisa->overlayIcons[i][0]); resourceManager::Dispose(thisa->radarIcons); resourceManager::Dispose(thisa->editButtonIcons); mouseManager::SetPointer(-1); result = thisa; thisa->ready = 0; return result; } // 42F2D0: using guessed type _DWORD __stdcall mouseManager__SetPointer(_DWORD); // 4310B0: using guessed type _DWORD __stdcall resourceManager__Dispose(_DWORD); // 432100: using guessed type _DWORD __stdcall heroWindowManager__RemoveWindow(_DWORD); //----- (00401646) -------------------------------------------------------- signed int __thiscall editManager::GetOverlayID(int this, int x, int y) { unsigned __int16 v3; // ax@23 signed int result; // eax@41 mapCell *tile; // [sp+10h] [bp-20h]@1 signed int v6; // [sp+14h] [bp-1Ch]@1 signed int j; // [sp+18h] [bp-18h]@46 OVERLAY_CONSTANTS i; // [sp+1Ch] [bp-14h]@42 int v9; // [sp+20h] [bp-10h]@1 mapCellExtra *v10; // [sp+24h] [bp-Ch]@7 mapCellExtra *v11; // [sp+24h] [bp-Ch]@26 signed int objIndex; // [sp+28h] [bp-8h]@1 int v13; // [sp+2Ch] [bp-4h]@1 v6 = -1; v9 = -1; objIndex = -1; v13 = 0; tile = &gpMap.tiles[y * gpMap.width] + x; if ( *(&gpMap.tiles[x].overlayIndex + 20 * y * gpMap.width) == 0xFF ) { if ( tile->objectIndex != 0xFF ) { if ( !((tile->field_4_1_1_isShadow_1_13_extraInfo >> 1) & 1) && (((unsigned __int8)tile->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F) != TILESET_FLAG && (((unsigned __int8)tile->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F) != TILESET_EXTRA_OVERLAY ) { v9 = ((unsigned __int8)tile->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F; objIndex = tile->objectIndex; v3 = tile->field_4_1_1_isShadow_1_13_extraInfo; v13 = v3 & 1; } if ( tile->extraIdx && gpMap.cellExtras[tile->extraIdx].objectIndex != 255 ) v11 = &gpMap.cellExtras[tile->extraIdx]; else v11 = 0; while ( v11 ) { if ( (!(v11->field_4_1_1_1_isShadow_5 & 1) || v13) && !(((unsigned __int8)v11->field_4_1_1_1_isShadow_5 >> 1) & 1) && (((unsigned __int8)v11->_1_animatedObject_7_objTileset >> 1) & 0x7F) != 14 && (((unsigned __int8)v11->_1_animatedObject_7_objTileset >> 1) & 0x7F) != 29 ) { v9 = ((unsigned __int8)v11->_1_animatedObject_7_objTileset >> 1) & 0x7F; objIndex = v11->objectIndex; v13 = v11->field_4_1_1_1_isShadow_5 & 1; } if ( v11->nextIdx && gpMap.cellExtras[v11->nextIdx].objectIndex != 255 ) v11 = &gpMap.cellExtras[v11->nextIdx]; else v11 = 0; } } } else { if ( (((unsigned __int8)tile->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset >> 2) & 0x3F) != 14 && (((unsigned __int8)tile->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset >> 2) & 0x3F) != 29 ) { v9 = ((unsigned __int8)tile->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset >> 2) & 0x3F; objIndex = tile->overlayIndex; } if ( tile->extraIdx && gpMap.cellExtras[tile->extraIdx].overlayIndex != 255 ) v10 = &gpMap.cellExtras[tile->extraIdx]; else v10 = 0; while ( v10 ) { if ( (((unsigned __int8)v10->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset >> 2) & 0x3F) != 14 && (((unsigned __int8)v10->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset >> 2) & 0x3F) != 29 ) { v9 = ((unsigned __int8)v10->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset >> 2) & 0x3F; objIndex = v10->overlayIndex; } if ( v10->nextIdx && gpMap.cellExtras[v10->nextIdx].overlayIndex != 255 ) v10 = &gpMap.cellExtras[v10->nextIdx]; else v10 = 0; } } if ( v9 == -1 ) { result = -1; } else { for ( i = 0; i < NUM_OVERLAYS; ++i ) { if ( gOverlayDatabase[i].tileset == v9 ) { for ( j = 0; j < 48; ++j ) { if ( gOverlayDatabase[i].fullGridIconIndices[j] == objIndex ) { v6 = i; goto LABEL_52; } } } } LABEL_52: result = v6; } return result; } //----- (00401AD9) -------------------------------------------------------- void __thiscall sub_401AD9(void *ecx0) { int this; // [sp+Ch] [bp-10h]@1 int v2; // [sp+10h] [bp-Ch]@1 int y; // [sp+14h] [bp-8h]@1 int x; // [sp+18h] [bp-4h]@1 this = (int)ecx0; mouseManager::MouseCoords(&x, &y); editManager::ToCellIdx((editManager *)this, &x, &y); x += *(_DWORD *)(this + 3730); y += *(_DWORD *)(this + 3734); v2 = editManager::GetOverlayID(this, x, y); if ( v2 == -1 ) { ShowErrorMessage("Nothing to grab!"); } else { giSelectedObj = -1; editManager::SelectToolbox((editManager *)this, 1); if ( !sub_422F80(*(void **)(this + 646), v2) ) ShowErrorMessage("Couldn't grab object!"); } } // 42FB60: using guessed type _DWORD __stdcall mouseManager__MouseCoords(_DWORD, _DWORD); // 485568: using guessed type int giSelectedObj; //----- (00401B95) -------------------------------------------------------- signed int __thiscall editManager::Main(editManager *this, int a2) { signed int result; // eax@7 int v3; // eax@23 int v4; // eax@34 __int16 v5; // ax@98 int v6; // eax@192 int v7; // [sp+28h] [bp-74h]@12 int v8; // [sp+2Ch] [bp-70h]@8 int v10; // [sp+3Ch] [bp-60h]@46 signed int v11; // [sp+44h] [bp-58h]@102 signed int v12; // [sp+44h] [bp-58h]@135 mapCell *v13; // [sp+48h] [bp-54h]@97 signed int v14; // [sp+4Ch] [bp-50h]@100 signed int v15; // [sp+4Ch] [bp-50h]@133 int v16; // [sp+50h] [bp-4Ch]@100 int v17; // [sp+50h] [bp-4Ch]@133 int y; // [sp+54h] [bp-48h]@91 int x; // [sp+58h] [bp-44h]@91 int v20; // [sp+5Ch] [bp-40h]@91 int v21; // [sp+60h] [bp-3Ch]@91 int v22; // [sp+64h] [bp-38h]@42 int v23; // [sp+68h] [bp-34h]@37 fullMap *thisa; // [sp+6Ch] [bp-30h]@47 int Dst; // [sp+70h] [bp-2Ch]@7 int v26; // [sp+74h] [bp-28h]@7 int v27; // [sp+78h] [bp-24h]@7 int v28; // [sp+80h] [bp-1Ch]@7 int v29; // [sp+84h] [bp-18h]@7 int v30; // [sp+8Ch] [bp-10h]@1 int v31; // [sp+90h] [bp-Ch]@178 int v32; // [sp+94h] [bp-8h]@7 int v33; // [sp+98h] [bp-4h]@7 v30 = -1; if ( dword_46AABC && gbForegroundApp ) advManager::CheckScreenScroll(this); if ( *(_DWORD *)&editorScreenAnimation && (signed int)KBTickCount() > dword_48A178 + 200 && !*(_DWORD *)a2 ) { ++this->probablyAnimationTick; ++this->field_27E; this->field_27E %= 6; editManager::UpdateCursor(this); gpEditManager->cursorX = -1; memset(&Dst, 0, 0x1Cu); Dst = 4; mouseManager::MouseCoords(&v33, &v32); v26 = v33; v28 = v33; v27 = v32; v29 = v32; (*(void (__thiscall **)(int, int *))(*(_DWORD *)this->toolManager + 8))(this->toolManager, &Dst); RedrawEditPane(); return 0; } v8 = *(_DWORD *)a2; if ( !v8 ) { if ( gbDoRandomMap ) { editManager::GenerateRandomMap(this); gbDoRandomMap = 0; } return 0; } if ( v8 != 1 ) { if ( v8 != 512 ) return 0; v7 = *(_DWORD *)(a2 + 4); if ( v7 == 12 ) goto LABEL_204; if ( v7 == 13 ) { if ( !(*(_BYTE *)(a2 + 13) & 2) ) { switch ( *(_DWORD *)(a2 + 8) ) { case 0x65: editManager::SelectToolbox(this, 0); return 0; case 0x66: editManager::SelectToolbox(this, 1); return 0; case 0x67: editManager::SelectToolbox(this, 2); return 0; case 0x6A: editManager::SelectToolbox(this, 5); return 0; case 0x68: editManager::SelectToolbox(this, 3); return 0; case 0x69: editManager::SelectToolbox(this, 4); return 0; case 0x72: sub_41C370(); return 0; case 0x6F: sub_404A83(this); return 0; case 0x75: goto LABEL_23; case 0x76: goto LABEL_28; case 0x77: goto LABEL_34; case 0x73: v23 = sub_40E712(); if ( v23 == 102 ) goto LABEL_24; if ( v23 == 101 ) goto LABEL_42; if ( v23 == 106 ) goto LABEL_28; if ( v23 != 105 ) return 0; goto LABEL_35; case 0x71: LABEL_42: heroWindowManager::FadeScreen(gpWindowManager, 1, 8, gPalette); resourceManager::GetBackdrop( (void *)gpResourceManager, (int)"editor.icn", (int)gpWindowManager->screenBuffer, 1); heroWindowManager::UpdateScreen(gpWindowManager); heroWindowManager::FadeScreen(gpWindowManager, 0, 8, gPalette); v22 = sub_41BD90(); heroWindowManager::FadeScreen(gpWindowManager, 1, 8, gPalette); memset(gpWindowManager->screenBuffer->contents, 36, 0x4B000u); if ( v22 ) { editManager::InitializeMap(gpEditManager, 0, dimensions, dimensions); EraseRegion(0, 0, MAP_WIDTH, MAP_HEIGHT); } resourceManager::GetBackdrop( (void *)gpResourceManager, (int)"bordedit.icn", (int)gpWindowManager->screenBuffer, 1); heroWindow::DrawWindow((int)&this->editWindow->idx, 0); editManager::UpdateCursor(this); sub_40365F(this, 1); heroWindowManager::UpdateScreen(gpWindowManager); heroWindowManager::FadeScreen(gpWindowManager, 0, 8, gPalette); break; case 0x74: combatManager::CombatSystemOptions(); break; case 0x70: v10 = operator new(0x14u); if ( v10 ) thisa = (fullMap *)MapTiles_constructor(v10); else thisa = 0; fullMap::Reset(thisa, MAP_WIDTH, MAP_HEIGHT); fullMap::Clone(thisa, &gpMap); fullMap::Clone(&gpMap, &gpMap + 1); fullMap::Clone(&gMap2, thisa); if ( thisa ) { fullMap::_fullMap(thisa); operator delete(thisa); } editManager::UpdateCursorTo(this, this->cellLeft, this->cellTop); RedrawEditPane(); sub_40365F(this, 1); break; case 0xE: sub_404EC0((int)this, 0, -1); break; case 0xF: sub_404EC0((int)this, 0, 1); break; case 0x10: sub_404EC0((int)this, 1, 0); break; case 0x11: sub_404EC0((int)this, -1, 0); break; case 0x12: sub_404EC0((int)this, -1, -1); break; case 0x13: sub_404EC0((int)this, 1, -1); break; case 0x14: sub_404EC0((int)this, -1, 1); break; case 0x15: sub_404EC0((int)this, 1, 1); break; default: return 0; } } return 0; } if ( v7 == 14 ) { LABEL_204: if ( *(_BYTE *)(a2 + 13) & 2 ) { switch ( *(_DWORD *)(a2 + 8) ) { case 0x27: v30 = 1; break; case 0xA: v30 = 2; break; case 0xC: v30 = 2; break; case 0xB: v30 = 2; break; case 0xD: v30 = 2; break; case 0x65: v30 = 3; break; case 0x66: v30 = 4; break; case 0x67: v30 = 5; break; case 0x6A: v30 = 6; break; case 0x68: v30 = 7; break; case 0x69: v30 = 8; break; case 0xE: v30 = 9; break; case 0xF: v30 = 9; break; case 0x10: v30 = 9; break; case 0x11: v30 = 9; break; case 0x12: v30 = 9; break; case 0x13: v30 = 9; break; case 0x14: v30 = 9; break; case 0x15: v30 = 9; break; case 0x6F: v30 = 10; break; case 0x70: v30 = 11; break; case 0x72: v30 = 12; break; case 0x71: v30 = 13; break; case 0x73: v30 = 14; break; case 0x74: v30 = 15; break; default: break; } if ( *(_DWORD *)(a2 + 8) == 9 ) { x = *(_DWORD *)(a2 + 16); y = *(_DWORD *)(a2 + 20); editManager::ToCellIdx(this, &x, &y); x += gpEditManager->cellLeft; y += gpEditManager->cellTop; v21 = editManager::GetOverlayID((int)this, x, y); v20 = -1; if ( v21 != -1 ) v20 = gOverlayDatabase[v21].locationType; if ( v20 != -1 && v20 != 56 && v20 != 57 ) { v13 = &gpMap.tiles[y * gpMap.width] + x; switch ( v20 ) { case 119: case 120: v5 = v13->field_4_1_1_isShadow_1_13_extraInfo >> 3; sprintf((char *)&gText, (&off_46C238)[4 * (v13->objType & 0x7F)], gpBarrierColors[v5 & 7]); LOBYTE(gText) = toupper((char)gText); break; case 122: if ( v13->overlayIndex == 255 ) { v14 = v13->objectIndex; v16 = ((unsigned __int8)v13->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F; } else { v14 = v13->overlayIndex; v16 = ((unsigned __int8)v13->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset >> 2) & 0x3F; } v11 = -1; if ( v16 == 61 ) { if ( v14 >= 0 ) { if ( v14 >= 4 ) { if ( v14 < 72 ) v11 = 1; } else { v11 = 0; } } } else if ( v16 == 62 ) { if ( v14 >= 0 ) { if ( v14 >= 5 ) { if ( v14 >= 10 ) { if ( v14 >= 47 ) { if ( v14 < 111 ) v11 = 6; } else { v11 = 5; } } else { v11 = 123; } } else { v11 = 4; } } } else if ( v16 == 63 && v14 >= 0 ) { if ( v14 >= 32 ) { if ( v14 < 59 ) v11 = 3; } else { v11 = 2; } } if ( v11 == -1 ) sprintf((char *)&gText, "Unknown"); else sprintf((char *)&gText, (&off_46D5E0)[4 * v11]); break; case 121: if ( v13->overlayIndex == 255 ) { v15 = v13->objectIndex; v17 = ((unsigned __int8)v13->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F; } else { v15 = v13->overlayIndex; v17 = ((unsigned __int8)v13->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset >> 2) & 0x3F; } v12 = -1; if ( v17 == 61 && v15 >= 72 ) { if ( v15 >= 78 ) { if ( v15 >= 112 ) { if ( v15 >= 120 ) { if ( v15 >= 129 ) { if ( v15 < 137 ) v12 = 4; } else { v12 = 3; } } else { v12 = 2; } } else { v12 = 1; } } else { v12 = 0; } } if ( v12 == -1 ) sprintf((char *)&gText, "Unknown"); else sprintf((char *)&gText, (&off_46D600)[4 * v12]); break; case 103: if ( (((unsigned __int8)v13->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F) == 62 ) sprintf((char *)&gText, "Reefs"); break; default: sprintf((char *)&gText, (&off_46C238)[4 * v20]); break; } } else { sprintf( (char *)&gText, gpTerrainNames[gTileTerrainTypes[*(&gpMap.tiles[y * gpMap.width].groundIndex + 10 * x)]]); } NormalDialog((char *)&gText, 4, -1, -1, -1, 0, -1, 0, -1, 0); } else if ( v30 >= 0 ) { NormalDialog((&off_46B400)[4 * v30], 4, -1, -1, -1, 0, -1, 0, -1, 0); } } else { switch ( *(_DWORD *)(a2 + 8) ) { case 0x27: sub_405425(this); break; case 0xA: case 0xC: sub_4058D6(this); break; case 0xB: case 0xD: sub_405B25(this); break; default: return 0; } } } return 0; } switch ( *(_DWORD *)(a2 + 4) ) { case 0x10: LABEL_34: LOBYTE(v4) = YesNoDialog("Are you sure you want to quit?\n"); if ( v4 == 1 ) { LABEL_35: heroWindowManager::FadeScreen(gpWindowManager, 1, 6, gPalette); ShutDown(0); return 0; } return 1; case 0x1F: LABEL_28: if ( !editManager::Save(this, mapFilename) ) { sprintf((char *)&gText, "'%s' saved successfully", gpMapHeader.name); if ( IsExpansionMap() ) strcat( (char *)&gText, "\n\nThe map was saved as an expansion-set map. It is not compatible with the original Heroes of Might and Magic 2."); else strcat( (char *)&gText, "\n\nThe map was saved as an original Heroes 2 map. It is compatible with both the original and expansion games."); NormalDialog((char *)&gText, 1, -1, -1, -1, 0, -1, 0, -1, 0); this->setOnEventUpdate = 0; this->field_26E = -1; this->field_26A = this->field_26E; } return 0; case 0x26: LABEL_23: LOBYTE(v3) = YesNoDialog("Are you sure you want to load a new map? (Any unsaved changes to the current map will be lost.)"); if ( v3 ) { LABEL_24: if ( sub_407FBF((void *)4) ) { if ( !editManager::Load(this, mapFilename) ) { sub_40F8AC(); this->setOnEventUpdate = 0; this->field_26E = -1; this->field_26A = this->field_26E; } this->cellTop = 0; this->cellLeft = this->cellTop; heroWindow::DrawWindow((int)&this->editWindow->idx, 0); sub_40365F(this, 1); editManager::UpdateCursor(this); RedrawEditPane(); } } return 0; case 0x22: sub_401AD9(this); return 0; case 0x14: if ( *(_BYTE *)(a2 + 12) & 3 ) sub_406223(); else sub_40F0A7(this); return 0; case 0xB: v31 = 0; goto LABEL_188; case 2: v31 = 1; goto LABEL_188; case 3: v31 = 2; goto LABEL_188; case 4: v31 = 3; goto LABEL_188; case 5: v31 = 4; goto LABEL_188; case 6: v31 = 5; goto LABEL_188; case 7: v31 = 6; goto LABEL_188; case 8: v31 = 7; goto LABEL_188; case 9: v31 = 8; goto LABEL_188; case 0xA: v31 = 9; LABEL_188: if ( *(_BYTE *)(a2 + 12) & 0xC ) sub_40F1D8(this, v31); return 0; case 0xF: editManager::SelectToolbox(this, (this->curToolBoxNo + 1) % 6); return 0; case 1: LOBYTE(v6) = YesNoDialog("Are you sure you want to quit?\n"); if ( v6 == 1 ) { ShutDown(0); return 0; } result = 1; break; default: return 0; } return result; } // 4058D6: using guessed type int __thiscall sub_4058D6(_DWORD); // 405B25: using guessed type int __thiscall sub_405B25(_DWORD); // 4279C0: using guessed type int __thiscall MapTiles_constructor(_DWORD); // 42FB60: using guessed type _DWORD __stdcall mouseManager__MouseCoords(_DWORD, _DWORD); // 469B28: using guessed type int gbForegroundApp; // 46AABC: using guessed type int dword_46AABC; // 46D5C0: using guessed type char *gpBarrierColors[15]; // 485220: using guessed type int gbDoRandomMap; // 48A178: using guessed type int dword_48A178; // 48E8D4: using guessed type int gpResourceManager; // 48EAD4: using guessed type int gPalette; //----- (00402E2E) -------------------------------------------------------- void *__cdecl CopyMap() { return fullMap::Clone(&gMap2, &gpMap); } //----- (00402E54) -------------------------------------------------------- void __cdecl RedrawEditPane() { heroWindowManager::UpdateScreenRegion(16, 16, 448, 448); } //----- (00402E83) -------------------------------------------------------- void __thiscall editManager::HighlightCursorCoordinates(editManager *this) { editManager::HighlightCoordinates(this, this->cellLeft, this->cellTop, this->cursorX, this->cursorY); } //----- (00402EC9) -------------------------------------------------------- void __thiscall editManager::HighlightCoordinates(editManager *this, int left, int top, int x, int y) { int v6; // [sp+10h] [bp-1Ch]@17 signed int i; // [sp+14h] [bp-18h]@8 char a2; // [sp+18h] [bp-14h]@21 char v9; // [sp+20h] [bp-Ch]@24 int mouseY; // [sp+24h] [bp-8h]@1 int mouseX; // [sp+28h] [bp-4h]@1 int xa; // [sp+3Ch] [bp+10h]@1 int ya; // [sp+40h] [bp+14h]@1 mouseManager::MouseCoords(&mouseX, &mouseY); xa = x - this->cellLeft; ya = y - this->cellTop; if ( this->zoomLevel == 2 ) { xa &= 0xFFFEu; ya &= 0xFFFEu; } if ( mouseX < 16 || mouseX >= 464 || mouseY < 16 || mouseY > 464 ) { xa = -1; ya = -1; } for ( i = 0; i < 28; ++i ) { if ( this->zoomLevel || !(i & 1) ) { if ( this->zoomLevel ) icon::DrawToBuffer(16 * i + 16, 0, 32, 0); else icon::DrawToBuffer(16 * i + 16, 0, 34, 0); if ( this->zoomLevel ) { if ( this->zoomLevel == 1 ) v6 = i; else v6 = 2 * i; } else { v6 = i / 2; } sprintf(&a2, "%02d", v6 + left); if ( xa == v6 ) sprintf(&a2, "%02d", v6 + left); else sprintf(&a2, "{%02d}", v6 + left); v9 = 1; font::DrawString(smalFont, &a2, 16 * i + (this->zoomLevel < 1u ? 8 : 0) + 19, 5, 1); if ( this->zoomLevel ) icon::DrawToBuffer(0, 16 * i + 16, 32, 0); else icon::DrawToBuffer(0, 16 * i + 16, 33, 0); if ( ya == v6 ) sprintf(&a2, "%02d", v6 + top); else sprintf(&a2, "{%02d}", v6 + top); v9 = 1; font::DrawString(smalFont, &a2, 3, 16 * i + (this->zoomLevel < 1u ? 8 : 0) + 21, 1); } } heroWindowManager::UpdateScreenRegion(16, 0, 448, 16); heroWindowManager::UpdateScreenRegion(0, 16, 16, 448); } // 42FB60: using guessed type _DWORD __stdcall mouseManager__MouseCoords(_DWORD, _DWORD); // 433510: using guessed type _DWORD __stdcall icon__DrawToBuffer(_DWORD, _DWORD, _DWORD, _DWORD); //----- (004031B6) -------------------------------------------------------- void __thiscall editManager::ToCellIdx(editManager *this, int *x, int *y) { *x -= 16; *y -= 16; *x /= tileSizes[this->zoomLevel]; if ( *x < 0 ) *x = 0; if ( gCursorPixelSize[this->zoomLevel] - 1 < *x ) *x = gCursorPixelSize[this->zoomLevel] - 1; *y /= tileSizes[this->zoomLevel]; if ( *y < 0 ) *y = 0; if ( gCursorPixelSize[this->zoomLevel] - 1 < *y ) *y = gCursorPixelSize[this->zoomLevel] - 1; } // 46B0F0: using guessed type int gCursorPixelSize[]; // 46B100: using guessed type int tileSizes[]; //----- (0040329E) -------------------------------------------------------- void __thiscall editManager::UpdateCursor(editManager *this) { editManager::UpdateCursorTo(this, this->cellLeft, this->cellTop); } //----- (004032D0) -------------------------------------------------------- void __thiscall editManager::UpdateCursorTo(editManager *this, int left, int top) { int pixelSize; // [sp+10h] [bp-18h]@3 int cursorSize; // [sp+14h] [bp-14h]@1 int i; // [sp+18h] [bp-10h]@3 int ia; // [sp+18h] [bp-10h]@9 int tileSize; // [sp+1Ch] [bp-Ch]@24 int j; // [sp+20h] [bp-8h]@5 int ja; // [sp+20h] [bp-8h]@11 int jb; // [sp+20h] [bp-8h]@15 int jc; // [sp+20h] [bp-8h]@19 signed int v13; // [sp+24h] [bp-4h]@25 cursorSize = this->zoomLevel; if ( dword_46B0C0 ) this->zoomLevel = 0; pixelSize = gCursorPixelSize[this->zoomLevel]; for ( i = 0; pixelSize > i; ++i ) { for ( j = 0; pixelSize > j; ++j ) editManager__RenderCell(this, left + j, top + i, j, i, 1); } for ( ia = 0; pixelSize > ia; ++ia ) { for ( ja = 0; pixelSize > ja; ++ja ) editManager__RenderCell(this, left + ja, top + ia, ja, ia, 2); if ( ia > 0 ) { for ( jb = 0; pixelSize > jb; ++jb ) editManager__RenderCell(this, left + jb, top + ia - 1, jb, ia - 1, 4); } } for ( jc = 0; pixelSize > jc; ++jc ) editManager__RenderCell(this, left + jc, top + pixelSize - 1, jc, pixelSize - 1, 4); dword_48A178 = KBTickCount(); if ( !*(_DWORD *)&editorScreenAnimation ) { ++this->probablyAnimationTick; ++this->field_27E; this->field_27E %= 6; } tileSize = tileSizes[this->zoomLevel]; if ( this->zoomLevel ) v13 = 1; else v13 = 2; if ( giBrushLeft >= 0 ) { dword_489E24 = 181; sub_4336F0( (int)gpWindowManager->screenBuffer, tileSize * (giBrushLeft - left) + 16, tileSize * (giBrushTop - top) + 16, v13, tileSize * giBrushHeight - 1, -75, 16, 16, 448, 448); sub_4336F0( (int)gpWindowManager->screenBuffer, tileSize * (giBrushLeft - left) + 16, tileSize * (giBrushTop - top) + 16, tileSize * giBrushWidth - 1, v13, dword_489E24, 16, 16, 448, 448); sub_4336F0( (int)gpWindowManager->screenBuffer, tileSize * (giBrushWidth + giBrushLeft - left) + 16 - v13, tileSize * (giBrushTop - top) + 16, v13, tileSize * giBrushHeight - 1, dword_489E24, 16, 16, 448, 448); sub_4336F0( (int)gpWindowManager->screenBuffer, tileSize * (giBrushLeft - left) + 16, tileSize * (giBrushHeight + giBrushTop - top) + 16 - v13, tileSize * giBrushWidth - 1, v13, dword_489E24, 16, 16, 448, 448); } this->zoomLevel = cursorSize; } // 46B0C0: using guessed type int dword_46B0C0; // 46B0F0: using guessed type int gCursorPixelSize[]; // 46B100: using guessed type int tileSizes[]; // 489E24: using guessed type int dword_489E24; // 48A178: using guessed type int dword_48A178; //----- (0040365F) -------------------------------------------------------- void __thiscall sub_40365F(editManager *this, int a2) { int v2; // [sp+14h] [bp-60h]@83 int v3; // [sp+18h] [bp-5Ch]@65 int v4; // [sp+1Ch] [bp-58h]@57 int v5; // [sp+20h] [bp-54h]@51 mapCell *v7; // [sp+3Ch] [bp-38h]@17 int v8; // [sp+40h] [bp-34h]@17 int i; // [sp+48h] [bp-2Ch]@1 signed int v10; // [sp+50h] [bp-24h]@50 int v11; // [sp+54h] [bp-20h]@56 int j; // [sp+58h] [bp-1Ch]@14 int v13; // [sp+5Ch] [bp-18h]@56 char *Dst; // [sp+60h] [bp-14h]@3 char v15; // [sp+64h] [bp-10h]@23 signed int v16; // [sp+68h] [bp-Ch]@1 signed int v17; // [sp+6Ch] [bp-8h]@1 char *v18; // [sp+70h] [bp-4h]@1 v18 = gpWindowManager->screenBuffer->contents + 10720; v17 = 0; v16 = 0; for ( i = 0; MAP_HEIGHT > i; ++i ) { Dst = v18; switch ( MAP_HEIGHT ) { case 36: v18 += 2560; break; case 72: v18 += 1280; break; case 108: ++v17; if ( v17 > 2 ) v17 = 0; if ( v17 ) v18 += 640; else v18 += 1280; break; case 144: v18 += 640; break; default: break; } for ( j = 0; MAP_WIDTH > j; ++j ) { v7 = &gpMap.tiles[i * gpMap.width] + j; v8 = -1; if ( *(&gpMap.tiles[j].objectIndex + 20 * i * gpMap.width) == 255 ) { if ( v7->overlayIndex != 255 ) v8 = ((unsigned __int8)v7->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset >> 2) & 0x3F; } else { v8 = ((unsigned __int8)v7->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F; } switch ( v8 ) { case 22: case 23: case 24: case 25: case 26: case 27: case 31: case 32: case 33: case 34: case 42: case 43: case 44: case 49: switch ( v7->objType ) { case 1: case 0x17: case 0x1D: case 0x81: case 0x97: case 0x9D: v15 = 17; break; default: v15 = byte_469B40[gTileTerrainTypes[*(&gpMap.tiles[i * gpMap.width].groundIndex + 10 * j)]] + 3; break; } break; case 35: case 36: v15 = 17; break; default: v15 = byte_469B40[gTileTerrainTypes[*(&gpMap.tiles[i * gpMap.width].groundIndex + 10 * j)]]; break; } if ( dword_46B0C0 ) v15 = 0; switch ( MAP_HEIGHT ) { case 36: memset(Dst, (unsigned __int8)v15, 4u); memset(Dst + 640, (unsigned __int8)v15, 4u); memset(Dst + 1280, (unsigned __int8)v15, 4u); memset(Dst + 1920, (unsigned __int8)v15, 4u); Dst += 4; break; case 72: memset(Dst, (unsigned __int8)v15, 2u); memset(Dst + 640, (unsigned __int8)v15, 2u); Dst += 2; break; case 108: if ( v16 ) { if ( v17 ) { *Dst++ = v15; } else { *Dst = v15; (Dst++)[640] = v15; } } else if ( v17 ) { *Dst = v15; Dst[1] = v15; Dst += 2; } else { *Dst = v15; Dst[1] = v15; Dst[640] = v15; Dst[641] = v15; Dst += 2; } ++v16; if ( v16 > 2 ) v16 = 0; break; case 144: *Dst++ = v15; break; default: continue; } } } v10 = -1; switch ( MAP_HEIGHT ) { case 36: v5 = this->zoomLevel; if ( v5 ) { if ( v5 == 1 ) v10 = 7; } else { v10 = 5; } v11 = 4 * this->cellLeft; v13 = 4 * this->cellTop; break; case 72: v4 = this->zoomLevel; if ( v4 ) { if ( v4 == 1 ) { v10 = 5; } else if ( v4 == 2 ) { v10 = 7; } } else { v10 = 3; } v11 = 2 * this->cellLeft; v13 = 2 * this->cellTop; break; case 108: v3 = this->zoomLevel; if ( v3 ) { if ( v3 == 1 ) { v10 = 4; } else if ( v3 == 2 ) { v10 = 6; } } else { v10 = 2; } v11 = (signed __int64)((double)this->cellLeft * 1.3333); v13 = (signed __int64)((double)this->cellTop * 1.3333); break; default: v2 = this->zoomLevel; if ( v2 ) { if ( v2 == 1 ) { v10 = 3; } else if ( v2 == 2 ) { v10 = 5; } } else { v10 = 1; } v11 = this->cellLeft; v13 = this->cellTop; break; } icon::FillToBuffer(this->radarIcons, v11 + 480, v13 + 16, v10, 181, 0, 0); sub_404FDC((int)this, 1); editManager::HighlightCursorCoordinates(this); } // 46B0C0: using guessed type int dword_46B0C0; //----- (00403EFF) -------------------------------------------------------- void __thiscall editManager__RenderCell(editManager *this, int mapX, int mapY, int editWindowX, int editWindowY, char renderPass) { gpCurrentlyDrawingMapCell = &gpMap.tiles[mapY * gpMap.width] + mapX; screenX = editWindowX * tileSizes[this->zoomLevel] + 16; screenY = editWindowY * tileSizes[this->zoomLevel] + 16; if ( dword_46B0C0 ) { if ( renderPass & 4 ) RenderTile( this->clof32Tileset, ((_BYTE)mapX + (_BYTE)mapY) & 3, (int)gpWindowManager->screenBuffer, screenX, screenY, dword_46B0D0[this->zoomLevel]); } else { if ( renderPass & 1 ) { displayFlagsGroundIndex = gpCurrentlyDrawingMapCell->displayFlags; displayFlagsGroundIndex <<= 14; displayFlagsGroundIndex |= gpCurrentlyDrawingMapCell->groundIndex; RenderTile( this->groundTileset, displayFlagsGroundIndex, (int)gpWindowManager->screenBuffer, screenX, screenY, dword_46B0D0[this->zoomLevel]); } if ( renderPass & 2 ) { for ( dword_489E10 = 2; dword_489E10 >= 0; --dword_489E10 ) { if ( gpCurrentlyDrawingMapCell->objectIndex != 255 && (dword_489E10 == 2 && gpCurrentlyDrawingMapCell->field_4_1_1_isShadow_1_13_extraInfo & 1 || dword_489E10 == 1 && (gpCurrentlyDrawingMapCell->field_4_1_1_isShadow_1_13_extraInfo >> 1) & 1 || !dword_489E10 && !(gpCurrentlyDrawingMapCell->field_4_1_1_isShadow_1_13_extraInfo & 1) && !((gpCurrentlyDrawingMapCell->field_4_1_1_isShadow_1_13_extraInfo >> 1) & 1)) ) { if ( (((unsigned __int8)gpCurrentlyDrawingMapCell->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F) == TILESET_MONSTER ) { IconToBitmapScale( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCell->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F][0], (int)gpWindowManager->screenBuffer, screenX, screenY - 5 / dword_46B0D0[this->zoomLevel], gpCurrentlyDrawingMapCell->objectIndex, 1, 0, 0, 480, 480, dword_46B0E0[this->zoomLevel]); } else if ( (((unsigned __int8)gpCurrentlyDrawingMapCell->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F) == TILESET_HERO ) { sub_436460( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCell->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F][0], gpWindowManager->screenBuffer, screenX, screenY - 14 / dword_46B0D0[this->zoomLevel], gpCurrentlyDrawingMapCell->objectIndex, 1, 0, 0, 0x1E0u, 480, dword_46B0E0[this->zoomLevel]); } else { IconToBitmapScale( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCell->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F][0], (int)gpWindowManager->screenBuffer, screenX, screenY, gpCurrentlyDrawingMapCell->objectIndex, 0, 0, 0, 640, 480, dword_46B0E0[this->zoomLevel]); } if ( gpCurrentlyDrawingMapCell->bitfield_1_hasObject_1_isRoad_6_objTileset & 1 ) { dword_48A17C = GetIconEntry( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCell->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F][0], gpCurrentlyDrawingMapCell->objectIndex)->someSortOfLength & 0x1F; if ( gpCurrentlyDrawingMapCell->objType == 223 ) --dword_48A17C; IconToBitmapScale( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCell->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F][0], (int)gpWindowManager->screenBuffer, screenX, screenY, gpCurrentlyDrawingMapCell->objectIndex + this->probablyAnimationTick % dword_48A17C + 1, 0, 0, 0, 640, 480, dword_46B0E0[this->zoomLevel]); } } if ( gpCurrentlyDrawingMapCell->extraIdx && gpMap.cellExtras[gpCurrentlyDrawingMapCell->extraIdx].objectIndex != 255 ) gpCurrentlyDrawingMapCellExtra = &gpMap.cellExtras[gpCurrentlyDrawingMapCell->extraIdx]; else gpCurrentlyDrawingMapCellExtra = 0; while ( gpCurrentlyDrawingMapCellExtra ) { if ( dword_489E10 == 2 && gpCurrentlyDrawingMapCellExtra->field_4_1_1_1_isShadow_5 & 1 || dword_489E10 == 1 && ((unsigned __int8)gpCurrentlyDrawingMapCellExtra->field_4_1_1_1_isShadow_5 >> 1) & 1 || !dword_489E10 && !(gpCurrentlyDrawingMapCellExtra->field_4_1_1_1_isShadow_5 & 1) && !(((unsigned __int8)gpCurrentlyDrawingMapCellExtra->field_4_1_1_1_isShadow_5 >> 1) & 1) ) { if ( (((unsigned __int8)gpCurrentlyDrawingMapCellExtra->_1_animatedObject_7_objTileset >> 1) & 0x7F) == TILESET_MONSTER ) { IconToBitmapScale( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCellExtra->_1_animatedObject_7_objTileset >> 1) & 0x7F][0], (int)gpWindowManager->screenBuffer, screenX, screenY - 5 / dword_46B0D0[this->zoomLevel], gpCurrentlyDrawingMapCellExtra->objectIndex, 1, 0, 0, 480, 480, dword_46B0E0[this->zoomLevel]); } else if ( (((unsigned __int8)gpCurrentlyDrawingMapCellExtra->_1_animatedObject_7_objTileset >> 1) & 0x7F) == TILESET_HERO ) { sub_436460( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCellExtra->_1_animatedObject_7_objTileset >> 1) & 0x7F][0], gpWindowManager->screenBuffer, screenX, screenY - 14 / dword_46B0D0[this->zoomLevel], gpCurrentlyDrawingMapCellExtra->objectIndex, 1, 0, 0, 480u, 480, dword_46B0E0[this->zoomLevel]); } else { IconToBitmapScale( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCellExtra->_1_animatedObject_7_objTileset >> 1) & 0x7F][0], (int)gpWindowManager->screenBuffer, screenX, screenY, gpCurrentlyDrawingMapCellExtra->objectIndex, 0, 0, 0, 640, 480, dword_46B0E0[this->zoomLevel]); } if ( gpCurrentlyDrawingMapCellExtra->_1_animatedObject_7_objTileset & 1 ) { dword_48A17C = GetIconEntry( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCellExtra->_1_animatedObject_7_objTileset >> 1) & 0x7F][0], gpCurrentlyDrawingMapCellExtra->objectIndex)->someSortOfLength & 0x1F; IconToBitmapScale( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCellExtra->_1_animatedObject_7_objTileset >> 1) & 0x7F][0], (int)gpWindowManager->screenBuffer, screenX, screenY, gpCurrentlyDrawingMapCellExtra->objectIndex + this->probablyAnimationTick % dword_48A17C + 1, 0, 0, 0, 640, 480, dword_46B0E0[this->zoomLevel]); } } if ( gpCurrentlyDrawingMapCellExtra->nextIdx && gpMap.cellExtras[gpCurrentlyDrawingMapCellExtra->nextIdx].objectIndex != 255 ) gpCurrentlyDrawingMapCellExtra = &gpMap.cellExtras[gpCurrentlyDrawingMapCellExtra->nextIdx]; else gpCurrentlyDrawingMapCellExtra = 0; } } } if ( renderPass & 4 ) { if ( gpCurrentlyDrawingMapCell->overlayIndex != 255 ) { IconToBitmapScale( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset >> 2) & 0x3F][0], (int)gpWindowManager->screenBuffer, screenX, screenY, gpCurrentlyDrawingMapCell->overlayIndex, 0, 0, 0, 640, 480, dword_46B0E0[this->zoomLevel]); if ( gpCurrentlyDrawingMapCell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset & 1 ) { dword_48A17C = GetIconEntry( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset >> 2) & 0x3F][0], gpCurrentlyDrawingMapCell->overlayIndex)->someSortOfLength & 0x1F; IconToBitmapScale( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset >> 2) & 0x3F][0], (int)gpWindowManager->screenBuffer, screenX, screenY, gpCurrentlyDrawingMapCell->overlayIndex + this->probablyAnimationTick % dword_48A17C + 1, 0, 0, 0, 640, 480, dword_46B0E0[this->zoomLevel]); } } if ( gpCurrentlyDrawingMapCell->extraIdx && gpMap.cellExtras[gpCurrentlyDrawingMapCell->extraIdx].overlayIndex != 255 ) gpCurrentlyDrawingMapCellExtra = &gpMap.cellExtras[gpCurrentlyDrawingMapCell->extraIdx]; else gpCurrentlyDrawingMapCellExtra = 0; while ( gpCurrentlyDrawingMapCellExtra ) { IconToBitmapScale( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset >> 2) & 0x3F][0], (int)gpWindowManager->screenBuffer, screenX, screenY, gpCurrentlyDrawingMapCellExtra->overlayIndex, 0, 0, 0, 640, 480, dword_46B0E0[this->zoomLevel]); if ( gpCurrentlyDrawingMapCellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset & 1 ) { dword_48A17C = GetIconEntry( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset >> 2) & 0x3F][0], gpCurrentlyDrawingMapCellExtra->overlayIndex)->someSortOfLength & 0x1F; IconToBitmapScale( this->overlayIcons[((unsigned __int8)gpCurrentlyDrawingMapCellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset >> 2) & 0x3F][0], (int)gpWindowManager->screenBuffer, screenX, screenY, gpCurrentlyDrawingMapCellExtra->overlayIndex + this->probablyAnimationTick % dword_48A17C + 1, 0, 0, 0, 640, 480, dword_46B0E0[this->zoomLevel]); } if ( gpCurrentlyDrawingMapCellExtra->nextIdx && gpMap.cellExtras[gpCurrentlyDrawingMapCellExtra->nextIdx].overlayIndex != 255 ) gpCurrentlyDrawingMapCellExtra = &gpMap.cellExtras[gpCurrentlyDrawingMapCellExtra->nextIdx]; else gpCurrentlyDrawingMapCellExtra = 0; } } } } // 46B0C0: using guessed type int dword_46B0C0; // 46B0D0: using guessed type int dword_46B0D0[]; // 46B0E0: using guessed type int dword_46B0E0[]; // 46B100: using guessed type int tileSizes[]; // 489E10: using guessed type int dword_489E10; // 48A17C: using guessed type int dword_48A17C; //----- (00404A83) -------------------------------------------------------- void __thiscall sub_404A83(editManager *ecx0) { editManager *this; // [sp+Ch] [bp-4h]@1 this = ecx0; if ( ecx0->zoomLevel ) { if ( ecx0->zoomLevel == 2 ) { ecx0->zoomLevel = 1; sub_404EC0((int)ecx0, 14, 14); } else { ecx0->zoomLevel = 0; sub_404EC0((int)ecx0, 7, 7); } } else if ( MAP_HEIGHT == 36 ) { ecx0->zoomLevel = 1; sub_404EC0((int)ecx0, -7, -7); } else { ecx0->zoomLevel = 2; sub_404EC0((int)ecx0, -21, -21); } editManager::UpdateCursorTo(this, this->cellLeft, this->cellTop); sub_40365F(this, 1); RedrawEditPane(); } //----- (00404B67) -------------------------------------------------------- void __thiscall editManager::SelectToolbox(editManager *this, int toolBoxNo) { lineManager *v3; // [sp+18h] [bp-3Ch]@30 lineManager *thisa; // [sp+1Ch] [bp-38h]@26 baseManager *v5; // [sp+20h] [bp-34h]@22 eventsManager *v6; // [sp+24h] [bp-30h]@18 baseManager *v7; // [sp+28h] [bp-2Ch]@14 terrainManager *v8; // [sp+2Ch] [bp-28h]@10 tag_message evt; // [sp+34h] [bp-20h]@6 int i; // [sp+50h] [bp-4h]@4 if ( this->curToolBoxNo != toolBoxNo ) { if ( this->toolManager ) { executive::RemoveManager(this->toolManager); operator delete((void *)this->toolManager); this->toolManager = 0; } for ( i = 0; i < 6; ++i ) { evt.eventCode = 512; evt.yCoordOrFieldID = i + 101; evt.xCoordOrKeycode = 4; evt.payload = (void *)((toolBoxNo == i) + 2 * i); heroWindow::BroadcastMessage(this->editWindow, &evt); } if ( toolBoxNo != -1 ) { evt.yCoordOrFieldID = 120; evt.payload = (void *)toolBoxNo; heroWindow::BroadcastMessage(this->editWindow, &evt); } switch ( toolBoxNo ) { case TERRAIN_PLACEMENT: v8 = (terrainManager *)operator new(0x7Eu); if ( v8 ) this->toolManager = (int)terrainManager::terrainManager(v8); else this->toolManager = 0; break; case OBJECT_PLACEMENT: v7 = (baseManager *)operator new(0x1E616u); if ( v7 ) this->toolManager = (int)overlayManager::overlayManager(v7); else this->toolManager = 0; break; case CELL_DETAILS: v6 = (eventsManager *)operator new(0x3Au); if ( v6 ) this->toolManager = (int)eventsManager::eventsManager(v6); else this->toolManager = 0; break; case ERASE_TOOL: v5 = (baseManager *)operator new(0x4Eu); if ( v5 ) this->toolManager = (int)clearManager::clearManager(v5); else this->toolManager = 0; break; case RIVER_PLACEMENT: thisa = (lineManager *)operator new(sizeof(lineManager)); if ( thisa ) this->toolManager = (int)lineManager::lineManager(thisa); else this->toolManager = 0; gbIsPlacingRiver = 1; sub_411292(1); break; case ROAD_PLACEMENT: v3 = (lineManager *)operator new(sizeof(lineManager)); if ( v3 ) this->toolManager = (int)lineManager::lineManager(v3); else this->toolManager = 0; gbIsPlacingRiver = 0; sub_411292(0); break; default: break; } if ( this->toolManager ) { if ( executive::AddManager(gpExec, this->toolManager, -1) ) { this->toolManager = 0; this->curToolBoxNo = -1; } else { this->curToolBoxNo = toolBoxNo; } } else { this->curToolBoxNo = -1; } heroWindow::DrawWindow(); } } // 436D00: using guessed type _DWORD __stdcall executive__RemoveManager(_DWORD); // 48EFB4: using guessed type int gpExec; //----- (00404EC0) -------------------------------------------------------- void __thiscall sub_404EC0(int this, int a2, int a3) { int thisa; // [sp+Ch] [bp-4h]@1 thisa = this; *(_DWORD *)(this + 3730) += a2; if ( *(_DWORD *)(this + 3730) < 0 ) *(_DWORD *)(this + 3730) = 0; if ( MAP_WIDTH - gCursorPixelSize[*(_DWORD *)(this + 610)] < *(_DWORD *)(this + 3730) ) *(_DWORD *)(this + 3730) = MAP_WIDTH - gCursorPixelSize[*(_DWORD *)(this + 610)]; *(_DWORD *)(this + 3734) += a3; if ( *(_DWORD *)(this + 3734) < 0 ) *(_DWORD *)(this + 3734) = 0; if ( MAP_HEIGHT - gCursorPixelSize[*(_DWORD *)(this + 610)] < *(_DWORD *)(this + 3734) ) *(_DWORD *)(this + 3734) = MAP_HEIGHT - gCursorPixelSize[*(_DWORD *)(this + 610)]; editManager::UpdateCursorTo((editManager *)this, *(_DWORD *)(this + 3730), *(_DWORD *)(this + 3734)); RedrawEditPane(); sub_40365F((editManager *)thisa, 1); } // 46B0F0: using guessed type int gCursorPixelSize[]; //----- (00404FDC) -------------------------------------------------------- mouseManager *__thiscall sub_404FDC(int this, int a2) { if ( gCursorPixelSize[*(_DWORD *)(this + 610)] >= MAP_WIDTH ) *(_WORD *)(*(_DWORD *)(this + 602) + 24) = 231; else *(_WORD *)(*(_DWORD *)(this + 602) + 24) = (signed __int64)(393.0 / ((double)(MAP_WIDTH + 1 - gCursorPixelSize[*(_DWORD *)(this + 610)]) - 1.0) * (double)*(signed int *)(this + 3730) + 35.0); if ( gCursorPixelSize[*(_DWORD *)(this + 610)] >= MAP_HEIGHT ) *(_WORD *)(*(_DWORD *)(this + 606) + 26) = 231; else *(_WORD *)(*(_DWORD *)(this + 606) + 26) = (signed __int64)(393.0 / ((double)(MAP_HEIGHT + 1 - gCursorPixelSize[*(_DWORD *)(this + 610)]) - 1.0) * (double)*(signed int *)(this + 3734) + 35.0); return heroWindow::DrawWindow(*(_DWORD *)(this + 650), a2, 10, 21); } // 46B0F0: using guessed type int gCursorPixelSize[]; //----- (0040518A) -------------------------------------------------------- void __thiscall sub_40518A(editManager *this, int paneX, int paneY, int width, int height, int a6) { int y; // [sp+14h] [bp-20h]@1 int x; // [sp+18h] [bp-1Ch]@1 int j; // [sp+20h] [bp-14h]@3 int i; // [sp+28h] [bp-Ch]@1 x = paneX + this->cellLeft; y = paneY + this->cellTop; sub_408334(paneX + this->cellLeft, y, width, height, 65535, 0, 0); for ( i = 0; i < width; ++i ) { for ( j = 0; j < height; ++j ) *(&gpMap.tiles[(y + j) * gpMap.width].groundIndex + 10 * (x + i)) = SelectTerrainTile( a6, 0, 1, x + i, y + j, 0, 1.0); } } //----- (0040527B) -------------------------------------------------------- int __stdcall sub_40527B(int x, int y, int width, int height, int a1) { int result; // eax@2 int a5; // [sp+18h] [bp-8h]@3 int a4; // [sp+1Ch] [bp-4h]@1 sub_408334(x, y, width, height, 65535, 0, 0); for ( a4 = x; ; ++a4 ) { result = x + width; if ( x + width <= a4 ) break; for ( a5 = y; y + height > a5; ++a5 ) { *(&gpMap.tiles[a5 * gpMap.width].groundIndex + 10 * a4) = SelectTerrainTile(a1, 0, 1, a4, a5, 0, 1.0); *(&gpMap.tiles[a4].displayFlags + 20 * a5 * gpMap.width) &= 0x9Fu; } } return result; } // 40527B: using guessed type _DWORD __stdcall sub_40527B(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); //----- (0040537D) -------------------------------------------------------- int __fastcall sub_40537D(int x, int y, int terrainType, int a2) { int result; // eax@2 mapCell *tile; // [sp+14h] [bp-4h]@1 tile = &gpMap.tiles[y * gpMap.width] + x; if ( gTileTerrainTypes[*(&gpMap.tiles[y * gpMap.width].groundIndex + 10 * x)] != terrainType || (result = 0, (a2 & 0x7F ^ unknownTerrainTileAttribute[tile->groundIndex]) & 0x7F) ) { result = SelectTerrainTile(terrainType, a2, 1, x, y, 0, 1.0); tile->groundIndex = result; } return result; } //----- (00405425) -------------------------------------------------------- void __thiscall sub_405425(void *ecx0) { __int64 v1; // qax@14 __int64 v2; // qax@16 __int64 v3; // qax@28 __int64 v4; // qax@30 void *this; // [sp+20h] [bp-9Ch]@1 char v6; // [sp+24h] [bp-98h]@37 char v7; // [sp+40h] [bp-7Ch]@27 char retstr; // [sp+5Ch] [bp-60h]@22 char v9; // [sp+78h] [bp-44h]@27 int v10; // [sp+7Ch] [bp-40h]@28 int v11; // [sp+80h] [bp-3Ch]@28 int v12; // [sp+94h] [bp-28h]@1 int v13; // [sp+98h] [bp-24h]@1 int v14; // [sp+9Ch] [bp-20h]@22 float v15; // [sp+B8h] [bp-4h]@7 this = ecx0; mouseManager::MouseCoords(&v13, &v12); if ( v13 >= 480 && v13 <= 624 && v12 >= 16 && v12 <= 160 ) { switch ( MAP_HEIGHT ) { case 36: v15 = 4.0; break; case 72: v15 = 2.0; break; case 108: v15 = 1.3333; break; default: v15 = 1.0; break; } v13 = (signed __int64)((double)(v13 - 480) / v15); v12 = (signed __int64)((double)(v12 - 16) / v15); v1 = gCursorPixelSize[*(_DWORD *)((char *)this + 610)]; *(_DWORD *)((char *)this + 3730) = v13 - (((signed int)v1 - HIDWORD(v1)) >> 1); if ( *(_DWORD *)((char *)this + 3730) + gCursorPixelSize[*(_DWORD *)((char *)this + 610)] > MAP_WIDTH ) *(_DWORD *)((char *)this + 3730) = MAP_WIDTH - gCursorPixelSize[*(_DWORD *)((char *)this + 610)]; v2 = gCursorPixelSize[*(_DWORD *)((char *)this + 610)]; *(_DWORD *)((char *)this + 3734) = v12 - (((signed int)v2 - HIDWORD(v2)) >> 1); if ( *(_DWORD *)((char *)this + 3734) + gCursorPixelSize[*(_DWORD *)((char *)this + 610)] > MAP_HEIGHT ) *(_DWORD *)((char *)this + 3734) = MAP_HEIGHT - gCursorPixelSize[*(_DWORD *)((char *)this + 610)]; if ( *(_DWORD *)((char *)this + 3730) < 0 ) *(_DWORD *)((char *)this + 3730) = 0; if ( *(_DWORD *)((char *)this + 3734) < 0 ) *(_DWORD *)((char *)this + 3734) = 0; editManager::UpdateCursor((editManager *)this); sub_40365F((editManager *)this, 1); RedrawEditPane(); memcpy(&v14, inputManager::GetEvent(gpInputManager, (inputManager *)&retstr), 0x1Cu); while ( v14 != 16 && v14 != 64 ) { Process1WindowsMessage(); if ( v14 == 4 ) { while ( v14 == 4 ) { memcpy(&v9, &v14, 0x1Cu); memcpy(&v14, inputManager::GetEvent(gpInputManager, (inputManager *)&v7), 0x1Cu); } (*(void (__thiscall **)(mouseManager *, char *))(LODWORD(gpMouseManager->vtable) + 8))(gpMouseManager, &v9); v13 = (signed __int64)((double)(v10 - 480) / v15); v12 = (signed __int64)((double)(v11 - 16) / v15); v3 = gCursorPixelSize[*(_DWORD *)((char *)this + 610)]; *(_DWORD *)((char *)this + 3730) = v13 - (((signed int)v3 - HIDWORD(v3)) >> 1); if ( *(_DWORD *)((char *)this + 3730) + gCursorPixelSize[*(_DWORD *)((char *)this + 610)] > MAP_WIDTH ) *(_DWORD *)((char *)this + 3730) = MAP_WIDTH - gCursorPixelSize[*(_DWORD *)((char *)this + 610)]; v4 = gCursorPixelSize[*(_DWORD *)((char *)this + 610)]; *(_DWORD *)((char *)this + 3734) = v12 - (((signed int)v4 - HIDWORD(v4)) >> 1); if ( *(_DWORD *)((char *)this + 3734) + gCursorPixelSize[*(_DWORD *)((char *)this + 610)] > MAP_HEIGHT ) *(_DWORD *)((char *)this + 3734) = MAP_HEIGHT - gCursorPixelSize[*(_DWORD *)((char *)this + 610)]; if ( *(_DWORD *)((char *)this + 3730) < 0 ) *(_DWORD *)((char *)this + 3730) = 0; if ( *(_DWORD *)((char *)this + 3734) < 0 ) *(_DWORD *)((char *)this + 3734) = 0; editManager::UpdateCursor((editManager *)this); sub_40365F((editManager *)this, 1); RedrawEditPane(); } else { memcpy(&v14, inputManager::GetEvent(gpInputManager, (inputManager *)&v6), 0x1Cu); } } } } // 42FB60: using guessed type _DWORD __stdcall mouseManager__MouseCoords(_DWORD, _DWORD); // 46B0F0: using guessed type int gCursorPixelSize[]; //----- (004058D6) -------------------------------------------------------- int __thiscall sub_4058D6(int ecx0) { int result; // eax@17 int this; // [sp+18h] [bp-88h]@1 char v3; // [sp+1Ch] [bp-84h]@15 char retstr; // [sp+38h] [bp-68h]@7 int v5; // [sp+54h] [bp-4Ch]@8 int v6; // [sp+58h] [bp-48h]@1 int v7; // [sp+5Ch] [bp-44h]@1 int v8; // [sp+60h] [bp-40h]@1 int v9; // [sp+74h] [bp-2Ch]@1 int v10; // [sp+78h] [bp-28h]@1 char v11; // [sp+7Ch] [bp-24h]@5 int v12; // [sp+80h] [bp-20h]@8 double v13; // [sp+98h] [bp-8h]@1 this = ecx0; v13 = 402.0 / (double)(MAP_WIDTH - gCursorPixelSize[*(_DWORD *)(ecx0 + 610)] + 1); mouseManager::MouseCoords(&v10, &v9); inputManager::Flush(gpInputManager); v6 = 4; v7 = v10; v8 = v9; while ( v6 != 16 && v6 != 64 ) { Process1WindowsMessage(); if ( v6 == 4 ) { memcpy(&v11, &v6, 0x1Cu); while ( v6 == 4 ) { memcpy(&v11, &v6, 0x1Cu); memcpy(&v6, inputManager::GetEvent(gpInputManager, (inputManager *)&retstr), 0x1Cu); } (*(void (__thiscall **)(mouseManager *, char *))(LODWORD(gpMouseManager->vtable) + 8))(gpMouseManager, &v11); *(_WORD *)(*(_DWORD *)(this + 602) + 24) = v12; v5 = (signed __int64)((double)(signed int)(signed __int64)((double)(v12 - 39) / v13) + 0.5); if ( *(_DWORD *)(this + 3730) != v5 ) { if ( MAP_WIDTH - gCursorPixelSize[*(_DWORD *)(this + 610)] < v5 ) v5 = MAP_WIDTH - gCursorPixelSize[*(_DWORD *)(this + 610)]; if ( v5 < 0 ) v5 = 0; *(_DWORD *)(this + 3730) = v5; editManager::UpdateCursor((editManager *)this); RedrawEditPane(); sub_40365F((editManager *)this, 1); } } else { memcpy(&v6, inputManager::GetEvent(gpInputManager, (inputManager *)&v3), 0x1Cu); } } *(_WORD *)(*(_DWORD *)(this + 602) + 22) &= 0xFFFEu; result = *(_WORD *)(*(_DWORD *)(this + 594) + 22) & 0xFFFE; *(_WORD *)(*(_DWORD *)(this + 594) + 22) = result; return result; } // 4058D6: using guessed type int __thiscall sub_4058D6(_DWORD); // 42FB60: using guessed type _DWORD __stdcall mouseManager__MouseCoords(_DWORD, _DWORD); // 437610: using guessed type int __thiscall inputManager__Flush(_DWORD); // 46B0F0: using guessed type int gCursorPixelSize[]; //----- (00405B25) -------------------------------------------------------- int __thiscall sub_405B25(int ecx0) { int result; // eax@17 int this; // [sp+18h] [bp-88h]@1 char v3; // [sp+1Ch] [bp-84h]@15 char retstr; // [sp+38h] [bp-68h]@7 int v5; // [sp+54h] [bp-4Ch]@8 int v6; // [sp+58h] [bp-48h]@1 int v7; // [sp+5Ch] [bp-44h]@1 int v8; // [sp+60h] [bp-40h]@1 int v9; // [sp+74h] [bp-2Ch]@1 int v10; // [sp+78h] [bp-28h]@1 char v11; // [sp+7Ch] [bp-24h]@5 int v12; // [sp+84h] [bp-1Ch]@8 double v13; // [sp+98h] [bp-8h]@1 this = ecx0; v13 = 402.0 / (double)(MAP_HEIGHT - gCursorPixelSize[*(_DWORD *)(ecx0 + 610)] + 1); mouseManager::MouseCoords(&v10, &v9); inputManager::Flush(gpInputManager); v6 = 4; v7 = v10; v8 = v9; while ( v6 != 16 && v6 != 64 ) { Process1WindowsMessage(); if ( v6 == 4 ) { memcpy(&v11, &v6, 0x1Cu); while ( v6 == 4 ) { memcpy(&v11, &v6, 0x1Cu); memcpy(&v6, inputManager::GetEvent(gpInputManager, (inputManager *)&retstr), 0x1Cu); } (*(void (__thiscall **)(mouseManager *, char *))(LODWORD(gpMouseManager->vtable) + 8))(gpMouseManager, &v11); *(_WORD *)(*(_DWORD *)(this + 606) + 26) = v12; v5 = (signed __int64)((double)(signed int)(signed __int64)((double)(v12 - 39) / v13) + 0.5); if ( *(_DWORD *)(this + 3734) != v5 ) { if ( MAP_HEIGHT - gCursorPixelSize[*(_DWORD *)(this + 610)] < v5 ) v5 = MAP_HEIGHT - gCursorPixelSize[*(_DWORD *)(this + 610)]; if ( v5 < 0 ) v5 = 0; *(_DWORD *)(this + 3734) = v5; editManager::UpdateCursor((editManager *)this); RedrawEditPane(); sub_40365F((editManager *)this, 1); } } else { memcpy(&v6, inputManager::GetEvent(gpInputManager, (inputManager *)&v3), 0x1Cu); } } *(_WORD *)(*(_DWORD *)(this + 606) + 22) &= 0xFFFEu; result = *(_WORD *)(*(_DWORD *)(this + 598) + 22) & 0xFFFE; *(_WORD *)(*(_DWORD *)(this + 598) + 22) = result; return result; } // 405B25: using guessed type int __thiscall sub_405B25(_DWORD); // 42FB60: using guessed type _DWORD __stdcall mouseManager__MouseCoords(_DWORD, _DWORD); // 437610: using guessed type int __thiscall inputManager__Flush(_DWORD); // 46B0F0: using guessed type int gCursorPixelSize[]; //----- (00405D74) -------------------------------------------------------- void __thiscall editManager::CheckPairedObjects(editManager *this) { __int16 v1; // ax@9 __int16 v2; // ax@11 int teleporterType; // eax@13 int numWhirlpools; // [sp+1Ch] [bp-2Ch]@1 int j; // [sp+20h] [bp-28h]@4 signed int i; // [sp+24h] [bp-24h]@1 signed int l; // [sp+24h] [bp-24h]@27 int k; // [sp+28h] [bp-20h]@6 char hasTent[8]; // [sp+2Ch] [bp-1Ch]@3 int numTeleporters[3]; // [sp+34h] [bp-14h]@4 char hasBarrier[8]; // [sp+40h] [bp-8h]@3 numWhirlpools = 0; for ( i = 0; i < 8; ++i ) { hasBarrier[i] = 0; hasTent[i] = 0; } numTeleporters[0] = 0; numTeleporters[1] = 0; numTeleporters[2] = 0; for ( j = 0; j < MAP_HEIGHT; ++j ) { for ( k = 0; MAP_WIDTH > k; ++k ) { if ( *(&gpMap.tiles[k].objType + 20 * j * gpMap.width) == 247 ) { v1 = *(&gpMap.tiles[k].field_4_1_1_isShadow_1_13_extraInfo + 10 * j * gpMap.width) >> 3; hasBarrier[v1 & 7] = 1; } if ( *(&gpMap.tiles[k].objType + 20 * j * gpMap.width) == 248 ) { v2 = *(&gpMap.tiles[k].field_4_1_1_isShadow_1_13_extraInfo + 10 * j * gpMap.width) >> 3; hasTent[v2 & 7] = 1; } if ( *(&gpMap.tiles[k].objType + 20 * j * gpMap.width) == 164 ) { teleporterType = *(&gpMap.tiles[k].objectIndex + 20 * j * gpMap.width) % 9 / 3; ++numTeleporters[teleporterType]; } if ( MAP_WIDTH - 2 > k && MAP_HEIGHT - 1 > j && (*(&gpMap.tiles[k].objType + 20 * j * gpMap.width) & 0x7F) == LOCATION_WHIRLPOOL ) { if ( (*(&gpMap.tiles[(j + 1) * gpMap.width].objType + 5 * (4 * k + 8)) & 0x7F) == LOCATION_WHIRLPOOL ) ++numWhirlpools; } } } if ( numTeleporters[0] == 1 || numTeleporters[1] == 1 || numTeleporters[2] == 1 ) AddErrorMessage("You have at least one travel gate on the map without a partner. Each of the 3 different travel gates only goes to others of the same type and needs at least one other to work properly."); if ( numWhirlpools == 1 ) AddErrorMessage("Only 1 whirlpool on map. Another whirlpool is needed so there is someplace to travel to."); for ( l = 0; l < 8; ++l ) { if ( hasBarrier[l] && !hasTent[l] ) { sprintf( (char *)&gText, "There is a %s barrier on the map, but no matching %s tent. A tent is needed because that is where the password is given to remove a barrier.", gpBarrierColors[l], gpBarrierColors[l]); AddErrorMessage((const char *)&gText); } } } // 46D5C0: using guessed type char *gpBarrierColors[15]; // 405D74: using guessed type char hasBarrier[8]; // 405D74: using guessed type char hasTent[8]; //----- (004060C9) -------------------------------------------------------- int __cdecl sub_4060C9() { int result; // eax@1 DWORD v1; // eax@2 char Buffer; // [sp+Ch] [bp-1F8h]@2 int v3; // [sp+200h] [bp-4h]@1 result = open(unk_4685F8, 17153, 128); v3 = result; if ( result != -1 ) { strcpy(&Buffer, " "); v1 = strlen(&Buffer); _write(v3, &Buffer, v1); result = _close(v3); } return result; } //----- (0040614C) -------------------------------------------------------- FILE *__thiscall sub_40614C(void *this) { FILE *result; // eax@1 void *Source; // [sp+Ch] [bp-3F0h]@1 char Str; // [sp+10h] [bp-3ECh]@2 FILE *File; // [sp+3F8h] [bp-4h]@1 Source = this; result = fopen(unk_4685F8, "at+"); File = result; if ( result ) { strcpy(&Str, (const char *)Source); strcat(&Str, "\n"); fputs(&Str, File); result = (FILE *)fclose(File); } return result; } //----- (004061D6) -------------------------------------------------------- FILE *__fastcall sub_4061D6(int a1, int a2, int a3) { int v3; // ST20_4@1 int v4; // ST24_4@1 v3 = a2; v4 = a1; sub_40614C(&unk_468AC4); sprintf((char *)&gText, "(x:% 3d, y:% 3d) ***%s***", v4, v3, a3); return sub_40614C(&gText); } //----- (00406223) -------------------------------------------------------- int __cdecl sub_406223() { int result; // eax@37 int v1; // [sp+Ch] [bp-150h]@28 void *v2; // [sp+18h] [bp-144h]@29 mapCell *v3; // [sp+1Ch] [bp-140h]@1 char Dest; // [sp+20h] [bp-13Ch]@1 char *v5; // [sp+14Ch] [bp-10h]@1 int i; // [sp+150h] [bp-Ch]@1 int k; // [sp+154h] [bp-8h]@9 int j; // [sp+158h] [bp-4h]@7 unk_4685F8 = &Dest; strcpy(&Dest, mapFilename); v5 = (char *)&v3 + strlen(mapFilename); strcpy(v5, ".TXT"); sub_4060C9(); sub_40614C("========================================"); sprintf((char *)&gText, "Text for file: %s", mapFilename); sub_40614C(&gText); sub_40614C(&unk_468B30); sprintf((char *)&gText, "Map Name: %s", gpMapHeader.name); sub_40614C(&gText); sub_40614C(&unk_468B44); sub_40614C("Map Description:"); sub_40614C(gpMapHeader.description); sub_40614C(&unk_468B5C); sub_40614C(&unk_468B60); sub_40614C("Rumours:"); for ( i = 0; (unsigned __int8)gpMapHeader.numRumors > i; ++i ) { sub_40614C((char *)gpEditManager->mapExtra[gpRumorIndices[i]] + 8); sub_40614C(&unk_468B70); } sub_40614C(&unk_468B74); sub_40614C(&unk_468B78); sub_40614C("Timed Events:"); for ( i = 0; (unsigned __int8)gpMapHeader.numEvents > i; ++i ) { sprintf( (char *)&gText, "Day %d: %s", *(_WORD *)((char *)gpEditManager->mapExtra[gpEventDataIndices[i]] + 33), (char *)gpEditManager->mapExtra[gpEventDataIndices[i]] + 49); sub_40614C(&gText); sub_40614C(&unk_468B98); } sub_40614C(&unk_468B9C); sub_40614C(&unk_468BA0); sub_40614C("Map Stuff:"); for ( j = 0; j < MAP_WIDTH; ++j ) { for ( k = 0; k < MAP_HEIGHT; ++k ) { v3 = &gpMap.tiles[k * gpMap.width] + j; switch ( *(&gpMap.tiles[j].objType + 20 * k * gpMap.width) ) { case 0xDD: sub_4061D6(j, k, (int)"Bottle"); goto LABEL_15; case 0x82: sub_4061D6(j, k, (int)"Sign"); LABEL_15: sub_40614C((char *)gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(v3->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)] + 9); break; case 0x93: sub_4061D6(j, k, (int)"Place Event"); sub_40614C((char *)gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(v3->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)] + 49); break; case 0xCF: sub_4061D6(j, k, (int)"Sphinx"); sub_40614C("Riddle:"); sub_40614C((char *)gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(v3->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)] + 136); sub_40614C("Answers:"); for ( i = 0; *((_BYTE *)gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(v3->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)] + 31) > i; ++i ) sub_40614C((char *)gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(v3->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)] + 13 * i + 32); break; default: continue; } } } sub_40614C(&unk_468BE8); sub_40614C(&unk_468BEC); sub_40614C("Towns with captains:"); for ( j = 0; j < MAP_WIDTH; ++j ) { for ( k = 0; k < MAP_HEIGHT; ++k ) { v3 = &gpMap.tiles[k * gpMap.width] + j; v1 = *(&gpMap.tiles[j].objType + 20 * k * gpMap.width); if ( v1 == 163 || v1 == 176 ) { v2 = gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(v3->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)]; if ( !*((_BYTE *)v2 + 39) ) { if ( *((_BYTE *)v2 + 23) ) { sprintf((char *)&gText, "Town at x:%d, y:%d", j, k); sub_40614C(&gText); } } } } } sprintf((char *)&gText, "Text successfully saved to %s", &Dest); result = NormalDialog((char *)&gText, 1, -1, -1, -1, 0, -1, 0, -1, 0); unk_4685F8 = 0; return result; } //----- (0040683B) -------------------------------------------------------- int __thiscall editManager::PrepareSave6(editManager *ecx0) { int result; // eax@65 editManager *this; // [sp+Ch] [bp-24h]@1 mapCell *v3; // [sp+10h] [bp-20h]@60 int v4; // [sp+18h] [bp-18h]@56 mapCell *tile; // [sp+1Ch] [bp-14h]@13 int y; // [sp+20h] [bp-10h]@1 int ya; // [sp+20h] [bp-10h]@9 int yb; // [sp+20h] [bp-10h]@56 int x; // [sp+24h] [bp-Ch]@3 int xa; // [sp+24h] [bp-Ch]@11 int xb; // [sp+24h] [bp-Ch]@58 signed int v12; // [sp+2Ch] [bp-4h]@15 this = ecx0; fullMap::RearrangeCellExtras(&gpMap); for ( y = 0; y < MAP_HEIGHT; ++y ) { for ( x = 0; x < MAP_WIDTH; ++x ) { if ( *(&gpMap.tiles[x].objType + 20 * y * gpMap.width) == LOCATION_SPECIAL ) *(&gpMap.tiles[x].objType + 20 * y * gpMap.width) = 0; } } for ( ya = 0; ya < MAP_HEIGHT; ++ya ) { for ( xa = 0; xa < MAP_WIDTH; ++xa ) { tile = &gpMap.tiles[ya * gpMap.width] + xa; if ( *(&gpMap.tiles[xa].objType + 20 * ya * gpMap.width) & 0x80 || tile->objType == LOCATION_SPECIAL ) { if ( tile->objType == 171 ) editManager::SetLocationSpecialThingyForSpacesAroundBoats(this, xa, ya); } else { v12 = editManager::GetOverlayID((int)this, xa, ya); if ( v12 == -1 ) { tile->objType = 0; } else { tile->objType = gOverlayDatabase[v12].locationType; if ( (v12 == 462 || v12 == 662 && xa > 0 && MAP_WIDTH - 2 > xa && MAP_HEIGHT - 2 > ya && ya > 0) && editManager::GetOverlayID((int)this, xa - 1, ya) == v12 && editManager::GetOverlayID((int)this, xa + 1, ya) == v12 && editManager::GetOverlayID((int)this, xa, ya - 1) == v12 && editManager::GetOverlayID((int)this, xa, ya + 1) != v12 ) tile->objType = gOverlayDatabase[v12].locationType | TILE_HAS_EVENT; if ( v12 == 214 ) tile->objType = gOverlayDatabase[214].locationType | TILE_HAS_EVENT; } if ( tile->objType & (unsigned __int8)TILE_HAS_EVENT || tile->objType == LOCATION_TOWN || tile->objType == LOCATION_RANDOM_TOWN || tile->objType == LOCATION_RANDOM_CASTLE ) { if ( tile->objType == 171 ) editManager::SetLocationSpecialThingyForSpacesAroundBoats(this, xa, ya); } else { editManager::SetLocationSpecialThingyForSpacesAroundBoats(this, xa, ya); } } if ( gTileTerrainTypes[tile->groundIndex] || unknownTerrainTileAttribute[tile->groundIndex] != 1 && unknownTerrainTileAttribute[tile->groundIndex] != 16 && unknownTerrainTileAttribute[tile->groundIndex] != 2 && unknownTerrainTileAttribute[tile->groundIndex] != 17 && unknownTerrainTileAttribute[tile->groundIndex] != 3 && unknownTerrainTileAttribute[tile->groundIndex] != 4 ) tile->displayFlags &= 0xFBu; else tile->displayFlags |= 4u; if ( gTileTerrainTypes[tile->groundIndex] || unknownTerrainTileAttribute[tile->groundIndex] != 2 ) tile->displayFlags &= 0xEFu; else tile->displayFlags |= 0x10u; } } v4 = gbIsPlacingRiver; sub_4114F4(0, 0, MAP_WIDTH - 1, MAP_HEIGHT - 1, 1); for ( yb = 0; yb < MAP_HEIGHT; ++yb ) { for ( xb = 0; xb < MAP_WIDTH; ++xb ) { v3 = &gpMap.tiles[yb * gpMap.width] + xb; if ( *((_BYTE *)Dst + xb + MAP_WIDTH * yb) ) v3->bitfield_1_hasObject_1_isRoad_6_objTileset |= 2u; else v3->bitfield_1_hasObject_1_isRoad_6_objTileset &= 0xFDu; } } result = v4; gbIsPlacingRiver = v4; return result; } //----- (00406D7B) -------------------------------------------------------- bool __stdcall YesNoDialog(char *text) { NormalDialog(text, 2, -1, -1, -1, 0, -1, 0, -1, 0); return gpWindowManager->buttonPressedCode == 30725; } //----- (00406F41) -------------------------------------------------------- int __cdecl CountPlacedEvents() { int i; // [sp+14h] [bp-Ch]@1 int j; // [sp+18h] [bp-8h]@3 int n; // [sp+1Ch] [bp-4h]@1 n = 0; for ( i = 0; MAP_HEIGHT > i; ++i ) { for ( j = 0; MAP_WIDTH > j; ++j ) { if ( *(&gpMap.tiles[j].objType + 20 * i * gpMap.width) == 147 ) ++n; } } return n; } //----- (00406FE6) -------------------------------------------------------- int __cdecl CountTowns() { mapCell *cell; // [sp+10h] [bp-10h]@5 int i; // [sp+14h] [bp-Ch]@1 int j; // [sp+18h] [bp-8h]@3 int n; // [sp+1Ch] [bp-4h]@1 n = 0; for ( i = 0; i < MAP_HEIGHT; ++i ) { for ( j = 0; j < MAP_WIDTH; ++j ) { cell = &gpMap.tiles[i * gpMap.width] + j; if ( *(&gpMap.tiles[j].objType + 20 * i * gpMap.width) == 176 || cell->objType == 177 || cell->objType == 163 ) ++n; } } return n; } //----- (004070B1) -------------------------------------------------------- int __cdecl CountMines() { int n; // [sp+10h] [bp-10h]@1 mapCell *cell; // [sp+14h] [bp-Ch]@5 int i; // [sp+18h] [bp-8h]@1 int j; // [sp+1Ch] [bp-4h]@3 n = 0; for ( i = 0; i < MAP_HEIGHT; ++i ) { for ( j = 0; MAP_WIDTH > j; ++j ) { cell = &gpMap.tiles[i * gpMap.width] + j; if ( *(&gpMap.tiles[j].objType + 20 * i * gpMap.width) == 192 || cell->objType == 151 || cell->objType == 157 || cell->objType == 129 || cell->objType == 178 || cell->objType == 148 || cell->objType == 149 ) ++n; } } return n; } //----- (004071CD) -------------------------------------------------------- void __thiscall editManager::WriteTowns(editManager *this, int fd) { TownExtra *cstl; // ST1C_4@8 char v3; // [sp+1Ch] [bp-24h]@13 char v4; // [sp+1Dh] [bp-23h]@13 char v5; // [sp+1Eh] [bp-22h]@13 mapCell *cell; // [sp+20h] [bp-20h]@1 int i; // [sp+24h] [bp-1Ch]@1 int j; // [sp+2Ch] [bp-14h]@3 int faction; // [sp+30h] [bp-10h]@8 int v10; // [sp+34h] [bp-Ch]@1 int v11; // [sp+38h] [bp-8h]@1 int v12; // [sp+3Ch] [bp-4h]@1 v11 = 0; v10 = 0; v12 = 0; cell = 0; for ( i = 0; MAP_HEIGHT > i; ++i ) { for ( j = 0; MAP_WIDTH > j; ++j ) { cell = &gpMap.tiles[i * gpMap.width] + j; if ( *(&gpMap.tiles[j].objType + 20 * i * gpMap.width) == 177 || cell->objType == 176 || cell->objType == 163 ) { _write(fd, &j, 1u); _write(fd, &i, 1u); cstl = (TownExtra *)gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(cell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)]; faction = cstl->faction; if ( cstl->isCastle ) faction |= 0x80u; _write(fd, &faction, 1u); ++v11; } } } v3 = -1; v4 = -1; v5 = 0; for ( j = 0; 72 - v11 > j; ++j ) _write(fd, &v3, 3u); } //----- (0040736E) -------------------------------------------------------- // "Mine" is broadly defined, and also includes lighthouses and dragon cities, among others, but does not include many visitable locations such as obelisks. int __thiscall editManager::WriteMines(editManager *this, int fd) { int result; // eax@31 int k; // [sp+14h] [bp-34h]@20 int nWritten; // [sp+1Ch] [bp-2Ch]@1 char v5; // [sp+28h] [bp-20h]@1 char v6; // [sp+29h] [bp-1Fh]@1 char v7; // [sp+2Ah] [bp-1Eh]@1 mapCell *cell; // [sp+2Ch] [bp-1Ch]@1 unsigned __int8 i; // [sp+30h] [bp-18h]@1 char v10; // [sp+34h] [bp-14h]@1 unsigned __int8 j; // [sp+38h] [bp-10h]@3 char v12; // [sp+3Ch] [bp-Ch]@1 bool v13; // [sp+40h] [bp-8h]@13 int v14; // [sp+44h] [bp-4h]@1 v12 = -1; v10 = -1; v14 = 0; cell = 0; v5 = -1; v6 = -1; v7 = -1; nWritten = 0; for ( i = 0; i < MAP_HEIGHT; ++i ) { for ( j = 0; j < MAP_WIDTH; ++j ) { cell = &gpMap.tiles[i * gpMap.width] + j; if ( *(&gpMap.tiles[j].objType + 20 * i * gpMap.width) == 148 || cell->objType == 149 || cell->objType == 151 || cell->objType == 157 || cell->objType == 129 || cell->objType == 192 || cell->objType == 178 ) // is flaggable { switch ( cell->objType ) { case TILE_HAS_EVENT|LOCATION_LIGHTHOUSE: v13 = 100; break; case TILE_HAS_EVENT|LOCATION_ABANDONED_MINE: v13 = 103; break; case TILE_HAS_EVENT|LOCATION_DRAGON_CITY: v13 = 101; break; case TILE_HAS_EVENT|LOCATION_RANDOM_TOWN|LOCATION_SIGN: v13 = 102; break; default: for ( k = *(&gpMap.tiles[j].extraIdx + 10 * i * gpMap.width); k; k = gpMap.cellExtras[k].nextIdx ) { if ( gpMap.cellExtras[k].objectIndex != 255 && (((unsigned __int8)gpMap.cellExtras[k]._1_animatedObject_7_objTileset >> 1) & 0x7F) == 29 ) { v13 = gpMap.cellExtras[k].objectIndex + 2; goto LABEL_27; } } v13 = cell->objType != 157; break; } LABEL_27: _write(fd, &j, 1u); _write(fd, &i, 1u); _write(fd, &v13, 1u); sprintf((char *)&gText, "Mine %02d: (%02d,%02d) type: %02d\n", nWritten, j, i, v13); LogStr(&gText); ++nWritten; } } } for ( j = 0; ; ++j ) { result = j; if ( j >= 144 - nWritten ) break; _write(fd, &v5, 3u); } return result; } //----- (004076EF) -------------------------------------------------------- void __thiscall editManager::WriteNumObelisks(editManager *this, int fd) { int i; // [sp+14h] [bp-Ch]@1 int j; // [sp+18h] [bp-8h]@3 unsigned __int8 numObelisks; // [sp+1Ch] [bp-4h]@1 numObelisks = 0; for ( i = 0; i < MAP_HEIGHT; ++i ) { for ( j = 0; j < MAP_WIDTH; ++j ) { if ( *(&gpMap.tiles[j].objType + 20 * i * gpMap.width) == 153 ) ++numObelisks; } } if ( !numObelisks ) numObelisks = 1; _write(fd, &numObelisks, 1u); if ( (signed int)numObelisks > 48 ) { sprintf((char *)&gText, "%d obelisks on map. There should be no more than 48 obelisks.", numObelisks); AddErrorMessage((const char *)&gText); } } //----- (004077EA) -------------------------------------------------------- signed int __thiscall editManager::Save(editManager *this, char *Dest) { char *v2; // eax@13 signed int result; // eax@29 int v4; // [sp+0h] [bp-90h]@0 char *v6; // [sp+10h] [bp-80h]@4 int fd; // [sp+14h] [bp-7Ch]@16 int fda; // [sp+14h] [bp-7Ch]@20 int fdb; // [sp+14h] [bp-7Ch]@26 int fdc; // [sp+14h] [bp-7Ch]@28 char Source; // [sp+18h] [bp-78h]@16 int i; // [sp+2Ch] [bp-64h]@18 char Dst[5]; // [sp+38h] [bp-58h]@4 char v14; // [sp+3Dh] [bp-53h]@18 char *alphabet; // [sp+48h] [bp-48h]@1 int v16; // [sp+50h] [bp-40h]@4 int v17; // [sp+54h] [bp-3Ch]@23 char FileName; // [sp+58h] [bp-38h]@16 char v19; // [sp+80h] [bp-10h]@23 alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_01234567890"; if ( gpMapHeader.field_39 && strnicmp(gpMapHeader.name, "No Name", 7u) && strlen(gpMapHeader.name) > 1 ) { v6 = gpMapHeader.name; v16 = 0; memset(Dst, 0, 0xDu); while ( *v6 && v16 < 8 ) { if ( !v16 && (gpMapHeader.name[0] >= 'A' && gpMapHeader.name[0] <= 'Z' || gpMapHeader.name[0] >= 'a' && gpMapHeader.name[0] <= 'z') || v16 > 0 && (v2 = v6, LOBYTE(v2) = *v6, FindToken(alphabet, v2)) ) Dst[v16++] = *v6; ++v6; } sprintf(&Source, "%s.%s", Dst, "MP2"); sprintf(&FileName, ".\\maps\\%s", &Source); fd = open(&FileName, 32768, v4); if ( fd == -1 ) { strcpy(Dest, &Source); strcpy(mapFilename, &Source); } else { v14 = 0; _close(fd); for ( i = 0; i < 100; ++i ) { sprintf(&Source, "%s_%02d.%s", Dst, i, "MP2"); sprintf(&FileName, ".\\maps\\%s", &Source); fda = open(&FileName, 32768, v4); if ( fda == -1 ) { strcpy(Dest, &Source); strcpy(mapFilename, &Source); break; } _close(fda); } } } gpMapHeader.field_39 = 0; editManager::CoalesceObjectData(this); ResetPlayerAvailability(); editManager::RandomizeTownNames(this); editManager::ResetErrorMessages(this); editManager::CheckPairedObjects(this); editManager::PrepareSave6(this); v17 = FindLastToken(Dest, 46); *(_BYTE *)(v17 + 1) = 0; strcpy(&v19, Dest); if ( IsExpansionMap() ) { strcat(Dest, "MX2"); strcat(&v19, "MP2"); } else { strcat(Dest, "MP2"); strcat(&v19, "MX2"); } sprintf(&FileName, ".\\maps\\%s", &v19); fdb = open(&FileName, O_BINARY, v4); if ( fdb != -1 ) { _close(fdb); _unlink(&FileName); } sprintf(&FileName, ".\\maps\\%s", Dest); fdc = open(&FileName, 33537, 128); if ( fdc == -1 ) { result = 3; } else { _write(fdc, &gpMapHeader, 420u); fullMap::Write(&gpMap, fdc); editManager::WriteTowns(this, fdc); editManager::WriteMines(this, fdc); editManager::WriteNumObelisks(this, fdc); _write(fdc, gpRumorIndices, 2 * (unsigned __int8)gpMapHeader.numRumors); _write(fdc, gpEventDataIndices, 2 * (unsigned __int8)gpMapHeader.numEvents); _write(fdc, &this->nMapExtra, 4u); for ( i = 1; this->nMapExtra > i; ++i ) { _write(fdc, &this->lenMapExtra[i], 2u); _write(fdc, this->mapExtra[i], this->lenMapExtra[i]); } _write(fdc, &giCurOverlayIdx, 4u); _close(fdc); ShowMapErrors(); result = 0; } return result; } // 434480: using guessed type int __fastcall FindToken(_DWORD, _DWORD); // 4077EA: using guessed type char Dst[5]; //----- (00407CEA) -------------------------------------------------------- signed int __thiscall editManager::Load(editManager *this, const char *name) { signed int result; // eax@2 int v3; // [sp+0h] [bp-177Ch]@0 SMapHeader hdr; // [sp+14h] [bp-1768h]@3 int fd; // [sp+1B8h] [bp-15C4h]@1 int i; // [sp+1BCh] [bp-15C0h]@6 char ignoreBuf[432]; // [sp+1C8h] [bp-15B4h]@3 const CHAR FileName; // [sp+1744h] [bp-38h]@1 char namebuf[13]; // [sp+176Ch] [bp-10h]@1 strcpy(namebuf, name); editManager::ResetObjectData(this); sprintf((char *)&FileName, ".\\maps\\%s", name); fd = open(&FileName, O_BINARY, v3); if ( fd == -1 ) { result = 3; } else { _read(fd, &hdr, sizeof(SMapHeader)); editManager::InitializeMap(gpEditManager, 0, (unsigned __int8)hdr.width, (unsigned __int8)hdr.height); memcpy(&gpMapHeader, &hdr, sizeof(gpMapHeader)); strcpy((char *)name, namebuf); sprintf(mapFilename, name); fullMap::Read(&gpMap, fd, 1); _read(fd, ignoreBuf, 216u); // towns if ( gpMapHeader.field_0 == 90 ) _read(fd, ignoreBuf, 216u); else _read(fd, ignoreBuf, 432u); // mines gpMapHeader.field_0 = 92; _read(fd, ignoreBuf, 1u); // num obelisks _read(fd, gpRumorIndices, 2 * (unsigned __int8)gpMapHeader.numRumors); _read(fd, gpEventDataIndices, 2 * (unsigned __int8)gpMapHeader.numEvents); _read(fd, &this->nMapExtra, 4u); for ( i = 1; this->nMapExtra > i; ++i ) { _read(fd, &this->lenMapExtra[i], 2u); this->mapExtra[i] = BaseAlloc(this->lenMapExtra[i], (int)"F:\\h2xsrc\\Editor\\EDITMGR.CPP", 2813); _read(fd, this->mapExtra[i], this->lenMapExtra[i]); } _read(fd, &giCurOverlayIdx, 4u); _close(fd); CopyMap(); result = 0; } return result; } //----- (00407FBF) -------------------------------------------------------- int __thiscall sub_407FBF(void *this) { int v2; // [sp+Ch] [bp-48h]@1 fileRequester *v3; // [sp+18h] [bp-3Ch]@4 tag_message evt; // [sp+1Ch] [bp-38h]@3 int v5; // [sp+38h] [bp-1Ch]@7 const char v6[8]; // [sp+3Ch] [bp-18h]@4 int v7; // [sp+44h] [bp-10h]@1 void *v8; // [sp+48h] [bp-Ch]@5 char Source; // [sp+4Ch] [bp-8h]@4 v2 = (int)this; v7 = 0; if ( gpEditManager && gpEditManager->editWindow ) { evt.eventCode = 512; evt.xCoordOrKeycode = 6; evt.payload = (void *)2; evt.yCoordOrFieldID = 14; heroWindow::BroadcastMessage(gpEditManager->editWindow, &evt); evt.yCoordOrFieldID = 15; heroWindow::BroadcastMessage(gpEditManager->editWindow, &evt); } sprintf(&Source, "*.%s", "M*2"); sprintf((char *)v6, ".%s", "MP2"); v3 = (fileRequester *)operator new(1071u); if ( v3 ) v8 = fileRequester::fileRequester(v3, 131, 9, v2, &Source, ".\\MAPS\\", v6); else v8 = 0; v5 = executive::DoDialog(v8); if ( v5 == 30722 ) { v7 = 1; strcpy(mapFilename, gLastFilename); } operator delete(v8); if ( gpEditManager && gpEditManager->editWindow ) { evt.eventCode = 512; evt.xCoordOrKeycode = 5; evt.payload = (void *)2; evt.yCoordOrFieldID = 14; heroWindow::BroadcastMessage(gpEditManager->editWindow, &evt); evt.yCoordOrFieldID = 15; heroWindow::BroadcastMessage(gpEditManager->editWindow, &evt); } return v7; } // 436B30: using guessed type _DWORD __stdcall executive__DoDialog(_DWORD); //----- (00408178) -------------------------------------------------------- void __thiscall editManager::ResetErrorMessages(editManager *this) { while ( unk_4685F0 > 0 ) BaseFree(*(&gpCurrentlyDrawingMapCell + unk_4685F0--), "F:\\h2xsrc\\Editor\\EDITMGR.CPP", 2886); unk_4685F0 = 0; } //----- (004081D0) -------------------------------------------------------- heroWindowManager *__cdecl ShowMapErrors() { heroWindowManager *result; // eax@1 int i; // [sp+10h] [bp-8h]@2 int j; // [sp+10h] [bp-8h]@5 int v3; // [sp+14h] [bp-4h]@1 result = (heroWindowManager *)giDebugLevel; v3 = giDebugLevel; if ( unk_4685F0 > 0 ) { for ( i = 0; i < unk_4685F0; ++i ) { sprintf((char *)&gText, "MAP ERROR : %s", gpErrorMessages[i]); LogStr(&gText); } giDebugLevel = v3; for ( j = 0; ; ++j ) { result = (heroWindowManager *)unk_4685F0; if ( j < unk_4685F0 ) { sprintf((char *)&gText, "%s\n\nShow next error?", gpErrorMessages[j]); NormalDialog((char *)&gText, 2, -1, -1, -1, 0, -1, 0, -1, 0); result = gpWindowManager; if ( gpWindowManager->buttonPressedCode != 30726 ) continue; } break; } } return result; } // 48E288: using guessed type int giDebugLevel; //----- (004082C1) -------------------------------------------------------- void __stdcall AddErrorMessage(const char *msg) { size_t l; // eax@2 if ( unk_4685F0 < 100 ) { l = strlen(msg); gpErrorMessages[unk_4685F0] = (char *)BaseAlloc(l + 1, (int)"F:\\h2xsrc\\Editor\\EDITMGR.CPP", 2927); strcpy(gpErrorMessages[unk_4685F0++], msg); } } //----- (00408334) -------------------------------------------------------- void __stdcall sub_408334(int x, int y, int width, int height, int a5, int a6, int a7) { mapCell *cell; // [sp+10h] [bp-1Ch]@13 int j; // [sp+18h] [bp-14h]@11 int i; // [sp+20h] [bp-Ch]@9 mapCellExtra *v10; // [sp+24h] [bp-8h]@23 __int16 v11; // [sp+28h] [bp-4h]@26 dword_489FE0 = 0; if ( x < 0 ) x = 0; if ( x + width > MAP_WIDTH ) width = MAP_WIDTH - x; if ( y < 0 ) y = 0; if ( y + height > MAP_HEIGHT ) height = MAP_HEIGHT - y; for ( i = x; x + width > i; ++i ) { for ( j = y; y + height > j; ++j ) { for ( cell = &gpMap.tiles[j * gpMap.width] + i; cell->objectIndex != 255 && (!((cell->field_4_1_1_isShadow_1_13_extraInfo >> 1) & 1) || cell->field_4_1_1_isShadow_1_13_extraInfo & 1 || a6) && (!a7 || byte_489DD0[((unsigned __int8)cell->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F]); sub_408633(cell->objLink) ) ; if ( cell->extraIdx && gpMap.cellExtras[cell->extraIdx].objectIndex != 255 ) v10 = &gpMap.cellExtras[cell->extraIdx]; else v10 = 0; while ( v10 ) { v11 = v10->nextIdx; if ( (!(((unsigned __int8)v10->field_4_1_1_1_isShadow_5 >> 1) & 1) || v10->field_4_1_1_1_isShadow_5 & 1 || a6) && (!a7 || byte_489DD0[((unsigned __int8)v10->_1_animatedObject_7_objTileset >> 1) & 0x7F]) ) sub_408633(v10->objLink); if ( v11 && gpMap.cellExtras[(unsigned __int16)v11].objectIndex != 255 ) v10 = &gpMap.cellExtras[(unsigned __int16)v11]; else v10 = 0; } if ( a6 ) { while ( cell->ovrLink ) sub_408633(cell->ovrLink); } } } if ( dword_489FE0 ) sub_4122F9(x, y, x + width - 1, y + height - 1); } // 489FE0: using guessed type int dword_489FE0; //----- (00408633) -------------------------------------------------------- void __stdcall sub_408633(int link) { mapCell *v1; // [sp+10h] [bp-18h]@7 int col; // [sp+14h] [bp-14h]@3 int row; // [sp+18h] [bp-10h]@1 mapCellExtra *v4; // [sp+1Ch] [bp-Ch]@16 signed int v5; // [sp+20h] [bp-8h]@5 int idx; // [sp+24h] [bp-4h]@14 for ( row = 0; MAP_WIDTH > row; ++row ) { for ( col = 0; MAP_WIDTH > col; ++col ) { v5 = 1; LABEL_6: while ( v5 ) { v5 = 0; v1 = &gpMap.tiles[col * gpMap.width] + row; if ( *(&gpMap.tiles[row].objLink + 5 * col * gpMap.width) == link ) { if ( (((unsigned __int8)v1->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F) == TILESET_ROAD || (((unsigned __int8)v1->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F) == TILESET_OBJECT_STREAM ) dword_489FE0 = 1; fullMap::ClearCell(&gpMap, row, col); v5 = 1; } if ( v1->ovrLink == link ) { fullMap::RemoveOverlay(&gpMap, row, col); v5 = 1; } for ( idx = v1->extraIdx; idx; idx = v4->nextIdx ) { v4 = &gpMap.cellExtras[idx]; if ( gpMap.cellExtras[idx].objLink == link ) { if ( (((unsigned __int8)v4->_1_animatedObject_7_objTileset >> 1) & 0x7F) == TILESET_ROAD || (((unsigned __int8)v4->_1_animatedObject_7_objTileset >> 1) & 0x7F) == TILESET_OBJECT_STREAM ) dword_489FE0 = 1; fullMap::RemoveCellExtra(&gpMap, idx); v5 = 1; goto LABEL_6; } if ( v4->ovrLink == link ) { fullMap::ClearOverlay(&gpMap, idx); v5 = 1; goto LABEL_6; } } } } } } // 489FE0: using guessed type int dword_489FE0; //----- (00408834) -------------------------------------------------------- void __stdcall EraseRegion(int left, int top, int width, int height) { mapCell *v4; // eax@5 mapCell *v5; // eax@5 mapCell *v6; // eax@5 int a5; // [sp+40h] [bp-8h]@3 int a4; // [sp+44h] [bp-4h]@1 for ( a4 = left; left + width > a4; ++a4 ) { for ( a5 = top; top + height > a5; ++a5 ) { memset(&gpMap.tiles[a4] + a5 * gpMap.width, 0, 0x14u); *(&gpMap.tiles[a4].objLink + 5 * a5 * gpMap.width) = 0; *(&gpMap.tiles[a4].ovrLink + 5 * a5 * gpMap.width) = 0; *(&gpMap.tiles[a4].extraIdx + 10 * a5 * gpMap.width) = 0; *(&gpMap.tiles[a5 * gpMap.width].groundIndex + 10 * a4) = SelectTerrainTile(0, 0, 1, a4, a5, 0, 1.0); v4 = &gpMap.tiles[a5 * gpMap.width] + a4; v4->bitfield_1_hasObject_1_isRoad_6_objTileset &= 3u; *(&gpMap.tiles[a4].objectIndex + 20 * a5 * gpMap.width) = -1; v5 = &gpMap.tiles[a5 * gpMap.width] + a4; v5->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset &= 3u; *(&gpMap.tiles[a4].overlayIndex + 20 * a5 * gpMap.width) = -1; *(&gpMap.tiles[a4].objType + 20 * a5 * gpMap.width) = 0; *(&gpMap.tiles[a4].displayFlags + 20 * a5 * gpMap.width) = 0; *(&gpMap.tiles[a4].objType + 20 * a5 * gpMap.width) = 0; v6 = &gpMap.tiles[a5 * gpMap.width] + a4; v6->field_4_1_1_isShadow_1_13_extraInfo &= 7u; } } } //----- (00408C05) -------------------------------------------------------- editManager *__thiscall editManager::ResetObjectData(editManager *this) { editManager *result; // eax@4 int i; // [sp+10h] [bp-4h]@1 for ( i = 1; this->nMapExtra > i; ++i ) BaseFree(this->mapExtra[i], "F:\\h2xsrc\\Editor\\EDITMGR.CPP", 3137); result = this; this->nMapExtra = 1; return result; } //----- (00408C6A) -------------------------------------------------------- void __thiscall editManager::InitializeMap(editManager *this, int random, int width, int height) { if ( MAP_WIDTH != width || MAP_HEIGHT != height ) { MAP_HEIGHT = height; MAP_WIDTH = width; fullMap::Reset(&gpMap, height, width); fullMap::Reset(&gMap2, MAP_HEIGHT, MAP_WIDTH); EraseRegion(0, 0, MAP_WIDTH, MAP_HEIGHT); this->cellTop = 0; this->cellLeft = this->cellTop; } memset(&gpMapHeader, 0, 0x1A4u); LOBYTE(gpMapHeader.field_4) = 1; gpMapHeader.field_0 = 92; gpMapHeader.width = width; gpMapHeader.height = height; gpMapHeader.numRumors = 0; gpMapHeader.numEvents = 0; gpMapHeader.nextTownName = Random(0, 71); gpMapHeader.field_39 = 1; ++currentMapOffset; if ( firstMapOffset + currentMapOffset > 65000 ) currentMapOffset = 0; if ( random ) sprintf(gpMapHeader.name, "Random Map %d", currentMapOffset % 1000); else sprintf(gpMapHeader.name, "No Name %d", currentMapOffset % 1000); sprintf(gpMapHeader.description, "No Description"); sprintf(mapFilename, "Map_%04d.%s", currentMapOffset, "MP2"); WritePrefs(); editManager::ResetObjectData(this); } // 4343F0: using guessed type int __fastcall Random(_DWORD, _DWORD); //----- (00408E33) -------------------------------------------------------- signed int __thiscall editManager::CellIsShadow(editManager *this, int x, int y) { signed int result; // eax@5 int i; // [sp+10h] [bp-10h]@12 mapCell *cell; // [sp+14h] [bp-Ch]@6 mapCellExtra *v6; // [sp+18h] [bp-8h]@14 signed int v7; // [sp+1Ch] [bp-4h]@11 if ( x >= 0 && MAP_WIDTH > x && y >= 0 && MAP_HEIGHT > y ) { cell = &gpMap.tiles[y * gpMap.width] + x; if ( *(&gpMap.tiles[x].objType + 20 * y * gpMap.width) & 0x80 || cell->objType == LOCATION_TOWN || cell->objType == LOCATION_RANDOM_TOWN || cell->objType == LOCATION_RANDOM_CASTLE ) { result = 0; } else { if ( cell->objectIndex == 255 ) goto LABEL_24; v7 = 0; if ( (cell->field_4_1_1_isShadow_1_13_extraInfo >> 1) & 1 ) { v7 = 1; for ( i = cell->extraIdx; i; i = v6->nextIdx ) { v6 = &gpMap.cellExtras[i]; if ( gpMap.cellExtras[i].objectIndex != 255 ) { if ( !(((unsigned __int8)v6->field_4_1_1_1_isShadow_5 >> 1) & 1) ) v7 = 0; } } } if ( v7 ) LABEL_24: result = 1; else result = 0; } } else { result = 0; } return result; } //----- (00408FAA) -------------------------------------------------------- void __thiscall editManager::SetLocationSpecialThingyForSpacesAroundBoats(editManager *this, int x, int y) { int v3; // ecx@2 editManager *thisa; // [sp+10h] [bp-58h]@1 mapCell *cell; // [sp+64h] [bp-4h]@1 thisa = this; cell = &gpMap.tiles[y * gpMap.width] + x; if ( !gTileTerrainTypes[*(&gpMap.tiles[y * gpMap.width].groundIndex + 10 * x)] ) { HIWORD(v3) = 0; LOWORD(v3) = cell->groundIndex; switch ( unknownTerrainTileAttribute[v3] ) { default: return; case 1u: case 16u: if ( cell->displayFlags & 1 ) { if ( MAP_HEIGHT - 1 > y ) { if ( editManager::CellIsShadow(thisa, x, y + 1) ) *(&gpMap.tiles[x].objType + 20 * (y + 1) * gpMap.width) = LOCATION_SPECIAL; } } else if ( y > 0 && editManager::CellIsShadow(thisa, x, y - 1) ) { *(&gpMap.tiles[x].objType + 20 * (y - 1) * gpMap.width) = LOCATION_SPECIAL; } break; case 2u: if ( (cell->displayFlags & 3) == 3 ) { if ( MAP_HEIGHT - 1 > y && editManager::CellIsShadow(thisa, x, y + 1) ) *(&gpMap.tiles[x].objType + 20 * (y + 1) * gpMap.width) = LOCATION_SPECIAL; if ( x > 0 && editManager::CellIsShadow(thisa, x - 1, y) ) *(&gpMap.tiles[y * gpMap.width].objType + 5 * (4 * x - 4)) = LOCATION_SPECIAL; if ( MAP_HEIGHT - 1 > y && x > 0 && editManager::CellIsShadow(thisa, x - 1, y + 1) ) *(&gpMap.tiles[(y + 1) * gpMap.width].objType + 5 * (4 * x - 4)) = LOCATION_SPECIAL; } else if ( cell->displayFlags & 2 ) { if ( y > 0 && editManager::CellIsShadow(thisa, x, y - 1) ) *(&gpMap.tiles[x].objType + 20 * (y - 1) * gpMap.width) = LOCATION_SPECIAL; if ( x > 0 && editManager::CellIsShadow(thisa, x - 1, y) ) *(&gpMap.tiles[y * gpMap.width].objType + 5 * (4 * x - 4)) = LOCATION_SPECIAL; if ( y > 0 && x > 0 && editManager::CellIsShadow(thisa, x - 1, y - 1) ) *(&gpMap.tiles[(y - 1) * gpMap.width].objType + 5 * (4 * x - 4)) = LOCATION_SPECIAL; } else if ( cell->displayFlags & 1 ) { if ( MAP_HEIGHT - 1 > y && editManager::CellIsShadow(thisa, x, y + 1) ) *(&gpMap.tiles[x].objType + 20 * (y + 1) * gpMap.width) = LOCATION_SPECIAL; if ( MAP_WIDTH - 1 > x && editManager::CellIsShadow(thisa, x + 1, y) ) *(&gpMap.tiles[y * gpMap.width].objType + 5 * (4 * x + 4)) = LOCATION_SPECIAL; if ( MAP_HEIGHT - 1 > y && MAP_WIDTH - 1 > x && editManager::CellIsShadow(thisa, x + 1, y + 1) ) *(&gpMap.tiles[(y + 1) * gpMap.width].objType + 5 * (4 * x + 4)) = LOCATION_SPECIAL; } else { if ( y > 0 && editManager::CellIsShadow(thisa, x, y - 1) ) *(&gpMap.tiles[x].objType + 20 * (y - 1) * gpMap.width) = LOCATION_SPECIAL; if ( MAP_WIDTH - 1 > x && editManager::CellIsShadow(thisa, x + 1, y) ) *(&gpMap.tiles[y * gpMap.width].objType + 5 * (4 * x + 4)) = LOCATION_SPECIAL; if ( y > 0 && MAP_WIDTH - 1 > x && editManager::CellIsShadow(thisa, x + 1, y - 1) ) *(&gpMap.tiles[(y - 1) * gpMap.width].objType + 5 * (4 * x + 4)) = LOCATION_SPECIAL; } break; case 3u: case 17u: if ( cell->displayFlags & 2 ) { if ( x > 0 && editManager::CellIsShadow(thisa, x - 1, y) ) *(&gpMap.tiles[y * gpMap.width].objType + 5 * (4 * x - 4)) = LOCATION_SPECIAL; } else if ( MAP_WIDTH - 1 > x && editManager::CellIsShadow(thisa, x + 1, y) ) { *(&gpMap.tiles[y * gpMap.width].objType + 5 * (4 * x + 4)) = LOCATION_SPECIAL; } break; case 4u: if ( (cell->displayFlags & 3) == 3 ) { if ( MAP_HEIGHT - 1 > y && x > 0 && editManager::CellIsShadow(thisa, x - 1, y + 1) ) *(&gpMap.tiles[(y + 1) * gpMap.width].objType + 5 * (4 * x - 4)) = LOCATION_SPECIAL; } else if ( cell->displayFlags & 2 ) { if ( y > 0 && x > 0 && editManager::CellIsShadow(thisa, x - 1, y - 1) ) *(&gpMap.tiles[(y - 1) * gpMap.width].objType + 5 * (4 * x - 4)) = LOCATION_SPECIAL; } else if ( cell->displayFlags & 1 ) { if ( MAP_HEIGHT - 1 > y && MAP_WIDTH - 1 > x && editManager::CellIsShadow(thisa, x + 1, y + 1) ) *(&gpMap.tiles[(y + 1) * gpMap.width].objType + 5 * (4 * x + 4)) = LOCATION_SPECIAL; } else if ( y > 0 && MAP_WIDTH - 1 > x && editManager::CellIsShadow(thisa, x + 1, y - 1) ) { *(&gpMap.tiles[(y - 1) * gpMap.width].objType + 5 * (4 * x + 4)) = LOCATION_SPECIAL; } break; } } } //----- (004098B1) -------------------------------------------------------- void __fastcall ShowErrorMessage(const char *str) { if ( !gbGeneratingRandomMap ) { ShowDebugMessage(str); MessageBeep(0); dword_46B0CC = KBTickCount() + 1500; } } // 46B0CC: using guessed type int dword_46B0CC; // 485CF8: using guessed type int gbGeneratingRandomMap; //----- (004098F8) -------------------------------------------------------- int __fastcall SelectTerrainTile(int a1, int a2, int a3, int a4, int a5, int a6, float a7) { int v7; // eax@13 int result; // eax@36 signed int l; // [sp+1Ch] [bp-10h]@11 signed int i; // [sp+20h] [bp-Ch]@2 signed int j; // [sp+24h] [bp-8h]@4 signed int k; // [sp+28h] [bp-4h]@1 k = 0; if ( !terrainTilesPreprocessed ) { terrainTilesPreprocessed = 1; for ( i = 0; i < 9; ++i ) { for ( j = 0; j < 22; ++j ) { for ( k = 0; k < 2; ++k ) word_48DF68[i][j][k] = 0; } } for ( l = 0; l < 432; ++l ) { k = (unknownTerrainTileAttribute[l] & 0x80) != 0; word_48A188[gTileTerrainTypes[l]][unknownTerrainTileAttribute[l] & 0x7F][k][word_48DF68[gTileTerrainTypes[l]][unknownTerrainTileAttribute[l] & 0x7F][k]] = l; v7 = 88 * gTileTerrainTypes[l] + 4 * (unknownTerrainTileAttribute[l] & 0x7F); ++*(__int16 *)((char *)&word_48DF68[0][0][k] + v7); } } if ( a3 ) { if ( a2 & 0x80 ) { k = 1; } else if ( dword_468600[a1] && a6 || (double)dword_468600[a1] * a7 > (double)Random(0, 100) && word_48DF68[a1][a2 & 0x7F][1] > 0 ) { if ( (a4 <= 0 || !(unknownTerrainTileAttribute[*(__int16 *)((char *)&gpMap.tiles[a5 * gpMap.width].groundIndex + 5 * (4 * a4 - 4))] & 0x80)) && (MAP_WIDTH - 2 <= a4 || !(unknownTerrainTileAttribute[*(__int16 *)((char *)&gpMap.tiles[a5 * gpMap.width].groundIndex + 5 * (4 * a4 + 4))] & 0x80)) && (a5 <= 0 || !(unknownTerrainTileAttribute[*(&gpMap.tiles[(a5 - 1) * gpMap.width].groundIndex + 10 * a4)] & 0x80)) && (MAP_HEIGHT - 2 <= a5 || !(unknownTerrainTileAttribute[*(&gpMap.tiles[(a5 + 1) * gpMap.width].groundIndex + 10 * a4)] & 0x80)) ) k = 1; } dword_48A184 = word_48DF68[a1][a2 & 0x7F][k]; if ( dword_48A184 ) { if ( dword_48A184 <= 1 ) dword_48A180 = 0; else dword_48A180 = Random(0, dword_48A184 - 1); } else { dword_48A180 = 0; k = 0; } result = word_48A188[a1][a2][k][dword_48A180]; } else { result = word_48A188[a1][a2][0][0]; } return result; } // 4343F0: using guessed type int __fastcall Random(_DWORD, _DWORD); // 468600: using guessed type int dword_468600[]; // 468624: using guessed type int terrainTilesPreprocessed; // 48A180: using guessed type int dword_48A180; // 48A184: using guessed type int dword_48A184; //----- (00409D41) -------------------------------------------------------- bool __fastcall InMapArea(signed int x, signed int y) { return x >= 16 && x < 448 && y >= 16 && y < 448; } //----- (00409D94) -------------------------------------------------------- void __stdcall sub_409D94(int a2, int a3, int a4, int a5, int a6) { int v5; // ecx@50 int v6; // ecx@52 int v7; // ecx@54 int v8; // ecx@56 signed int v9; // [sp+20h] [bp-94h]@163 signed int v10; // [sp+24h] [bp-90h]@163 mapCell *v11; // [sp+28h] [bp-8Ch]@162 int v12; // [sp+2Ch] [bp-88h]@9 int v13; // [sp+2Ch] [bp-88h]@162 signed int v14; // [sp+30h] [bp-84h]@163 signed int v15; // [sp+34h] [bp-80h]@1 signed int v16; // [sp+38h] [bp-7Ch]@57 signed int v17; // [sp+3Ch] [bp-78h]@163 signed int v18; // [sp+40h] [bp-74h]@9 signed int v19; // [sp+44h] [bp-70h]@9 signed int v20; // [sp+44h] [bp-70h]@163 signed int v21; // [sp+48h] [bp-6Ch]@9 signed int v22; // [sp+4Ch] [bp-68h]@9 signed int v23; // [sp+50h] [bp-64h]@163 signed int k; // [sp+54h] [bp-60h]@57 int i; // [sp+58h] [bp-5Ch]@5 int l; // [sp+58h] [bp-5Ch]@157 signed int v27; // [sp+5Ch] [bp-58h]@9 int j; // [sp+60h] [bp-54h]@7 int m; // [sp+60h] [bp-54h]@159 signed int v30; // [sp+64h] [bp-50h]@9 signed int v31; // [sp+68h] [bp-4Ch]@163 signed int v32; // [sp+6Ch] [bp-48h]@9 signed int v33; // [sp+6Ch] [bp-48h]@163 signed int v34; // [sp+70h] [bp-44h]@163 signed int v35; // [sp+78h] [bp-3Ch]@2 char Dst[12]; // [sp+7Ch] [bp-38h]@49 int v37; // [sp+88h] [bp-2Ch]@163 int v38; // [sp+8Ch] [bp-28h]@1 int v39; // [sp+90h] [bp-24h]@9 int v40; // [sp+94h] [bp-20h]@163 int v41; // [sp+98h] [bp-1Ch]@9 int v42; // [sp+9Ch] [bp-18h]@9 int v43; // [sp+A0h] [bp-14h]@163 int v44; // [sp+A4h] [bp-10h]@9 int v45; // [sp+A8h] [bp-Ch]@163 int v46; // [sp+ACh] [bp-8h]@9 int v47; // [sp+B0h] [bp-4h]@163 v38 = 0; v15 = 0; if ( !a6 ) { LogStr("PB 1"); v35 = 1; while ( v35 && v15 < 8 ) { v35 = 0; ++v15; for ( i = 0; MAP_HEIGHT > i; ++i ) { for ( j = 0; MAP_WIDTH > j; ++j ) { v12 = gTileTerrainTypes[*(&gpMap.tiles[i * gpMap.width].groundIndex + 10 * j)]; v30 = 0; v22 = 0; v42 = 0; v39 = 0; v18 = 0; v41 = 0; v27 = 0; v21 = 0; v44 = 0; v19 = 0; v46 = 0; v32 = 0; if ( i && gTileTerrainTypes[*(&gpMap.tiles[(i - 1) * gpMap.width].groundIndex + 10 * j)] != v12 ) { if ( !gTileTerrainTypes[*(&gpMap.tiles[(i - 1) * gpMap.width].groundIndex + 10 * j)] ) v32 = 1; } else { v21 = 1; } if ( MAP_HEIGHT - 1 != i && gTileTerrainTypes[*(&gpMap.tiles[(i + 1) * gpMap.width].groundIndex + 10 * j)] != v12 ) { if ( !gTileTerrainTypes[*(&gpMap.tiles[(i + 1) * gpMap.width].groundIndex + 10 * j)] ) v46 = 1; } else { v27 = 1; } if ( MAP_WIDTH - 1 != j && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[i * gpMap.width].groundIndex + 5 * (4 * j + 4))] != v12 ) { if ( !gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[i * gpMap.width].groundIndex + 5 * (4 * j + 4))] ) v19 = 1; } else { v41 = 1; } if ( j && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[i * gpMap.width].groundIndex + 5 * (4 * j - 4))] != v12 ) { if ( !gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[i * gpMap.width].groundIndex + 5 * (4 * j - 4))] ) v44 = 1; } else { v18 = 1; } if ( !j || !i || gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i - 1) * gpMap.width].groundIndex + 5 * (4 * j - 4))] == v12 ) v39 = 1; if ( !j || MAP_HEIGHT - 1 == i || gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i + 1) * gpMap.width].groundIndex + 5 * (4 * j - 4))] == v12 ) v22 = 1; if ( MAP_WIDTH - 1 == j || !i || gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i - 1) * gpMap.width].groundIndex + 5 * (4 * j + 4))] == v12 ) v42 = 1; if ( MAP_WIDTH - 1 == j || MAP_HEIGHT - 1 == i || gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i + 1) * gpMap.width].groundIndex + 5 * (4 * j + 4))] == v12 ) v30 = 1; if ( !v21 || !v27 || !v41 || !v18 ) { memset(Dst, 0, 9u); if ( MAP_WIDTH - 1 > j ) { v5 = *(__int16 *)((char *)&gpMap.tiles[i * gpMap.width].groundIndex + 5 * (4 * j + 4)); ++Dst[gTileTerrainTypes[v5]]; } if ( j > 0 ) { v6 = *(__int16 *)((char *)&gpMap.tiles[i * gpMap.width].groundIndex + 5 * (4 * j - 4)); ++Dst[gTileTerrainTypes[v6]]; } if ( MAP_HEIGHT - 1 > i ) { v7 = *(&gpMap.tiles[(i + 1) * gpMap.width].groundIndex + 10 * j); ++Dst[gTileTerrainTypes[v7]]; } if ( i > 0 ) { v8 = *(&gpMap.tiles[(i - 1) * gpMap.width].groundIndex + 10 * j); ++Dst[gTileTerrainTypes[v8]]; } v38 = 0; v16 = 0; for ( k = 0; k < 9; ++k ) { if ( (unsigned __int8)Dst[k] >= v16 ) { if ( v12 != k ) { v38 = k; v16 = (unsigned __int8)Dst[k]; } } } } if ( (!v21 || !v18) && (!v21 || !v41) && (!v27 || !v18) && (!v27 || !v41) ) { if ( v12 && j > 0 && i > 0 && MAP_WIDTH - 1 > j && MAP_HEIGHT - 1 > i ) { if ( v32 + v46 + v19 + v44 < 3 ) { if ( v32 && v19 ) { v38 = gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i + 1) * gpMap.width].groundIndex + 5 * (4 * j - 4))]; sub_40537D(j, i, v38, 0); sub_40537D(j, i + 1, v38, 0); sub_40537D(j - 1, i, v38, 0); } else if ( v32 && v44 ) { v38 = gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i + 1) * gpMap.width].groundIndex + 5 * (4 * j + 4))]; sub_40537D(j, i, v38, 0); sub_40537D(j, i + 1, v38, 0); sub_40537D(j + 1, i, v38, 0); } else if ( v46 && v19 ) { v38 = gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i - 1) * gpMap.width].groundIndex + 5 * (4 * j - 4))]; sub_40537D(j, i, v38, 0); sub_40537D(j, i - 1, v38, 0); sub_40537D(j - 1, i, v38, 0); } else if ( v46 && v44 ) { v38 = gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i - 1) * gpMap.width].groundIndex + 5 * (4 * j + 4))]; sub_40537D(j, i, v38, 0); sub_40537D(j, i - 1, v38, 0); sub_40537D(j + 1, i, v38, 0); } else if ( v12 != 6 ) { sub_40537D(j, i, v38, 0); } } else { sub_40537D(j, i, 0, 0); } } else if ( !v12 || (unsigned __int8)Dst[v38] >= (signed int)(unsigned __int8)Dst[v12] ) { sub_40537D(j, i, v38, 0); } v35 = 1; } if ( !v12 && j > 0 && i > 0 && MAP_WIDTH - 1 > j && MAP_HEIGHT - 1 > i && v21 && v27 && v18 && v41 ) { if ( gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i - 1) * gpMap.width].groundIndex + 5 * (4 * j - 4))] && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i + 1) * gpMap.width].groundIndex + 5 * (4 * j + 4))] ) { sub_40537D( j, i, gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i - 1) * gpMap.width].groundIndex + 5 * (4 * j - 4))], 0); sub_40537D( j - 1, i, gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i - 1) * gpMap.width].groundIndex + 5 * (4 * j - 4))], 0); sub_40537D( j, i - 1, gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i - 1) * gpMap.width].groundIndex + 5 * (4 * j - 4))], 0); v35 = 1; } if ( gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i - 1) * gpMap.width].groundIndex + 5 * (4 * j + 4))] && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i + 1) * gpMap.width].groundIndex + 5 * (4 * j - 4))] ) { sub_40537D( j, i, gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i - 1) * gpMap.width].groundIndex + 5 * (4 * j + 4))], 0); sub_40537D( j + 1, i, gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i - 1) * gpMap.width].groundIndex + 5 * (4 * j + 4))], 0); sub_40537D( j, i - 1, gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(i - 1) * gpMap.width].groundIndex + 5 * (4 * j + 4))], 0); v35 = 1; } } else if ( !v12 && j > 0 && i > 0 && MAP_WIDTH - 1 > j && MAP_HEIGHT - 1 > i && v21 && v27 ) { if ( !v41 && !v39 ) { sub_40537D(j, i - 1, v38, 0); sub_40537D(j, i, v38, 0); v35 = 1; } if ( !v41 && !v22 ) { sub_40537D(j, i + 1, v38, 0); sub_40537D(j, i, v38, 0); v35 = 1; } if ( !v18 && !v42 ) { sub_40537D(j, i - 1, v38, 0); sub_40537D(j, i, v38, 0); v35 = 1; } if ( !v18 && !v30 ) { sub_40537D(j, i + 1, v38, 0); sub_40537D(j, i, v38, 0); v35 = 1; } } else if ( !v12 && j > 0 && i > 0 && MAP_WIDTH - 1 > j && MAP_HEIGHT - 1 > i && v41 && v18 ) { if ( !v21 && !v22 ) { sub_40537D(j - 1, i, v38, 0); sub_40537D(j, i, v38, 0); v35 = 1; } if ( !v21 && !v30 ) { sub_40537D(j + 1, i, v38, 0); sub_40537D(j, i, v38, 0); v35 = 1; } if ( !v27 && !v39 ) { sub_40537D(j - 1, i, v38, 0); sub_40537D(j, i, v38, 0); v35 = 1; } if ( !v27 && !v42 ) { sub_40537D(j + 1, i, v38, 0); sub_40537D(j, i, v38, 0); v35 = 1; } } } } } LogStr("PB 2"); } LogStr("PB 3"); if ( !a5 ) { for ( l = 0; MAP_HEIGHT > l; ++l ) { for ( m = 0; MAP_WIDTH > m; ++m ) { v11 = &gpMap.tiles[l * gpMap.width] + m; v13 = gTileTerrainTypes[*(&gpMap.tiles[l * gpMap.width].groundIndex + 10 * m)]; if ( v13 != 8 ) { v47 = 0; v31 = 0; v14 = 0; v9 = 0; v40 = 0; v43 = 0; v45 = 0; v10 = 0; v44 = 0; v20 = 0; v46 = 0; v33 = 0; v17 = 0; v23 = 0; v34 = 0; v37 = 0; if ( v13 != 6 ) { if ( l > 0 && gTileTerrainTypes[*(&gpMap.tiles[(l - 1) * gpMap.width].groundIndex + 10 * m)] != v13 && gTileTerrainTypes[*(&gpMap.tiles[(l - 1) * gpMap.width].groundIndex + 10 * m)] ) v9 = 1; if ( MAP_HEIGHT - 1 > l && gTileTerrainTypes[*(&gpMap.tiles[(l + 1) * gpMap.width].groundIndex + 10 * m)] != v13 && gTileTerrainTypes[*(&gpMap.tiles[(l + 1) * gpMap.width].groundIndex + 10 * m)] ) v14 = 1; if ( MAP_WIDTH - 1 > m && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[l * gpMap.width].groundIndex + 5 * (4 * m + 4))] != v13 && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[l * gpMap.width].groundIndex + 5 * (4 * m + 4))] ) v31 = 1; if ( m > 0 && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[l * gpMap.width].groundIndex + 5 * (4 * m - 4))] != v13 && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[l * gpMap.width].groundIndex + 5 * (4 * m - 4))] ) v47 = 1; if ( m > 0 && l > 0 && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l - 1) * gpMap.width].groundIndex + 5 * (4 * m - 4))] != v13 && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l - 1) * gpMap.width].groundIndex + 5 * (4 * m - 4))] ) v45 = 1; if ( m > 0 && MAP_HEIGHT - 1 > l && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l + 1) * gpMap.width].groundIndex + 5 * (4 * m - 4))] != v13 && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l + 1) * gpMap.width].groundIndex + 5 * (4 * m - 4))] ) v40 = 1; if ( MAP_WIDTH - 1 > m && MAP_HEIGHT - 1 > l && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l + 1) * gpMap.width].groundIndex + 5 * (4 * m + 4))] != v13 && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l + 1) * gpMap.width].groundIndex + 5 * (4 * m + 4))] ) v43 = 1; if ( MAP_WIDTH - 1 > m && l > 0 && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l - 1) * gpMap.width].groundIndex + 5 * (4 * m + 4))] != v13 && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l - 1) * gpMap.width].groundIndex + 5 * (4 * m + 4))] ) v10 = 1; } if ( v13 && v13 != 8 ) { if ( l > 0 && (!gTileTerrainTypes[*(&gpMap.tiles[(l - 1) * gpMap.width].groundIndex + 10 * m)] || gTileTerrainTypes[*(&gpMap.tiles[(l - 1) * gpMap.width].groundIndex + 10 * m)] == 8) ) v33 = 1; if ( MAP_HEIGHT - 1 > l && (!gTileTerrainTypes[*(&gpMap.tiles[(l + 1) * gpMap.width].groundIndex + 10 * m)] || gTileTerrainTypes[*(&gpMap.tiles[(l + 1) * gpMap.width].groundIndex + 10 * m)] == 8) ) v46 = 1; if ( MAP_WIDTH - 1 > m && (!gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[l * gpMap.width].groundIndex + 5 * (4 * m + 4))] || gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[l * gpMap.width].groundIndex + 5 * (4 * m + 4))] == 8) ) v20 = 1; if ( m > 0 && (!gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[l * gpMap.width].groundIndex + 5 * (4 * m - 4))] || gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[l * gpMap.width].groundIndex + 5 * (4 * m - 4))] == 8) ) v44 = 1; if ( m > 0 && l > 0 && (!gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l - 1) * gpMap.width].groundIndex + 5 * (4 * m - 4))] || gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l - 1) * gpMap.width].groundIndex + 5 * (4 * m - 4))] == 8) ) v34 = 1; if ( m > 0 && MAP_HEIGHT - 1 > l && (!gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l + 1) * gpMap.width].groundIndex + 5 * (4 * m - 4))] || gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l + 1) * gpMap.width].groundIndex + 5 * (4 * m - 4))] == 8) ) v17 = 1; if ( MAP_WIDTH - 1 > m && MAP_HEIGHT - 1 > l && (!gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l + 1) * gpMap.width].groundIndex + 5 * (4 * m + 4))] || gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l + 1) * gpMap.width].groundIndex + 5 * (4 * m + 4))] == 8) ) v23 = 1; if ( MAP_WIDTH - 1 > m && l > 0 && (!gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l - 1) * gpMap.width].groundIndex + 5 * (4 * m + 4))] || gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l - 1) * gpMap.width].groundIndex + 5 * (4 * m + 4))] == 8) ) v37 = 1; } v11->displayFlags &= 0xFCu; if ( (v10 || v45 || v43 || v40 || v9 || v14 || v31 || v47) && (v37 || v34 || v23 || v17 || v33 || v46 || v20 || v44) && (v9 || v14 || v31 || v47 || v33 || v46 || v20 || v44) ) { if ( v33 ) { if ( v44 ) { sub_40537D(m, l, v13, 6); v11->displayFlags |= 2u; } else if ( v20 ) { sub_40537D(m, l, v13, 6); } else if ( v31 ) { sub_40537D(m, l, v13, 14); } else if ( v47 ) { sub_40537D(m, l, v13, 14); v11->displayFlags |= 2u; } else { sub_40537D(m, l, v13, 5); } } else if ( v46 ) { if ( v44 ) { sub_40537D(m, l, v13, 6); v11->displayFlags |= 3u; } else if ( v20 ) { sub_40537D(m, l, v13, 6); v11->displayFlags |= 1u; } else if ( v31 ) { sub_40537D(m, l, v13, 14); v11->displayFlags |= 1u; } else if ( v47 ) { sub_40537D(m, l, v13, 14); v11->displayFlags |= 3u; } else { sub_40537D(m, l, v13, 5); v11->displayFlags |= 1u; } } else if ( v20 ) { if ( v9 ) { sub_40537D(m, l, v13, 15); } else if ( v14 ) { sub_40537D(m, l, v13, 15); v11->displayFlags |= 1u; } else { sub_40537D(m, l, v13, 7); } } else if ( v44 ) { if ( v9 ) { sub_40537D(m, l, v13, 15); v11->displayFlags |= 2u; } else if ( v14 ) { sub_40537D(m, l, v13, 15); v11->displayFlags |= 3u; } else { sub_40537D(m, l, v13, 7); v11->displayFlags |= 2u; } } else if ( v9 ) { if ( v47 ) { if ( v17 ) { sub_40537D(m, l, v13, 10); v11->displayFlags |= 2u; } else if ( v37 ) { sub_40537D(m, l, v13, 11); v11->displayFlags |= 2u; } else { sub_40537D(m, l, v13, 2); v11->displayFlags |= 2u; } } else if ( v31 ) { if ( v23 ) { sub_40537D(m, l, v13, 10); } else if ( v34 ) { sub_40537D(m, l, v13, 11); } else { sub_40537D(m, l, v13, 2); } } else if ( v37 ) { sub_40537D(m, l, v13, 12); } else if ( v34 ) { sub_40537D(m, l, v13, 12); v11->displayFlags |= 2u; } else { sub_40537D(m, l, v13, 1); } } else if ( v14 ) { if ( v47 ) { if ( v34 ) { sub_40537D(m, l, v13, 10); v11->displayFlags |= 3u; } else if ( v23 ) { sub_40537D(m, l, v13, 11); v11->displayFlags |= 3u; } else { sub_40537D(m, l, v13, 2); v11->displayFlags |= 3u; } } else if ( v31 ) { if ( v37 ) { sub_40537D(m, l, v13, 10); v11->displayFlags |= 1u; } else if ( v17 ) { sub_40537D(m, l, v13, 11); v11->displayFlags |= 1u; } else { sub_40537D(m, l, v13, 2); v11->displayFlags |= 1u; } } else if ( v23 ) { sub_40537D(m, l, v13, 12); v11->displayFlags |= 1u; } else if ( v17 ) { sub_40537D(m, l, v13, 12); v11->displayFlags |= 3u; } else { sub_40537D(m, l, v13, 1); v11->displayFlags |= 1u; } } else if ( v31 ) { if ( v37 ) { sub_40537D(m, l, v13, 13); } else if ( v23 ) { sub_40537D(m, l, v13, 13); v11->displayFlags |= 1u; } else { sub_40537D(m, l, v13, 3); } } else if ( v47 ) { if ( v34 ) { sub_40537D(m, l, v13, 13); v11->displayFlags |= 2u; } else if ( v17 ) { sub_40537D(m, l, v13, 13); v11->displayFlags |= 3u; } else { sub_40537D(m, l, v13, 3); v11->displayFlags |= 2u; } } } else { if ( v33 ) { if ( v44 ) { sub_40537D(m, l, v13, 6); v11->displayFlags |= 2u; } else if ( v20 ) { sub_40537D(m, l, v13, 6); } else { sub_40537D(m, l, v13, 5); } } else if ( v46 ) { if ( v44 ) { sub_40537D(m, l, v13, 6); v11->displayFlags |= 3u; } else if ( v20 ) { sub_40537D(m, l, v13, 6); v11->displayFlags |= 1u; } else { sub_40537D(m, l, v13, 5); v11->displayFlags |= 1u; } } else if ( v44 ) { sub_40537D(m, l, v13, 7); v11->displayFlags |= 2u; } else if ( v20 ) { sub_40537D(m, l, v13, 7); } if ( !(v33 | v46 | v20 | v44) ) { if ( v9 ) { if ( v47 ) { sub_40537D(m, l, v13, 2); v11->displayFlags |= 2u; } else if ( v31 ) { sub_40537D(m, l, v13, 2); } else { sub_40537D(m, l, v13, 1); } } else if ( v14 ) { if ( v47 ) { sub_40537D(m, l, v13, 2); v11->displayFlags |= 3u; } else if ( v31 ) { sub_40537D(m, l, v13, 2); v11->displayFlags |= 1u; } else { sub_40537D(m, l, v13, 1); v11->displayFlags |= 1u; } } else if ( v47 ) { sub_40537D(m, l, v13, 3); v11->displayFlags |= 2u; } else if ( v31 ) { sub_40537D(m, l, v13, 3); } if ( !(v9 | v14 | v31 | v47) ) { if ( v34 ) { sub_40537D(m, l, v13, 8); v11->displayFlags |= 2u; } else if ( v17 ) { sub_40537D(m, l, v13, 8); v11->displayFlags |= 3u; } else if ( v23 ) { sub_40537D(m, l, v13, 8); v11->displayFlags |= 1u; } else if ( v37 ) { sub_40537D(m, l, v13, 8); } if ( !(v34 | v17 | v37 | v23) ) { if ( v45 ) { sub_40537D(m, l, v13, 4); v11->displayFlags |= 2u; } else if ( v40 ) { sub_40537D(m, l, v13, 4); v11->displayFlags |= 3u; } else if ( v43 ) { sub_40537D(m, l, v13, 4); v11->displayFlags |= 1u; } else if ( v10 ) { sub_40537D(m, l, v13, 4); } if ( !(v10 | v43 | v45 | v40) ) sub_40537D(m, l, v13, 0); } } } } } } } sub_40C704(); LogStr("PB 5"); } } // 409D94: using guessed type char Dst[12]; //----- (0040C704) -------------------------------------------------------- void __cdecl sub_40C704() { int v0; // edx@46 int v1; // edx@49 int v2; // edx@52 int v3; // edx@55 int v4; // ecx@104 int v5; // [sp+Ch] [bp-70h]@6 mapCell *v6; // [sp+18h] [bp-64h]@5 mapCell *v7; // [sp+18h] [bp-64h]@43 int v8; // [sp+1Ch] [bp-60h]@43 int v9; // [sp+1Ch] [bp-60h]@104 void *Src; // [sp+20h] [bp-5Ch]@1 void *Dst; // [sp+28h] [bp-54h]@1 int v12; // [sp+2Ch] [bp-50h]@36 int j; // [sp+3Ch] [bp-40h]@3 int m; // [sp+3Ch] [bp-40h]@19 int ii; // [sp+3Ch] [bp-40h]@41 int kk; // [sp+3Ch] [bp-40h]@102 signed int k; // [sp+40h] [bp-3Ch]@15 int i; // [sp+44h] [bp-38h]@1 int l; // [sp+44h] [bp-38h]@17 int n; // [sp+44h] [bp-38h]@39 int jj; // [sp+44h] [bp-38h]@100 int v22; // [sp+54h] [bp-28h]@44 char v23; // [sp+58h] [bp-24h]@1 char v24; // [sp+5Ch] [bp-20h]@1 void *v25; // [sp+60h] [bp-1Ch]@1 char v26; // [sp+64h] [bp-18h]@1 int v27; // [sp+68h] [bp-14h]@36 char v28; // [sp+6Ch] [bp-10h]@1 int v29; // [sp+70h] [bp-Ch]@36 char v30; // [sp+74h] [bp-8h]@1 void *v31; // [sp+78h] [bp-4h]@1 v23 = 0; v28 = 17; v24 = 19; v30 = 0; v26 = 2; v25 = BaseAlloc(MAP_HEIGHT * MAP_WIDTH, (int)"F:\\h2xsrc\\Editor\\EDITMGR.CPP", 4638); Dst = BaseAlloc(MAP_HEIGHT * MAP_WIDTH, (int)"F:\\h2xsrc\\Editor\\EDITMGR.CPP", 4639); Src = BaseAlloc(MAP_HEIGHT * MAP_WIDTH, (int)"F:\\h2xsrc\\Editor\\EDITMGR.CPP", 4640); v31 = BaseAlloc(MAP_HEIGHT * MAP_WIDTH, (int)"F:\\h2xsrc\\Editor\\EDITMGR.CPP", 4641); memset(Dst, 128, MAP_HEIGHT * MAP_WIDTH); for ( i = 0; MAP_WIDTH > i; ++i ) { for ( j = 0; MAP_HEIGHT > j; ++j ) { v6 = &gpMap.tiles[j * gpMap.width] + i; if ( gTileTerrainTypes[*(&gpMap.tiles[j * gpMap.width].groundIndex + 10 * i)] ) { *((_BYTE *)Src + i + j * MAP_WIDTH) = 0; } else { *((_BYTE *)Src + i + j * MAP_WIDTH) = -1; v5 = unknownTerrainTileAttribute[v6->groundIndex] & 0x7F; if ( v5 == 2 || v5 == 4 ) *((_BYTE *)Dst + i + j * MAP_WIDTH) = v6->displayFlags & 3 | 0x10; else *((_BYTE *)Dst + i + j * MAP_WIDTH) = 0; } } } for ( k = 0; k <= 3; ++k ) { memcpy(v31, Src, MAP_HEIGHT * MAP_WIDTH); for ( l = 0; MAP_WIDTH > l; ++l ) { for ( m = 0; MAP_HEIGHT > m; ++m ) { if ( *((_BYTE *)v31 + l + m * MAP_WIDTH) & 0x80 ) { if ( k == 3 ) { *((_BYTE *)Dst + l + m * MAP_WIDTH) = 64; } else if ( l > 0 && (signed int)*((_BYTE *)v31 + l + m * MAP_WIDTH - 1) >= 0 || m > 0 && (signed int)*((_BYTE *)v31 + l + MAP_WIDTH * (m - 1)) >= 0 || MAP_WIDTH - 2 > l && (signed int)*((_BYTE *)v31 + l + m * MAP_WIDTH + 1) >= 0 || MAP_HEIGHT - 2 > m && (signed int)*((_BYTE *)v31 + l + MAP_WIDTH * (m + 1)) >= 0 ) { *((_BYTE *)Src + l + m * MAP_WIDTH) = k; } } } } } v27 = 1; v29 = 0; v12 = MAP_WIDTH >> 1; while ( v27 && v29 < v12 ) { memcpy(v25, Dst, MAP_HEIGHT * MAP_WIDTH); v27 = 0; ++v29; for ( n = 0; MAP_WIDTH > n; ++n ) { for ( ii = 0; MAP_HEIGHT > ii; ++ii ) { v7 = &gpMap.tiles[ii * gpMap.width] + n; v8 = unknownTerrainTileAttribute[*(&gpMap.tiles[ii * gpMap.width].groundIndex + 10 * n)] & 0x7F; if ( !*((_BYTE *)v25 + n + ii * MAP_WIDTH) ) { v27 = 1; v22 = 0; if ( n > 0 && *((_BYTE *)v25 + n + ii * MAP_WIDTH - 1) & 0x10 ) { v0 = *((_BYTE *)v25 + n + ii * MAP_WIDTH - 1) & 3; ++*((_BYTE *)&v22 + v0); } if ( ii > 0 && *((_BYTE *)v25 + n + MAP_WIDTH * (ii - 1)) & 0x10 ) { v1 = *((_BYTE *)v25 + MAP_WIDTH * (ii - 1) + n) & 3; ++*((_BYTE *)&v22 + v1); } if ( MAP_WIDTH - 2 > n && *((_BYTE *)v25 + n + ii * MAP_WIDTH + 1) & 0x10 ) { v2 = *((_BYTE *)v25 + ii * MAP_WIDTH + n + 1) & 3; ++*((_BYTE *)&v22 + v2); } if ( MAP_HEIGHT - 2 > ii && *((_BYTE *)v25 + n + MAP_WIDTH * (ii + 1)) & 0x10 ) { v3 = *((_BYTE *)v25 + MAP_WIDTH * (ii + 1) + n) & 3; ++*((_BYTE *)&v22 + v3); } if ( v22 ) { if ( v8 != 3 && v8 != 17 ) { if ( v8 != 1 && v8 != 16 ) { if ( BYTE3(v22) && BYTE2(v22) <= (signed int)BYTE3(v22) && BYTE3(v22) >= (signed int)(unsigned __int8)v22 && BYTE3(v22) >= (signed int)BYTE1(v22) ) { *((_BYTE *)Dst + n + ii * MAP_WIDTH) = 19; } else if ( BYTE1(v22) && BYTE2(v22) <= (signed int)BYTE1(v22) && (unsigned __int8)v22 <= (signed int)BYTE1(v22) ) { *((_BYTE *)Dst + n + ii * MAP_WIDTH) = 17; } else if ( BYTE2(v22) < (signed int)(unsigned __int8)v22 ) { *((_BYTE *)Dst + n + ii * MAP_WIDTH) = 16; } else { *((_BYTE *)Dst + n + ii * MAP_WIDTH) = 18; } } else if ( v7->displayFlags & 1 ) { if ( BYTE1(v22) || BYTE3(v22) ) { if ( BYTE3(v22) >= (signed int)BYTE1(v22) ) *((_BYTE *)Dst + n + ii * MAP_WIDTH) = 19; else *((_BYTE *)Dst + n + ii * MAP_WIDTH) = 17; } } else if ( (_BYTE)v22 || BYTE2(v22) ) { if ( BYTE2(v22) >= (signed int)(unsigned __int8)v22 ) *((_BYTE *)Dst + n + ii * MAP_WIDTH) = 18; else *((_BYTE *)Dst + n + ii * MAP_WIDTH) = 16; } } else if ( v7->displayFlags & 2 ) { if ( HIWORD(v22) ) { if ( BYTE2(v22) <= (signed int)BYTE3(v22) ) *((_BYTE *)Dst + n + ii * MAP_WIDTH) = 19; else *((_BYTE *)Dst + n + ii * MAP_WIDTH) = 18; } } else if ( (_WORD)v22 ) { if ( (unsigned __int8)v22 <= (signed int)BYTE1(v22) ) *((_BYTE *)Dst + n + ii * MAP_WIDTH) = 17; else *((_BYTE *)Dst + n + ii * MAP_WIDTH) = 16; } } } } } memcpy(v25, Dst, MAP_HEIGHT * MAP_WIDTH); } for ( jj = 0; MAP_WIDTH > jj; ++jj ) { for ( kk = 0; MAP_HEIGHT > kk; ++kk ) { v4 = *(&gpMap.tiles[kk * gpMap.width].groundIndex + 10 * jj); v9 = unknownTerrainTileAttribute[v4] & 0x7F; if ( *((_BYTE *)v25 + jj + kk * MAP_WIDTH) & 0x10 ) { if ( v9 != 3 && v9 != 17 ) { if ( v9 != 1 && v9 != 16 ) { if ( !(unknownTerrainTileAttribute[v4] & 0x7F) || v9 == 18 || v9 == 19 || v9 == 20 || v9 == 21 ) { switch ( *((_BYTE *)v25 + jj + kk * MAP_WIDTH) ) { case 0x10: sub_40537D(jj, kk, 0, 18); break; case 0x11: sub_40537D(jj, kk, 0, 20); break; case 0x13: sub_40537D(jj, kk, 0, 21); break; case 0x12: sub_40537D(jj, kk, 0, 19); break; } } } else if ( *((_BYTE *)v25 + jj + kk * MAP_WIDTH) != 16 && *((_BYTE *)v25 + jj + kk * MAP_WIDTH) != 17 ) { sub_40537D(jj, kk, 0, 16); } else { sub_40537D(jj, kk, 0, 1); } } else if ( *((_BYTE *)v25 + jj + kk * MAP_WIDTH) != 18 && *((_BYTE *)v25 + jj + kk * MAP_WIDTH) != 16 ) { sub_40537D(jj, kk, 0, 17); } else { sub_40537D(jj, kk, 0, 3); } } else if ( !gTileTerrainTypes[*(&gpMap.tiles[kk * gpMap.width].groundIndex + 10 * jj)] && (!(unknownTerrainTileAttribute[v4] & 0x7F) || v9 == 18 || v9 == 19 || v9 == 20 || v9 == 21) ) { sub_40537D(jj, kk, 0, 0); } } } BaseFree(v25, "F:\\h2xsrc\\Editor\\EDITMGR.CPP", 4885); BaseFree(Dst, "F:\\h2xsrc\\Editor\\EDITMGR.CPP", 4886); BaseFree(Src, "F:\\h2xsrc\\Editor\\EDITMGR.CPP", 4887); BaseFree(v31, "F:\\h2xsrc\\Editor\\EDITMGR.CPP", 4888); } //----- (0040D2A5) -------------------------------------------------------- void __thiscall editManager::ScreenScroll(editManager *this, int a2, int a3) { editManager *thisa; // [sp+10h] [bp-Ch]@1 int v4; // [sp+14h] [bp-8h]@1 int v5; // [sp+18h] [bp-4h]@1 thisa = this; v4 = this->cellLeft; v5 = this->cellTop; iLastScrollTime = KBTickCount(); switch ( a2 ) { case 0: --v5; break; case 1: ++v4; --v5; break; case 2: ++v4; break; case 3: ++v4; ++v5; break; case 4: ++v5; break; case 5: --v4; ++v5; break; case 6: --v4; break; case 7: --v4; --v5; break; default: break; } if ( a3 ) mouseManager::SetPointer(a2 + 32); if ( v4 < 0 ) v4 = 0; if ( MAP_WIDTH - gCursorPixelSize[thisa->zoomLevel] < v4 ) v4 = MAP_WIDTH - gCursorPixelSize[thisa->zoomLevel]; if ( v5 < 0 ) v5 = 0; if ( MAP_HEIGHT - gCursorPixelSize[thisa->zoomLevel] < v5 ) v5 = MAP_HEIGHT - gCursorPixelSize[thisa->zoomLevel]; if ( thisa->cellLeft != v4 || thisa->cellTop != v5 ) { thisa->cellLeft = v4; thisa->cellTop = v5; sub_40365F(thisa, 1); editManager::UpdateCursor(thisa); RedrawEditPane(); } } // 42F2D0: using guessed type _DWORD __stdcall mouseManager__SetPointer(_DWORD); // 468628: using guessed type int iLastScrollTime; // 46B0F0: using guessed type int gCursorPixelSize[]; //----- (0040D46F) -------------------------------------------------------- DWORD __thiscall advManager::CheckScreenScroll(void *this) { DWORD result; // eax@1 void *v2; // [sp+Ch] [bp-24h]@1 int v3; // [sp+10h] [bp-20h]@2 int v4; // [sp+14h] [bp-1Ch]@2 int v5; // [sp+18h] [bp-18h]@2 int v6; // [sp+1Ch] [bp-14h]@2 __int16 v7; // [sp+20h] [bp-10h]@1 __int16 v8; // [sp+24h] [bp-Ch]@1 __int16 v9; // [sp+28h] [bp-8h]@1 __int16 v10; // [sp+2Ch] [bp-4h]@1 v2 = this; v10 = 8; v7 = 631; v8 = 8; v9 = 472; result = KBTickCount() - iLastScrollTime; if ( (signed int)result > 70 ) { iLastScrollTime = KBTickCount(); v3 = *(_DWORD *)((char *)v2 + 3730); v4 = *(_DWORD *)((char *)v2 + 3734); mouseManager::MouseCoords(&v6, &v5); if ( v6 >= 0 && v6 < 640 && v5 >= 0 && v5 < 480 ) { if ( v6 >= 8 ) { if ( v6 <= 631 ) { if ( v5 >= 8 ) { if ( v5 > 472 ) editManager::ScreenScroll((editManager *)v2, 4, 1); } else { editManager::ScreenScroll((editManager *)v2, 0, 1); } } else if ( v5 >= 8 ) { if ( v5 <= 472 ) editManager::ScreenScroll((editManager *)v2, 2, 1); else editManager::ScreenScroll((editManager *)v2, 3, 1); } else { editManager::ScreenScroll((editManager *)v2, 1, 1); } } else if ( v5 >= 8 ) { if ( v5 <= 472 ) editManager::ScreenScroll((editManager *)v2, 6, 1); else editManager::ScreenScroll((editManager *)v2, 5, 1); } else { editManager::ScreenScroll((editManager *)v2, 7, 1); } } result = (DWORD)gpMouseManager; if ( gpMouseManager->spriteIdx >= 32 ) { result = (DWORD)gpMouseManager; if ( gpMouseManager->spriteIdx < 40 ) { result = (DWORD)v2; if ( *(_DWORD *)((char *)v2 + 3730) == v3 ) { result = (DWORD)v2; if ( *(_DWORD *)((char *)v2 + 3734) == v4 ) result = mouseManager::SetPointer(0); } } } } return result; } // 42F2D0: using guessed type _DWORD __stdcall mouseManager__SetPointer(_DWORD); // 42FB60: using guessed type _DWORD __stdcall mouseManager__MouseCoords(_DWORD, _DWORD); // 468628: using guessed type int iLastScrollTime; //----- (0040D642) -------------------------------------------------------- void __cdecl FillInOverlayTiles() { overlay *ovr; // [sp+Ch] [bp-28h]@3 int nextOverlayIconIdxStart; // [sp+10h] [bp-24h]@1 int cellPos; // [sp+14h] [bp-20h]@9 int i; // [sp+18h] [bp-1Ch]@9 int j; // [sp+1Ch] [bp-18h]@11 signed int previousTileset; // [sp+20h] [bp-14h]@1 OVERLAY_CONSTANTS k; // [sp+24h] [bp-10h]@1 int v7; // [sp+28h] [bp-Ch]@1 int nextIconIdx; // [sp+2Ch] [bp-8h]@9 int v9; // [sp+30h] [bp-4h]@3 previousTileset = -1; nextOverlayIconIdxStart = 0; v7 = 0; for ( k = 0; k < NUM_OVERLAYS; ++k ) { v9 = 0; ovr = &gOverlayDatabase[k]; if ( gOverlayDatabase[k].tileset != previousTileset ) nextOverlayIconIdxStart = 0; previousTileset = ovr->tileset; if ( ovr->field_4E == 1111 ) nextOverlayIconIdxStart = v7; if ( !ovr->field_4E ) nextOverlayIconIdxStart = 0; nextIconIdx = nextOverlayIconIdxStart; v7 = nextOverlayIconIdxStart; cellPos = 0; for ( i = 0; i < 6; ++i ) { for ( j = 0; j < 8; ++j ) { if ( OverlayMaskBitSet(&ovr->intersectsTileMask, j, i) ) { if ( 8 - j > v9 ) v9 = 8 - j; if ( ovr->field_4E >= 0 ) ovr->fullGridIconIndices[cellPos] = nextIconIdx; if ( OverlayMaskBitSet(&ovr->animatedLateOverlay, j, i) ) { nextIconIdx += ovr->iconIdxGap + 1; nextOverlayIconIdxStart += ovr->iconIdxGap + 1; } else { ++nextIconIdx; ++nextOverlayIconIdxStart; } } else if ( ovr->field_4E >= 0 ) { ovr->fullGridIconIndices[cellPos] = -1; } ++cellPos; } } ovr->field_4D = v9; } } //----- (0040D7F6) -------------------------------------------------------- int __fastcall HasExtraObjectData(int id) { return id == 163 // Heroes, towns, castles signs, sphinxes, bottles, events, jails || id == 176 || id == 177 || id == 130 || id == 207 || id == 221 || id == 147 || id == 183 || id == 251; } //----- (0040D88D) -------------------------------------------------------- int __fastcall LocationHasSpecialDetails(int loc) { return loc == 172 || loc == 163 || loc == 176 || loc == 177 || loc == 130 || loc == 207 || loc == 221 || loc == 147 || loc == 183 || loc == 152 || loc == 175 || loc == 179 || loc == 180 || loc == 181 || loc == 182 || loc == 251; } //----- (0040D97F) -------------------------------------------------------- void __fastcall DeleteExtraObjectData(unsigned int idx) { mapCell *cell; // [sp+10h] [bp-10h]@17 signed int i; // [sp+14h] [bp-Ch]@3 signed int j; // [sp+14h] [bp-Ch]@8 int l; // [sp+18h] [bp-8h]@15 int k; // [sp+1Ch] [bp-4h]@13 BaseFree(gpEditManager->mapExtra[idx], "F:\\h2xsrc\\Editor\\EDITMGR.CPP", 5174); if ( gpEditManager->nMapExtra > idx + 1 ) { memmove( &gpEditManager->mapExtra[idx], &gpEditManager->mapExtra[idx + 1], 4 * (gpEditManager->nMapExtra - (idx + 1))); memmove( &gpEditManager->lenMapExtra[idx], &gpEditManager->lenMapExtra[idx + 1], 2 * (gpEditManager->nMapExtra - (idx + 1))); } --gpEditManager->nMapExtra; for ( i = 0; (unsigned __int8)gpMapHeader.numRumors > i; ++i ) { if ( gpRumorIndices[i] >= idx ) --gpRumorIndices[i]; } for ( j = 0; (unsigned __int8)gpMapHeader.numEvents > j; ++j ) { if ( gpEventDataIndices[j] >= idx ) --gpEventDataIndices[j]; } for ( k = 0; k < MAP_WIDTH; ++k ) { for ( l = 0; l < MAP_HEIGHT; ++l ) { cell = &gpMap.tiles[l * gpMap.width] + k; if ( HasExtraObjectData(*(&gpMap.tiles[k].objType + 20 * l * gpMap.width)) && (unsigned __int8)((unsigned __int8)(cell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5) >= idx ) cell->field_4_1_1_isShadow_1_13_extraInfo = cell->field_4_1_1_isShadow_1_13_extraInfo & 7 | (8 * (cell->field_4_1_1_isShadow_1_13_extraInfo >> 3) - 8); } } } //----- (0040DBA7) -------------------------------------------------------- void *__thiscall editManager::CoalesceObjectData(editManager *this) { mapCell *cell; // [sp+10h] [bp-210h]@11 char keep[512]; // [sp+14h] [bp-20Ch]@1 unsigned int idx; // [sp+214h] [bp-Ch]@1 int j; // [sp+218h] [bp-8h]@9 int i; // [sp+21Ch] [bp-4h]@7 memset(keep, 0, 0x200u); for ( idx = 0; (unsigned __int8)gpMapHeader.numEvents > (signed int)idx; ++idx ) keep[gpEventDataIndices[idx]] = 1; for ( idx = 0; (unsigned __int8)gpMapHeader.numRumors > (signed int)idx; ++idx ) keep[gpRumorIndices[idx]] = 1; for ( i = 0; MAP_WIDTH > i; ++i ) { for ( j = 0; MAP_HEIGHT > j; ++j ) { cell = &gpMap.tiles[j * gpMap.width] + i; if ( HasExtraObjectData(*(&gpMap.tiles[i].objType + 20 * j * gpMap.width)) ) keep[(unsigned __int8)((unsigned __int8)(cell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)] = 1; } } for ( idx = this->nMapExtra - 1; (signed int)idx >= 1; --idx ) { if ( !keep[idx] ) DeleteExtraObjectData(idx); } return CopyMap(); } // 40DBA7: using guessed type char keep[512]; //----- (0040DD3D) -------------------------------------------------------- void __cdecl CalculatePlayerNumbers() { TownExtra *cstl; // [sp+Ch] [bp-60h]@35 char playerHasFaction[6][7]; // [sp+10h] [bp-5Ch]@26 mapCell *cell; // [sp+3Ch] [bp-30h]@30 int numFactions; // [sp+40h] [bp-2Ch]@45 int l; // [sp+44h] [bp-28h]@45 int numPlayers; // [sp+48h] [bp-24h]@1 int i; // [sp+4Ch] [bp-20h]@1 int k; // [sp+50h] [bp-1Ch]@28 int j; // [sp+54h] [bp-18h]@26 int faction; // [sp+58h] [bp-14h]@31 int player; // [sp+5Ch] [bp-10h]@31 int maxHumans; // [sp+60h] [bp-Ch]@1 int lastFaction; // [sp+64h] [bp-8h]@39 int minHumans; // [sp+68h] [bp-4h]@1 maxHumans = 0; numPlayers = 0; minHumans = 0; for ( i = 0; i < 6; ++i ) { if ( gpMapHeader.hasPlayer[i] ) { if ( !gpMapHeader.playerMayBeHuman[i] && !gpMapHeader.playerMayBeComp[i] ) gpMapHeader.playerMayBeComp[i] = 1; if ( gpMapHeader.playerMayBeHuman[i] ) ++maxHumans; if ( gpMapHeader.playerMayBeHuman[i] || gpMapHeader.playerMayBeComp[i] ) ++numPlayers; if ( gpMapHeader.playerMayBeHuman[i] ) { if ( !gpMapHeader.playerMayBeComp[i] ) ++minHumans; } } else { gpMapHeader.playerMayBeHuman[i] = 0; gpMapHeader.playerMayBeComp[i] = 0; } } if ( !maxHumans ) { for ( i = 0; i < 6; ++i ) { if ( gpMapHeader.hasPlayer[i] ) { gpMapHeader.playerMayBeHuman[i] = 1; maxHumans = 1; minHumans = 1; break; } } } gpMapHeader.numPlayers = numPlayers; gpMapHeader.minHumans = minHumans; gpMapHeader.maxHumans = maxHumans; for ( i = 0; i < 6; ++i ) gpMapHeader.playerFactions[i] = -1; memset(playerHasFaction, 0, 42u); for ( j = 0; j < MAP_WIDTH; ++j ) { for ( k = 0; k < MAP_HEIGHT; ++k ) { cell = &gpMap.tiles[k * gpMap.width] + j; if ( *(&gpMap.tiles[j].objType + 20 * k * gpMap.width) == 183 ) { player = cell->objectIndex / 7; faction = cell->objectIndex % 7; *(&playerHasFaction[0][8 * player] + faction - player) = 1; } if ( cell->objType == 177 || cell->objType == 176 || cell->objType == 163 ) { cstl = (TownExtra *)gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(cell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)]; if ( cstl->color != -1 ) { player = cstl->color; faction = cstl->faction; *(&playerHasFaction[0][8 * player] + faction - player) = 1; } } } } lastFaction = 0; for ( i = 0; i < 6; ++i ) { if ( gpMapHeader.hasPlayer[i] ) { if ( playerHasFaction[i][6] ) { gpMapHeader.playerFactions[i] = 7; } else { numFactions = 0; for ( l = 0; l < 6; ++l ) { if ( playerHasFaction[i][l] ) { ++numFactions; lastFaction = l; } } if ( numFactions == 1 ) gpMapHeader.playerFactions[i] = lastFaction; else gpMapHeader.playerFactions[i] = 6; } } } } //----- (0040E109) -------------------------------------------------------- void __cdecl ResetPlayerAvailability() { TownExtra *v0; // [sp+Ch] [bp-14h]@10 mapCell *cell; // [sp+10h] [bp-10h]@5 int j; // [sp+14h] [bp-Ch]@3 int i; // [sp+1Ch] [bp-4h]@1 memset(gpMapHeader.hasPlayer, 0, 6u); for ( i = 0; i < MAP_WIDTH; ++i ) { for ( j = 0; j < MAP_HEIGHT; ++j ) { cell = &gpMap.tiles[j * gpMap.width] + i; if ( *(&gpMap.tiles[i].objType + 20 * j * gpMap.width) == 183 ) gpMapHeader.hasPlayer[cell->objectIndex / 7] = 1; if ( cell->objType == 163 || cell->objType == 176 || cell->objType == 177 ) { v0 = (TownExtra *)gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(cell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)]; if ( v0->color != -1 ) gpMapHeader.hasPlayer[v0->color] = 1; } } } CalculatePlayerNumbers(); } //----- (0040E247) -------------------------------------------------------- int __thiscall editManager::RandomizeTownNames(editManager *this) { int result; // eax@2 mapCell *cell; // [sp+10h] [bp-64h]@5 TownExtra *cstl; // [sp+14h] [bp-60h]@8 char nameTaken[72]; // [sp+18h] [bp-5Ch]@1 int j; // [sp+60h] [bp-14h]@3 int k; // [sp+64h] [bp-10h]@8 int i; // [sp+68h] [bp-Ch]@1 memset(nameTaken, 0, 0x48u); for ( i = 0; ; ++i ) { result = MAP_WIDTH; if ( i >= MAP_WIDTH ) break; for ( j = 0; j < MAP_HEIGHT; ++j ) { cell = &gpMap.tiles[j * gpMap.width] + i; if ( *(&gpMap.tiles[i].objType + 20 * j * gpMap.width) == 163 || cell->objType == 176 || cell->objType == 177 ) { cstl = (TownExtra *)gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(cell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)]; for ( k = 0; k < 72; ++k ) { if ( !strcmp(cstl->name, gpTownNames[k]) || !strnicmp(cstl->name, "dusk", 4u) || !strnicmp(cstl->name, "necr", 4u) ) { if ( !strnicmp(cstl->name, "dusk", 4u) || !strnicmp(cstl->name, "necr", 4u) ) nameTaken[k] = 1; if ( nameTaken[k] ) { while ( nameTaken[k] ) k = Random(0, 71); strcpy(cstl->name, gpTownNames[k]); } nameTaken[k] = 1; break; } } } } } return result; } // 4343F0: using guessed type int __fastcall Random(_DWORD, _DWORD); // 40E247: using guessed type char nameTaken[72]; //----- (0040E52F) -------------------------------------------------------- signed int __stdcall sub_40E52F(int a1, int a2, int a3) { int v4; // [sp+10h] [bp-10h]@1 mapCell *v5; // [sp+14h] [bp-Ch]@5 int i; // [sp+18h] [bp-8h]@1 int j; // [sp+1Ch] [bp-4h]@3 v4 = 0; for ( i = 0; i < MAP_HEIGHT; ++i ) { for ( j = 0; j < MAP_WIDTH; ++j ) { v5 = &gpMap.tiles[i * gpMap.width] + j; if ( *(&gpMap.tiles[j].objType + 20 * i * gpMap.width) == 176 || v5->objType == 177 || v5->objType == 163 ) { if ( a1 == v4 ) { *(_DWORD *)a2 = j; *(_DWORD *)a3 = i; return 1; } ++v4; } } } *(_DWORD *)a3 = -1; *(_DWORD *)a2 = *(_DWORD *)a3; return 0; } //----- (0040E634) -------------------------------------------------------- signed int __stdcall sub_40E634(int a1, int a2, int a3) { int v4; // [sp+10h] [bp-10h]@1 int i; // [sp+18h] [bp-8h]@1 int j; // [sp+1Ch] [bp-4h]@3 v4 = 0; for ( i = 0; MAP_HEIGHT > i; ++i ) { for ( j = 0; j < MAP_WIDTH; ++j ) { if ( *(&gpMap.tiles[j].objType + 20 * i * gpMap.width) == 183 ) { if ( a1 == v4 ) { *(_DWORD *)a2 = j; *(_DWORD *)a3 = i; return 1; } ++v4; } } } *(_DWORD *)a3 = -1; *(_DWORD *)a2 = *(_DWORD *)a3; return 0; } //----- (0040E712) -------------------------------------------------------- int __cdecl sub_40E712() { heroWindow *v1; // [sp+38h] [bp-8h]@2 int v2; // [sp+3Ch] [bp-4h]@6 if ( operator new(0x44u) ) v1 = heroWindow::heroWindow(144, 40, "ecpanel.bin"); else v1 = 0; if ( !v1 ) MemError(); heroWindowManager::DoDialog(gpWindowManager, v1, sub_40E7FD, 0); operator delete(v1); v2 = -1; switch ( gpWindowManager->buttonPressedCode ) { case 0x65: case 0x66: case 0x69: case 0x6A: v2 = gpWindowManager->buttonPressedCode; break; default: return v2; } return v2; } //----- (0040E7FD) -------------------------------------------------------- signed int __thiscall sub_40E7FD(int this) { signed int result; // eax@32 signed int v2; // [sp+Ch] [bp-E0h]@18 signed int v3; // [sp+14h] [bp-D8h]@5 int v4; // [sp+18h] [bp-D4h]@1 signed int v5; // [sp+1Ch] [bp-D0h]@5 char text; // [sp+20h] [bp-CCh]@19 int v7; // [sp+E8h] [bp-4h]@1 v4 = this; v7 = 0; if ( *(_DWORD *)this == 512 ) { if ( *(_BYTE *)(this + 13) & 2 ) { if ( *(_DWORD *)(this + 4) == 12 || *(_DWORD *)(this + 4) == 14 ) { v5 = -1; v3 = *(_DWORD *)(this + 8); if ( v3 <= 30720 ) { if ( v3 == 30720 ) { v5 = 4; } else { switch ( v3 ) { case 101: v5 = 0; break; case 102: v5 = 1; break; case 106: v5 = 2; break; case 105: v5 = 3; break; default: break; } } } if ( v5 >= 0 ) NormalDialog((&off_46B630)[4 * v5], 4, -1, -1, -1, 0, -1, 0, -1, 0); } } else if ( *(_DWORD *)(this + 4) == 13 ) { v2 = *(_DWORD *)(this + 8); if ( v2 <= 30720 ) { if ( v2 == 30720 ) { LABEL_25: v7 = 1; } else { switch ( v2 ) { case 101: strcpy( &text, "Are you sure you want to create a new map? (Any unsaved changes to the current map will be lost.)"); goto LABEL_22; case 102: strcpy( &text, "Are you sure you want to load a new map? (Any unsaved changes to the current map will be lost.)"); goto LABEL_22; case 105: strcpy(&text, "Are you sure you want to quit?"); LABEL_22: v7 = 1; NormalDialog(&text, 2, -1, -1, -1, 0, -1, 0, -1, 0); if ( gpWindowManager->buttonPressedCode == 30726 ) v7 = 0; break; case 106: goto LABEL_25; default: break; } } } } } if ( v7 ) { gpWindowManager->buttonPressedCode = *(_DWORD *)(v4 + 8); *(_DWORD *)(v4 + 8) = 10; *(_DWORD *)(v4 + 4) = *(_DWORD *)(v4 + 8); result = 2; } else { result = 1; } return result; } //----- (0040EAF4) -------------------------------------------------------- LSTATUS __cdecl combatManager::CombatSystemOptions() { LSTATUS result; // eax@6 bCPrefsChanged = 0; if ( operator new(0x44u) ) CSPanel = heroWindow::heroWindow(160, 33, "espanel.bin"); else CSPanel = 0; if ( !CSPanel ) MemError(); SetWinText(CSPanel, 3); UpdateCombatSystemOptions((void *)1); heroWindowManager::DoDialog(gpWindowManager, CSPanel, (int (__thiscall *)(_DWORD))CombatSystemOptionsHandler, 0); result = operator delete(CSPanel); if ( bCPrefsChanged ) result = WritePrefs(); return result; } // 489E14: using guessed type int bCPrefsChanged; //----- (0040EBC3) -------------------------------------------------------- mouseManager *__thiscall UpdateCombatSystemOptions(void *this) { void *v1; // ST18_4@1 mouseManager *result; // eax@1 tag_message evt; // [sp+10h] [bp-1Ch]@1 v1 = this; evt.eventCode = 512; evt.xCoordOrKeycode = 4; evt.yCoordOrFieldID = 10; evt.payload = *(void **)&editorScreenAnimation; heroWindow::BroadcastMessage(CSPanel, &evt); evt.yCoordOrFieldID = 11; evt.payload = (void *)(*(_DWORD *)&editorPaletteCycling + 2); heroWindow::BroadcastMessage(CSPanel, &evt); evt.yCoordOrFieldID = 13; evt.payload = (void *)(*(_DWORD *)&showObjectBoxes + 4); heroWindow::BroadcastMessage(CSPanel, &evt); evt.yCoordOrFieldID = 14; evt.payload = (void *)(*((_DWORD *)&dword_48EE3C + 7 * giCurExe) + 6); heroWindow::BroadcastMessage(CSPanel, &evt); evt.xCoordOrKeycode = 3; evt.yCoordOrFieldID = 20; evt.payload = (&onOffText)[*(_DWORD *)&editorScreenAnimation]; heroWindow::BroadcastMessage(CSPanel, &evt); evt.yCoordOrFieldID = 21; evt.payload = (&onOffText)[*(_DWORD *)&editorPaletteCycling]; heroWindow::BroadcastMessage(CSPanel, &evt); evt.yCoordOrFieldID = 23; evt.payload = (&onOffText)[*(_DWORD *)&showObjectBoxes]; heroWindow::BroadcastMessage(CSPanel, &evt); evt.yCoordOrFieldID = 24; evt.payload = (&onOffText)[*((_DWORD *)&dword_48EE3C + 7 * giCurExe)]; result = (mouseManager *)heroWindow::BroadcastMessage(CSPanel, &evt); if ( !v1 ) result = heroWindow::DrawWindow((int)CSPanel, 1, 0, 32767); return result; } // 46AE34: using guessed type int giCurExe; // 46C670: using guessed type char **onOffText; //----- (0040ED3D) -------------------------------------------------------- signed int __thiscall CombatSystemOptionsHandler(void *this) { signed int result; // eax@34 int v2; // [sp+14h] [bp-90h]@17 signed int v3; // [sp+18h] [bp-8Ch]@5 void *v4; // [sp+1Ch] [bp-88h]@1 signed int v5; // [sp+20h] [bp-84h]@5 signed int v6; // [sp+9Ch] [bp-8h]@1 signed int v7; // [sp+A0h] [bp-4h]@1 v4 = this; v6 = 0; v7 = 0; if ( *(_DWORD *)this == 512 ) { if ( *((_BYTE *)this + 13) & 2 ) { if ( *((_DWORD *)this + 1) == 12 || *((_DWORD *)this + 1) == 14 ) { v5 = -1; v3 = *((_DWORD *)this + 2); if ( v3 <= 30720 ) { if ( v3 == 30720 ) { v5 = 0; } else { switch ( v3 ) { case 10: v5 = 1; break; case 11: v5 = 2; break; case 13: v5 = 3; break; case 14: v5 = 4; break; default: break; } } } if ( v5 >= 0 ) NormalDialog((&off_46B648)[4 * v5], 4, -1, -1, -1, 0, -1, 0, -1, 0); } } else { v2 = *((_DWORD *)this + 1); if ( v2 == 12 ) { switch ( *((_DWORD *)this + 2) ) { case 0xA: *(_DWORD *)&editorScreenAnimation = 1 - *(_DWORD *)&editorScreenAnimation; v6 = 1; bCPrefsChanged = 1; break; case 0xB: *(_DWORD *)&editorPaletteCycling = 1 - *(_DWORD *)&editorPaletteCycling; gpWindowManager->cycleColors = *(_DWORD *)&editorPaletteCycling; v6 = 1; bCPrefsChanged = 1; break; case 0xD: *(_DWORD *)&showObjectBoxes = 1 - *(_DWORD *)&showObjectBoxes; v6 = 1; bCPrefsChanged = 1; break; case 0xE: *((_DWORD *)&dword_48EE3C + 7 * giCurExe) = 1 - *((_DWORD *)&dword_48EE3C + 7 * giCurExe); v6 = 1; bCPrefsChanged = 1; mouseManager::SetColorMice((int)gpMouseManager, *((_DWORD *)&dword_48EE3C + 7 * giCurExe)); break; default: break; } } else if ( v2 == 13 && *((_DWORD *)this + 2) == 30720 ) { v7 = 1; } } } if ( v6 ) UpdateCombatSystemOptions(0); if ( v7 ) { gpWindowManager->buttonPressedCode = *((_DWORD *)v4 + 2); *((_DWORD *)v4 + 2) = 10; *((_DWORD *)v4 + 1) = *((_DWORD *)v4 + 2); result = 2; } else { result = 1; } return result; } // 46AE34: using guessed type int giCurExe; // 489E14: using guessed type int bCPrefsChanged; //----- (0040F0A7) -------------------------------------------------------- void __thiscall sub_40F0A7(void *this) { void *v1; // ST24_4@1 int v2; // edx@1 int v3; // ST2C_4@1 float v4; // ST10_4@1 int a5; // [sp+24h] [bp-Ch]@1 int a4; // [sp+28h] [bp-8h]@1 int a1; // [sp+2Ch] [bp-4h]@1 v1 = this; CopyMap(); mouseManager::MouseCoords(&a4, &a5); editManager::ToCellIdx((editManager *)v1, &a4, &a5); a4 += *(_DWORD *)((char *)v1 + 3730); a5 += *(_DWORD *)((char *)v1 + 3734); v2 = *(&gpMap.tiles[a5 * gpMap.width].groundIndex + 10 * a4); a1 = gTileTerrainTypes[v2]; v3 = (unknownTerrainTileAttribute[v2] & 0x80) == 0; v4 = (double)((unsigned int)v3 >= 1); *(&gpMap.tiles[a5 * gpMap.width].groundIndex + 10 * a4) = SelectTerrainTile( a1, unknownTerrainTileAttribute[v2] & 0x7F, 1, a4, a5, v3, v4); editManager::UpdateCursor((editManager *)v1); RedrawEditPane(); } // 42FB60: using guessed type _DWORD __stdcall mouseManager__MouseCoords(_DWORD, _DWORD); //----- (0040F1D8) -------------------------------------------------------- void __thiscall sub_40F1D8(void *ecx0, int a2) { __int16 v2; // ax@12 void *this; // [sp+Ch] [bp-48h]@1 mapCell *v4; // [sp+14h] [bp-40h]@11 int v5; // [sp+18h] [bp-3Ch]@1 int v6; // [sp+1Ch] [bp-38h]@1 int v7; // [sp+20h] [bp-34h]@1 int v8; // [sp+24h] [bp-30h]@1 int v9; // [sp+28h] [bp-2Ch]@1 int v10; // [sp+2Ch] [bp-28h]@1 int v11; // [sp+30h] [bp-24h]@1 int v12; // [sp+34h] [bp-20h]@1 int v13; // [sp+38h] [bp-1Ch]@1 int v14; // [sp+3Ch] [bp-18h]@1 int a5; // [sp+40h] [bp-14h]@3 int a4; // [sp+44h] [bp-10h]@1 int v17; // [sp+48h] [bp-Ch]@7 int v18; // [sp+4Ch] [bp-8h]@5 int a1; // [sp+50h] [bp-4h]@5 this = ecx0; CopyMap(); v5 = 0; v6 = 1045220557; v7 = 1053609165; v8 = 1058642330; v9 = 1061997773; v10 = 1065353216; v11 = 1067869798; v12 = 1070386381; v13 = 1073741824; v14 = 1075419546; for ( a4 = 0; MAP_WIDTH > a4; ++a4 ) { for ( a5 = 0; MAP_HEIGHT > a5; ++a5 ) { v18 = *(&gpMap.tiles[a5 * gpMap.width].groundIndex + 10 * a4); a1 = gTileTerrainTypes[v18]; v17 = *(&gpMap.tiles[a4].objectIndex + 20 * a5 * gpMap.width) == 255 && *(&gpMap.tiles[a4].overlayIndex + 20 * a5 * gpMap.width) == 255; if ( !a2 ) v17 = 0; v4 = &gpMap.tiles[a5 * gpMap.width] + a4; if ( v17 ) v2 = SelectTerrainTile(a1, unknownTerrainTileAttribute[v18] & 0x7F, 1, a4, a5, 0, *((float *)&v5 + a2)); else v2 = SelectTerrainTile(a1, unknownTerrainTileAttribute[v18] & 0x7F, 1, a4, a5, 0, 0.0); v4->groundIndex = v2; } } editManager::UpdateCursor((editManager *)this); RedrawEditPane(); } //----- (0040F3D2) -------------------------------------------------------- char __cdecl IsExpansionMap() { char result; // al@7 void *v1; // [sp+10h] [bp-20h]@31 mapCell *cell; // [sp+20h] [bp-10h]@6 signed int j; // [sp+24h] [bp-Ch]@13 int i; // [sp+28h] [bp-8h]@1 int tileIdx; // [sp+2Ch] [bp-4h]@3 for ( i = 0; ; ++i ) { if ( MAP_HEIGHT <= i ) return 0; tileIdx = 0; LABEL_5: if ( MAP_WIDTH > tileIdx ) break; } cell = &gpMap.tiles[i * gpMap.width] + tileIdx; switch ( *(&gpMap.tiles[tileIdx].objType + 20 * i * gpMap.width) & 0x7F ) { case LOCATION_BARRIER: case LOCATION_TRAVELLER_TENT: case LOCATION_EXPANSION_DWELLING: case LOCATION_ALCHEMIST_TOWER: case LOCATION_JAIL: result = 1; break; case LOCATION_ARTIFACT: if ( (cell->objectIndex & 0xFE) <= 162 ) goto LABEL_4; result = 1; break; case LOCATION_RANDOM_HERO: if ( !(cell->objType == LOCATION_RANDOM_HERO | 0x80) || !((unsigned __int8)(cell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5) ) goto LABEL_4; for ( j = 0; ; ++j ) { if ( j >= 3 ) goto LABEL_4; if ( (signed int)*((_BYTE *)gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(cell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)] + j + 19) > 81 ) break; } result = 1; break; case LOCATION_SPHINX: if ( !(cell->objType == LOCATION_SPHINX | 0x80) || !((unsigned __int8)(cell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5) || (signed int)*(_WORD *)((char *)gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(cell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)] + 29) <= 81 ) goto LABEL_4; result = 1; break; case LOCATION_EVENT: if ( !(cell->objType == 19 | 0x80) || !((unsigned __int8)(cell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5) || (signed int)*(_WORD *)((char *)gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(cell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)] + 29) <= 81 ) goto LABEL_4; result = 1; break; case LOCATION_TOWN: if ( !(cell->objType == LOCATION_TOWN | 0x80) ) goto LABEL_4; if ( !((unsigned __int8)(cell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5) ) goto LABEL_4; v1 = gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(cell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)]; if ( *((_BYTE *)v1 + 38) != 5 || !*((_BYTE *)v1 + 1) || !(*((_BYTE *)v1 + 2) & 4) ) goto LABEL_4; result = 1; break; default: LABEL_4: ++tileIdx; goto LABEL_5; } return result; } //----- (0040F74A) -------------------------------------------------------- int __cdecl sub_40F74A() { int result; // eax@3 fullMap *i; // [sp+Ch] [bp-8h]@1 signed int v2; // [sp+10h] [bp-4h]@1 v2 = 2; for ( i = &gpMap; ; ++i ) { --v2; if ( v2 < 0 ) break; result = MapTiles_constructor(i); } return result; } // 4279C0: using guessed type int __thiscall MapTiles_constructor(_DWORD); //----- (0040F7A7) -------------------------------------------------------- void __cdecl sub_40F7A7() { fullMap *i; // [sp+Ch] [bp-8h]@1 signed int v1; // [sp+10h] [bp-4h]@1 v1 = 2; for ( i = &gpMap + 2; ; fullMap::_fullMap(i) ) { --v1; if ( v1 < 0 ) break; --i; } } //----- (0040F7F3) -------------------------------------------------------- void __cdecl PollSound() { if ( !dword_46D620 ) { dword_46D620 = 1; if ( (signed int)KBTickCount() > dword_48F138 && !gbPutzingWithMouseCtr ) { dword_48F138 = KBTickCount() + 13; mouseManager::NewUpdate((int)gpMouseManager, 0); } if ( (signed int)KBTickCount() > dword_48F13C ) { dword_48F13C = KBTickCount() + 200; if ( giGraphicsType == 1 ) { if ( giMainVideoModeColorDepth != 8 ) dword_48F13C += 300; } CycleColors(0); } dword_46D620 = 0; } } // 469B2C: using guessed type int giMainVideoModeColorDepth; // 46ADA4: using guessed type int gbPutzingWithMouseCtr; // 46D620: using guessed type int dword_46D620; // 4843E8: using guessed type int giGraphicsType; // 48F138: using guessed type int dword_48F138; // 48F13C: using guessed type int dword_48F13C; //----- (0040F8AC) -------------------------------------------------------- void __cdecl sub_40F8AC() { signed int i; // [sp+Ch] [bp-4h]@2 if ( !gJVCMode ) { for ( i = 0; i < 36; ++i ) { if ( !stricmp(mapFilename, (const char *)funnyMapNameList[i]) ) { strcpy(mapFilename, funnyMapNameList[i][1]); memmove(&gpMapHeader.name[1], gpMapHeader.name, 0x3Bu); gpMapHeader.name[59] = 0; gpMapHeader.name[0] = 95; } } } } // 46ADE8: using guessed type int gJVCMode; //----- (0040F964) -------------------------------------------------------- int __cdecl oldmain() { char Dest; // [sp+1Ch] [bp-138h]@13 heroWindow *v2; // [sp+148h] [bp-Ch]@3 int v3; // [sp+14Ch] [bp-8h]@3 int v4; // [sp+150h] [bp-4h]@3 if ( executive::InitSystem((void *)gpExec) ) ShutDown("Can't init system"); KBChangeMenu(hmnuDflt); smalFont = (font *)resourceManager::GetFont("smalfont.fnt"); bigFont = resourceManager::GetFont("BIGfont.fnt"); gPalette = (int)resourceManager::GetPalette((int)"kb.pal"); resourceManager::GetBackdrop((void *)gpResourceManager, (int)"editor.icn", (int)gpWindowManager->screenBuffer, 1); heroWindowManager::UpdateScreen(gpWindowManager); heroWindowManager::FadeScreen(gpWindowManager, 0, 6, gPalette); mouseManager::SetPointer("editor.mse", 0, -999); mouseManager::SetColorMice((int)gpMouseManager, *((_DWORD *)&dword_48EE3C + 7 * giCurExe)); mouseManager::ShowColorPointer(gpMouseManager); v2 = 0; v3 = -1; v4 = 1; while ( v4 ) { dword_46AEC8 = 1; if ( operator new(0x44u) ) v2 = heroWindow::heroWindow(405, 8, "stpemain.bin"); else v2 = 0; if ( !v2 ) MemError(); heroWindowManager::DoDialog(gpWindowManager, v2, (int (__thiscall *)(_DWORD))sub_41C290, 0); operator delete(v2); v3 = gpWindowManager->buttonPressedCode; dword_46AEC8 = 0; if ( v3 > 105 ) { if ( v3 == 30721 ) { LABEL_17: heroWindowManager::FadeScreen(gpWindowManager, 1, 6, gPalette); ShutDown(0); } } else { if ( v3 == 105 ) goto LABEL_17; if ( v3 == 1 ) { if ( sub_41BD90() ) v4 = 0; } else if ( v3 == 2 ) { if ( sub_407FBF((void *)4) ) v4 = 0; sprintf(&Dest, mapFilename); } } } mouseManager::HideColorPointer(gpMouseManager); heroWindowManager::FadeScreen(gpWindowManager, 1, 8, gPalette); memset(gpWindowManager->screenBuffer->contents, 36, 0x4B000u); if ( executive::AddManager(gpExec, (int)gpEditManager, -1) ) ShutDown("Can't add manager!"); if ( v3 == 2 ) { strcpy(mapFilename, &Dest); editManager::Load(gpEditManager, mapFilename); sub_40F8AC(); } sub_40365F(gpEditManager, 1); editManager::UpdateCursor(gpEditManager); RedrawEditPane(); heroWindowManager::FadeScreen(gpWindowManager, 0, 8, gPalette); gpWindowManager->cycleColors = *(_DWORD *)&editorPaletteCycling; executive::MainLoop((void *)gpExec); executive::RemoveManager(gpEditManager); heroWindowManager::FadeScreen(gpWindowManager, 1, 6, gPalette); resourceManager::Dispose(gPalette); ShutDown(0); return 0; } // 424B97: using guessed type void __fastcall KBChangeMenu(void *); // 42F190: using guessed type _DWORD __stdcall mouseManager__SetPointer(_DWORD, _DWORD, _DWORD); // 42FD90: using guessed type int __thiscall mouseManager__HideColorPointer(_DWORD); // 42FDB0: using guessed type int __thiscall mouseManager__ShowColorPointer(_DWORD); // 431010: using guessed type _DWORD __stdcall resourceManager__GetFont(_DWORD); // 4310B0: using guessed type _DWORD __stdcall resourceManager__Dispose(_DWORD); // 436D00: using guessed type _DWORD __stdcall executive__RemoveManager(_DWORD); // 46AAAC: using guessed type int bigFont; // 46AE34: using guessed type int giCurExe; // 46AEC8: using guessed type int dword_46AEC8; // 48E8D4: using guessed type int gpResourceManager; // 48EAD4: using guessed type int gPalette; // 48EFB4: using guessed type int gpExec; //----- (0040FE22) -------------------------------------------------------- void __thiscall FileError(void *this) { void *v1; // ST18_4@1 char Dest; // [sp+10h] [bp-C8h]@1 v1 = this; LogStr("File Error"); sprintf(&Dest, "Error opening file %s!", v1); ShutDown(&Dest); } //----- (0040FE6E) -------------------------------------------------------- void __thiscall ShutDown(void *this) { void *Source; // [sp+Ch] [bp-304h]@1 const CHAR Dest; // [sp+10h] [bp-300h]@2 Source = this; if ( !dword_46D9D0 ) { dword_46D9D0 = 1; gbClosingApp = 1; Dest = 0; mouseManager::SetColorMice((int)gpMouseManager, 0); if ( Source ) { strcpy((char *)&Dest, (const char *)Source); SetFullScreenStatus(0); LogStr((void *)&Dest); MessageBoxA(hwndApp, &Dest, "Unexpected Program Termination", 0x10u); } else { sprintf((char *)&Dest, "Bye!"); } gbClosingApp = 1; if ( Dst ) BaseFree(Dst, "F:\\h2xsrc\\Editor\\EDITOR.CPP", 317); Dst = 0; if ( bigFont ) { resourceManager::Dispose(bigFont); bigFont = 0; } if ( smalFont ) { resourceManager::Dispose(smalFont); smalFont = 0; } executive::ShutDownSystem(gpExec); if ( gEventHandle ) { CloseHandle(gEventHandle); gEventHandle = 0; } DeleteMainClasses(); fullMap::Close(&gpMap); fullMap::Close(&gMap2); AppExit(); PrintMemoryLeaks(); exit(0); } } // 4310B0: using guessed type _DWORD __stdcall resourceManager__Dispose(_DWORD); // 436AA0: using guessed type int __thiscall executive__ShutDownSystem(_DWORD); // 469B24: using guessed type int gbClosingApp; // 46AAAC: using guessed type int bigFont; // 46D9D0: using guessed type int dword_46D9D0; // 48EFB4: using guessed type int gpExec; //----- (0041000E) -------------------------------------------------------- signed int __cdecl InterpretCommandLine() { int v1; // [sp+Ch] [bp-Ch]@5 signed int i; // [sp+10h] [bp-8h]@1 signed int len; // [sp+14h] [bp-4h]@1 giDebugLevel = 0; len = strlen(gcCommandLine); for ( i = 0; len > i; ++i ) { if ( gcCommandLine[i] == '/' && i + 1 < len ) { v1 = toupper(gcCommandLine[i + 1]); if ( v1 == 'J' ) { if ( i + 3 < len && toupper(gcCommandLine[i + 2]) == 'V' && toupper(gcCommandLine[i + 3]) == 'C' ) gJVCMode = 1; } else if ( v1 == 'P' ) { if ( i + 2 < len ) giDebugLevel = gcCommandLine[i + 2] - '0'; } } } return 1; } // 46ADE8: using guessed type int gJVCMode; // 48E288: using guessed type int giDebugLevel; //----- (00410135) -------------------------------------------------------- void __fastcall EarlyShutdown(const CHAR *a1, const CHAR *a2) { MessageBoxA(hwndApp, a2, a1, 0x10u); exit(0); } //----- (0041016E) -------------------------------------------------------- signed int __cdecl EarlySetup() { signed int result; // eax@2 signed int i; // [sp+Ch] [bp-8h]@9 signed int v2; // [sp+10h] [bp-4h]@5 if ( dword_46D9D4 ) { result = 0; } else { sprintf(byte_48EAD8, "%s%s", ".\\DATA\\", "heroes2.agg"); DEFAULT_AGGREGATE_NAME = byte_48EAD8; sprintf(byte_48E658, "%s%s", ".\\DATA\\", "heroes2x.agg"); EXPANSION_AGGREGATE_NAME = byte_48E658; InitMainClasses(); GetGraphicsInfo(); ReadPrefs(); if ( InterpretCommandLine() ) { LogTruncate(); v2 = SetupCDDrive(); if ( v2 == 3 ) EarlyShutdown( "Startup Error", "Unable to change to the Heroes II directory. Please run the installation program."); if ( v2 == 4 ) EarlyShutdown("Startup Error", "Unable to find the Heroes II data files. Please run the installation program."); for ( i = 0; i < 10; ++i ) (&glTimers)[i] = 0; hmnuDflt = LoadMenuA(hInstApp, "mnuDflt"); result = 1; } else { result = 1; } } return result; } // 41871D: using guessed type void __fastcall GetGraphicsInfo(); // 46D9D4: using guessed type int dword_46D9D4; // 48F120: using guessed type int *glTimers; //----- (004102A1) -------------------------------------------------------- void __cdecl MemError() { if ( !gbInMemError ) { gbInMemError = 1; ShutDown("Out of memory."); } } // 46D9D8: using guessed type int gbInMemError; //----- (004102D7) -------------------------------------------------------- editManager *__cdecl InitMainClasses() { editManager *result; // eax@22 int v1; // [sp+10h] [bp-1Ch]@19 baseMAnager *v2; // [sp+14h] [bp-18h]@16 baseMAnager *v3; // [sp+18h] [bp-14h]@13 heroWindowManager *v4; // [sp+1Ch] [bp-10h]@10 int v5; // [sp+20h] [bp-Ch]@7 baseMAnager *v6; // [sp+24h] [bp-8h]@4 int v7; // [sp+28h] [bp-4h]@1 v7 = operator new(0x10u); if ( v7 ) gpExec = executive::executive(v7); else gpExec = 0; v6 = (baseMAnager *)operator new(0x86Au); if ( v6 ) gpInputManager = (tag_message *)inputManager::inputManager(v6); else gpInputManager = 0; v5 = operator new(0x8Au); if ( v5 ) gpMouseManager = (mouseManager *)mouseManager::mouseManager(v5); else gpMouseManager = 0; v4 = (heroWindowManager *)operator new(0x62u); if ( v4 ) gpWindowManager = heroWindowManager::heroWindowManager(v4); else gpWindowManager = 0; v3 = (baseMAnager *)operator new(0xA2u); if ( v3 ) gpResourceManager = (int)resourceManager::resourceManager(v3); else gpResourceManager = 0; v2 = (baseMAnager *)operator new(0x6AEu); if ( v2 ) gpSoundManager = (soundManager *)soundManager::soundManager(v2); else gpSoundManager = 0; v1 = operator new(0x14u); if ( v1 ) gpBufferPalette = palette::palette(v1); else gpBufferPalette = 0; result = (editManager *)operator new(3746u); if ( result ) { result = editManager::editManager(result); gpEditManager = result; } else { gpEditManager = 0; } return result; } // 42EF10: using guessed type int __thiscall mouseManager__mouseManager(_DWORD); // 4369F0: using guessed type int __thiscall executive__executive(_DWORD); // 437D80: using guessed type int __thiscall palette__palette(_DWORD); // 48E8D4: using guessed type int gpResourceManager; // 48EAD0: using guessed type int gpBufferPalette; // 48EFB4: using guessed type int gpExec; //----- (00410491) -------------------------------------------------------- int __cdecl DeleteMainClasses() { int result; // eax@2 if ( gpEditManager ) result = operator delete(gpEditManager); gpEditManager = 0; if ( gpBufferPalette ) { result = gpBufferPalette; if ( gpBufferPalette ) result = (**(int (__thiscall ***)(_DWORD, _DWORD))gpBufferPalette)(gpBufferPalette, 1); } gpBufferPalette = 0; if ( gpSoundManager ) result = operator delete((void *)gpSoundManager); gpSoundManager = 0; if ( gpWindowManager ) result = operator delete(gpWindowManager); gpWindowManager = 0; if ( gpMouseManager ) result = operator delete(gpMouseManager); gpMouseManager = 0; if ( gpInputManager ) result = operator delete(gpInputManager); gpInputManager = 0; if ( gpExec ) result = operator delete((void *)gpExec); gpExec = 0; if ( gpResourceManager ) result = operator delete((void *)gpResourceManager); gpResourceManager = 0; return result; } // 48E8D4: using guessed type int gpResourceManager; // 48EAD0: using guessed type int gpBufferPalette; // 48EFB4: using guessed type int gpExec; //----- (0041063B) -------------------------------------------------------- int __fastcall NormalDialog(char *text, int a2, int a3, signed int a4, int a5, int a6, int a7, int a8, int a9, int a10) { int v11; // [sp+Ch] [bp-80h]@1 void *v12; // [sp+10h] [bp-7Ch]@1 int v13; // [sp+2Ch] [bp-60h]@8 tag_message evt; // [sp+34h] [bp-58h]@20 int v15; // [sp+5Ch] [bp-30h]@1 int v16; // [sp+60h] [bp-2Ch]@1 int v17; // [sp+70h] [bp-1Ch]@3 char Source; // [sp+74h] [bp-18h]@15 int v19; // [sp+84h] [bp-8h]@8 v11 = a2; v12 = text; v15 = font::LineLength(text, 240); v16 = 16 * v15; if ( v11 != 4 ) v16 += 39; v17 = (v16 - 12) / 45; if ( v17 > 6 ) v17 = 6; if ( v17 <= 0 && v11 != 4 ) v17 = 1; v19 = 286; v13 = 45 * v17 + 129; if ( a3 == -1 || a3 + v19 >= 639 ) a3 = 159; if ( a4 == -1 || a4 + v13 >= 479 ) { a4 = (480 - v13) / 2; if ( a4 > 28 ) a4 = 28; } sprintf(&Source, "evntwin%d.bin", v17); if ( operator new(0x44u) ) dword_48E914 = heroWindow::heroWindow(a3, a4, &Source); else dword_48E914 = 0; if ( !dword_48E914 ) MemError(); evt.eventCode = 512; evt.xCoordOrKeycode = 6; evt.payload = (void *)6; evt.yCoordOrFieldID = 30727; heroWindow::BroadcastMessage(dword_48E914, &evt); evt.yCoordOrFieldID = 30728; heroWindow::BroadcastMessage(dword_48E914, &evt); if ( v11 != 6 && v11 != 3 ) { evt.yCoordOrFieldID = 30721; heroWindow::BroadcastMessage(dword_48E914, &evt); } if ( v11 != 5 && v11 != 1 && v11 != 3 ) { evt.yCoordOrFieldID = 30722; heroWindow::BroadcastMessage(dword_48E914, &evt); } if ( v11 != 2 ) { evt.yCoordOrFieldID = 30725; heroWindow::BroadcastMessage(dword_48E914, &evt); evt.yCoordOrFieldID = 30726; heroWindow::BroadcastMessage(dword_48E914, &evt); } evt.eventCode = 512; evt.xCoordOrKeycode = 3; evt.yCoordOrFieldID = 1; evt.payload = v12; heroWindow::BroadcastMessage(dword_48E914, &evt); if ( v11 == 4 ) { heroWindowManager::AddWindow(dword_48E914, -1, 1); QuickViewWait(); heroWindowManager::RemoveWindow(dword_48E914); } else { heroWindowManager::DoDialog(gpWindowManager, dword_48E914, sub_410918, 0); } return operator delete(dword_48E914); } // 4109EB: using guessed type void __fastcall QuickViewWait(); // 432040: using guessed type _DWORD __stdcall heroWindowManager__AddWindow(_DWORD, _DWORD, _DWORD); // 432100: using guessed type _DWORD __stdcall heroWindowManager__RemoveWindow(_DWORD); //----- (00410918) -------------------------------------------------------- signed int __thiscall sub_410918(int this) { signed int result; // eax@4 if ( *(_DWORD *)this == 512 && *(_DWORD *)(this + 4) == 13 ) { switch ( *(_DWORD *)(this + 8) ) { case 0x7800: case 0x7801: case 0x7802: case 0x7803: case 0x7805: case 0x7806: gpWindowManager->buttonPressedCode = *(_DWORD *)(this + 8); *(_DWORD *)(this + 8) = 10; *(_DWORD *)(this + 4) = *(_DWORD *)(this + 8); result = 2; break; case 0x7804: goto LABEL_7; } } else { LABEL_7: result = 1; } return result; } //----- (00410A80) -------------------------------------------------------- void __fastcall ShowDebugMessage(const char *str) { const char *Source; // [sp+Ch] [bp-4h]@1 Source = str; if ( !gbQueuedDebugMessage || str ) strcpy(byte_48E808, str); else Source = byte_48E808; gbQueuedDebugMessage = 1; dword_48EAC0 = KBTickCount() + 3000; FillBitmapArea((int)gpWindowManager->screenBuffer, 0, 464, 0x1E0u, 16, 0); font::DrawBoundedString(smalFont, Source, 0, 467, 480, 16, 1, 1); heroWindowManager::UpdateScreenRegion(0, 464, 480, 16); } // 46AEBC: using guessed type int gbQueuedDebugMessage; // 48EAC0: using guessed type int dword_48EAC0; //----- (00410B3A) -------------------------------------------------------- void __cdecl sub_410B3A() { dword_46B0CC = 0; if ( gbQueuedDebugMessage ) { gbQueuedDebugMessage = 0; heroWindow::DrawWindow((int)&gpEditManager->editWindow->idx, 0); heroWindowManager::UpdateScreenRegion(0, 464, 480, 16); } } // 46AEBC: using guessed type int gbQueuedDebugMessage; // 46B0CC: using guessed type int dword_46B0CC; //----- (00410BAC) -------------------------------------------------------- BOOL __cdecl CleanUpMenus() { BOOL result; // eax@2 if ( hmnuApp ) { result = SetMenu(hwndApp, 0); if ( hmnuDflt ) result = DestroyMenu(hmnuDflt); } hmnuApp = 0; return result; } // 485828: using guessed type void *hmnuApp; //----- (00410BFA) -------------------------------------------------------- void __cdecl sub_410BFA() { if ( gpEditManager ) editManager::SelectToolbox(gpEditManager, -1); } //----- (00410C39) -------------------------------------------------------- signed int __thiscall sub_410C39(void *this) { signed int result; // eax@6 switch ( this ) { case 0x9CD1u: *(_DWORD *)&editorPaletteCycling = 1 - *(_DWORD *)&editorPaletteCycling; gpWindowManager->cycleColors = *(_DWORD *)&editorPaletteCycling; WritePrefs(); goto LABEL_8; case 0x9CD2u: *(_DWORD *)&editorScreenAnimation = 1 - *(_DWORD *)&editorScreenAnimation; WritePrefs(); goto LABEL_8; case 0x9CD3u: *(_DWORD *)&showObjectBoxes = 1 - *(_DWORD *)&showObjectBoxes; WritePrefs(); goto LABEL_8; case 0x9CCCu: PostMessageA(hwndApp, 0x10u, 0, 0); LABEL_8: result = 0; break; default: result = 1; break; } return result; } //----- (00410D1D) -------------------------------------------------------- void __stdcall sub_410D1D(int a1, int a2) { ; } //----- (00410D48) -------------------------------------------------------- int __fastcall SetWinText(heroWindow *a1, int a2) { int result; // eax@3 int v3; // [sp+Ch] [bp-2Ch]@1 heroWindow *this; // [sp+10h] [bp-28h]@1 tag_message evt; // [sp+14h] [bp-24h]@4 int i; // [sp+30h] [bp-8h]@1 int v7; // [sp+34h] [bp-4h]@1 v3 = a2; this = a1; v7 = 0; for ( i = 0; i < 116; ++i ) { result = 7 * i; if ( gWinSetup[i].screenIdx == v3 ) { ++v7; evt.eventCode = 512; evt.xCoordOrKeycode = 3; evt.yCoordOrFieldID = gWinSetup[i].fieldID; evt.payload = gWinSetup[i].label; result = heroWindow::BroadcastMessage(this, &evt); } } return result; } //----- (00410DF0) -------------------------------------------------------- lineManager *__thiscall lineManager::lineManager(lineManager *this) { baseManager::baseManager((baseManager *)this); this->vtable = (managerVtable *)&lineManager::_vftable_; this->field_3E = -1; this->field_3A = this->field_3E; return this; } // 449070: using guessed type int (__stdcall *lineManager___vftable_)(int); //----- (00410E30) -------------------------------------------------------- int __thiscall lineManager::Open(lineManager *this, int idx) { this->cursorOverlay = resourceManager::GetIcon("overlay.icn"); heroWindow::DrawWindow(); this->type = 16384; this->idx = idx; this->ready = 1; strcpy(this->name, "lineManager"); return 0; } //----- (00410EA1) -------------------------------------------------------- void __thiscall lineManager::Close(lineManager *this) { heroWindow::DrawWindow(); resourceManager::Dispose(this->cursorOverlay); this->ready = 0; } // 4310B0: using guessed type _DWORD __stdcall resourceManager__Dispose(_DWORD); //----- (00410EE3) -------------------------------------------------------- signed int __thiscall lineManager::Main(lineManager *this, tag_message *a2) { int v2; // eax@19 signed int result; // eax@23 INPUT_EVENT_CODE evt; // [sp+14h] [bp-58h]@1 char retstr; // [sp+1Ch] [bp-50h]@13 mapCell *v7; // [sp+38h] [bp-34h]@22 int cellY; // [sp+3Ch] [bp-30h]@20 int cellX; // [sp+40h] [bp-2Ch]@20 int v10; // [sp+44h] [bp-28h]@5 int v11; // [sp+54h] [bp-18h]@10 int v12; // [sp+58h] [bp-14h]@10 int v13; // [sp+60h] [bp-Ch]@5 int y; // [sp+64h] [bp-8h]@10 int x; // [sp+68h] [bp-4h]@10 evt = a2->eventCode; if ( evt == INPUT_MOUSEMOVE_EVENT_CODE ) { LOBYTE(v2) = InMapArea(a2->altXCoord, a2->altYCoord); if ( v2 ) { cellX = a2->altXCoord; cellY = a2->altYCoord; editManager::ToCellIdx(gpEditManager, &cellX, &cellY); cellX += gpEditManager->cellLeft; cellY += gpEditManager->cellTop; if ( gpEditManager->cursorX != cellX || gpEditManager->cursorY != cellY ) { gpEditManager->cursorX = cellX; gpEditManager->cursorY = cellY; v7 = &gpMap.tiles[cellY * gpMap.width] + cellX; cellX -= gpEditManager->cellLeft; cellY -= gpEditManager->cellTop; cellX = cellX * tileSizes[gpEditManager->zoomLevel] + 16; cellY = cellY * tileSizes[gpEditManager->zoomLevel] + 16; editManager::UpdateCursor(gpEditManager); icon::FillToBuffer(this->cursorOverlay, cellX, cellY, gpEditManager->zoomLevel, 181, 0, 0); RedrawEditPane(); editManager::HighlightCursorCoordinates(gpEditManager); } } result = 1; } else { if ( evt == 512 && a2->xCoordOrKeycode == 12 && !(BYTE1(a2->inputTypeBitmask) & 2) && a2->yCoordOrFieldID == 9 ) { v13 = 1; memcpy(&v10, a2, 0x1Cu); CopyMap(); while ( v10 != 16 && v10 != 64 ) { Process1WindowsMessage(); (*(void (__thiscall **)(mouseManager *, int *))(LODWORD(gpMouseManager->vtable) + 8))(gpMouseManager, &v10); if ( v10 == 4 || v13 ) { v13 = 0; x = v11; y = v12; editManager::ToCellIdx(gpEditManager, &x, &y); x += gpEditManager->cellLeft; y += gpEditManager->cellTop; if ( this->field_3A != x || this->field_3E != y ) { this->field_3A = x; this->field_3E = y; sub_411317(x, y); giBrushLeft = x; giBrushTop = y; giBrushWidth = 1; giBrushHeight = 1; editManager::UpdateCursor(gpEditManager); RedrawEditPane(); sub_40365F(gpEditManager, 1); } } memcpy(&v10, inputManager::GetEvent(gpInputManager, (inputManager *)&retstr), 0x1Cu); } giBrushLeft = -1; editManager::UpdateCursor(gpEditManager); RedrawEditPane(); this->field_3E = -1; this->field_3A = this->field_3E; gpEditManager->setOnEventUpdate = 1; } result = 0; } return result; } // 411317: using guessed type int __fastcall sub_411317(_DWORD, _DWORD); // 46B100: using guessed type int tileSizes[]; //----- (00411292) -------------------------------------------------------- void __fastcall sub_411292(int isRiver) { if ( isRiver ) { if ( isRiver == 1 ) { gbIsPlacingRiver = 1; linePlacementRelated1 = 45; linePlacementRelated2 = 431; } } else { gbIsPlacingRiver = 0; linePlacementRelated1 = 30; linePlacementRelated2 = 399; } } // 484048: using guessed type int linePlacementRelated1; // 48404C: using guessed type int linePlacementRelated2; //----- (00411317) -------------------------------------------------------- int __fastcall sub_411317(unsigned int a1, int a2) { int result; // eax@2 int v3; // edx@4 int v4; // edx@6 int v5; // [sp+Ch] [bp-8h]@1 unsigned int v6; // [sp+10h] [bp-4h]@1 v5 = a2; v6 = a1; if ( (a1 & 0x80000000u) == 0 ) { result = MAP_WIDTH - 1; if ( (signed __int64)__PAIR__(a2, MAP_WIDTH - 1) >= a1 ) { result = MAP_HEIGHT - 1; if ( MAP_HEIGHT - 1 >= a2 ) { v3 = *(&gpMap.tiles[a2 * gpMap.width].groundIndex + 10 * a1); result = gTileTerrainTypes[v3]; if ( gTileTerrainTypes[v3] ) { if ( v5 <= 0 || (v4 = *(&gpMap.tiles[(v5 - 1) * gpMap.width].groundIndex + 10 * a1), (result = gTileTerrainTypes[v4]) != 0) ) { sub_4114F4(a1 - 4, v5 - 4, a1 + 4, v5 + 4, 0); ++*((_BYTE *)Dst + MAP_WIDTH * v5 + v6); result = sub_411ED6(v6 - 2, v5 - 2, v6 + 2, v5 + 2); } } } } } return result; } // 411317: using guessed type int __fastcall sub_411317(_DWORD, _DWORD); //----- (0041143C) -------------------------------------------------------- int __fastcall IsSomeSpecialKindOfRoadOrRiverTile(int objTileset, int objIndex, int a3) { int result; // eax@7 if ( gbIsPlacingRiver ) { if ( gbIsPlacingRiver == 1 ) result = objTileset == TILESET_OBJECT_STREAM; else result = 0; } else { result = objTileset == TILESET_ROAD && (a3 && somethingWithRoadTiles2[objIndex] || !a3 && somethingWithRoadTiles1[objIndex]); } return result; } //----- (004114F4) -------------------------------------------------------- int __fastcall sub_4114F4(int left, int top, int right, int bottom, int a5) { int result; // eax@12 int v6; // [sp+Ch] [bp-1Ch]@1 int v7; // [sp+10h] [bp-18h]@1 mapCell *v8; // [sp+14h] [bp-14h]@16 int j; // [sp+18h] [bp-10h]@13 int i; // [sp+20h] [bp-8h]@11 mapCellExtra *v11; // [sp+24h] [bp-4h]@21 v6 = top; v7 = left; if ( Dst ) BaseFree(Dst, "F:\\h2xsrc\\Editor\\line.cpp", 247); Dst = 0; Dst = BaseAlloc(MAP_HEIGHT * MAP_WIDTH, (int)"F:\\h2xsrc\\Editor\\line.cpp", 250); memset(Dst, 0, MAP_HEIGHT * MAP_WIDTH); if ( v7 < 0 ) v7 = 0; if ( v6 < 0 ) v6 = 0; if ( MAP_WIDTH - 1 < right ) right = MAP_WIDTH - 1; if ( MAP_HEIGHT - 1 < bottom ) bottom = MAP_HEIGHT - 1; for ( i = v7; ; ++i ) { result = i; if ( right < i ) break; for ( j = v6; bottom >= j; ++j ) { v8 = &gpMap.tiles[j * gpMap.width] + i; if ( *(&gpMap.tiles[i].objectIndex + 20 * j * gpMap.width) != 255 ) { if ( IsSomeSpecialKindOfRoadOrRiverTile( ((unsigned __int8)v8->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F, v8->objectIndex, a5) ) { ++*((_BYTE *)Dst + j * MAP_WIDTH + i); } else { if ( v8->extraIdx && gpMap.cellExtras[v8->extraIdx].objectIndex != 255 ) v11 = &gpMap.cellExtras[v8->extraIdx]; else v11 = 0; while ( v11 ) { if ( IsSomeSpecialKindOfRoadOrRiverTile( ((unsigned __int8)v11->_1_animatedObject_7_objTileset >> 1) & 0x7F, v11->objectIndex, 0) ) { ++*((_BYTE *)Dst + j * MAP_WIDTH + i); break; } if ( v11->nextIdx && gpMap.cellExtras[v11->nextIdx].objectIndex != 255 ) v11 = &gpMap.cellExtras[v11->nextIdx]; else v11 = 0; } } } } } return result; } //----- (004117C6) -------------------------------------------------------- int __fastcall sub_4117C6(int a1, signed int a2, int a3, int a4) { int result; // eax@10 signed int v5; // [sp+Ch] [bp-44h]@1 int v6; // [sp+10h] [bp-40h]@1 signed int v7; // [sp+24h] [bp-2Ch]@15 int j; // [sp+28h] [bp-28h]@11 int i; // [sp+34h] [bp-1Ch]@9 v5 = a2; v6 = a1; if ( a1 < 0 ) v6 = 0; if ( a2 < 0 ) v5 = 0; if ( MAP_WIDTH - 1 < a3 ) a3 = MAP_WIDTH - 1; if ( MAP_HEIGHT - 1 < a4 ) a4 = MAP_HEIGHT - 1; for ( i = v6; ; ++i ) { result = i; if ( a3 < i ) break; for ( j = v5; j <= a4; ++j ) { if ( gTileTerrainTypes[*(&gpMap.tiles[j * gpMap.width].groundIndex + 10 * i)] ) { v7 = 0; if ( j > 0 && *((_BYTE *)Dst + i + MAP_WIDTH * (j - 1)) ) v7 = 128; if ( MAP_HEIGHT - 1 > j && *((_BYTE *)Dst + i + MAP_WIDTH * (j + 1)) ) v7 |= 0x40u; if ( i > 0 && *((_BYTE *)Dst + i + MAP_WIDTH * j - 1) ) v7 |= 0x20u; if ( MAP_WIDTH - 1 > i && *((_BYTE *)Dst + i + MAP_WIDTH * j + 1) ) v7 |= 0x10u; if ( j > 0 && i > 0 && *((_BYTE *)Dst + i + MAP_WIDTH * (j - 1) - 1) ) v7 |= 8u; if ( MAP_HEIGHT - 1 > j && i > 0 && *((_BYTE *)Dst + i + MAP_WIDTH * (j + 1) - 1) ) v7 |= 4u; if ( MAP_HEIGHT - 1 > j && MAP_WIDTH - 1 > i && *((_BYTE *)Dst + i + MAP_WIDTH * (j + 1) + 1) ) v7 |= 2u; if ( j > 0 && MAP_WIDTH - 1 > i && *((_BYTE *)Dst + i + MAP_WIDTH * (j - 1) + 1) ) v7 |= 1u; if ( *((_BYTE *)Dst + i + MAP_WIDTH * j) ) { if ( !(v7 & 0x80) || !(v7 & 1) || v7 & 0x70 || j <= 1 || *((_BYTE *)Dst + i + MAP_WIDTH * (j - 2)) ) { if ( !(v7 & 0x80) || !(v7 & 8) || v7 & 0x70 || j <= 1 || *((_BYTE *)Dst + i + MAP_WIDTH * (j - 2)) ) { if ( v7 & 0x80 && v7 & 0x40 && v7 & 1 && !(v7 & 0x38) && j > 1 && !*((_BYTE *)Dst + i + MAP_WIDTH * (j - 2)) ) { sub_411F4C(i, j, linePlacementRelated1, 9, -1); } else if ( v7 & 0x80 && v7 & 0x40 && v7 & 8 && !(v7 & 0x31) && j > 1 && !*((_BYTE *)Dst + i + MAP_WIDTH * (j - 2)) ) { sub_411F4C(i, j, linePlacementRelated1, 12, -1); } else { sub_411F4C(i, j, linePlacementRelated1, (unsigned __int8)byte_46B220[v7], -1); } } else { sub_411F4C(i, j, linePlacementRelated1, 17, -1); } } else { sub_411F4C(i, j, linePlacementRelated1, 18, -1); } } else { sub_411F4C(i, j, linePlacementRelated1, (unsigned __int8)byte_46B120[v7], -1); } } } } return result; } // 484048: using guessed type int linePlacementRelated1; //----- (00411CC5) -------------------------------------------------------- int __fastcall sub_411CC5(int a1, signed int a2, int a3, int a4) { int result; // eax@10 signed int v5; // [sp+Ch] [bp-28h]@1 int v6; // [sp+10h] [bp-24h]@1 signed int v7; // [sp+18h] [bp-1Ch]@14 int j; // [sp+1Ch] [bp-18h]@11 int i; // [sp+24h] [bp-10h]@9 signed int v10; // [sp+30h] [bp-4h]@26 v5 = a2; v6 = a1; if ( a1 < 0 ) v6 = 0; if ( a2 < 0 ) v5 = 0; if ( MAP_WIDTH - 1 < a3 ) a3 = MAP_WIDTH - 1; if ( MAP_HEIGHT - 1 < a4 ) a4 = MAP_HEIGHT - 1; for ( i = v6; ; ++i ) { result = i; if ( a3 < i ) break; for ( j = v5; a4 >= j; ++j ) { if ( *((_BYTE *)Dst + i + j * MAP_WIDTH) ) { v7 = 0; if ( j > 0 && *((_BYTE *)Dst + i + MAP_WIDTH * (j - 1)) ) v7 = 8; if ( MAP_HEIGHT - 1 > j && *((_BYTE *)Dst + i + MAP_WIDTH * (j + 1)) ) v7 |= 2u; if ( i > 0 && *((_BYTE *)Dst + i + j * MAP_WIDTH - 1) ) v7 |= 4u; if ( MAP_WIDTH - 1 > i && *((_BYTE *)Dst + i + j * MAP_WIDTH + 1) ) v7 |= 1u; v10 = -1; if ( byte_46B320[v7] == 3 ) v10 = 12; if ( byte_46B320[v7] == 2 ) v10 = 5; sub_411F4C(i, j, linePlacementRelated1, (unsigned __int8)byte_46B320[v7], v10); } else { sub_411F4C(i, j, linePlacementRelated1, 255, -1); } } } return result; } // 484048: using guessed type int linePlacementRelated1; //----- (00411ED6) -------------------------------------------------------- int __fastcall sub_411ED6(int a1, signed int a2, int a3, int a4) { int result; // eax@1 result = gbIsPlacingRiver; if ( gbIsPlacingRiver ) { if ( gbIsPlacingRiver == 1 ) result = sub_411CC5(a1, a2, a3, a4); } else { result = sub_4117C6(a1, a2, a3, a4); } return result; } //----- (00411F4C) -------------------------------------------------------- void __fastcall sub_411F4C(int a1, signed int a2, int a3, signed int a4, signed int a5) { signed int v5; // [sp+Ch] [bp-10h]@1 int v6; // [sp+10h] [bp-Ch]@1 mapCell *v7; // [sp+14h] [bp-8h]@1 mapCellExtra *v8; // [sp+18h] [bp-4h]@28 v5 = a2; v6 = a1; v7 = &gpMap.tiles[a2 * gpMap.width] + a1; if ( a3 == 30 ) { a5 = -1; if ( !a4 && a2 >= 2 && (*(&gpMap.tiles[a1].objType + 20 * (a2 - 1) * gpMap.width) == 163 || *(&gpMap.tiles[a1].objType + 20 * (a2 - 1) * gpMap.width) == 176 || *(&gpMap.tiles[a1].objType + 20 * (a2 - 1) * gpMap.width) == 177) ) a4 = 31; if ( !a4 ) a5 = 26; if ( a4 == 1 ) a5 = 27; if ( a4 == 2 ) a5 = 28; if ( a4 == 17 ) a5 = 29; if ( a4 == 18 ) a5 = 30; } if ( (((unsigned __int8)v7->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F) != linePlacementRelated1 || v7->objectIndex == 255 ) { LABEL_26: if ( v7->extraIdx && gpMap.cellExtras[v7->extraIdx].objectIndex != 255 ) v8 = &gpMap.cellExtras[v7->extraIdx]; else v8 = 0; while ( v8 ) { if ( (((unsigned __int8)v8->_1_animatedObject_7_objTileset >> 1) & 0x7F) == linePlacementRelated1 && v8->objectIndex != 255 ) { if ( a4 == 255 ) { sub_408633(v8->objLink); return; } if ( v8->objectIndex == a4 ) return; sub_408633(v8->objLink); } if ( v8->nextIdx && gpMap.cellExtras[v8->nextIdx].objectIndex != 255 ) v8 = &gpMap.cellExtras[v8->nextIdx]; else v8 = 0; } if ( a5 != -1 && Random(0, 100) < 50 ) a4 = a5; if ( a4 != 255 ) PlaceOverlay(&gOverlayDatabase[linePlacementRelated2 + a4], v6 - 7, v5 - 5, 1); return; } if ( a4 == 255 ) { sub_408633(v7->objLink); return; } if ( v7->objectIndex != a4 && v7->objectIndex != a5 ) { sub_408633(v7->objLink); goto LABEL_26; } } // 4343F0: using guessed type int __fastcall Random(_DWORD, _DWORD); // 484048: using guessed type int linePlacementRelated1; // 48404C: using guessed type int linePlacementRelated2; //----- (004122F9) -------------------------------------------------------- void __fastcall sub_4122F9(int a1, int a2, int a3, int a4) { int v4; // ST18_4@1 int v5; // ST1C_4@1 int v6; // ST20_4@1 v4 = a2; v5 = a1; v6 = gbIsPlacingRiver; sub_411292(0); sub_4114F4(v5 - 3, v4 - 3, a3 + 3, a4 + 3, 0); sub_411ED6(v5 - 2, v4 - 2, a3 + 2, a4 + 2); sub_411292(1); sub_4114F4(v5 - 2, v4 - 2, a3 + 2, a4 + 2, 0); sub_411ED6(v5 - 1, v4 - 1, a3 + 1, a4 + 1); sub_411292(v6); } //----- (004123B0) -------------------------------------------------------- baseManager *__thiscall clearManager::clearManager(baseManager *this) { baseManager *v1; // ST0C_4@1 v1 = this; baseManager::baseManager(this); v1->vtable = (managerVtable *)&off_449080; *(_DWORD *)&v1[1].name[0] = -1; v1[1].idx = *(_DWORD *)&v1[1].name[0]; return v1; } // 449080: using guessed type int (__stdcall *off_449080)(int); //----- (004123F0) -------------------------------------------------------- int __thiscall sub_4123F0(void *ecx0, int a2) { void *v3; // [sp+Ch] [bp-Ch]@1 void *this; // [sp+10h] [bp-8h]@3 signed int i; // [sp+14h] [bp-4h]@1 v3 = ecx0; for ( i = 0; i < 4; ++i ) { this = (void *)operator new(0x2Du); if ( this ) *(_DWORD *)((char *)v3 + 4 * i + 54) = iconWidget::iconWidget( this, 30 * i + 494, 360, 24, 18, "editbtns.icn", (i == dword_4840A0) + 2 * i + 24, 0, i + 1300, 16, 1); else *(_DWORD *)((char *)v3 + 4 * i + 54) = 0; heroWindow::AddWidget(gpEditManager->editWindow, *(widget **)((char *)v3 + 4 * i + 54), -1); } heroWindow::DrawWindow(); *((_DWORD *)v3 + 3) = 16384; *((_DWORD *)v3 + 4) = a2; *(_DWORD *)((char *)v3 + 50) = 1; strcpy((char *)v3 + 20, "clearManager"); return 0; } // 4840A0: using guessed type int dword_4840A0; //----- (00412507) -------------------------------------------------------- void *__thiscall sub_412507(void *this) { void *result; // eax@8 void *v2; // [sp+Ch] [bp-10h]@1 int v3; // [sp+14h] [bp-8h]@3 signed int i; // [sp+18h] [bp-4h]@1 v2 = this; for ( i = 0; i < 4; ++i ) { heroWindow::RemoveWidget(*(_DWORD *)((char *)v2 + 4 * i + 54)); v3 = *(_DWORD *)((char *)v2 + 4 * i + 54); if ( v3 ) (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 4))(v3, 1); } if ( giBrushLeft != -1 ) { giBrushTop = -1; giBrushLeft = -1; editManager::UpdateCursor(gpEditManager); } heroWindow::DrawWindow(); result = v2; *(_DWORD *)((char *)v2 + 50) = 0; return result; } // 430790: using guessed type _DWORD __stdcall heroWindow__RemoveWidget(_DWORD); //----- (004125CB) -------------------------------------------------------- void __cdecl sub_4125CB() { tag_message evt; // [sp+10h] [bp-20h]@3 int i; // [sp+2Ch] [bp-4h]@1 for ( i = 0; i < 4; ++i ) { evt.eventCode = 512; evt.xCoordOrKeycode = 4; evt.yCoordOrFieldID = i + 1300; evt.payload = (void *)((dword_4840A0 == i) + 2 * i + 24); heroWindow::BroadcastMessage(gpEditManager->editWindow, &evt); } heroWindow::DrawWindow((int)&gpEditManager->editWindow->idx, 0); heroWindowManager::UpdateScreenRegion(480, 232, 144, 160); } // 4840A0: using guessed type int dword_4840A0; //----- (00412677) -------------------------------------------------------- signed int __thiscall sub_412677(void *this, int a2) { int v2; // eax@22 int v3; // eax@24 int v4; // eax@43 signed int v6; // [sp+Ch] [bp-84h]@34 int v7; // [sp+18h] [bp-78h]@2 int v8; // [sp+1Ch] [bp-74h]@1 void *v9; // [sp+20h] [bp-70h]@1 char v10; // [sp+24h] [bp-6Ch]@27 char retstr; // [sp+40h] [bp-50h]@14 int x; // [sp+5Ch] [bp-34h]@14 int v13; // [sp+60h] [bp-30h]@14 int v14; // [sp+70h] [bp-20h]@18 int v15; // [sp+74h] [bp-1Ch]@18 int v16; // [sp+80h] [bp-10h]@18 int v17; // [sp+84h] [bp-Ch]@18 int y; // [sp+88h] [bp-8h]@14 int v19; // [sp+8Ch] [bp-4h]@4 v9 = this; v8 = *(_DWORD *)a2; if ( v8 == 1 ) { if ( (*(_DWORD *)(a2 + 4) == 2 || *(_DWORD *)(a2 + 4) == 3 || *(_DWORD *)(a2 + 4) == 4 || *(_DWORD *)(a2 + 4) == 5) && !(*(_BYTE *)(a2 + 12) & 0xC) ) { dword_4840A0 = *(_DWORD *)(a2 + 4) - 2; sub_412BF4(); sub_4125CB(); return 1; } return 0; } if ( v8 != 4 ) { if ( v8 == 512 ) { v7 = *(_DWORD *)(a2 + 4); if ( v7 == 12 ) goto LABEL_61; if ( v7 == 13 ) { v6 = *(_DWORD *)(a2 + 8); if ( v6 >= 1300 && v6 <= 1303 ) { dword_4840A0 = *(_DWORD *)(a2 + 8) - 1300; sub_4125CB(); } return 0; } if ( v7 == 14 ) { LABEL_61: if ( *(_BYTE *)(a2 + 13) & 2 ) { v19 = -1; switch ( *(_DWORD *)(a2 + 8) ) { case 0x514: v19 = 0; break; case 0x515: v19 = 1; break; case 0x516: v19 = 2; break; case 0x517: v19 = 3; break; default: break; } if ( v19 >= 0 ) NormalDialog((&off_46B3A8)[4 * v19], 4, -1, -1, -1, 0, -1, 0, -1, 0); } else if ( *(_DWORD *)(a2 + 8) == 9 ) { x = *(_DWORD *)(a2 + 16); y = *(_DWORD *)(a2 + 20); editManager::ToCellIdx(gpEditManager, &x, &y); giBrushLeft = -1; x += gpEditManager->cellLeft; y += gpEditManager->cellTop; CopyMap(); memcpy(&v13, inputManager::GetEvent(gpInputManager, (inputManager *)&retstr), 0x1Cu); while ( v13 != 16 && v13 != 64 ) { Process1WindowsMessage(); (*(void (__thiscall **)(mouseManager *, int *))(LODWORD(gpMouseManager->vtable) + 8))(gpMouseManager, &v13); if ( v13 == 4 ) { v17 = v14; v16 = v15; editManager::ToCellIdx(gpEditManager, &v17, &v16); v17 += gpEditManager->cellLeft; v16 += gpEditManager->cellTop; if ( *(_DWORD *)((char *)v9 + 70) != v17 || *(_DWORD *)((char *)v9 + 74) != v16 ) { *(_DWORD *)((char *)v9 + 70) = v17; *(_DWORD *)((char *)v9 + 74) = v16; if ( dword_4840A0 > 2 ) { v2 = v17; if ( v17 >= x ) v2 = x; giBrushLeft = v2; v3 = v16; if ( v16 >= y ) v3 = y; giBrushTop = v3; giBrushWidth = abs(v17 - x) + 1; giBrushHeight = abs(v16 - y) + 1; editManager::UpdateCursor(gpEditManager); RedrawEditPane(); sub_40365F(gpEditManager, 1); } else { sub_408334(v17, v16, dword_4840A0 + 1, dword_4840A0 + 1, 0, 0, 0); sub_412D6D(dword_4840A0, v17, v16); editManager::UpdateCursor(gpEditManager); RedrawEditPane(); sub_40365F(gpEditManager, 1); } } } memcpy(&v13, inputManager::GetEvent(gpInputManager, (inputManager *)&v10), 0x1Cu); } if ( dword_4840A0 > 2 ) sub_408334(giBrushLeft, giBrushTop, giBrushWidth, giBrushHeight, 0, 0, 0); else sub_408334(x, y, dword_4840A0 + 1, dword_4840A0 + 1, 0, 0, 0); giBrushTop = -1; giBrushLeft = -1; editManager::UpdateCursor(gpEditManager); RedrawEditPane(); sub_40365F(gpEditManager, 1); *(_DWORD *)((char *)v9 + 74) = -1; *(_DWORD *)((char *)v9 + 70) = *(_DWORD *)((char *)v9 + 74); gpEditManager->setOnEventUpdate = 1; } } } return 0; } LOBYTE(v4) = InMapArea(*(_DWORD *)(a2 + 16), *(_DWORD *)(a2 + 20)); if ( v4 ) { sub_412BF4(); } else if ( giBrushLeft != -1 ) { giBrushTop = -1; giBrushLeft = -1; editManager::UpdateCursor(gpEditManager); RedrawEditPane(); } return 1; } // 4840A0: using guessed type int dword_4840A0; //----- (00412BF4) -------------------------------------------------------- editManager *__cdecl sub_412BF4() { editManager *result; // eax@3 char v1; // [sp+10h] [bp-40h]@5 int y; // [sp+2Ch] [bp-24h]@1 int x; // [sp+30h] [bp-20h]@1 int v4; // [sp+34h] [bp-1Ch]@5 mouseManager::MouseCoords(&x, &y); editManager::ToCellIdx(gpEditManager, &x, &y); x += gpEditManager->cellLeft; y += gpEditManager->cellTop; if ( gpEditManager->cursorX != x || gpEditManager->cursorY != y || (result = gpEditManager, gpEditManager->field_27A != dword_4840A0) || dword_4840A4 ) { sub_412D6D(dword_4840A0, x, y); result = (editManager *)inputManager::PeekEvent(&v1); memcpy(&v4, result, 0x1Cu); if ( v4 != 4 || (++dword_4840A4, dword_4840A4 >= 10) ) { dword_4840A4 = 0; editManager::UpdateCursor(gpEditManager); RedrawEditPane(); if ( gpEditManager->cursorX != x || gpEditManager->cursorY != y ) { gpEditManager->cursorX = x; gpEditManager->cursorY = y; editManager::HighlightCursorCoordinates(gpEditManager); } result = (editManager *)dword_4840A0; gpEditManager->field_27A = dword_4840A0; } } return result; } // 42FB60: using guessed type _DWORD __stdcall mouseManager__MouseCoords(_DWORD, _DWORD); // 4376D0: using guessed type _DWORD __stdcall inputManager__PeekEvent(_DWORD); // 4840A0: using guessed type int dword_4840A0; // 4840A4: using guessed type int dword_4840A4; //----- (00412D6D) -------------------------------------------------------- int __stdcall sub_412D6D(int a1, int a2, int a3) { int result; // eax@2 if ( a1 ) { if ( a1 == 1 ) { giBrushLeft = a2; result = a3; giBrushTop = a3; giBrushWidth = 2; giBrushHeight = 2; } else if ( a1 == 2 ) { giBrushLeft = a2; result = a3; giBrushTop = a3; giBrushWidth = 4; giBrushHeight = 4; } else { giBrushTop = -1; result = -1; giBrushLeft = -1; } } else { giBrushLeft = a2; result = a3; giBrushTop = a3; giBrushWidth = 1; giBrushHeight = 1; } return result; } //----- (00412E40) -------------------------------------------------------- terrainManager *__thiscall terrainManager::terrainManager(terrainManager *this) { baseManager::baseManager((baseManager *)this); this->terrainChoice = 0; this->brushX = -1; this->brushY = -1; this->vtable = (managerVtable *)&terrainManager::vftable; return this; } // 449090: using guessed type int (__stdcall *terrainManager__vftable)(int); //----- (00412E88) -------------------------------------------------------- int __thiscall terrainManager::Open(terrainManager *this, int idx) { void *v4; // [sp+10h] [bp-18h]@16 border *bord; // [sp+18h] [bp-10h]@9 iconWidget *buf; // [sp+1Ch] [bp-Ch]@3 void *Dest; // [sp+20h] [bp-8h]@13 signed int i; // [sp+24h] [bp-4h]@1 signed int j; // [sp+24h] [bp-4h]@7 for ( i = 0; i < 4; ++i ) { buf = (iconWidget *)operator new(0x2Du); if ( buf ) this->brushButtons[i] = iconWidget::iconWidget( buf, 30 * i + 494, 360, 24, 18, "editbtns.icn", (gBrushType == i) + 2 * i + 24, 0, i + 1300, 16, 1); else this->brushButtons[i] = 0; heroWindow::AddWidget(gpEditManager->editWindow, (widget *)this->brushButtons[i], -1); } for ( j = 0; j < 9; ++j ) { bord = (border *)operator new(0x2Au); if ( bord ) this->terrainButtons[j] = border::border( bord, terrainButtonLocations[j][0], terrainButtonLocations[j][1], 27, 27, j + 500, 1, 0, 0); else this->terrainButtons[j] = 0; heroWindow::AddWidget(gpEditManager->editWindow, (widget *)this->terrainButtons[j], -1); } Dest = BaseAlloc(2u, (int)"F:\\h2xsrc\\Editor\\TERRAIN.CPP", 62); strcpy((char *)Dest, byte_48412C); if ( operator new(0x2Bu) ) this->aWidget = (widget *)textWidget::textWidget(493, 339, 117, 10, Dest, "smalfont.fnt", 1, 1400, 8, 1); else this->aWidget = 0; heroWindow::AddWidget(gpEditManager->editWindow, this->aWidget, -1); v4 = (void *)operator new(0x2Du); if ( v4 ) this->selectionHighlight = (iconWidget *)iconWidget::iconWidget( v4, terrainButtonLocations[this->terrainChoice][0] - 2, terrainButtonLocations[this->terrainChoice][1] - 2, 0, 0, "terrains.icn", 9, 0, 25, 16, 1); else this->selectionHighlight = 0; heroWindow::AddWidget(gpEditManager->editWindow, (widget *)this->selectionHighlight, -1); gpEditManager->field_26E = -1; gpEditManager->field_26A = gpEditManager->field_26E; this->type = 16384; this->idx = idx; this->ready = 1; strcpy(this->name, "terrainManager"); terrainManager::ChooseTerrain(this, giTerrainChoice); return 0; } // 439150: using guessed type _DWORD __stdcall textWidget__textWidget(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, __int16, _DWORD, _DWORD, char); // 4840C8: using guessed type int gBrushType; // 4840F4: using guessed type int giTerrainChoice; //----- (0041317E) -------------------------------------------------------- void __thiscall terrainManager::Close(terrainManager *this) { iconWidget *v2; // [sp+14h] [bp-20h]@13 widget *v3; // [sp+1Ch] [bp-18h]@11 widget *v4; // [sp+24h] [bp-10h]@8 widget *v5; // [sp+2Ch] [bp-8h]@3 signed int i; // [sp+30h] [bp-4h]@1 signed int j; // [sp+30h] [bp-4h]@6 for ( i = 0; i < 4; ++i ) { heroWindow::RemoveWidget(this->brushButtons[i]); v5 = (widget *)this->brushButtons[i]; if ( v5 ) v5->vtable->Close(v5, 1); } for ( j = 0; j < 9; ++j ) { heroWindow::RemoveWidget(this->terrainButtons[j]); v4 = (widget *)this->terrainButtons[j]; if ( v4 ) v4->vtable->Close(v4, 1); } heroWindow::RemoveWidget(this->aWidget); v3 = this->aWidget; if ( v3 ) v3->vtable->Close(v3, 1); heroWindow::RemoveWidget(this->selectionHighlight); v2 = this->selectionHighlight; if ( v2 ) v2->vtable->Close((widget *)v2, 1); if ( giBrushLeft != -1 ) { giBrushTop = -1; giBrushLeft = -1; editManager::UpdateCursor(gpEditManager); } heroWindow::DrawWindow(); this->ready = 0; } // 430790: using guessed type _DWORD __stdcall heroWindow__RemoveWidget(_DWORD); //----- (0041332E) -------------------------------------------------------- void __thiscall terrainManager::SynchButtons(terrainManager *this) { tag_message evt; // [sp+10h] [bp-20h]@3 int i; // [sp+2Ch] [bp-4h]@1 for ( i = 0; i < 4; ++i ) { evt.eventCode = INPUT_GUI_MESSAGE_CODE; evt.xCoordOrKeycode = GUI_MESSAGE_SET_IMG_IDX; evt.yCoordOrFieldID = i + 1300; evt.payload = (void *)((i == gBrushType) + 2 * i + 24); heroWindow::BroadcastMessage(gpEditManager->editWindow, &evt); } sprintf((char *)&gText, gpTerrainNames[this->terrainChoice]); evt.eventCode = INPUT_GUI_MESSAGE_CODE; evt.xCoordOrKeycode = GUI_MESSAGE_SET_CONTENTS; evt.yCoordOrFieldID = 1400; evt.payload = &gText; heroWindow::BroadcastMessage(gpEditManager->editWindow, &evt); heroWindow::DrawWindow((int)&gpEditManager->editWindow->idx, 0); heroWindowManager::UpdateScreenRegion(480, 232, 144, 160); } // 4840C8: using guessed type int gBrushType; //----- (00413424) -------------------------------------------------------- signed int __cdecl GetBrushSize() { signed int result; // eax@2 if ( gBrushType == 2 ) { result = 4; } else if ( gBrushType == 1 ) { result = 2; } else { result = gBrushType != 0; } return result; } // 4840C8: using guessed type int gBrushType; //----- (00413490) -------------------------------------------------------- void __stdcall SetBrushRegion(int brushSize, int x, int y) { if ( brushSize ) { if ( brushSize == 2 ) { giBrushLeft = x; giBrushTop = y; giBrushWidth = 2; giBrushHeight = 2; } else if ( brushSize == 4 ) { giBrushLeft = x; giBrushTop = y; giBrushWidth = 4; giBrushHeight = 4; } else { giBrushTop = -1; giBrushLeft = -1; } } else { giBrushLeft = x; giBrushTop = y; giBrushWidth = 1; giBrushHeight = 1; } } //----- (00413555) -------------------------------------------------------- const void *__cdecl sub_413555() { const void *result; // eax@3 char v1; // [sp+10h] [bp-40h]@5 int a3; // [sp+2Ch] [bp-24h]@1 int x; // [sp+30h] [bp-20h]@1 int v4; // [sp+34h] [bp-1Ch]@5 mouseManager::MouseCoords(&x, &a3); editManager::ToCellIdx(gpEditManager, &x, &a3); x += gpEditManager->cellLeft; a3 += gpEditManager->cellTop; if ( gpEditManager->cursorX != x || gpEditManager->cursorY != a3 || (result = gpEditManager, gpEditManager->brushSize != gpEditManager->field_27A) || dword_4840F8 ) { SetBrushRegion(gpEditManager->brushSize, x, a3); result = (const void *)inputManager::PeekEvent(&v1); memcpy(&v4, result, 0x1Cu); if ( v4 != 4 || (++dword_4840F8, dword_4840F8 >= 10) ) { dword_4840F8 = 0; editManager::UpdateCursor(gpEditManager); RedrawEditPane(); if ( gpEditManager->cursorX != x || gpEditManager->cursorY != a3 ) { gpEditManager->cursorX = x; gpEditManager->cursorY = a3; editManager::HighlightCursorCoordinates(gpEditManager); } result = (const void *)gpEditManager->brushSize; gpEditManager->field_27A = (int)result; } } return result; } // 42FB60: using guessed type _DWORD __stdcall mouseManager__MouseCoords(_DWORD, _DWORD); // 4376D0: using guessed type _DWORD __stdcall inputManager__PeekEvent(_DWORD); // 4840F8: using guessed type int dword_4840F8; //----- (004136E0) -------------------------------------------------------- signed int __thiscall terrainManager::Main(terrainManager *this, tag_message *msg) { int v2; // eax@72 int v3; // eax@74 int v4; // eax@100 signed int result; // eax@104 int fieldID; // [sp+10h] [bp-104h]@33 int v7; // [sp+14h] [bp-100h]@10 int v8; // [sp+18h] [bp-FCh]@4 int v9; // [sp+1Ch] [bp-F8h]@2 INPUT_EVENT_CODE code; // [sp+20h] [bp-F4h]@1 char v12; // [sp+28h] [bp-ECh]@85 char v13; // [sp+44h] [bp-D0h]@80 char v14; // [sp+60h] [bp-B4h]@80 char v15; // [sp+7Ch] [bp-98h]@78 char retstr; // [sp+98h] [bp-7Ch]@46 int v17; // [sp+B4h] [bp-60h]@110 int a5; // [sp+B8h] [bp-5Ch]@62 int a4; // [sp+BCh] [bp-58h]@59 int x; // [sp+C0h] [bp-54h]@46 tag_message next_msg; // [sp+C4h] [bp-50h]@46 int a6; // [sp+E0h] [bp-34h]@44 int brushY; // [sp+E4h] [bp-30h]@52 int v24; // [sp+E8h] [bp-2Ch]@46 int brushX; // [sp+ECh] [bp-28h]@52 int y; // [sp+F0h] [bp-24h]@46 tag_message v27; // [sp+F4h] [bp-20h]@78 int v28; // [sp+110h] [bp-4h]@10 code = msg->eventCode; if ( code == 1 ) { if ( msg->xCoordOrKeycode != 2 && msg->xCoordOrKeycode != 3 && msg->xCoordOrKeycode != 4 && msg->xCoordOrKeycode != 5 || msg->inputTypeBitmask & 0xC ) return 0; v17 = gpEditManager->brushSize; gBrushType = msg->xCoordOrKeycode - 2; gpEditManager->brushSize = GetBrushSize(); if ( gpEditManager->brushSize != v17 ) sub_413555(); terrainManager::SynchButtons(this); result = 1; } else { if ( code != INPUT_MOUSEMOVE_EVENT_CODE ) { if ( code == INPUT_GUI_MESSAGE_CODE ) { v9 = msg->xCoordOrKeycode; if ( v9 == 12 ) goto LABEL_121; if ( v9 == GUI_MESSAGE_BUTTON_PRESSED ) { if ( !(BYTE1(msg->inputTypeBitmask) & 2) ) { v8 = msg->yCoordOrFieldID; if ( v8 >= 1300 && v8 <= 1303 ) { gBrushType = msg->yCoordOrFieldID - 1300; gpEditManager->brushSize = GetBrushSize(); terrainManager::SynchButtons(this); } } return 0; } if ( v9 == 14 ) { LABEL_121: if ( BYTE1(msg->inputTypeBitmask) & 2 ) { v28 = -1; v7 = msg->yCoordOrFieldID; if ( v7 > 1300 ) { switch ( v7 ) { case 1301: v28 = 11; break; case 1302: v28 = 12; break; case 1303: v28 = 13; break; } } else if ( v7 == 1300 ) { v28 = 10; } else { switch ( v7 ) { case 500: v28 = 1; break; case 501: v28 = 2; break; case 502: v28 = 3; break; case 503: v28 = 4; break; case 504: v28 = 5; break; case 505: v28 = 6; break; case 506: v28 = 7; break; case 507: v28 = 8; break; case 508: v28 = 9; break; default: break; } } if ( v28 >= 0 ) NormalDialog((&terrainDescs)[4 * v28], 4, -1, -1, -1, 0, -1, 0, -1, 0); } else { fieldID = msg->yCoordOrFieldID; if ( fieldID > 500 ) { switch ( fieldID ) { case 501: terrainManager::ChooseTerrain(this, 1); break; case 502: terrainManager::ChooseTerrain(this, 2); break; case 503: terrainManager::ChooseTerrain(this, 3); break; case 504: terrainManager::ChooseTerrain(this, 4); break; case 505: terrainManager::ChooseTerrain(this, 5); break; case 506: terrainManager::ChooseTerrain(this, 6); break; case 507: terrainManager::ChooseTerrain(this, 7); break; case 508: terrainManager::ChooseTerrain(this, 8); break; default: return 0; } } else if ( fieldID == 500 ) { terrainManager::ChooseTerrain(this, 0); } else if ( fieldID == 9 ) // main window { if ( BYTE1(msg->inputTypeBitmask) & 2 ) a6 = 0; else a6 = this->terrainChoice; giBrushLeft = -1; gpEditManager->brushSize = GetBrushSize(); x = msg->altXCoord; y = msg->altYCoord; editManager::ToCellIdx(gpEditManager, &x, &y); x += gpEditManager->cellLeft; y += gpEditManager->cellTop; CopyMap(); v24 = 1; dword_4840F8 = 0; memcpy(&next_msg, inputManager::GetEvent(gpInputManager, (inputManager *)&retstr), sizeof(next_msg)); while ( next_msg.eventCode != INPUT_LEFT_UP_EVENT_CODE && next_msg.eventCode != INPUT_RIGHT_UP_EVENT_CODE ) { Process1WindowsMessage(); (*(void (__thiscall **)(mouseManager *, tag_message *))(LODWORD(gpMouseManager->vtable) + 8))( gpMouseManager, &next_msg); if ( next_msg.eventCode == INPUT_MOUSEMOVE_EVENT_CODE || v24 ) { v24 = 0; if ( next_msg.eventCode == 4 ) { brushX = next_msg.altXCoord; brushY = next_msg.altYCoord; } else { brushX = msg->altXCoord; brushY = msg->altYCoord; } editManager::ToCellIdx(gpEditManager, &brushX, &brushY); brushX += gpEditManager->cellLeft; brushY += gpEditManager->cellTop; if ( this->brushX != brushX || this->brushY != brushY ) { this->brushX = brushX; this->brushY = brushY; switch ( gpEditManager->brushSize ) { case 0: SetBrushRegion(gpEditManager->brushSize, brushX, brushY); sub_40518A( gpEditManager, brushX - gpEditManager->cellLeft, brushY - gpEditManager->cellTop, 1, 1, a6); break; case 2: SetBrushRegion(gpEditManager->brushSize, brushX, brushY); if ( MAP_WIDTH - 1 > brushX ) a4 = 2; else a4 = 1; if ( MAP_HEIGHT - 1 > brushY ) a5 = 2; else a5 = 1; sub_40518A( gpEditManager, brushX - gpEditManager->cellLeft, brushY - gpEditManager->cellTop, a4, a5, a6); break; case 4: SetBrushRegion(gpEditManager->brushSize, brushX, brushY); if ( MAP_WIDTH - 3 > brushX ) a4 = 4; else a4 = MAP_WIDTH - brushX; if ( MAP_HEIGHT - 3 > brushY ) a5 = 4; else a5 = MAP_HEIGHT - brushY; sub_40518A( gpEditManager, brushX - gpEditManager->cellLeft, brushY - gpEditManager->cellTop, a4, a5, a6); break; case 1: v2 = brushX; if ( brushX >= x ) v2 = x; giBrushLeft = v2; v3 = brushY; if ( brushY >= y ) v3 = y; giBrushTop = v3; giBrushWidth = abs(brushX - x) + 1; giBrushHeight = abs(brushY - y) + 1; break; default: break; } ++dword_4840F8; memcpy(&v27, (const void *)inputManager::PeekEvent(&v15), sizeof(v27)); while ( v27.eventCode == INPUT_KEYDOWN_EVENT_CODE ) { memcpy(&v27, inputManager::GetEvent(gpInputManager, (inputManager *)&v14), sizeof(v27)); memcpy(&v27, (const void *)inputManager::PeekEvent(&v13), sizeof(v27)); } if ( (v27.eventCode != 4 || dword_4840F8 >= 20) && dword_4840F8 ) { dword_4840F8 = 0; editManager::UpdateCursor(gpEditManager); RedrawEditPane(); } } } memcpy(&next_msg, inputManager::GetEvent(gpInputManager, (inputManager *)&v12), sizeof(next_msg)); } if ( gpEditManager->brushSize == 1 && giBrushLeft >= 0 ) sub_40527B(giBrushLeft, giBrushTop, giBrushWidth, giBrushHeight, a6); giBrushTop = -1; giBrushLeft = -1; sub_409D94(this->terrainChoice, 0, 1, 0, 0); editManager::UpdateCursor(gpEditManager); RedrawEditPane(); sub_40365F(gpEditManager, 1); this->brushY = -1; this->brushX = this->brushY; gpEditManager->setOnEventUpdate = 1; } } } } return 0; } LOBYTE(v4) = InMapArea(msg->altXCoord, msg->altYCoord); if ( v4 ) { gpEditManager->brushSize = GetBrushSize(); sub_413555(); } else if ( giBrushLeft != -1 ) { giBrushTop = -1; giBrushLeft = -1; editManager::UpdateCursor(gpEditManager); RedrawEditPane(); } result = 1; } return result; } // 40527B: using guessed type _DWORD __stdcall sub_40527B(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // 4376D0: using guessed type _DWORD __stdcall inputManager__PeekEvent(_DWORD); // 4840C8: using guessed type int gBrushType; // 4840F8: using guessed type int dword_4840F8; //----- (004141A0) -------------------------------------------------------- void __thiscall terrainManager::ChooseTerrain(terrainManager *this, int terain) { this->terrainChoice = terain; this->selectionHighlight->offsetX = terrainButtonLocations[this->terrainChoice][0] - 2; this->selectionHighlight->offsetY = terrainButtonLocations[this->terrainChoice][1] - 2; giTerrainChoice = terain; terrainManager::SynchButtons(this); } // 4840F4: using guessed type int giTerrainChoice; //----- (00414210) -------------------------------------------------------- eventsManager *__thiscall eventsManager::eventsManager(eventsManager *this) { baseManager::baseManager((baseManager *)this); this->vftable = &eventsManager_vtable; return this; } // 4490A0: using guessed type int (__stdcall *eventsManager_vtable)(int); //----- (0041423A) -------------------------------------------------------- int __thiscall eventsManager::Open(eventsManager *this, int idx) { heroWindow::DrawWindow(); this->overlayIcn = resourceManager::GetIcon("overlay.icn"); this->type = 16384; this->idx = idx; this->ready = 1; strcpy(this->name, "eventsManager"); return 0; } //----- (004142AB) -------------------------------------------------------- void __thiscall eventsManager::Close(eventsManager *this) { resourceManager::Dispose(this->overlayIcn); if ( !gbClosingApp ) { editManager::UpdateCursor(gpEditManager); RedrawEditPane(); sub_40365F(gpEditManager, 1); } this->ready = 0; } // 4310B0: using guessed type _DWORD __stdcall resourceManager__Dispose(_DWORD); // 469B24: using guessed type int gbClosingApp; //----- (0041430D) -------------------------------------------------------- signed int __thiscall eventsManager::Main(eventsManager *this, tag_message *msg) { int v2; // eax@38 mapCell *cell; // ST34_4@41 signed int result; // eax@45 INPUT_EVENT_CODE evt; // [sp+14h] [bp-24h]@1 int y; // [sp+20h] [bp-18h]@39 int x; // [sp+24h] [bp-14h]@39 void *a1; // [sp+28h] [bp-10h]@29 mapCell *cell2; // [sp+2Ch] [bp-Ch]@4 int y2; // [sp+30h] [bp-8h]@4 int x2; // [sp+34h] [bp-4h]@4 evt = msg->eventCode; if ( evt == INPUT_MOUSEMOVE_EVENT_CODE ) { LOBYTE(v2) = InMapArea(msg->altXCoord, msg->altYCoord); if ( v2 ) { x = msg->altXCoord; y = msg->altYCoord; editManager::ToCellIdx(gpEditManager, &x, &y); x += gpEditManager->cellLeft; y += gpEditManager->cellTop; if ( gpEditManager->cursorX != x || gpEditManager->cursorY != y ) { gpEditManager->cursorX = x; gpEditManager->cursorY = y; cell = &gpMap.tiles[y * gpMap.width] + x; x -= gpEditManager->cellLeft; y -= gpEditManager->cellTop; x = x * tileSizes[gpEditManager->zoomLevel] + 16; y = y * tileSizes[gpEditManager->zoomLevel] + 16; editManager::UpdateCursor(gpEditManager); if ( LocationHasSpecialDetails(cell->objType) ) icon::FillToBuffer(this->overlayIcn, x, y, gpEditManager->zoomLevel, 90, 0, 0); else icon::FillToBuffer(this->overlayIcn, x, y, gpEditManager->zoomLevel, 10, 0, 0); RedrawEditPane(); editManager::HighlightCursorCoordinates(gpEditManager); } } result = 1; } else { if ( evt == INPUT_GUI_MESSAGE_CODE ) { if ( msg->xCoordOrKeycode == 12 ) { if ( !(BYTE1(msg->inputTypeBitmask) & 2) ) { x2 = gpEditManager->cursorX; y2 = gpEditManager->cursorY; cell2 = &gpMap.tiles[y2 * gpMap.width] + x2; if ( msg->yCoordOrFieldID == 9 ) { if ( cell2->objType != 163 && cell2->objType != 176 && cell2->objType != 177 ) { if ( cell2->objType != 130 && cell2->objType != 221 ) { if ( cell2->objType == 147 ) { eventsManager::EditEvent( this, (unsigned __int8)((unsigned __int8)(cell2->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)); } else if ( cell2->objType == 207 ) { eventsManager::EditSphinx( this, (unsigned __int8)((unsigned __int8)(cell2->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)); } else if ( cell2->objType != 152 && cell2->objType != 175 && cell2->objType != 179 && cell2->objType != 180 && cell2->objType != 181 && cell2->objType != 182 ) { if ( cell2->objType == 172 ) { eventsManager::EditUltimateArtifactOrMonster(this, x2, y2, 1); } else if ( cell2->objType == 183 ) { eventsManager::EditHero(this, x2, y2, 0); } else if ( cell2->objType != 169 || (cell2->objectIndex & 0xFE) != 172 ) { if ( cell2->objType == 251 ) eventsManager::EditHero(this, x2, y2, 1); else eventsManager::DefaultEdit(this, x2, y2); } else { a1 = (void *)(unsigned __int8)((unsigned __int8)(cell2->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5); sub_418C30((editManager *)this, &a1); cell2->field_4_1_1_isShadow_1_13_extraInfo = cell2->field_4_1_1_isShadow_1_13_extraInfo & 7 | 8 * (_WORD)a1; } } else { eventsManager::EditUltimateArtifactOrMonster(this, x2, y2, 0); } } else { eventsManager::EditSign(this, x2, y2); } } else { eventsManager::EditTown(this, x2, y2); } } } } } result = 0; } return result; } // 46B100: using guessed type int tileSizes[]; //----- (00414839) -------------------------------------------------------- int __thiscall eventsManager::DefaultEdit(eventsManager *this, int x, int y) { int result; // eax@2 __int16 v4; // ax@6 tag_message evt; // [sp+28h] [bp-48h]@6 char buf[2]; // [sp+48h] [bp-28h]@6 char v7; // [sp+5Ch] [bp-14h]@3 if ( giDebugLevel >= 1 ) { gpExaminedCell = &gpMap.tiles[y * gpMap.width] + x; memcpy(&v7, &gpMap.tiles[x] + y * gpMap.width, 0x14u); if ( operator new(0x44u) ) gpCellEditDialog = heroWindow::heroWindow(16, 16, "cellwin.bin"); else gpCellEditDialog = 0; evt.eventCode = INPUT_GUI_MESSAGE_CODE; evt.xCoordOrKeycode = GUI_MESSAGE_SET_CONTENTS; evt.payload = buf; sprintf(buf, "%d", gpExaminedCell->groundIndex); evt.yCoordOrFieldID = 700; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf(buf, "%d", ((unsigned __int8)gpExaminedCell->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F); evt.yCoordOrFieldID = 701; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf(buf, "%d", gpExaminedCell->objectIndex); evt.yCoordOrFieldID = 702; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf( buf, "%d", ((unsigned __int8)gpExaminedCell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset >> 2) & 0x3F); evt.yCoordOrFieldID = 703; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf(buf, "%d", gpExaminedCell->overlayIndex); evt.yCoordOrFieldID = 704; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf(buf, "%d", gpExaminedCell->bitfield_1_hasObject_1_isRoad_6_objTileset & 1); evt.yCoordOrFieldID = 705; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf(buf, "%d", gpExaminedCell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset & 1); evt.yCoordOrFieldID = 706; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); v4 = gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo >> 1; sprintf(buf, "%d", v4 & 1); evt.yCoordOrFieldID = 707; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf(buf, "%d", ((unsigned __int8)gpExaminedCell->bitfield_1_hasObject_1_isRoad_6_objTileset >> 1) & 1); evt.yCoordOrFieldID = 708; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf(buf, "%d", gpExaminedCell->objType); evt.yCoordOrFieldID = 709; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf( buf, "%d", (unsigned __int8)((unsigned __int8)(gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)); evt.yCoordOrFieldID = 710; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf(buf, "%d", gpExaminedCell->extraIdx); evt.yCoordOrFieldID = 711; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf(buf, "%d", gpExaminedCell->objLink); evt.yCoordOrFieldID = 712; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf(buf, "%d", gpExaminedCell->ovrLink); evt.yCoordOrFieldID = 713; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); heroWindowManager::DoDialog(gpWindowManager, gpCellEditDialog, (int (__thiscall *)(_DWORD))DebugCellEditHandler, 0); operator delete(gpCellEditDialog); if ( gpWindowManager->buttonPressedCode == 30721 ) memcpy(&gpMap.tiles[x] + y * gpMap.width, &v7, 0x14u); else gpEditManager->setOnEventUpdate = 1; editManager::UpdateCursor(gpEditManager); RedrawEditPane(); } else { result = NormalDialog( "Details are available only for cells containing a monster, hero, or the front door to a town or castle.", 1, -1, -1, -1, 0, -1, 0, -1, 0); } return result; } // 48E288: using guessed type int giDebugLevel; //----- (00414CAC) -------------------------------------------------------- signed int __fastcall DebugCellEditHandler(tag_message *msg) { int v2; // [sp+14h] [bp-20h]@8 int v3; // [sp+18h] [bp-1Ch]@3 int v4; // [sp+1Ch] [bp-18h]@2 INPUT_EVENT_CODE evt; // [sp+20h] [bp-14h]@1 signed int v7; // [sp+30h] [bp-4h]@9 evt = msg->eventCode; if ( evt == INPUT_KEYDOWN_EVENT_CODE ) { if ( msg->xCoordOrKeycode == 1 ) { msg->eventCode = 512; msg->yCoordOrFieldID = 10; msg->xCoordOrKeycode = msg->yCoordOrFieldID; return 2; } } else if ( evt == INPUT_GUI_MESSAGE_CODE ) { v4 = msg->xCoordOrKeycode; if ( v4 == 12 ) { v2 = msg->yCoordOrFieldID; if ( v2 > 72 ) { if ( v2 >= 700 ) { if ( v2 <= 709 ) { msg->xCoordOrKeycode = 7; heroWindow::BroadcastMessage(gpCellEditDialog, msg); v7 = atoi((const char *)msg->payload); if ( v7 >= 0 ) { switch ( msg->yCoordOrFieldID ) { case 700: gpExaminedCell->groundIndex = (unsigned __int8)v7; break; case 701: if ( v7 > 15 ) LOBYTE(v7) = 15; gpExaminedCell->bitfield_1_hasObject_1_isRoad_6_objTileset = 4 * v7 | gpExaminedCell->bitfield_1_hasObject_1_isRoad_6_objTileset & 3; break; case 702: gpExaminedCell->objectIndex = v7; break; case 703: if ( v7 > 15 ) LOBYTE(v7) = 15; gpExaminedCell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset = 4 * v7 | gpExaminedCell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset & 3; break; case 704: gpExaminedCell->overlayIndex = v7; break; case 706: gpExaminedCell->displayFlags = v7; break; case 708: gpExaminedCell->objType = v7; break; case 709: gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo = 8 * v7 | gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo & 7; break; case 705: case 707: break; } heroWindow::DrawWindow(); } } } } else if ( v2 == 72 ) { gpExaminedCell->objType ^= 0x80u; msg->eventCode = 512; if ( gpExaminedCell->objType & 0x80 ) msg->xCoordOrKeycode = GUI_MESSAGE_ADD_FLAGS; else msg->xCoordOrKeycode = 6; msg->payload = (void *)4; heroWindow::BroadcastMessage(gpCellEditDialog, msg); heroWindow::DrawWindow(); } else if ( v2 >= '@' && v2 <= 'G' ) { gpExaminedCell->displayFlags ^= 1 << (msg->yCoordOrFieldID - 64); msg->eventCode = 512; if ( (1 << (msg->yCoordOrFieldID - 64)) & gpExaminedCell->displayFlags ) msg->xCoordOrKeycode = 5; else msg->xCoordOrKeycode = 6; msg->payload = (void *)4; heroWindow::BroadcastMessage(gpCellEditDialog, msg); heroWindow::DrawWindow(); } } else if ( v4 == GUI_MESSAGE_BUTTON_PRESSED ) { v3 = msg->yCoordOrFieldID; if ( v3 >= 30721 && v3 <= 30722 ) { gpWindowManager->buttonPressedCode = msg->yCoordOrFieldID; msg->eventCode = 512; msg->yCoordOrFieldID = 10; msg->xCoordOrKeycode = msg->yCoordOrFieldID; return 2; } } } return 1; } //----- (004150E5) -------------------------------------------------------- _DWORD __thiscall eventsManager::EditUltimateArtifactOrMonster(eventsManager *this, int a2, int a3, int a4) { int result; // eax@12 char Dest; // [sp+20h] [bp-34h]@10 tag_message evt; // [sp+34h] [bp-20h]@10 dword_48F1A4 = a4; gpExaminedCell = &gpMap.tiles[a3 * gpMap.width] + a2; if ( a4 ) { if ( operator new(0x44u) ) gpCellEditDialog = heroWindow::heroWindow(16, 16, "ultaedit.bin"); else gpCellEditDialog = 0; SetWinText(gpCellEditDialog, 16); } else { if ( operator new(0x44u) ) gpCellEditDialog = heroWindow::heroWindow(16, 16, "monedit.bin"); else gpCellEditDialog = 0; SetWinText(gpCellEditDialog, 8); } dword_48F1C8 = (unsigned __int8)((unsigned __int8)(gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5); sprintf( &Dest, "%d", (unsigned __int8)((unsigned __int8)(gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)); evt.eventCode = 512; evt.xCoordOrKeycode = 3; evt.yCoordOrFieldID = 522; evt.payload = &Dest; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); heroWindowManager::DoDialog(gpWindowManager, gpCellEditDialog, sub_4152C8, 0); operator delete(gpCellEditDialog); if ( gpWindowManager->buttonPressedCode != 30721 ) { gpEditManager->setOnEventUpdate = 1; gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo = 8 * dword_48F1C8 | gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo & 7; } editManager::UpdateCursor(gpEditManager); RedrawEditPane(); return result; } // 48F1A4: using guessed type int dword_48F1A4; // 48F1C8: using guessed type int dword_48F1C8; //----- (004152C8) -------------------------------------------------------- signed int __thiscall sub_4152C8(int this) { signed int v2; // [sp+14h] [bp-38h]@3 int v3; // [sp+18h] [bp-34h]@2 int evt; // [sp+20h] [bp-2Ch]@1 int v5; // [sp+24h] [bp-28h]@19 int v6; // [sp+28h] [bp-24h]@19 int v7; // [sp+2Ch] [bp-20h]@19 const char **v8; // [sp+3Ch] [bp-10h]@19 int v9; // [sp+40h] [bp-Ch]@9 char v10; // [sp+44h] [bp-8h]@9 int v11; // [sp+48h] [bp-4h]@9 evt = this; if ( *(_DWORD *)this == 512 ) { v3 = *(_DWORD *)(this + 4); switch ( v3 ) { case 1: if ( *(_DWORD *)(this + 4) == 1 ) { *(_DWORD *)this = 512; *(_DWORD *)(this + 8) = 10; *(_DWORD *)(this + 4) = *(_DWORD *)(this + 8); return 2; } break; case 12: if ( *(_DWORD *)(this + 8) == 522 ) { v10 = 0; *(_DWORD *)(this + 4) = 7; heroWindow::BroadcastMessage(gpCellEditDialog, (tag_message *)this); v11 = atoi(*(const char **)(evt + 24)); v9 = v11; if ( v11 < 0 ) v11 = 0; if ( dword_48F1A4 ) { if ( v11 > 127 ) v11 = 127; } else if ( v11 > 4000 ) { v11 = 4000; } if ( v11 != v9 ) v10 = 1; dword_48F1C8 = v11; sprintf((char *)&gText, "%d", v11); v5 = 512; v6 = 3; v7 = 522; v8 = &gText; heroWindow::BroadcastMessage(gpCellEditDialog, (tag_message *)&v5); heroWindow::DrawWindow(); if ( v10 ) { if ( dword_48F1A4 ) NormalDialog("Must be between 0 and 127.", 1, -1, -1, -1, 0, -1, 0, -1, 0); else NormalDialog( "Must be between 0 and 4000. (0 lets the computer determine the number randomly.)", 1, -1, -1, -1, 0, -1, 0, -1, 0); } } break; case 13: v2 = *(_DWORD *)(this + 8); if ( v2 >= 30721 && v2 <= 30722 ) { gpWindowManager->buttonPressedCode = *(_DWORD *)(this + 8); *(_DWORD *)this = 512; *(_DWORD *)(this + 8) = 10; *(_DWORD *)(this + 4) = *(_DWORD *)(this + 8); return 2; } break; } } return 1; } // 48F1A4: using guessed type int dword_48F1A4; // 48F1C8: using guessed type int dword_48F1C8; //----- (00415574) -------------------------------------------------------- bool __cdecl sub_415574() { void *v1; // [sp+14h] [bp-18h]@20 void *v2; // [sp+18h] [bp-14h]@17 void *v3; // [sp+1Ch] [bp-10h]@11 void *this; // [sp+20h] [bp-Ch]@8 signed int i; // [sp+28h] [bp-4h]@6 signed int j; // [sp+28h] [bp-4h]@15 if ( operator new(0x44u) ) dword_484160 = heroWindow::heroWindow(0, 0, "editnew.bin"); else dword_484160 = 0; if ( !dword_484160 ) MemError(); for ( i = 0; i < 8; ++i ) { this = (void *)operator new(0x2Du); if ( this ) *(&dword_48F1A8 + i) = iconWidget::iconWidget( this, 154, 25 * i + 51, 250, 16, "escroll.icn", 20, 0, i + 400, 16, 1); else *(&dword_48F1A8 + i) = 0; heroWindow::AddWidget(dword_484160, (widget *)*(&dword_48F1A8 + i), -1); v3 = (void *)operator new(0x2Du); if ( v3 ) *(&dword_48F170 + i) = iconWidget::iconWidget(v3, 157, 25 * i + 54, 17, 8, "escroll.icn", 2, 0, i + 500, 16, 1); else *(&dword_48F170 + i) = 0; heroWindow::AddWidget(dword_484160, (widget *)*(&dword_48F170 + i), -1); } for ( j = 0; j < 5; ++j ) { v2 = (void *)operator new(0x2Du); if ( v2 ) *(&dword_48F158 + j) = iconWidget::iconWidget( v2, 154, 25 * j + 295, 250, 16, "escroll.icn", 20, 0, j + 900, 16, 1); else *(&dword_48F158 + j) = 0; heroWindow::AddWidget(dword_484160, (widget *)*(&dword_48F158 + j), -1); v1 = (void *)operator new(0x2Du); if ( v1 ) *(&dword_48F190 + j) = iconWidget::iconWidget(v1, 157, 25 * j + 298, 17, 8, "escroll.icn", 2, 0, j + 1000, 16, 1); else *(&dword_48F190 + j) = 0; heroWindow::AddWidget(dword_484160, (widget *)*(&dword_48F190 + j), -1); } sub_415889(); heroWindowManager::DoDialog(gpWindowManager, dword_484160, sub_415C06, 0); operator delete(dword_484160); dword_484160 = 0; sub_415A3F(-1); return gpWindowManager->buttonPressedCode != 30721; } //----- (00415889) -------------------------------------------------------- int __cdecl sub_415889() { int result; // eax@16 tag_message evt; // [sp+Ch] [bp-20h]@7 int i; // [sp+28h] [bp-4h]@1 for ( i = 0; i < 8; ++i ) *(_WORD *)(*(&dword_48F170 + i) + 24) = (signed __int64)(gProportionTerrain[i] * 227.0 / 100.0 + 157.0); for ( i = 0; i < 5; ++i ) *(_WORD *)(*(&dword_48F190 + i) + 24) = (signed __int64)(dbl_46AE90[i] * 227.0 / 100.0 + 157.0); evt.eventCode = 512; evt.payload = (void *)4; evt.yCoordOrFieldID = 1100; if ( dword_46AEB8 ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(dword_484160, &evt); evt.yCoordOrFieldID = 1101; if ( dword_46AEB8 ) evt.xCoordOrKeycode = 6; else evt.xCoordOrKeycode = 5; heroWindow::BroadcastMessage(dword_484160, &evt); evt.yCoordOrFieldID = 1300; if ( dword_46B0BC ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; result = heroWindow::BroadcastMessage(dword_484160, &evt); for ( i = 2; i <= 6; ++i ) { evt.yCoordOrFieldID = i + 1498; if ( i == dword_46AE48 ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; result = heroWindow::BroadcastMessage(dword_484160, &evt); } return result; } // 46AE48: using guessed type int dword_46AE48; // 46AE50: using guessed type double gProportionTerrain[]; // 46AE90: using guessed type double dbl_46AE90[]; // 46AEB8: using guessed type int dword_46AEB8; // 46B0BC: using guessed type int dword_46B0BC; //----- (00415A3F) -------------------------------------------------------- void __fastcall sub_415A3F(int a1) { double v1; // [sp+10h] [bp-24h]@1 double v2; // [sp+18h] [bp-1Ch]@1 signed int i; // [sp+28h] [bp-Ch]@1 signed int j; // [sp+28h] [bp-Ch]@6 signed int k; // [sp+28h] [bp-Ch]@17 double v6; // [sp+2Ch] [bp-8h]@1 v2 = 100.0 - gProportionTerrain[a1]; v1 = 0.0; v6 = 0.0; for ( i = 0; i < 8; ++i ) { if ( i != a1 ) v1 = gProportionTerrain[i] + v1; } for ( j = 1; j < 8; ++j ) v6 = gProportionTerrain[j] + v6; if ( a1 == -1 ) { if ( v1 < 1.0 ) { v1 = 1.0; if ( gProportionTerrain[0] >= 1.0 ) *(_QWORD *)&dbl_46AE58 = 4607182418800017408i64; else *(_QWORD *)gProportionTerrain = 4607182418800017408i64; } for ( k = 0; k < 8; ++k ) { if ( k != -1 ) gProportionTerrain[k] = gProportionTerrain[k] * (v2 / v1); } if ( gProportionTerrain[0] > 75.5 ) { *(_QWORD *)gProportionTerrain = 4634978072750194688i64; sub_415A3F(0); } } else if ( v6 < 20.0 ) { dbl_46AE58 = 20.0 - v6 + dbl_46AE58; } } // 46AE50: using guessed type double gProportionTerrain[]; // 46AE58: using guessed type double dbl_46AE58; //----- (00415C06) -------------------------------------------------------- signed int __thiscall sub_415C06(int this) { int v2; // [sp+Ch] [bp-10h]@3 int v3; // [sp+10h] [bp-Ch]@1 int v4; // [sp+14h] [bp-8h]@6 int v5; // [sp+14h] [bp-8h]@11 int v6; // [sp+14h] [bp-8h]@16 int v7; // [sp+14h] [bp-8h]@21 signed int v8; // [sp+18h] [bp-4h]@1 v3 = this; v8 = 0; if ( *(_DWORD *)this != 512 ) return 0; v2 = *(_DWORD *)(this + 4); if ( v2 == 12 ) { if ( *(_DWORD *)(this + 8) < 400 || *(_DWORD *)(this + 8) >= 408 ) { if ( *(_DWORD *)(this + 8) < 500 || *(_DWORD *)(this + 8) >= 508 ) { if ( *(_DWORD *)(this + 8) < 900 || *(_DWORD *)(this + 8) >= 908 ) { if ( *(_DWORD *)(this + 8) >= 1000 && *(_DWORD *)(this + 8) < 1008 ) sub_41608F(0, *(_DWORD *)(this + 8) - 1000); } else { sub_41608F(0, *(_DWORD *)(this + 8) - 900); } } else { sub_41608F(1, *(_DWORD *)(this + 8) - 500); } } else { sub_41608F(1, *(_DWORD *)(this + 8) - 400); } if ( *(_DWORD *)(v3 + 8) >= 1100 && *(_DWORD *)(v3 + 8) <= 1101 ) { dword_46AEB8 = *(_DWORD *)(v3 + 8) == 1100; v8 = 1; } if ( *(_DWORD *)(v3 + 8) == 1300 ) { dword_46B0BC = 1 - dword_46B0BC; v8 = 1; } if ( *(_DWORD *)(v3 + 8) >= 1500 && *(_DWORD *)(v3 + 8) <= 1504 ) { dword_46AE48 = *(_DWORD *)(v3 + 8) - 1498; v8 = 1; } } else if ( v2 == 13 ) { v8 = 1; if ( *(_DWORD *)(this + 8) < 100 || *(_DWORD *)(this + 8) >= 108 ) { if ( *(_DWORD *)(this + 8) < 200 || *(_DWORD *)(this + 8) >= 208 ) { if ( *(_DWORD *)(this + 8) < 600 || *(_DWORD *)(this + 8) >= 605 ) { if ( *(_DWORD *)(this + 8) < 700 || *(_DWORD *)(this + 8) >= 705 ) { v8 = 0; if ( *(_DWORD *)(this + 8) == 30722 || *(_DWORD *)(this + 8) == 30721 ) { gpWindowManager->buttonPressedCode = *(_DWORD *)(this + 8); *(_DWORD *)this = 512; *(_DWORD *)(this + 8) = 10; *(_DWORD *)(this + 4) = *(_DWORD *)(this + 8); return 2; } } else { v7 = *(_DWORD *)(this + 8) - 700; dbl_46AE90[v7] = dbl_46AE90[v7] + 1.0; if ( dbl_46AE90[v7] > 100.0 ) { LODWORD(dbl_46AE90[v7]) = 0; HIDWORD(dbl_46AE90[v7]) = 1079574528; } } } else { v6 = *(_DWORD *)(this + 8) - 600; dbl_46AE90[v6] = dbl_46AE90[v6] - 1.0; if ( dbl_46AE90[v6] < 0.0 ) { LODWORD(dbl_46AE90[v6]) = 0; HIDWORD(dbl_46AE90[v6]) = 0; } } } else { v5 = *(_DWORD *)(this + 8) - 200; gProportionTerrain[v5] = gProportionTerrain[v5] + 1.0; if ( gProportionTerrain[v5] > 100.0 ) { LODWORD(gProportionTerrain[v5]) = 0; HIDWORD(gProportionTerrain[v5]) = 1079574528; } sub_415A3F(v5); } } else { v4 = *(_DWORD *)(this + 8) - 100; gProportionTerrain[v4] = gProportionTerrain[v4] - 1.0; if ( gProportionTerrain[v4] < 0.0 ) { LODWORD(gProportionTerrain[v4]) = 0; HIDWORD(gProportionTerrain[v4]) = 0; } sub_415A3F(v4); } } if ( v8 ) { sub_415889(); heroWindow::DrawWindow(); } return 1; } // 46AE48: using guessed type int dword_46AE48; // 46AE50: using guessed type double gProportionTerrain[]; // 46AE90: using guessed type double dbl_46AE90[]; // 46AEB8: using guessed type int dword_46AEB8; // 46B0BC: using guessed type int dword_46B0BC; //----- (0041608F) -------------------------------------------------------- int __fastcall sub_41608F(int a1, int a2) { int result; // eax@19 int v3; // [sp+10h] [bp-88h]@1 int v4; // [sp+14h] [bp-84h]@1 char v5; // [sp+18h] [bp-80h]@16 char retstr; // [sp+34h] [bp-64h]@7 int v7; // [sp+50h] [bp-48h]@1 int v8; // [sp+54h] [bp-44h]@1 int v9; // [sp+58h] [bp-40h]@1 int v10; // [sp+6Ch] [bp-2Ch]@1 double v11; // [sp+70h] [bp-28h]@12 int v12; // [sp+78h] [bp-20h]@1 char v13; // [sp+7Ch] [bp-1Ch]@5 int v14; // [sp+80h] [bp-18h]@8 v3 = a2; v4 = a1; mouseManager::MouseCoords(&v12, &v10); inputManager::Flush(gpInputManager); v7 = 4; v8 = v12; v9 = v10; while ( v7 != 16 && v7 != 64 ) { Process1WindowsMessage(); if ( v7 == 4 ) { memcpy(&v13, &v7, 0x1Cu); while ( v7 == 4 ) { memcpy(&v13, &v7, 0x1Cu); memcpy(&v7, inputManager::GetEvent(gpInputManager, (inputManager *)&retstr), 0x1Cu); } v14 -= 8; if ( v14 < 157 ) v14 = 157; if ( v14 > 383 ) v14 = 383; (*(void (__thiscall **)(mouseManager *, char *))(LODWORD(gpMouseManager->vtable) + 8))(gpMouseManager, &v13); v11 = (double)(25 * (4 * v14 - 628) / 226); if ( v4 ) { HIDWORD(gProportionTerrain[v3]) = HIDWORD(v11); LODWORD(gProportionTerrain[v3]) = LODWORD(v11); sub_415A3F(v3); } else { HIDWORD(dbl_46AE90[v3]) = HIDWORD(v11); LODWORD(dbl_46AE90[v3]) = LODWORD(v11); } sub_415889(); heroWindow::DrawWindow(); } else { memcpy(&v7, inputManager::GetEvent(gpInputManager, (inputManager *)&v5), 0x1Cu); } } inputManager::Flush(gpInputManager); if ( v4 ) { *(_WORD *)(*(&dword_48F170 + v3) + 22) &= 0xFFFEu; result = *(_WORD *)(*(&dword_48F1A8 + v3) + 22) & 0xFFFE; *(_WORD *)(*(&dword_48F1A8 + v3) + 22) = result; } else { *(_WORD *)(*(&dword_48F190 + v3) + 22) &= 0xFFFEu; result = *(_WORD *)(*(&dword_48F158 + v3) + 22) & 0xFFFE; *(_WORD *)(*(&dword_48F158 + v3) + 22) = result; } return result; } // 42FB60: using guessed type _DWORD __stdcall mouseManager__MouseCoords(_DWORD, _DWORD); // 437610: using guessed type int __thiscall inputManager__Flush(_DWORD); // 46AE50: using guessed type double gProportionTerrain[]; // 46AE90: using guessed type double dbl_46AE90[]; //----- (004162F0) -------------------------------------------------------- _DWORD __thiscall eventsManager::EditSign(eventsManager *this, int x, int y) { int result; // eax@2 SignExtra *signExtra; // ST3C_4@12 size_t sz; // [sp+20h] [bp-40h]@10 tag_message evt; // [sp+24h] [bp-3Ch]@9 char v7; // [sp+4Ch] [bp-14h]@3 gpExaminedCell = &gpMap.tiles[y * gpMap.width] + x; if ( (unsigned __int8)(*(&gpMap.tiles[x].field_4_1_1_isShadow_1_13_extraInfo + 10 * y * gpMap.width) >> 8) >> -5 ) { memcpy(&v7, gpExaminedCell, 0x14u); memcpy( gEditSignHeader, gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)], 0xAu); gpSignTextBuf = (char *)BaseAlloc(2000u, (int)"F:\\h2xsrc\\Editor\\signedit.cpp", 23); strcpy( gpSignTextBuf, (const char *)gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)] + 9); if ( operator new(0x44u) ) gpCellEditDialog = heroWindow::heroWindow(0, 0, "rumredit.bin"); else gpCellEditDialog = 0; SetWinText(gpCellEditDialog, 11); if ( gpExaminedCell->objType == 221 ) sprintf((char *)&gText, "Bottle Detail"); else sprintf((char *)&gText, "Sign Detail"); evt.eventCode = 512; evt.xCoordOrKeycode = 3; evt.payload = &gText; evt.yCoordOrFieldID = 100; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sub_416620(gEditSignHeader); heroWindowManager::DoDialog(gpWindowManager, gpCellEditDialog, (int (__thiscall *)(_DWORD))EditSignHandler, 0); operator delete(gpCellEditDialog); if ( gpWindowManager->buttonPressedCode != 30721 ) { sz = strlen(gpSignTextBuf) + sizeof(SignExtra); if ( !gEditSignHeader[0] ) strcpy(gpSignTextBuf, byte_48437C); signExtra = (SignExtra *)BaseAlloc(sz, (int)"F:\\h2xsrc\\Editor\\signedit.cpp", 56); memcpy(signExtra, gEditSignHeader, 0xAu); strcpy(&signExtra->message, gpSignTextBuf); BaseFree( gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)], "F:\\h2xsrc\\Editor\\signedit.cpp", 60); gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)] = signExtra; gpEditManager->lenMapExtra[(unsigned __int8)((unsigned __int8)(gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)] = sz; BaseFree(gpSignTextBuf, "F:\\h2xsrc\\Editor\\signedit.cpp", 64); gpSignTextBuf = 0; gpEditManager->setOnEventUpdate = 1; } editManager::UpdateCursor(gpEditManager); RedrawEditPane(); } else { result = NormalDialog("Unable to edit sign - created under old editor", 1, -1, -1, -1, 0, -1, 0, -1, 0); } return result; } // 416620: using guessed type _DWORD __stdcall sub_416620(_DWORD); //----- (00416620) -------------------------------------------------------- int __stdcall sub_416620(int a1) { tag_message evt; // [sp+10h] [bp-54h]@1 evt.eventCode = 512; evt.xCoordOrKeycode = 3; evt.payload = gpSignTextBuf; evt.yCoordOrFieldID = 120; return heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } // 416620: using guessed type _DWORD __stdcall sub_416620(_DWORD); //----- (00416664) -------------------------------------------------------- signed int __thiscall EditSignHandler(tag_message *this) { int v2; // [sp+14h] [bp-3Ch]@3 int v3; // [sp+18h] [bp-38h]@2 INPUT_EVENT_CODE v4; // [sp+1Ch] [bp-34h]@1 tag_message evt; // [sp+24h] [bp-2Ch]@9 int v6; // [sp+44h] [bp-Ch]@1 v6 = 0; v4 = this->eventCode; if ( v4 == 1 ) { if ( this->xCoordOrKeycode == 1 ) { this->eventCode = 512; this->yCoordOrFieldID = 10; this->xCoordOrKeycode = this->yCoordOrFieldID; return 2; } } else if ( v4 == 512 ) { v3 = this->xCoordOrKeycode; if ( v3 == 12 ) { if ( this->yCoordOrFieldID == 120 ) { evt.eventCode = 512; evt.xCoordOrKeycode = 7; evt.yCoordOrFieldID = this->yCoordOrFieldID; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); strcpy(gpSignTextBuf, (const char *)evt.payload); } } else if ( v3 == 13 ) { v2 = this->yCoordOrFieldID; if ( v2 >= 30721 && v2 <= 30722 ) { gpWindowManager->buttonPressedCode = this->yCoordOrFieldID; this->eventCode = 512; this->yCoordOrFieldID = 10; this->xCoordOrKeycode = this->yCoordOrFieldID; return 2; } } } if ( v6 ) { sub_416620(gEditSignHeader); heroWindow::DrawWindow(); } return 1; } // 416620: using guessed type _DWORD __stdcall sub_416620(_DWORD); //----- (00416840) -------------------------------------------------------- void __cdecl DDRestoreDisplayMode() { signed int v0; // [sp+Ch] [bp-4h]@2 if ( lpDD ) { v0 = (*((int (__stdcall **)(_DWORD))lpDD->lpVtbl + 19))(lpDD); if ( v0 ) DDSD(v0, "F:\\h2xsrc\\Editor\\wingraph.cpp", 52); } } // 484808: using guessed type struct IDirectDraw *lpDD; //----- (0041688C) -------------------------------------------------------- signed int __cdecl DDQueryNewPalette() { signed int result; // eax@2 if ( gbWinGraphBusy ) { result = 1; } else if ( gbForegroundApp ) { result = SetPalette(); } else { result = 1; } return result; } // 469B28: using guessed type int gbForegroundApp; // 484800: using guessed type int gbWinGraphBusy; //----- (004168D2) -------------------------------------------------------- int __cdecl CreatePrimary() { int result; // eax@1 signed int v1; // [sp+Ch] [bp-4h]@2 result = DDCreateSurface(640, 480, 1); lpDDSPrimary = (struct IDirectDrawSurface *)result; if ( lpClipper ) { v1 = (*((int (__stdcall **)(_DWORD, _DWORD))lpDDSPrimary->lpVtbl + 28))(lpDDSPrimary, 0); if ( v1 ) { if ( v1 != -2005532104 ) DDSD(v1, "F:\\h2xsrc\\Editor\\wingraph.cpp", 77); } result = (*((int (__stdcall **)(_DWORD))lpClipper->lpVtbl + 2))(lpClipper); lpClipper = 0; } return result; } // 48480C: using guessed type struct IDirectDrawSurface *lpDDSPrimary; // 484814: using guessed type struct IDirectDrawClipper *lpClipper; //----- (0041695D) -------------------------------------------------------- void __cdecl SetupClipper() { signed int v0; // [sp+Ch] [bp-4h]@2 signed int v1; // [sp+Ch] [bp-4h]@4 signed int v2; // [sp+Ch] [bp-4h]@6 if ( !*((_DWORD *)&dword_48EE38 + 7 * giCurExe) ) { v0 = (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))lpDD->lpVtbl + 4))(lpDD, 0, &lpClipper, 0); if ( v0 ) DDSD(v0, "F:\\h2xsrc\\Editor\\wingraph.cpp", 95); v1 = (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD))lpClipper->lpVtbl + 8))(lpClipper, 0, hwndApp); if ( v1 ) DDSD(v1, "F:\\h2xsrc\\Editor\\wingraph.cpp", 100); v2 = (*((int (__stdcall **)(_DWORD, _DWORD))lpDDSPrimary->lpVtbl + 28))(lpDDSPrimary, lpClipper); if ( v2 ) DDSD(v2, "F:\\h2xsrc\\Editor\\wingraph.cpp", 105); } } // 46AE34: using guessed type int giCurExe; // 484808: using guessed type struct IDirectDraw *lpDD; // 48480C: using guessed type struct IDirectDrawSurface *lpDDSPrimary; // 484814: using guessed type struct IDirectDrawClipper *lpClipper; //----- (00416A25) -------------------------------------------------------- void __cdecl DDInitGraphics() { signed int v0; // [sp+Ch] [bp-4h]@2 signed int v1; // [sp+Ch] [bp-4h]@5 signed int v2; // [sp+Ch] [bp-4h]@7 signed int v3; // [sp+Ch] [bp-4h]@10 if ( !gbWinGraphBusy ) { v0 = lpDirectDrawCreate(0, &lpDD, 0); if ( v0 ) DDSD(v0, "F:\\h2xsrc\\Editor\\wingraph.cpp", 118); if ( *((_DWORD *)&dword_48EE38 + 7 * giCurExe) ) { SetMenuStatus(0); v1 = (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD))lpDD->lpVtbl + 20))(lpDD, hwndApp, 19); if ( v1 ) DDSD(v1, "F:\\h2xsrc\\Editor\\wingraph.cpp", 130); v2 = (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))lpDD->lpVtbl + 21))(lpDD, 640, 480, 8); if ( v2 ) DDSD(v2, "F:\\h2xsrc\\Editor\\wingraph.cpp", 134); } else { v3 = (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD))lpDD->lpVtbl + 20))(lpDD, hwndApp, 8); if ( v3 ) DDSD(v3, "F:\\h2xsrc\\Editor\\wingraph.cpp", 141); } CreatePrimary(); SetupClipper(); lpDDSOne = (struct IDirectDrawSurface *)DDCreateSurface(640, 480, 0); InitializePalette(); } } // 46AE34: using guessed type int giCurExe; // 484800: using guessed type int gbWinGraphBusy; // 484804: using guessed type __int32 (__stdcall *lpDirectDrawCreate)(struct _GUID *, struct IDirectDraw **, struct IUnknown *); // 484808: using guessed type struct IDirectDraw *lpDD; // 484810: using guessed type struct IDirectDrawSurface *lpDDSOne; //----- (00416B69) -------------------------------------------------------- signed int __fastcall DDAppPaint(HWND a1, void *a2) { signed int result; // eax@2 int v3; // eax@44 HWND hWnd; // [sp+10h] [bp-5Ch]@1 struct tagPOINT Point; // [sp+14h] [bp-58h]@18 struct tagPAINTSTRUCT Paint; // [sp+1Ch] [bp-50h]@7 __int32 v7; // [sp+5Ch] [bp-10h]@14 __int32 v8; // [sp+60h] [bp-Ch]@14 __int32 v9; // [sp+64h] [bp-8h]@14 __int32 v10; // [sp+68h] [bp-4h]@14 hWnd = a1; if ( gbWinGraphBusy ) { result = 1; } else if ( gbMinimized ) { result = 1; } else if ( lpDD ) { gbWinGraphBusy = 1; BeginPaint(a1, &Paint); GetClientRect(hWnd, &Rect); if ( !Paint.rcPaint.right || !Paint.rcPaint.bottom ) { Paint.rcPaint.left = Rect.left; Paint.rcPaint.top = Rect.top; Paint.rcPaint.right = Rect.right; Paint.rcPaint.bottom = Rect.bottom; } if ( Paint.rcPaint.right < 640 ) ++Paint.rcPaint.right; if ( Paint.rcPaint.bottom < 480 ) ++Paint.rcPaint.bottom; rc.left = Paint.rcPaint.left; rc.top = Paint.rcPaint.top; rc.right = Paint.rcPaint.right; rc.bottom = Paint.rcPaint.bottom; v10 = ((5 * (rc.right - rc.left) + 5) << 7) / iMainWinScreenWidth; v9 = 160 * (3 * (rc.bottom - rc.top) + 3) / iMainWinScreenHeight; v7 = 640 * rc.left / iMainWinScreenWidth; v8 = 480 * rc.top / iMainWinScreenHeight; if ( giScrollX ) { v7 = giScrollX + 16; v10 = 448; } if ( giScrollY ) { v8 = giScrollY + 16; v9 = 448; } dword_48F690 = v7; dword_48F698 = v7 + v10 - 1; dword_48F694 = v8; dword_48F69C = v8 + v9 - 1; Point.y = 0; Point.x = 0; ClientToScreen(hwndApp, &Point); OffsetRect(&rc, Point.x, Point.y); errorCode = (*((int (__stdcall **)(_DWORD, _DWORD))lpDDSOne->lpVtbl + 32))(lpDDSOne, 0); if ( errorCode ) DDSD(errorCode, "F:\\h2xsrc\\Editor\\wingraph.cpp", 228); if ( dword_48F690 < 0 ) dword_48F690 = 0; if ( dword_48F694 < 0 ) dword_48F694 = 0; if ( dword_48F698 > 640 ) dword_48F698 = 640; if ( dword_48F69C > 480 ) dword_48F69C = 480; lPaintStart = KBTickCount(); while ( 1 ) { while ( 1 ) { while ( 1 ) { errorCode = (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))lpDDSPrimary->lpVtbl + 5))( lpDDSPrimary, &rc, lpDDSOne, &dword_48F690, 16777216, 0); if ( errorCode != -2005532222 ) break; errorCode = (*((int (__stdcall **)(_DWORD))lpDDSPrimary->lpVtbl + 27))(lpDDSPrimary); if ( errorCode == -2005532085 ) { LogStr("ResetDisplayMode"); errorCode = (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))lpDD->lpVtbl + 21))(lpDD, 640, 480, 8); if ( errorCode ) DDSD(errorCode, "F:\\h2xsrc\\Editor\\wingraph.cpp", 248); errorCode = (*((int (__stdcall **)(_DWORD))lpDDSPrimary->lpVtbl + 27))(lpDDSPrimary); if ( errorCode ) DDSD(errorCode, "F:\\h2xsrc\\Editor\\wingraph.cpp", 252); rc.left = dword_48F690; rc.top = *(&dword_48F690 + 1); rc.right = *(&dword_48F690 + 2); rc.bottom = *(&dword_48F690 + 3); } if ( errorCode ) DDSD(errorCode, "F:\\h2xsrc\\Editor\\wingraph.cpp", 260); } if ( errorCode != -2005532242 || (signed int)KBTickCount() >= lPaintStart + 10000 ) break; ++iBusyRetry; } if ( !errorCode ) break; DDSD(errorCode, "F:\\h2xsrc\\Editor\\wingraph.cpp", 265); } memset(&dword_48F1F0, 0, 0x6Cu); dword_48F1F0 = 108; v3 = (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))lpDDSOne->lpVtbl + 25))( lpDDSOne, 0, &dword_48F1F0, 1, 0); errorCode = v3; if ( v3 ) DDSD(errorCode, "F:\\h2xsrc\\Editor\\wingraph.cpp", 275); if ( gpWindowManager->screenBuffer ) { gpWindowManager->screenBuffer->contents = (char *)dword_48F214; lpInitWin = (void *)dword_48F214; } else { lpInitWin = (void *)dword_48F214; } if ( errorCode ) DDSD(errorCode, "F:\\h2xsrc\\Editor\\wingraph.cpp", 286); EndPaint(hWnd, (const PAINTSTRUCT *)&Paint); gbWinGraphBusy = 0; result = 1; } else { result = 1; } return result; } // 46AE2C: using guessed type int giScrollX; // 46AE30: using guessed type int giScrollY; // 46AEC4: using guessed type int gbMinimized; // 4847F4: using guessed type void *lpInitWin; // 484800: using guessed type int gbWinGraphBusy; // 484808: using guessed type struct IDirectDraw *lpDD; // 48480C: using guessed type struct IDirectDrawSurface *lpDDSPrimary; // 484810: using guessed type struct IDirectDrawSurface *lpDDSOne; // 48481C: using guessed type int iBusyRetry; // 48F1F0: using guessed type int dword_48F1F0; // 48F214: using guessed type int dword_48F214; // 48F690: using guessed type int dword_48F690; // 48F694: using guessed type int dword_48F694; // 48F698: using guessed type int dword_48F698; // 48F69C: using guessed type int dword_48F69C; // 48F6B0: using guessed type __int32 lPaintStart; // 48F6B4: using guessed type int errorCode; //----- (0041706D) -------------------------------------------------------- void __cdecl DDInitializePalette() { HDC v0; // ST20_4@2 signed int v1; // [sp+10h] [bp-8h]@8 signed int i; // [sp+14h] [bp-4h]@2 signed int j; // [sp+14h] [bp-4h]@5 if ( !gbWinGraphBusy ) { v0 = GetDC(0); GetSystemPaletteEntries(v0, 0, 0xAu, &LogicalPalette.palPalEntry); GetSystemPaletteEntries(v0, 0xF6u, 0xAu, (LPPALETTEENTRY)&LogicalPalette + 247); ReleaseDC(0, v0); for ( i = 0; i < 10; ++i ) { *(&LogicalPalette.palPalEntry.peFlags + 4 * i) = 0; byte_4847CF[4 * i] = 0; } for ( j = 10; j < 246; ++j ) { *(&LogicalPalette.palPalEntry.peRed + 4 * j) = 0; *(&LogicalPalette.palPalEntry.peGreen + 4 * j) = 0; *(&LogicalPalette.palPalEntry.peBlue + 4 * j) = 0; *(&LogicalPalette.palPalEntry.peFlags + 4 * j) = 4; } v1 = (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))lpDD->lpVtbl + 5))( lpDD, 4, &LogicalPalette.palPalEntry, &lpDDPal, 0); if ( v1 ) DDSD(v1, "F:\\h2xsrc\\Editor\\wingraph.cpp", 359); SetPalette(); } } // 484800: using guessed type int gbWinGraphBusy; // 484808: using guessed type struct IDirectDraw *lpDD; // 484818: using guessed type struct IDirectDrawPalette *lpDDPal; //----- (004171A3) -------------------------------------------------------- signed int __cdecl DDSetPalette() { signed int result; // eax@2 signed int v1; // [sp+Ch] [bp-4h]@9 if ( gbWinGraphBusy ) { result = 1; } else if ( gbForegroundApp ) { if ( lpDDPal && lpDDSPrimary && lpDD ) { v1 = (*((int (__stdcall **)(_DWORD, _DWORD))lpDDSPrimary->lpVtbl + 31))(lpDDSPrimary, lpDDPal); if ( v1 ) DDSD(v1, "F:\\h2xsrc\\Editor\\wingraph.cpp", 383); result = 0; } else { result = 1; } } else { result = 1; } return result; } // 469B28: using guessed type int gbForegroundApp; // 484800: using guessed type int gbWinGraphBusy; // 484808: using guessed type struct IDirectDraw *lpDD; // 48480C: using guessed type struct IDirectDrawSurface *lpDDSPrimary; // 484818: using guessed type struct IDirectDrawPalette *lpDDPal; //----- (0041724C) -------------------------------------------------------- int __fastcall DDCreateSurface(int a1, int a2, int a3) { int v4; // [sp+Ch] [bp-84h]@1 int v5; // [sp+10h] [bp-80h]@1 int v6; // [sp+14h] [bp-7Ch]@4 int v7; // [sp+18h] [bp-78h]@4 int Dst; // [sp+24h] [bp-6Ch]@1 int v9; // [sp+28h] [bp-68h]@2 int v10; // [sp+2Ch] [bp-64h]@3 int v11; // [sp+30h] [bp-60h]@3 char *v12; // [sp+48h] [bp-48h]@10 int v13; // [sp+8Ch] [bp-4h]@2 v4 = a2; v5 = a1; memset(&Dst, 0, 0x6Cu); Dst = 108; if ( a3 ) { v9 = 1; v13 = 512; } else { v9 = 7; v13 = 2112; v10 = v4; v11 = v5; } v7 = (*(int (__stdcall **)(struct IDirectDraw *, int *, int *, _DWORD))((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))lpDD->lpVtbl + 6))( lpDD, &Dst, &v6, 0); if ( v7 ) DDSD(v7, "F:\\h2xsrc\\Editor\\wingraph.cpp", 421); if ( !a3 ) { v7 = (*(int (__stdcall **)(int, _DWORD, int *, signed int, _DWORD))(*(_DWORD *)v6 + 100))(v6, 0, &Dst, 1, 0); if ( v7 ) DDSD(v7, "F:\\h2xsrc\\Editor\\wingraph.cpp", 429); if ( gpWindowManager->screenBuffer ) { gpWindowManager->screenBuffer->contents = v12; lpInitWin = v12; } else { lpInitWin = v12; } } return v6; } // 4847F4: using guessed type void *lpInitWin; // 484808: using guessed type struct IDirectDraw *lpDD; //----- (0041793F) -------------------------------------------------------- void __thiscall DDUpdatePalette(void *this) { signed int v1; // [sp+10h] [bp-8h]@6 signed int i; // [sp+14h] [bp-4h]@3 if ( !gbWinGraphBusy && gbForegroundApp ) { for ( i = 10; i < 246; ++i ) { *(&LogicalPalette.palPalEntry.peRed + 4 * i) = 4 * *((_BYTE *)this + 3 * i); *(&LogicalPalette.palPalEntry.peGreen + 4 * i) = 4 * *((_BYTE *)this + 3 * i + 1); *(&LogicalPalette.palPalEntry.peBlue + 4 * i) = 4 * *((_BYTE *)this + 3 * i + 2); *(&LogicalPalette.palPalEntry.peFlags + 4 * i) = 4; } ProcessAssert((int)lpDDPal, "F:\\h2xsrc\\Editor\\wingraph.cpp", 518); v1 = (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))lpDDPal->lpVtbl + 6))( lpDDPal, 0, 10, 236, (char *)&LogicalPalette + 44); if ( v1 ) DDSD(v1, "F:\\h2xsrc\\Editor\\wingraph.cpp", 522); } } // 469B28: using guessed type int gbForegroundApp; // 484800: using guessed type int gbWinGraphBusy; // 484818: using guessed type struct IDirectDrawPalette *lpDDPal; //----- (00417A4B) -------------------------------------------------------- void __cdecl DDCleanUpWinGraphics() { signed int v0; // [sp+10h] [bp-4h]@4 signed int v1; // [sp+10h] [bp-4h]@14 if ( lpDD ) { (*((void (__stdcall **)(_DWORD))lpDD->lpVtbl + 19))(lpDD); if ( lpClipper ) { if ( lpDDSPrimary ) { v0 = (*((int (__stdcall **)(_DWORD, _DWORD))lpDDSPrimary->lpVtbl + 28))(lpDDSPrimary, 0); if ( v0 ) { if ( v0 != -2005532104 ) DDSD(v0, "F:\\h2xsrc\\Editor\\wingraph.cpp", 540); } } (*((void (__stdcall **)(_DWORD))lpClipper->lpVtbl + 2))(lpClipper); lpClipper = 0; } if ( lpDDSPrimary ) { (*((void (__stdcall **)(_DWORD))lpDDSPrimary->lpVtbl + 2))(lpDDSPrimary); lpDDSPrimary = 0; } if ( lpDDSOne ) { (*((void (__stdcall **)(_DWORD))lpDDSOne->lpVtbl + 2))(lpDDSOne); lpDDSOne = 0; } if ( lpDDPal ) { (*((void (__stdcall **)(_DWORD))lpDDPal->lpVtbl + 2))(lpDDPal); lpDDPal = 0; } v1 = (*((int (__stdcall **)(_DWORD, _DWORD, _DWORD))lpDD->lpVtbl + 20))(lpDD, hwndApp, 8); if ( v1 ) DDSD(v1, "F:\\h2xsrc\\Editor\\wingraph.cpp", 564); (*((void (__stdcall **)(_DWORD))lpDD->lpVtbl + 2))(lpDD); lpDD = 0; } } // 484808: using guessed type struct IDirectDraw *lpDD; // 48480C: using guessed type struct IDirectDrawSurface *lpDDSPrimary; // 484810: using guessed type struct IDirectDrawSurface *lpDDSOne; // 484814: using guessed type struct IDirectDrawClipper *lpClipper; // 484818: using guessed type struct IDirectDrawPalette *lpDDPal; //----- (00417BB6) -------------------------------------------------------- void __thiscall DDSetFullScreenStatus(void *this) { int v1; // [sp+10h] [bp-14h]@3 signed int v2; // [sp+14h] [bp-10h]@5 signed int v3; // [sp+14h] [bp-10h]@8 signed int v4; // [sp+14h] [bp-10h]@11 signed int v5; // [sp+14h] [bp-10h]@13 signed int v6; // [sp+14h] [bp-10h]@17 int v7; // [sp+18h] [bp-Ch]@3 int v8; // [sp+1Ch] [bp-8h]@3 int v9; // [sp+20h] [bp-4h]@3 if ( !gbWinGraphBusy && *((void **)&dword_48EE38 + 7 * giCurExe) != this ) { v7 = *((_DWORD *)&X + 7 * giCurExe); v1 = *((_DWORD *)&Y + 7 * giCurExe); v9 = *((_DWORD *)&dword_48EE30 + 7 * giCurExe); v8 = *((_DWORD *)&dword_48EE34 + 7 * giCurExe); gbWinGraphBusy = 1; *((_DWORD *)&dword_48EE38 + 7 * giCurExe) = this; if ( *((_DWORD *)&dword_48EE38 + 7 * giCurExe) ) SetMenuStatus(0); v2 = (*(int (__stdcall **)(struct IDirectDraw *, HWND, signed int))((int (__stdcall **)(_DWORD, _DWORD, _DWORD))lpDD->lpVtbl + 20))( lpDD, hwndApp, 19); if ( v2 ) DDSD(v2, "F:\\h2xsrc\\Editor\\wingraph.cpp", 593); if ( *((_DWORD *)&dword_48EE38 + 7 * giCurExe) ) { v3 = (*(int (__stdcall **)(struct IDirectDraw *, signed int, signed int, signed int))((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))lpDD->lpVtbl + 21))( lpDD, 640, 480, 8); if ( v3 ) DDSD(v3, "F:\\h2xsrc\\Editor\\wingraph.cpp", 599); } else { v4 = (*(int (__stdcall **)(struct IDirectDraw *))((int (__stdcall **)(_DWORD))lpDD->lpVtbl + 19))(lpDD); if ( v4 ) DDSD(v4, "F:\\h2xsrc\\Editor\\wingraph.cpp", 606); v5 = (*(int (__stdcall **)(struct IDirectDraw *, HWND, signed int))((int (__stdcall **)(_DWORD, _DWORD, _DWORD))lpDD->lpVtbl + 20))( lpDD, hwndApp, 8); if ( v5 ) DDSD(v5, "F:\\h2xsrc\\Editor\\wingraph.cpp", 611); } if ( lpDDSPrimary ) { (*(void (__stdcall **)(struct IDirectDrawSurface *))((void (__stdcall **)(_DWORD))lpDDSPrimary->lpVtbl + 2))(lpDDSPrimary); lpDDSPrimary = 0; } CreatePrimary(); v6 = (*(int (__stdcall **)(struct IDirectDrawSurface *, struct IDirectDrawPalette *))((int (__stdcall **)(_DWORD, _DWORD))lpDDSPrimary->lpVtbl + 31))( lpDDSPrimary, lpDDPal); if ( v6 ) DDSD(v6, "F:\\h2xsrc\\Editor\\wingraph.cpp", 623); WritePrefs(); gbWinGraphBusy = 0; if ( *((_DWORD *)&dword_48EE38 + 7 * giCurExe) ) { *((_DWORD *)&X + 7 * giCurExe) = v7; *((_DWORD *)&Y + 7 * giCurExe) = v1; *((_DWORD *)&dword_48EE30 + 7 * giCurExe) = v9; *((_DWORD *)&dword_48EE34 + 7 * giCurExe) = v8; } else { SetMenuStatus(1); ResizeWindow(v7, v1, v9, v8); } SetupClipper(); } } // 4247E2: using guessed type void __fastcall ResizeWindow(_DWORD, _DWORD, _DWORD, _DWORD); // 46AE34: using guessed type int giCurExe; // 484800: using guessed type int gbWinGraphBusy; // 484808: using guessed type struct IDirectDraw *lpDD; // 48480C: using guessed type struct IDirectDrawSurface *lpDDSPrimary; // 484818: using guessed type struct IDirectDrawPalette *lpDDPal; //----- (00417E9D) -------------------------------------------------------- signed int __cdecl WGQueryNewPalette() { UINT v0; // ST1C_4@3 signed int result; // eax@4 HDC hDC; // [sp+Ch] [bp-8h]@1 hDC = GetDC(hwndApp); if ( hpalApp ) SelectPalette(hDC, hpalApp, 0); v0 = RealizePalette(hDC); ReleaseDC(hwndApp, hDC); if ( (signed int)v0 <= 0 ) { result = 0; } else { InvalidateRect(hwndApp, 0, 1); result = 1; } return result; } //----- (00417F26) -------------------------------------------------------- void __cdecl WGInitGraphics() { void *v0; // ST24_4@5 if ( !hdcImage ) { if ( thunk_WinGRecommendDIBFormat(&screenImage) ) { word_48F26E = 8; dword_48F270 = 0; Orientation = dword_48F268; } else { screenImage = 40; word_48F26C = 1; word_48F26E = 8; dword_48F270 = 0; dword_48F274 = 0; dword_48F280 = 0; dword_48F284 = 0; } dword_48F264 = 640; dword_48F268 = -480; InitializePalette(); hdcImage = (HDC)thunk_WinGCreateDC(); dword_48F264 = 640; dword_48F268 = -480; v0 = (void *)thunk_WinGCreateBitmap(hdcImage, &screenImage, (char *)&screenImage + 1064); dword_48F274 = Orientation * dword_48F268 * dword_48F264; gbmOldMonoBitmap = SelectObject(hdcImage, v0); lpInitWin = (void *)dword_48F688; PatBlt(hdcImage, 0, 0, iMainWinScreenWidth, iMainWinScreenHeight, 0x42u); } } // 42EE90: using guessed type int __stdcall thunk_WinGCreateBitmap(_DWORD, _DWORD, _DWORD); // 42EE96: using guessed type int __stdcall thunk_WinGCreateDC(); // 42EE9C: using guessed type int __stdcall thunk_WinGRecommendDIBFormat(_DWORD); // 4843EC: using guessed type __int32 Orientation; // 4847F4: using guessed type void *lpInitWin; // 48F264: using guessed type int dword_48F264; // 48F268: using guessed type int dword_48F268; // 48F26C: using guessed type __int16 word_48F26C; // 48F26E: using guessed type __int16 word_48F26E; // 48F270: using guessed type int dword_48F270; // 48F274: using guessed type int dword_48F274; // 48F280: using guessed type int dword_48F280; // 48F284: using guessed type int dword_48F284; // 48F688: using guessed type int dword_48F688; //----- (00418077) -------------------------------------------------------- heroWindowManager *__thiscall WGUpdatePalette(void *this) { heroWindowManager *result; // eax@8 HDC hDC; // [sp+10h] [bp-Ch]@6 signed int i; // [sp+18h] [bp-4h]@1 for ( i = 10; i < 246; ++i ) { *(&LogicalPalette.palPalEntry.peRed + 4 * i) = 4 * *((_BYTE *)this + 3 * i); byte_48F28A[4 * i] = *(&LogicalPalette.palPalEntry.peRed + 4 * i); *(&LogicalPalette.palPalEntry.peGreen + 4 * i) = 4 * *((_BYTE *)this + 3 * i + 1); byte_48F289[4 * i] = *(&LogicalPalette.palPalEntry.peGreen + 4 * i); *(&LogicalPalette.palPalEntry.peBlue + 4 * i) = 4 * *((_BYTE *)this + 3 * i + 2); redBlueSwappedGlobalPaletteEntries[4 * i] = *(&LogicalPalette.palPalEntry.peBlue + 4 * i); } AnimatePalette(hpalApp, 0xAu, 0xECu, (const PALETTEENTRY *)&LogicalPalette + 11); thunk_WinGSetDIBColorTable(hdcImage, 10, 236, (char *)&screenImage + 80); if ( hpalApp ) DeleteObject(hpalApp); hpalApp = CreatePalette(&LogicalPalette); hDC = GetDC(hwndApp); if ( hpalApp ) SelectPalette(hDC, hpalApp, 0); RealizePalette(hDC); result = (heroWindowManager *)ReleaseDC(hwndApp, hDC); if ( giMainVideoModeColorDepth != 8 ) { result = gpWindowManager; if ( gpWindowManager->screenBuffer ) result = (heroWindowManager *)BlitBitmapToScreen(0, 640, 480, 0, 0); } return result; } // 42EEA2: using guessed type int __stdcall thunk_WinGSetDIBColorTable(_DWORD, _DWORD, _DWORD, _DWORD); // 435840: using guessed type _DWORD __stdcall BlitBitmapToScreen(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // 469B2C: using guessed type int giMainVideoModeColorDepth; //----- (00418220) -------------------------------------------------------- void __cdecl WGInitializePalette() { HDC v0; // ST1C_4@2 signed int i; // [sp+10h] [bp-4h]@2 signed int j; // [sp+10h] [bp-4h]@5 if ( !hpalApp ) { v0 = GetDC(0); GetSystemPaletteEntries(v0, 0, 0xAu, &LogicalPalette.palPalEntry); GetSystemPaletteEntries(v0, 0xF6u, 0xAu, (LPPALETTEENTRY)&LogicalPalette + 247); ReleaseDC(0, v0); for ( i = 0; i < 10; ++i ) { byte_48F28A[4 * i] = *(&LogicalPalette.palPalEntry.peRed + 4 * i); byte_48F289[4 * i] = *(&LogicalPalette.palPalEntry.peGreen + 4 * i); redBlueSwappedGlobalPaletteEntries[4 * i] = *(&LogicalPalette.palPalEntry.peBlue + 4 * i); byte_48F28B[4 * i] = 0; *(&LogicalPalette.palPalEntry.peFlags + 4 * i) = 0; byte_48F662[4 * i] = byte_4847CC[4 * i]; byte_48F661[4 * i] = byte_4847CD[4 * i]; byte_48F660[4 * i] = byte_4847CE[4 * i]; byte_48F663[4 * i] = 0; byte_4847CF[4 * i] = 0; } for ( j = 10; j < 246; ++j ) { *(&LogicalPalette.palPalEntry.peRed + 4 * j) = 0; byte_48F28A[4 * j] = *(&LogicalPalette.palPalEntry.peRed + 4 * j); *(&LogicalPalette.palPalEntry.peGreen + 4 * j) = 0; byte_48F289[4 * j] = *(&LogicalPalette.palPalEntry.peGreen + 4 * j); *(&LogicalPalette.palPalEntry.peBlue + 4 * j) = 0; redBlueSwappedGlobalPaletteEntries[4 * j] = *(&LogicalPalette.palPalEntry.peBlue + 4 * j); byte_48F28B[4 * j] = 0; *(&LogicalPalette.palPalEntry.peFlags + 4 * j) = 4; } hpalApp = CreatePalette(&LogicalPalette); } } //----- (004183F5) -------------------------------------------------------- signed int __fastcall WGAppPaint(HWND a1, void *a2) { int v2; // ecx@2 int v3; // ST3C_4@8 HDC hdc; // [sp+Ch] [bp-78h]@2 HWND hWnd; // [sp+10h] [bp-74h]@1 struct tagPAINTSTRUCT Paint; // [sp+20h] [bp-64h]@2 int v8; // [sp+60h] [bp-24h]@2 int v9; // [sp+64h] [bp-20h]@2 int v10; // [sp+68h] [bp-1Ch]@2 char v11; // [sp+70h] [bp-14h]@1 struct tagRECT Rect; // [sp+74h] [bp-10h]@2 hWnd = a1; v11 = 0; if ( dword_48F688 ) { hdc = BeginPaint(a1, &Paint); SelectPalette(hdc, hpalApp, 0); RealizePalette(hdc); GetClientRect(hWnd, &Rect); v10 = Rect.right - Rect.left; v8 = 0 / iMainWinScreenWidth; v9 = 0 / iMainWinScreenHeight; if ( giScrollX ) v8 += giScrollX; if ( giScrollY ) v9 += giScrollY; ++dword_4847FC; if ( iMainWinScreenWidth != 640 || iMainWinScreenHeight != 480 ) { thunk_WinGStretchBlt( (int)hdc, 0, 0, v10, Rect.bottom - Rect.top, (int)hdcImage, v8, v9, 640 * v10 / iMainWinScreenWidth, 480 * (Rect.bottom - Rect.top) / iMainWinScreenHeight); } else { v3 = Paint.rcPaint.left & 0xFFFC; v10 = Paint.rcPaint.right - v3 + 1; thunk_WinGBitBlt( v2, 0 % iMainWinScreenHeight, hdc, Paint.rcPaint.left & 0xFFFC, Paint.rcPaint.top, Paint.rcPaint.right - v3 + 1, Paint.rcPaint.bottom - Paint.rcPaint.top + 1, hdcImage, v3 + giScrollX, Paint.rcPaint.top + giScrollY); } EndPaint(hWnd, (const PAINTSTRUCT *)&Paint); } return 1; } // 42EEAE: using guessed type int __fastcall thunk_WinGBitBlt(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // 46AE2C: using guessed type int giScrollX; // 46AE30: using guessed type int giScrollY; // 4847FC: using guessed type int dword_4847FC; // 48F688: using guessed type int dword_48F688; //----- (004185B9) -------------------------------------------------------- void __cdecl WGCleanUpWinGraphics() { HGDIOBJ v0; // ST14_4@2 if ( hdcImage ) { v0 = SelectObject(hdcImage, gbmOldMonoBitmap); DeleteObject(v0); DeleteDC(hdcImage); hdcImage = 0; } if ( hpalApp ) { DeleteObject(hpalApp); hpalApp = 0; } } //----- (00418631) -------------------------------------------------------- void __cdecl ConnectToDLLs() { hDDrawLibrary = LoadLibraryA("DDRAW.DLL"); if ( (unsigned int)hDDrawLibrary >= 0x20 ) { lpDirectDrawCreate = (__int32 (__stdcall *)(struct _GUID *, struct IDirectDraw **, struct IUnknown *))GetProcAddress(hDDrawLibrary, "DirectDrawCreate"); if ( lpDirectDrawCreate ) gbDDrawAttached = 1; else ShutDown("Error loading DDRAW.DLL"); } } // 4843E4: using guessed type int gbDDrawAttached; // 484804: using guessed type __int32 (__stdcall *lpDirectDrawCreate)(struct _GUID *, struct IDirectDraw **, struct IUnknown *); //----- (0041869A) -------------------------------------------------------- BOOL __cdecl DisconnectDLLs() { BOOL result; // eax@2 if ( (unsigned int)hDDrawLibrary >= 0x20 ) result = FreeLibrary(hDDrawLibrary); return result; } //----- (004186EF) -------------------------------------------------------- signed int __cdecl SetPalette() { signed int result; // eax@2 if ( giGraphicsType == 1 ) result = 0; else result = DDSetPalette(); return result; } // 4843E8: using guessed type int giGraphicsType; //----- (0041879B) -------------------------------------------------------- void __cdecl InitGraphics() { LogStr("IG1"); ConnectToDLLs(); LogStr("IG2"); if ( *((_DWORD *)&dword_48EE38 + 7 * giCurExe) ) giGraphicsType = 2; else giGraphicsType = 1; if ( giGraphicsType == 1 ) { LogStr("IG3"); WGInitGraphics(); LogStr("IG4"); } else { LogStr("IG5"); DDInitGraphics(); LogStr("IG6"); } } // 46AE34: using guessed type int giCurExe; // 4843E8: using guessed type int giGraphicsType; //----- (00418881) -------------------------------------------------------- void __cdecl InitializePalette() { if ( giGraphicsType == 1 ) WGInitializePalette(); else DDInitializePalette(); } // 4843E8: using guessed type int giGraphicsType; //----- (004188AD) -------------------------------------------------------- void __thiscall UpdatePalette(void *this) { if ( giGraphicsType == 1 ) WGUpdatePalette(this); else DDUpdatePalette(this); } // 4843E8: using guessed type int giGraphicsType; //----- (004188E5) -------------------------------------------------------- BOOL __cdecl CleanUpWinGraphics() { if ( giGraphicsType == 1 ) WGCleanUpWinGraphics(); else DDCleanUpWinGraphics(); return DisconnectDLLs(); } // 4843E8: using guessed type int giGraphicsType; //----- (00418916) -------------------------------------------------------- void __thiscall SetFullScreenStatus(void *this) { void *v1; // [sp+Ch] [bp-4h]@1 v1 = this; if ( !gbInSmackMgr && *((void **)&dword_48EE38 + 7 * giCurExe) != this ) { if ( giGraphicsType == 1 ) { *((_DWORD *)&dword_48EE38 + 7 * giCurExe) = 1; if ( SetGraphicsType((void *)2) ) DDSetFullScreenStatus(v1); } else if ( this ) { DDSetFullScreenStatus(this); } else if ( gbWinGAttached ) { SetGraphicsType((void *)1); } if ( v1 ) CheckChangeCursor(0, 0, 1); } } // 46AE34: using guessed type int giCurExe; // 46B0C8: using guessed type int gbInSmackMgr; // 4843E0: using guessed type int gbWinGAttached; // 4843E8: using guessed type int giGraphicsType; //----- (004189E5) -------------------------------------------------------- signed int __cdecl QueryNewPalette() { signed int result; // eax@2 if ( giGraphicsType == 1 ) result = WGQueryNewPalette(); else result = DDQueryNewPalette(); return result; } // 4843E8: using guessed type int giGraphicsType; //----- (00418A16) -------------------------------------------------------- signed int __thiscall SetGraphicsType(void *this) { signed int result; // eax@2 void *v2; // [sp+Ch] [bp-1Ch]@1 void *Src; // [sp+10h] [bp-18h]@9 int v4; // [sp+14h] [bp-14h]@9 int v5; // [sp+18h] [bp-10h]@9 int v6; // [sp+1Ch] [bp-Ch]@9 int v7; // [sp+20h] [bp-8h]@9 int v8; // [sp+24h] [bp-4h]@9 v2 = this; if ( (void *)giGraphicsType == this ) { result = 1; } else if ( this != (void *)1 || gbWinGAttached ) { if ( this != (void *)2 || gbDDrawAttached ) { v8 = *((_DWORD *)&dword_48EE38 + 7 * giCurExe); v5 = *((_DWORD *)&X + 7 * giCurExe); v4 = *((_DWORD *)&Y + 7 * giCurExe); v7 = *((_DWORD *)&dword_48EE30 + 7 * giCurExe); v6 = *((_DWORD *)&dword_48EE34 + 7 * giCurExe); Src = BaseAlloc(0x4B000u, (int)"F:\\h2xsrc\\Editor\\wingraph.cpp", 1245); memcpy(Src, gpWindowManager->screenBuffer->contents, 0x4B000u); if ( v2 == (void *)1 ) { *((_DWORD *)&dword_48EE38 + 7 * giCurExe) = 0; DDCleanUpWinGraphics(); giGraphicsType = 1; WGInitGraphics(); gpWindowManager->screenBuffer->contents = (char *)lpInitWin; } else { WGCleanUpWinGraphics(); giGraphicsType = 2; DDInitGraphics(); gpWindowManager->screenBuffer->contents = (char *)lpInitWin; } memcpy(gpWindowManager->screenBuffer->contents, Src, 0x4B000u); BaseFree(Src, "F:\\h2xsrc\\Editor\\wingraph.cpp", 1266); if ( v8 ) { if ( v2 == (void *)1 ) { SetMenuStatus(1); ResizeWindow(v5, v4, v7, v6); } } BlitBitmapToScreen(0, 640, 480, 0, 0); UpdatePalette(*(void **)(gpBufferPalette + 16)); result = 1; } else { result = 0; } } else { result = 0; } return result; } // 4247E2: using guessed type void __fastcall ResizeWindow(_DWORD, _DWORD, _DWORD, _DWORD); // 435840: using guessed type _DWORD __stdcall BlitBitmapToScreen(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // 46AE34: using guessed type int giCurExe; // 4843E0: using guessed type int gbWinGAttached; // 4843E4: using guessed type int gbDDrawAttached; // 4843E8: using guessed type int giGraphicsType; // 4847F4: using guessed type void *lpInitWin; // 48EAD0: using guessed type int gpBufferPalette; //----- (00418C30) -------------------------------------------------------- void __thiscall sub_418C30(editManager *this, void **a1) { tag_message evt; // [sp+1Ch] [bp-20h]@4 int i; // [sp+38h] [bp-4h]@4 dword_48F6B8 = (int)*a1; if ( operator new(0x44u) ) gpCellEditDialog = heroWindow::heroWindow(0, 0, "x_spedit.bin"); else gpCellEditDialog = 0; evt.eventCode = 512; evt.xCoordOrKeycode = GUI_MESSAGE_SET_CONTENTS; evt.payload = &gText; evt.yCoordOrFieldID = 101; strcpy((char *)&gText, "Spell Scroll"); heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 102; strcpy((char *)&gText, "Attach Spell"); heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.xCoordOrKeycode = GUI_MESSAGE_DROPLIST_ADD; evt.yCoordOrFieldID = 100; for ( i = 0; i < 65; ++i ) { sprintf((char *)&gText, "%s", off_46CE80[i]); evt.payload = &gText; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } evt.xCoordOrKeycode = 54; evt.payload = *a1; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); heroWindowManager::DoDialog(gpWindowManager, gpCellEditDialog, (int (__thiscall *)(_DWORD))sub_418DE3, 0); operator delete(gpCellEditDialog); if ( gpWindowManager->buttonPressedCode != 30721 ) { *a1 = (void *)dword_48F6B8; gpEditManager->setOnEventUpdate = 1; } editManager::UpdateCursor(gpEditManager); RedrawEditPane(); } // 46CE80: using guessed type char *off_46CE80[65]; // 48F6B8: using guessed type int dword_48F6B8; //----- (00418DE3) -------------------------------------------------------- signed int __fastcall sub_418DE3(tag_message *msg) { int v2; // [sp+14h] [bp-14h]@3 int v3; // [sp+18h] [bp-10h]@2 INPUT_EVENT_CODE evtCode; // [sp+1Ch] [bp-Ch]@1 evtCode = msg->eventCode; if ( evtCode == 1 ) { if ( msg->xCoordOrKeycode == 1 ) { msg->eventCode = 512; msg->yCoordOrFieldID = 10; msg->xCoordOrKeycode = msg->yCoordOrFieldID; return 2; } } else if ( evtCode == 512 ) { v3 = msg->xCoordOrKeycode; if ( v3 == 12 ) { if ( msg->yCoordOrFieldID == 100 ) { msg->xCoordOrKeycode = 55; heroWindow::BroadcastMessage(gpCellEditDialog, msg); dword_48F6B8 = (int)msg->payload; } } else if ( v3 == 13 ) { v2 = msg->yCoordOrFieldID; if ( v2 >= 30721 && v2 <= 30722 ) { gpWindowManager->buttonPressedCode = msg->yCoordOrFieldID; msg->eventCode = 512; msg->yCoordOrFieldID = 10; msg->xCoordOrKeycode = msg->yCoordOrFieldID; return 2; } } } return 1; } // 48F6B8: using guessed type int dword_48F6B8; //----- (00418F80) -------------------------------------------------------- signed int __fastcall GetMapHeader(char *filnam, SMapHeader *buf) { signed int result; // eax@2 int v3; // [sp+0h] [bp-18h]@0 void *lpBuffer; // [sp+Ch] [bp-Ch]@1 int fd; // [sp+14h] [bp-4h]@1 lpBuffer = buf; sprintf((char *)&gText, "%s%s", &".\\MAPS\\", filnam); fd = open((LPCSTR)&gText, O_BINARY, v3); if ( fd == -1 ) { result = 0; } else { _read(fd, lpBuffer, 0x1A4u); _close(fd); result = 1; } return result; } // 46AD90: using guessed type char *gcMapPath; //----- (004190F1) -------------------------------------------------------- int __thiscall fileRequester::InitializeFiles(void *this, int a2, int a3, int a4) { int result; // eax@11 void *v5; // [sp+Ch] [bp-65Ch]@1 char v6; // [sp+10h] [bp-658h]@47 int k; // [sp+204h] [bp-464h]@35 int i; // [sp+208h] [bp-460h]@20 char v9; // [sp+20Ch] [bp-45Ch]@31 struct _WIN32_FIND_DATAA FindFileData; // [sp+214h] [bp-454h]@1 int v11; // [sp+354h] [bp-314h]@23 char *Source; // [sp+358h] [bp-310h]@30 char Str1; // [sp+35Ch] [bp-30Ch]@30 SMapHeader mapHeader; // [sp+4BCh] [bp-1ACh]@4 int j; // [sp+660h] [bp-8h]@1 HANDLE hFindFile; // [sp+664h] [bp-4h]@1 v5 = this; sprintf((char *)&gText, "%s%s", a2, a3); *(_DWORD *)((char *)v5 + 1042) = 0; j = 1; hFindFile = FindFirstFileA((LPCSTR)&gText, &FindFileData); if ( hFindFile != (HANDLE)-1 ) { while ( j ) { if ( *(_DWORD *)((char *)v5 + 66) != 4 || ((GetMapHeader(FindFileData.cFileName, &mapHeader), giMapSizeFilter == 4) || LOBYTE((&giMapSizes)[giMapSizeFilter]) == mapHeader.width) && ShowThisMap(FindFileData.cFileName) ) ++*(_DWORD *)((char *)v5 + 1042); j = FindNextFileA(hFindFile, &FindFileData); } FindClose(hFindFile); } if ( a4 ) { result = *(_DWORD *)((char *)v5 + 1042); } else { *(_DWORD *)((char *)v5 + 670) = operator new(351 * (*(_DWORD *)((char *)v5 + 1042) + 1)); if ( !*(_DWORD *)((char *)v5 + 670) ) MemError(); *(_DWORD *)((char *)v5 + 674) = operator new(5 * *(_DWORD *)((char *)v5 + 1042) + 5); if ( !*(_DWORD *)((char *)v5 + 674) ) MemError(); if ( *(_DWORD *)((char *)v5 + 66) == 4 || *(_DWORD *)((char *)v5 + 66) == 1 ) { *(_DWORD *)((char *)v5 + 678) = operator new(420 * *(_DWORD *)((char *)v5 + 1042)); if ( !*(_DWORD *)((char *)v5 + 678) ) MemError(); } for ( i = 0; *(_DWORD *)((char *)v5 + 1042) > i; ++i ) { strcpy((char *)(351 * i + *(_DWORD *)((char *)v5 + 670)), byte_485104); strcpy((char *)(5 * i + *(_DWORD *)((char *)v5 + 674)), byte_485108); } v11 = 0; sprintf((char *)&gText, "%s%s", a2, a3); hFindFile = FindFirstFileA((LPCSTR)&gText, &FindFileData); if ( hFindFile != (HANDLE)-1 ) { for ( j = 1; j; j = FindNextFileA(hFindFile, &FindFileData) ) { if ( *(_DWORD *)((char *)v5 + 66) == 4 ) { GetMapHeader(FindFileData.cFileName, &mapHeader); if ( giMapSizeFilter != 4 ) { if ( LOBYTE((&giMapSizes)[giMapSizeFilter]) != mapHeader.width ) continue; } if ( !ShowThisMap(FindFileData.cFileName) ) continue; } strcpy(&Str1, FindFileData.cFileName); Source = (char *)FindLastToken(&Str1, 46); if ( Source ) { strcpy(&v9, Source); *Source = 0; } for ( i = 0; i < v11; ++i ) { if ( stricmp(&Str1, (const char *)(351 * i + *(_DWORD *)((char *)v5 + 670))) < 0 ) { for ( k = v11; k > i; --k ) { strcpy( (char *)(351 * k + *(_DWORD *)((char *)v5 + 670)), (const char *)(*(_DWORD *)((char *)v5 + 670) + 351 * (k - 1))); strcpy( (char *)(*(_DWORD *)((char *)v5 + 674) + 5 * k), (const char *)(*(_DWORD *)((char *)v5 + 674) + 5 * k - 5)); } break; } } strcpy((char *)(351 * i + *(_DWORD *)((char *)v5 + 670)), &Str1); strcpy((char *)(5 * i + *(_DWORD *)((char *)v5 + 674)), &v9); ++v11; } FindClose(hFindFile); } if ( *(_DWORD *)((char *)v5 + 66) == 1 || *(_DWORD *)((char *)v5 + 66) == 4 ) { for ( i = 0; i < v11; ++i ) { sprintf(&v6, "%s%s", 351 * i + *(_DWORD *)((char *)v5 + 670), 5 * i + *(_DWORD *)((char *)v5 + 674)); GetMapHeader(&v6, (SMapHeader *)(420 * i + *(_DWORD *)((char *)v5 + 678))); } } result = *(_DWORD *)((char *)v5 + 1042); } return result; } // 4190D6: using guessed type _DWORD __fastcall ShowThisMap(char *); // 46AAE8: using guessed type unsigned __int8 *giMapSizes; // 4850E0: using guessed type int giMapSizeFilter; //----- (004198AC) -------------------------------------------------------- bool __thiscall fileRequester::MapExistsForFilter(void *this, int a2) { int v2; // ST1C_4@1 int v3; // ST20_4@1 v2 = giMapSizeFilter; giMapSizeFilter = a2; v3 = fileRequester::InitializeFiles(this, (int)((char *)this + 370), (int)((char *)this + 70), 1); giMapSizeFilter = v2; return v3 > 0; } // 4850E0: using guessed type int giMapSizeFilter; //----- (0041990F) -------------------------------------------------------- int __thiscall fileRequester::SetupFiles(int this) { int v1; // ST18_4@1 v1 = this; fileRequester::CleanUpData(this); *(_DWORD *)(v1 + 1042) = 0; *(_DWORD *)(v1 + 1046) = 0; *(_DWORD *)(v1 + 1054) = -2; *(_DWORD *)(v1 + 1050) = -1; return fileRequester::InitializeFiles((void *)v1, v1 + 370, v1 + 70, 0); } // 41990F: using guessed type int __thiscall fileRequester__SetupFiles(_DWORD); //----- (0041997B) -------------------------------------------------------- int __thiscall fileRequester::CleanUpData(int this) { int result; // eax@7 int v2; // [sp+Ch] [bp-1Ch]@1 v2 = this; if ( *(_DWORD *)(this + 670) ) operator delete(*(void **)(this + 670)); *(_DWORD *)(v2 + 670) = 0; if ( *(_DWORD *)(v2 + 674) ) operator delete(*(void **)(v2 + 674)); *(_DWORD *)(v2 + 674) = 0; if ( *(_DWORD *)(v2 + 678) ) operator delete(*(void **)(v2 + 678)); result = v2; *(_DWORD *)(v2 + 678) = 0; return result; } //----- (00419ACD) -------------------------------------------------------- int __thiscall fileRequester::Open(void *ecx0, int a2) { heroWindow *v2; // eax@4 int v4; // [sp+Ch] [bp-38h]@1 void *this; // [sp+14h] [bp-30h]@10 tag_message evt; // [sp+1Ch] [bp-28h]@15 unsigned __int8 v7; // [sp+40h] [bp-4h]@15 v4 = (int)ecx0; strcpy(gLastFilename, byte_48511C); *(_DWORD *)(v4 + 682) = hmnuCurrent; KBChangeMenu(hmnuDflt); if ( operator new(0x44u) ) { if ( *(_DWORD *)(v4 + 66) != 1 && *(_DWORD *)(v4 + 66) != 4 ) v2 = heroWindow::heroWindow(*(_DWORD *)(v4 + 58), *(_DWORD *)(v4 + 62), "request.bin"); else v2 = heroWindow::heroWindow(*(_DWORD *)(v4 + 58), *(_DWORD *)(v4 + 62), "requests.bin"); *(_DWORD *)(v4 + 54) = v2; } else { *(_DWORD *)(v4 + 54) = 0; } if ( !*(_DWORD *)(v4 + 54) ) MemError(); this = (void *)operator new(0x2Du); if ( this ) *(_DWORD *)(v4 + 1067) = iconWidget::iconWidget( this, 346, (signed __int64)fGutterTravelLength, 8, 17, "scrollcn.icn", 4, 0, 14, 16, 1); else *(_DWORD *)(v4 + 1067) = 0; if ( !*(_DWORD *)(v4 + 1067) ) MemError(); heroWindow::AddWidget(*(heroWindow **)(v4 + 54), *(widget **)(v4 + 1067), -1); evt.eventCode = 512; evt.xCoordOrKeycode = 3; v7 = 1; evt.yCoordOrFieldID = 16; sprintf((char *)&gText, "File to Load:"); evt.payload = &gText; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); evt.eventCode = 512; evt.xCoordOrKeycode = 51; evt.yCoordOrFieldID = 15; evt.payload = (void *)201; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); fileRequester::Update(v4, 0); if ( *(_DWORD *)(v4 + 1050) != -1 ) v7 = 1; heroWindowManager::AddWindow(*(_DWORD *)(v4 + 54), -1, 1); if ( !*(_DWORD *)(v4 + 1042) ) v7 = 0; if ( *(_DWORD *)(v4 + 66) == 3 && !stricmp((const char *)(v4 + 691), "NEWGAME") && *(_DWORD *)(v4 + 1050) == -1 ) v7 = 1; fileRequester::SetOK(v4, v7); *(_DWORD *)(v4 + 12) = 16384; *(_DWORD *)(v4 + 16) = a2; *(_DWORD *)(v4 + 50) = 1; strcpy((char *)(v4 + 20), "fileRequester"); return 0; } // 424B97: using guessed type void __fastcall KBChangeMenu(void *); // 432040: using guessed type _DWORD __stdcall heroWindowManager__AddWindow(_DWORD, _DWORD, _DWORD); // 48F6BC: using guessed type float fGutterTravelLength; // 490180: using guessed type void *hmnuCurrent; //----- (00419D53) -------------------------------------------------------- int __thiscall fileRequester::SetOK(int this, int a2) { int v3; // [sp+Ch] [bp-20h]@1 tag_message evt; // [sp+10h] [bp-1Ch]@1 v3 = this; evt.eventCode = 512; if ( a2 ) evt.xCoordOrKeycode = 6; else evt.xCoordOrKeycode = 5; evt.yCoordOrFieldID = 30722; if ( *(_DWORD *)(this + 50) == 1 ) evt.payload = (void *)8; else evt.payload = (void *)4096; heroWindow::BroadcastMessage(*(heroWindow **)(this + 54), &evt); if ( a2 ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; evt.payload = (void *)2; return heroWindow::BroadcastMessage(*(heroWindow **)(v3 + 54), &evt); } //----- (00419DF8) -------------------------------------------------------- signed int __thiscall fileRequester::Main(overlayManager *this, tag_message *msg) { int v2; // eax@93 signed int result; // eax@165 int v4; // [sp+1Ch] [bp-410h]@50 int v5; // [sp+20h] [bp-40Ch]@28 int msgCode; // [sp+24h] [bp-408h]@27 int v7; // [sp+28h] [bp-404h]@2 INPUT_EVENT_CODE evtCode; // [sp+2Ch] [bp-400h]@1 char Str; // [sp+3Ch] [bp-3F0h]@96 int v11; // [sp+168h] [bp-2C4h]@128 tag_message evt; // [sp+16Ch] [bp-2C0h]@105 int v13; // [sp+188h] [bp-2A4h]@50 char Str2; // [sp+18Ch] [bp-2A0h]@4 size_t v15; // [sp+2B8h] [bp-174h]@105 int i; // [sp+2BCh] [bp-170h]@7 int v17; // [sp+2C0h] [bp-16Ch]@130 int v18; // [sp+2C4h] [bp-168h]@130 int v19; // [sp+2C8h] [bp-164h]@1 int Dst; // [sp+2CCh] [bp-160h]@105 v19 = 0; evtCode = msg->eventCode; if ( evtCode == INPUT_KEYDOWN_EVENT_CODE ) { v7 = msg->xCoordOrKeycode; if ( v7 == 64 ) { if ( *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7) == -1 ) strcpy(&Str2, byte_485174); else strcpy( &Str2, (const char *)(*(_DWORD *)&this->availOverlays[4].fullGridIconIndices[2] + 351 * *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7))); giMapSizeFilter = (giMapSizeFilter + 1) % 5; fileRequester::SetupFiles(this); if ( strlen(&Str2) ) { for ( i = 0; *(_DWORD *)&this->availOverlays[7].field_42 > i; ++i ) { if ( !stricmp((const char *)(351 * i + *(_DWORD *)&this->availOverlays[4].fullGridIconIndices[2]), &Str2) ) *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7) = i; } } fileRequester::Update((int)this, 1); } else if ( v7 == 72 ) { if ( *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7) > 0 ) { --*(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7); if ( *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7) < *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3) ) --*(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3); fileRequester::Update((int)this, 1); } } else if ( v7 == 80 && *(_DWORD *)&this->availOverlays[7].field_42 - 1 > *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7) ) { ++*(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7); if ( iMaxListSize + *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3) <= *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7) ) ++*(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3); fileRequester::Update((int)this, 1); } } else { if ( evtCode != INPUT_GUI_MESSAGE_CODE ) goto LABEL_164; msgCode = msg->xCoordOrKeycode; if ( msgCode != 12 ) { if ( msgCode == GUI_MESSAGE_BUTTON_PRESSED ) { v5 = msg->yCoordOrFieldID; if ( v5 > 30721 ) { if ( v5 == 30722 ) { if ( *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7) != -1 || this->availOverlays[4].fullGridIconIndices[23] ) { msg->payload = (void *)msg->yCoordOrFieldID; v19 = 1; } else { NormalDialog("Please make a selection from the list, or press cancel.", 1, -1, -1, -1, 0, -1, 0, -1, 0); } } } else if ( v5 == 30721 ) { msg->payload = (void *)msg->yCoordOrFieldID; v19 = 1; } else if ( v5 == 1 ) { if ( *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3) > 0 ) { --*(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3); fileRequester::Update((int)this, 1); } } else if ( v5 == 2 && iMaxListSize + *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3) < *(_DWORD *)&this->availOverlays[7].field_42 ) { ++*(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3); if ( iMaxListSize + *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3) - 1 >= *(_DWORD *)&this->availOverlays[7].field_42 ) *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3) = *(_DWORD *)&this->availOverlays[7].field_42 - iMaxListSize; fileRequester::Update((int)this, 1); } goto LABEL_164; } if ( msgCode != 14 ) goto LABEL_164; } if ( BYTE1(msg->inputTypeBitmask) & 2 ) { v13 = -1; v4 = msg->yCoordOrFieldID; if ( v4 > 80 ) { if ( v4 <= 30721 ) { if ( v4 == 30721 ) { v13 = 7; } else { switch ( v4 ) { case 100: v13 = 0; break; case 101: v13 = 1; break; case 102: v13 = 2; break; case 103: v13 = 3; break; case 104: v13 = 4; break; case 82: v13 = 8; break; case 81: v13 = 9; break; case 86: v13 = 10; break; case 87: v13 = 11; break; case 85: v13 = 13; break; case 83: v13 = 14; break; case 84: v13 = 14; break; default: goto LABEL_67; } } goto LABEL_89; } if ( v4 != 30722 ) goto LABEL_67; v13 = 6; } else if ( v4 == 80 ) { v13 = 12; } else { if ( v4 != 15 ) { LABEL_67: if ( msg->yCoordOrFieldID < 200 || msg->yCoordOrFieldID >= 220 ) { if ( msg->yCoordOrFieldID < 220 || msg->yCoordOrFieldID >= 240 ) { if ( msg->yCoordOrFieldID < 240 || msg->yCoordOrFieldID >= 260 ) { if ( msg->yCoordOrFieldID >= 260 && msg->yCoordOrFieldID < 280 ) v13 = 11; } else { v13 = 10; } } else { v13 = 9; } } else { v13 = 8; } goto LABEL_89; } v13 = 5; } LABEL_89: if ( v13 >= 0 ) NormalDialog((&gFileRequestHelp)[4 * v13], 4, -1, -1, -1, 0, -1, 0, -1, 0); goto LABEL_164; } switch ( msg->yCoordOrFieldID ) { case 0x64: case 0x65: case 0x66: case 0x67: case 0x68: i = msg->yCoordOrFieldID - 100; LOBYTE(v2) = fileRequester::MapExistsForFilter(this, i); if ( v2 ) { giMapSizeFilter = i; if ( *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7) == -1 ) strcpy(&Str, byte_4851D0); else strcpy( &Str, (const char *)(*(_DWORD *)&this->availOverlays[4].fullGridIconIndices[2] + 351 * *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7))); fileRequester::SetupFiles(this); if ( strlen(&Str) ) { for ( i = 0; *(_DWORD *)&this->availOverlays[7].field_42 > i; ++i ) { if ( !stricmp((const char *)(351 * i + *(_DWORD *)&this->availOverlays[4].fullGridIconIndices[2]), &Str) ) *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7) = i; } } fileRequester::Update((int)this, 1); } else { sprintf((char *)&gText, "No maps exist for that size."); NormalDialog((char *)&gText, 1, -1, -1, -1, 0, -1, 0, -1, 0); } break; case 0xF: evt.eventCode = 512; evt.xCoordOrKeycode = 7; evt.yCoordOrFieldID = 15; heroWindow::BroadcastMessage((heroWindow *)this->field_36, &evt); memset(&Dst, 0, 9u); strcpy((char *)&Dst, (const char *)evt.payload); v15 = strlen((const char *)&Dst); for ( i = 0; (signed int)v15 > i; ++i ) { if ( ((signed int)*((_BYTE *)&Dst + i) < 65 || (signed int)*((_BYTE *)&Dst + i) > 90) && ((signed int)*((_BYTE *)&Dst + i) < 97 || (signed int)*((_BYTE *)&Dst + i) > 122) && ((signed int)*((_BYTE *)&Dst + i) < 48 || (signed int)*((_BYTE *)&Dst + i) > 57) && *((_BYTE *)&Dst + i) != 95 && *((_BYTE *)&Dst + i) != 32 && !FindToken("$%'-_@~`!(){}^#&+,;=[].", *(int *)((char *)&Dst + i)) ) *((_BYTE *)&Dst + i) = 0; } for ( i = strlen((const char *)&Dst) - 1; i >= 0; --i ) { if ( *((_BYTE *)&Dst + i) == 32 ) *((_BYTE *)&Dst + i) = 0; else i = -1; } if ( strlen((const char *)&Dst) && (char)Dst > 32 ) { *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7) = -1; strcpy(&this->availOverlays[4].fullGridIconIndices[23], (const char *)&Dst); fileRequester::SetOK((int)this, 1); } evt.xCoordOrKeycode = 3; evt.yCoordOrFieldID = 15; evt.payload = &this->availOverlays[4].fullGridIconIndices[23]; heroWindow::BroadcastMessage((heroWindow *)this->field_36, &evt); fileRequester::Update((int)this, 1); break; case 3: v11 = *(_DWORD *)&this->availOverlays[7].field_42 - (iMaxListSize - 1); if ( v11 < 1 ) v11 = 1; v18 = msg->altXCoord; v17 = (unsigned __int64)(signed __int64)((double)msg->altYCoord - ((double)*(signed int *)&this->overlaySelectBoxes + fGutterTravelLength)) - 9; *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3) = 100 * v17 / (signed int)(signed __int64)(fGutterMinY * 100.0 / (double)v11); if ( iMaxListSize + *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3) - 1 >= *(_DWORD *)&this->availOverlays[7].field_42 ) *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3) = *(_DWORD *)&this->availOverlays[7].field_42 - iMaxListSize; if ( *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3) < 0 ) *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3) = 0; fileRequester::Update((int)this, 1); break; case 0xE: fileRequester::DoKnob(this); break; default: if ( msg->yCoordOrFieldID < 200 || msg->yCoordOrFieldID > 219 ) { if ( msg->yCoordOrFieldID < 220 || msg->yCoordOrFieldID > 239 ) { if ( msg->yCoordOrFieldID < 240 || msg->yCoordOrFieldID > 259 ) { if ( msg->yCoordOrFieldID < 260 || msg->yCoordOrFieldID > 279 ) { if ( msg->yCoordOrFieldID < 20 || msg->yCoordOrFieldID > 39 ) break; i = msg->yCoordOrFieldID - 20; } else { i = msg->yCoordOrFieldID - 260; } } else { i = msg->yCoordOrFieldID - 240; } } else { i = msg->yCoordOrFieldID - 220; } } else { i = msg->yCoordOrFieldID - 200; } if ( i + *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3) == *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7) ) { msg->payload = (void *)30722; msg->yCoordOrFieldID = 30722; v19 = 1; } else if ( i + *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3) < *(_DWORD *)&this->availOverlays[7].field_42 ) { *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 7) = i + *(_DWORD *)((char *)&this->availOverlays[7].interactionPointMask + 3); fileRequester::SetOK((int)this, 1); fileRequester::Update((int)this, 1); } break; } } LABEL_164: if ( v19 == INPUT_KEYDOWN_EVENT_CODE ) { msg->eventCode = 16384; msg->xCoordOrKeycode = 4; result = 2; } else { result = 1; } return result; } // 41990F: using guessed type int __thiscall fileRequester__SetupFiles(_DWORD); // 41ADCA: using guessed type int __thiscall fileRequester__DoKnob(_DWORD); // 434480: using guessed type int __fastcall FindToken(_DWORD, _DWORD); // 4850E0: using guessed type int giMapSizeFilter; // 48F6BC: using guessed type float fGutterTravelLength; // 48F6C0: using guessed type float fGutterMinY; // 48F6C4: using guessed type int iMaxListSize; //----- (0041ADCA) -------------------------------------------------------- int __thiscall fileRequester::DoKnob(int this) { int v2; // [sp+2Ch] [bp-74h]@1 char v3; // [sp+30h] [bp-70h]@19 char retstr; // [sp+4Ch] [bp-54h]@1 int v5; // [sp+68h] [bp-38h]@10 int v6; // [sp+6Ch] [bp-34h]@1 int v7; // [sp+70h] [bp-30h]@1 int v8; // [sp+78h] [bp-28h]@5 char v9; // [sp+8Ch] [bp-14h]@1 int v10; // [sp+90h] [bp-10h]@1 int v11; // [sp+94h] [bp-Ch]@1 double v12; // [sp+98h] [bp-8h]@1 v2 = this; v11 = *(_DWORD *)(this + 1046); v12 = fGutterMinY / (double)(*(_DWORD *)(this + 1042) - (iMaxListSize - 1)); mouseManager::MouseCoords(&v9, &v6); v10 = v6 - *(_WORD *)(*(_DWORD *)(v2 + 1067) + 26); inputManager::Flush(gpInputManager); memcpy(&v7, inputManager::GetEvent(gpInputManager, (inputManager *)&retstr), 0x1Cu); while ( v7 != 16 && v7 != 64 ) { if ( v7 == 4 ) { if ( (double)v8 < (double)v10 + fGutterTravelLength ) v8 = (signed __int64)((double)v10 + fGutterTravelLength); if ( (double)v8 > (double)v10 + fGutterTravelLength + fGutterMinY ) v8 = (signed __int64)((double)v10 + fGutterTravelLength + fGutterMinY); (*(void (__thiscall **)(mouseManager *, int *))(LODWORD(gpMouseManager->vtable) + 8))(gpMouseManager, &v7); *(_WORD *)(*(_DWORD *)(v2 + 1067) + 26) = v8 - v10; if ( *(_DWORD *)(v2 + 1042) <= iMaxListSize ) { heroWindow::DrawWindow(*(_DWORD *)(v2 + 54), 1, 0, 32767); } else { v5 = (signed __int64)(((double)*(_WORD *)(*(_DWORD *)(v2 + 1067) + 26) - fGutterTravelLength) / v12); if ( v5 == v11 ) { heroWindow::DrawWindow(*(_DWORD *)(v2 + 54), 1, 0, 32767); } else { if ( *(_DWORD *)(v2 + 1042) - iMaxListSize < v5 ) v5 = *(_DWORD *)(v2 + 1042) - iMaxListSize; if ( v5 < 0 ) v5 = 0; *(_DWORD *)(v2 + 1046) = v5; fileRequester::Update(v2, 0); *(_WORD *)(*(_DWORD *)(v2 + 1067) + 26) = v8 - v10; heroWindow::DrawWindow(*(_DWORD *)(v2 + 54), 1, 0, 32767); v11 = v5; } } } Process1WindowsMessage(); memcpy(&v7, inputManager::GetEvent(gpInputManager, (inputManager *)&v3), 0x1Cu); } *(_WORD *)(*(_DWORD *)(v2 + 1067) + 22) &= 0xFFFEu; return fileRequester::Update(v2, 1); } // 41ADCA: using guessed type int __thiscall fileRequester__DoKnob(_DWORD); // 42FB60: using guessed type _DWORD __stdcall mouseManager__MouseCoords(_DWORD, _DWORD); // 437610: using guessed type int __thiscall inputManager__Flush(_DWORD); // 48F6BC: using guessed type float fGutterTravelLength; // 48F6C0: using guessed type float fGutterMinY; // 48F6C4: using guessed type int iMaxListSize; //----- (0041B086) -------------------------------------------------------- int __thiscall fileRequester::Update(int this, int a2) { signed __int64 v2; // qax@54 int v4; // [sp+14h] [bp-1B4h]@1 tag_message evt; // [sp+24h] [bp-1A4h]@1 int i; // [sp+1B4h] [bp-14h]@3 int v7; // [sp+1C4h] [bp-4h]@1 v4 = this; evt.eventCode = 512; v7 = 0; if ( *(_DWORD *)(this + 66) == 1 || *(_DWORD *)(this + 66) == 4 ) { for ( i = 0; i < 5; ++i ) { evt.xCoordOrKeycode = 4; evt.yCoordOrFieldID = i + 100; evt.payload = (void *)((i == giMapSizeFilter) + 2 * i + 9); heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); } if ( *(_DWORD *)(v4 + 1050) == -1 && *(_DWORD *)(v4 + 1042) > 0 ) *(_DWORD *)(v4 + 1050) = 0; fileRequester::SetOK(v4, 1); evt.xCoordOrKeycode = 4; evt.yCoordOrFieldID = 82; switch ( *(_BYTE *)(420 * *(_DWORD *)(v4 + 1050) + *(_DWORD *)(v4 + 678) + 6) ) { case 0x24: evt.payload = (void *)26; break; case 0x48: evt.payload = (void *)27; break; case 0x6C: evt.payload = (void *)28; break; default: evt.payload = (void *)29; break; } heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); evt.yCoordOrFieldID = 81; evt.payload = (void *)(*(_BYTE *)(420 * *(_DWORD *)(v4 + 1050) + *(_DWORD *)(v4 + 678) + 26) + 19); heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); evt.yCoordOrFieldID = 86; evt.payload = (void *)(*(_BYTE *)(420 * *(_DWORD *)(v4 + 1050) + *(_DWORD *)(v4 + 678) + 29) + 30); heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); evt.yCoordOrFieldID = 87; evt.payload = (void *)(*(_BYTE *)(420 * *(_DWORD *)(v4 + 1050) + *(_DWORD *)(v4 + 678) + 34) + 36); heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); evt.xCoordOrKeycode = 3; evt.payload = &gText; sprintf((char *)&gText, "%s", *(_DWORD *)(v4 + 678) + 420 * *(_DWORD *)(v4 + 1050) + 58); evt.yCoordOrFieldID = 80; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); sprintf((char *)&gText, "%s", (&cDifficulty)[*(_BYTE *)(420 * *(_DWORD *)(v4 + 1050) + *(_DWORD *)(v4 + 678) + 4)]); evt.yCoordOrFieldID = 84; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); sprintf((char *)&gText, "%s", *(_DWORD *)(v4 + 678) + 420 * *(_DWORD *)(v4 + 1050) + 118); evt.yCoordOrFieldID = 85; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); } for ( i = 0; iMaxListSize > i; ++i ) { if ( i + *(_DWORD *)(v4 + 1046) < *(_DWORD *)(v4 + 1042) ) { evt.yCoordOrFieldID = i + 20; evt.xCoordOrKeycode = 5; evt.payload = (void *)4; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); if ( *(_DWORD *)(v4 + 66) == 4 || *(_DWORD *)(v4 + 66) == 1 ) { evt.yCoordOrFieldID = i + 200; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); evt.yCoordOrFieldID = i + 220; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); evt.yCoordOrFieldID = i + 240; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); evt.yCoordOrFieldID = i + 260; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); evt.xCoordOrKeycode = 4; evt.yCoordOrFieldID = i + 200; switch ( *(_BYTE *)(420 * (i + *(_DWORD *)(v4 + 1046)) + *(_DWORD *)(v4 + 678) + 6) ) { case 0x24: evt.payload = (void *)26; break; case 0x48: evt.payload = (void *)27; break; case 0x6C: evt.payload = (void *)28; break; default: evt.payload = (void *)29; break; } heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); evt.yCoordOrFieldID = i + 220; evt.payload = (void *)(*(_BYTE *)(420 * (i + *(_DWORD *)(v4 + 1046)) + *(_DWORD *)(v4 + 678) + 26) + 19); heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); evt.yCoordOrFieldID = i + 240; evt.payload = (void *)(*(_BYTE *)(420 * (i + *(_DWORD *)(v4 + 1046)) + *(_DWORD *)(v4 + 678) + 29) + 30); heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); evt.yCoordOrFieldID = i + 260; evt.payload = (void *)(*(_BYTE *)(420 * (i + *(_DWORD *)(v4 + 1046)) + *(_DWORD *)(v4 + 678) + 34) + 36); heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); } evt.xCoordOrKeycode = 3; if ( *(_DWORD *)(v4 + 66) != 4 && *(_DWORD *)(v4 + 66) != 1 ) sprintf((char *)&gText, "%s", *(_DWORD *)(v4 + 670) + 351 * (i + *(_DWORD *)(v4 + 1046))); else sprintf((char *)&gText, "%s", *(_DWORD *)(v4 + 678) + 420 * (i + *(_DWORD *)(v4 + 1046)) + 58); evt.payload = &gText; evt.yCoordOrFieldID = i + 20; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); } else { evt.xCoordOrKeycode = 6; evt.payload = (void *)4; evt.yCoordOrFieldID = i + 20; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); if ( *(_DWORD *)(v4 + 66) == 4 || *(_DWORD *)(v4 + 66) == 1 ) { evt.yCoordOrFieldID = i + 200; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); evt.yCoordOrFieldID = i + 220; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); evt.yCoordOrFieldID = i + 240; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); evt.yCoordOrFieldID = i + 260; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); } } evt.yCoordOrFieldID = i + 20; evt.xCoordOrKeycode = 8; if ( i + *(_DWORD *)(v4 + 1046) == *(_DWORD *)(v4 + 1050) ) evt.payload = (void *)2; else evt.payload = (void *)1; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); } evt.yCoordOrFieldID = 15; evt.xCoordOrKeycode = 5; evt.payload = (void *)2; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); if ( *(_DWORD *)(v4 + 1050) != -1 ) { evt.xCoordOrKeycode = 3; if ( *(_DWORD *)(v4 + 66) != 1 && *(_DWORD *)(v4 + 66) != 4 ) sprintf((char *)&gText, "%s", *(_DWORD *)(v4 + 670) + 351 * *(_DWORD *)(v4 + 1050)); else sprintf((char *)&gText, "%s", *(_DWORD *)(v4 + 678) + 420 * *(_DWORD *)(v4 + 1050) + 58); evt.payload = &gText; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); } if ( *(_DWORD *)(v4 + 66) == 1 || *(_DWORD *)(v4 + 66) == 2 || *(_DWORD *)(v4 + 66) == 4 ) { evt.xCoordOrKeycode = 6; evt.payload = (void *)2; heroWindow::BroadcastMessage(*(heroWindow **)(v4 + 54), &evt); } if ( *(_DWORD *)(v4 + 1042) > iMaxListSize ) { v2 = (signed __int64)((double)*(signed int *)(v4 + 1046) * (fGutterMinY / (double)(*(_DWORD *)(v4 + 1042) - iMaxListSize)) + fGutterTravelLength); *(_WORD *)(*(_DWORD *)(v4 + 1067) + 26) = v2; } else { v2 = (signed __int64)(fGutterMinY / 2.0 + fGutterTravelLength); *(_WORD *)(*(_DWORD *)(v4 + 1067) + 26) = v2; } if ( a2 ) LODWORD(v2) = heroWindow::DrawWindow(*(_DWORD *)(v4 + 54), 1, 0, 32767); return v2; } // 46CCE8: using guessed type char **cDifficulty; // 4850E0: using guessed type int giMapSizeFilter; // 48F6BC: using guessed type float fGutterTravelLength; // 48F6C0: using guessed type float fGutterMinY; // 48F6C4: using guessed type int iMaxListSize; //----- (0041BC31) -------------------------------------------------------- int __thiscall fileRequester::GetFilename(int this) { int result; // eax@4 int v2; // [sp+Ch] [bp-4h]@1 v2 = this; if ( *(_DWORD *)(this + 66) == 3 || *(_DWORD *)(this + 1050) >= 0 && *(_DWORD *)(this + 1050) < *(_DWORD *)(this + 1042) ) { if ( *(_DWORD *)(this + 1050) == -1 ) { sprintf((char *)&gText, "%s%s", this + 691, this + 686); } else if ( *(_DWORD *)(this + 66) != 2 && *(_DWORD *)(this + 66) != 4 && *(_DWORD *)(this + 66) != 1 ) { sprintf((char *)&gText, "%s%s", *(_DWORD *)(this + 670) + 351 * *(_DWORD *)(this + 1050), this + 686); } else { sprintf( (char *)&gText, "%s%s", *(_DWORD *)(this + 670) + 351 * *(_DWORD *)(this + 1050), *(_DWORD *)(this + 674) + 5 * *(_DWORD *)(this + 1050)); } strcpy((char *)(v2 + 691), (const char *)&gText); result = v2 + 691; } else { result = (int)off_4850E4; } return result; } // 4850E4: using guessed type void *off_4850E4; //----- (0041BD90) -------------------------------------------------------- int __cdecl sub_41BD90() { int v1; // [sp+Ch] [bp-14h]@6 heroWindow *v2; // [sp+1Ch] [bp-4h]@2 if ( operator new(0x44u) ) v2 = heroWindow::heroWindow(405, 8, "stpenew.bin"); else v2 = 0; if ( !v2 ) MemError(); heroWindowManager::DoDialog(gpWindowManager, v2, (int (__thiscall *)(_DWORD))ExpLoadCampaignHandler, 0); operator delete(v2); v1 = gpWindowManager->buttonPressedCode; switch ( v1 ) { case 1: gbDoRandomMap = 0; break; case 2: gbDoRandomMap = 1; break; case 30721: return 0; } return sub_41BE93() != 0; } // 485220: using guessed type int gbDoRandomMap; //----- (0041BE93) -------------------------------------------------------- signed int __cdecl sub_41BE93() { int v1; // [sp+Ch] [bp-14h]@6 heroWindow *v2; // [sp+1Ch] [bp-4h]@2 if ( operator new(0x44u) ) v2 = heroWindow::heroWindow(405, 8, "stpesize.bin"); else v2 = 0; if ( !v2 ) MemError(); heroWindowManager::DoDialog(gpWindowManager, v2, (int (__thiscall *)(_DWORD))SetupMultiPlayerGameHandler, 0); operator delete(v2); v1 = gpWindowManager->buttonPressedCode; if ( v1 <= 30721 ) { if ( v1 == 30721 ) return 0; switch ( v1 ) { case 1: dimensions = 36; break; case 2: dimensions = 72; break; case 3: dimensions = 108; break; case 4: dimensions = 144; break; default: return 1; } } return 1; } //----- (0041BFB9) -------------------------------------------------------- signed int __thiscall ExpLoadCampaignHandler(void *this) { int v2; // [sp+Ch] [bp-Ch]@4 void *v3; // [sp+10h] [bp-8h]@1 signed int v4; // [sp+14h] [bp-4h]@4 v3 = this; if ( *((_BYTE *)this + 13) & 2 && (*((_DWORD *)this + 1) == 12 || *((_DWORD *)this + 1) == 14) ) { v4 = -1; v2 = *((_DWORD *)this + 2); switch ( v2 ) { case 1: v4 = 0; break; case 2: v4 = 1; break; case 30721: v4 = 2; break; } if ( v4 >= 0 ) NormalDialog((&off_46B4A8)[4 * v4], 4, -1, -1, -1, 0, -1, 0, -1, 0); } return BaseSetupHandler(v3); } //----- (0041C090) -------------------------------------------------------- signed int __thiscall SetupMultiPlayerGameHandler(void *this) { signed int v2; // [sp+Ch] [bp-Ch]@4 void *v3; // [sp+10h] [bp-8h]@1 signed int v4; // [sp+14h] [bp-4h]@4 v3 = this; if ( *((_BYTE *)this + 13) & 2 && (*((_DWORD *)this + 1) == 12 || *((_DWORD *)this + 1) == 14) ) { v4 = -1; v2 = *((_DWORD *)this + 2); if ( v2 <= 30721 ) { if ( v2 == 30721 ) { v4 = 4; } else { switch ( v2 ) { case 1: v4 = 0; break; case 2: v4 = 1; break; case 3: v4 = 2; break; case 4: v4 = 3; break; default: break; } } } if ( v4 >= 0 ) NormalDialog((&gSetupMultiPlayerGameHelp)[4 * v4], 4, -1, -1, -1, 0, -1, 0, -1, 0); } return BaseSetupHandler(v3); } //----- (0041C198) -------------------------------------------------------- signed int __thiscall BaseSetupHandler(void *this) { signed int result; // eax@14 void *v2; // [sp+10h] [bp-8h]@1 signed int v3; // [sp+14h] [bp-4h]@1 v2 = this; v3 = 0; PollSound(); if ( *(_DWORD *)v2 == 512 && *((_DWORD *)v2 + 1) == 13 && (*((_DWORD *)v2 + 2) > 0 && *((_DWORD *)v2 + 2) <= 1000 || *((_DWORD *)v2 + 2) == 30721 || *((_DWORD *)v2 + 2) == 105) ) v3 = 1; if ( v3 || giMenuCommand != -1 ) { gpWindowManager->buttonPressedCode = *((_DWORD *)v2 + 2); *((_DWORD *)v2 + 2) = 10; *((_DWORD *)v2 + 1) = *((_DWORD *)v2 + 2); if ( giMenuCommand != -1 ) gpWindowManager->buttonPressedCode = 30721; result = 2; } else { result = 1; } return result; } // 46AAC0: using guessed type int giMenuCommand; //----- (0041C290) -------------------------------------------------------- signed int __thiscall sub_41C290(void *this) { int v2; // [sp+Ch] [bp-10h]@4 void *v3; // [sp+10h] [bp-Ch]@1 signed int v4; // [sp+14h] [bp-8h]@4 v3 = this; PollSound(); if ( *((_BYTE *)v3 + 13) & 2 && (*((_DWORD *)v3 + 1) == 12 || *((_DWORD *)v3 + 1) == 14) ) { v4 = -1; v2 = *((_DWORD *)v3 + 2); switch ( v2 ) { case 1: v4 = 0; break; case 2: v4 = 1; break; case 105: v4 = 2; break; } if ( v4 >= 0 ) NormalDialog((&off_46B4D0)[4 * v4], 4, -1, -1, -1, 0, -1, 0, -1, 0); } return BaseSetupHandler(v3); } //----- (0041C370) -------------------------------------------------------- bool __cdecl sub_41C370() { char Dest; // [sp+1Ch] [bp-238h]@22 char v2; // [sp+80h] [bp-1D4h]@22 tag_message evt; // [sp+84h] [bp-1D0h]@16 int j; // [sp+A0h] [bp-1B4h]@8 int k; // [sp+A4h] [bp-1B0h]@14 int i; // [sp+A8h] [bp-1ACh]@6 char v7; // [sp+ACh] [bp-1A8h]@1 int v8; // [sp+250h] [bp-4h]@6 memcpy(&v7, &gpMapHeader, 0x1A4u); if ( operator new(0x44u) ) dword_485248 = heroWindow::heroWindow(0, 0, "specedit.bin"); else dword_485248 = 0; if ( !dword_485248 ) MemError(); SetWinText(dword_485248, 13); ResetPlayerAvailability(); v8 = 0; for ( i = 0; MAP_WIDTH > i; ++i ) { for ( j = 0; MAP_HEIGHT > j; ++j ) { if ( gTileTerrainTypes[*(&gpMap.tiles[j * gpMap.width].groundIndex + 10 * i)] ) ++v8; } } dword_485244 = 100 * v8 / (MAP_HEIGHT * MAP_WIDTH); for ( k = 0; k < 6; ++k ) { sprintf((char *)&gText, "%s", off_46B660[k]); evt.eventCode = 512; evt.xCoordOrKeycode = 56; evt.payload = &gText; evt.yCoordOrFieldID = 210; heroWindow::BroadcastMessage(dword_485248, &evt); } for ( k = 0; k < 4; ++k ) { sprintf((char *)&gText, "%s", off_46B678[k]); evt.eventCode = 512; evt.xCoordOrKeycode = 56; evt.payload = &gText; evt.yCoordOrFieldID = 310; heroWindow::BroadcastMessage(dword_485248, &evt); } sub_41CFDC(); sub_41C876(); for ( k = 0; (unsigned __int8)gpMapHeader.numEvents > k; ++k ) { evt.eventCode = 512; evt.xCoordOrKeycode = 56; strncpy(&Dest, (const char *)gpEditManager->mapExtra[gpEventDataIndices[k]] + 49, 0x64u); v2 = 0; sprintf( (char *)&gText, "Day %d - %s", *(_WORD *)((char *)gpEditManager->mapExtra[gpEventDataIndices[k]] + 33), &Dest); evt.payload = &gText; evt.yCoordOrFieldID = 901; heroWindow::BroadcastMessage(dword_485248, &evt); } for ( k = 0; (unsigned __int8)gpMapHeader.numRumors > k; ++k ) { evt.eventCode = 512; evt.xCoordOrKeycode = 56; strncpy(&Dest, (const char *)gpEditManager->mapExtra[gpRumorIndices[k]] + 8, 0x64u); v2 = 0; sprintf((char *)&gText, "%s", &Dest); evt.payload = &gText; evt.yCoordOrFieldID = 801; heroWindow::BroadcastMessage(dword_485248, &evt); } evt.xCoordOrKeycode = 54; evt.yCoordOrFieldID = 210; evt.payload = (void *)(unsigned __int8)gpMapHeader.winConditionType; heroWindow::BroadcastMessage(dword_485248, &evt); evt.xCoordOrKeycode = 54; evt.yCoordOrFieldID = 310; evt.payload = (void *)(unsigned __int8)gpMapHeader.field_22; heroWindow::BroadcastMessage(dword_485248, &evt); sub_41D5F6(); heroWindowManager::DoDialog(gpWindowManager, dword_485248, (int (__thiscall *)(_DWORD))sub_41E24C, 0); operator delete(dword_485248); dword_485248 = 0; editManager::UpdateCursor(gpEditManager); RedrawEditPane(); if ( gpWindowManager->buttonPressedCode == 30721 ) memcpy(&gpMapHeader, &v7, sizeof(gpMapHeader)); return gpWindowManager->buttonPressedCode != 30721; } // 46B660: using guessed type char *off_46B660[10]; // 46B678: using guessed type char *off_46B678[4]; // 485244: using guessed type int dword_485244; //----- (0041C876) -------------------------------------------------------- int __cdecl sub_41C876() { int v0; // eax@46 int v1; // ecx@46 int result; // eax@62 tag_message evt; // [sp+18h] [bp-104h]@1 char Dest; // [sp+34h] [bp-E8h]@1 int v5; // [sp+FCh] [bp-20h]@1 int v6; // [sp+100h] [bp-1Ch]@52 void *v7; // [sp+104h] [bp-18h]@7 int j; // [sp+108h] [bp-14h]@52 int i; // [sp+10Ch] [bp-10h]@4 int v10; // [sp+110h] [bp-Ch]@2 int v11; // [sp+114h] [bp-8h]@2 void *v12; // [sp+118h] [bp-4h]@20 v5 = 0; evt.eventCode = 512; evt.xCoordOrKeycode = 59; evt.yCoordOrFieldID = 251; heroWindow::BroadcastMessage(dword_485248, &evt); evt.xCoordOrKeycode = 56; evt.payload = &Dest; result = (unsigned __int8)gpMapHeader.winConditionType; switch ( gpMapHeader.winConditionType ) { case 0: return result; case 1: if ( sub_40E52F(0, (int)&v11, (int)&v10) ) { for ( i = 0; i < 72 && sub_40E52F(i, (int)&v11, (int)&v10); ++i ) { v7 = gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(*(&gpMap.tiles[v11].field_4_1_1_isShadow_1_13_extraInfo + 10 * v10 * gpMap.width) >> 8) >> -5)]; if ( *((_BYTE *)v7 + 24) ) sprintf(&Dest, "(%d, %d) %s", v11, v10, (char *)v7 + 25); else sprintf(&Dest, "(%d, %d) %s", v11, v10, &unk_485284); heroWindow::BroadcastMessage(dword_485248, &evt); if ( gpMapHeader.winConditionArgument == v11 ) { if ( gpMapHeader.field_2C == v10 ) v5 = i; } } } else { sprintf(&Dest, "No towns on map"); heroWindow::BroadcastMessage(dword_485248, &evt); } break; case 2: if ( sub_40E634(0, (int)&v11, (int)&v10) ) { for ( i = 0; i < 54 && sub_40E634(i, (int)&v11, (int)&v10); ++i ) { v12 = gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(*(&gpMap.tiles[v11].field_4_1_1_isShadow_1_13_extraInfo + 10 * v10 * gpMap.width) >> 8) >> -5)]; if ( *((_BYTE *)v12 + 45) ) sprintf(&Dest, "(%d, %d) %s", v11, v10, (char *)v12 + 46); else sprintf(&Dest, "(%d, %d) %s", v11, v10, &unk_4852A8); heroWindow::BroadcastMessage(dword_485248, &evt); if ( gpMapHeader.winConditionArgument == v11 && gpMapHeader.field_2C == v10 ) v5 = i; } } else { sprintf(&Dest, "No heroes on map"); heroWindow::BroadcastMessage(dword_485248, &evt); } break; case 3: if ( (signed int)(unsigned __int16)gpMapHeader.winConditionArgument > 102 ) { v5 = 0; } else { v5 = (unsigned __int16)gpMapHeader.winConditionArgument; if ( (unsigned __int16)gpMapHeader.winConditionArgument - 1 >= 82 ) v5 -= 5; } sprintf(&Dest, "Ultimate Artifact"); heroWindow::BroadcastMessage(dword_485248, &evt); for ( i = 0; i < 102; ++i ) { if ( i < 82 || i > 86 ) { sprintf(&Dest, gArtifactNames[i]); heroWindow::BroadcastMessage(dword_485248, &evt); } } break; case 5: v5 = 0; for ( i = 0; i < 20; ++i ) { if ( gpMapHeader.winConditionArgument == 10 * (5 * i + 5) ) v5 = i; sprintf(&Dest, "%d Gold", 50000 * (i + 1)); heroWindow::BroadcastMessage(dword_485248, &evt); } break; case 4: CalculatePlayerNumbers(); v0 = (unsigned __int8)gpMapHeader.numPlayers - 2; v1 = (unsigned __int16)gpMapHeader.winConditionArgument - 1; if ( v0 >= v1 ) v0 = (unsigned __int16)gpMapHeader.winConditionArgument - 1; v5 = v0; if ( v0 < 0 ) v5 = 0; gpMapHeader.winConditionArgument = v5 + 1; for ( i = 0; (unsigned __int8)gpMapHeader.numPlayers - 1 > i; ++i ) { strcpy(&Dest, byte_4852D4); v6 = 0; for ( j = 0; i + 1 > j; ++j ) { while ( !gpMapHeader.hasPlayer[v6] ) ++v6; sprintf((char *)&gText, (&off_46C6B8)[4 * v6]); LOBYTE(gText) = (_BYTE)gText - 32; strcat(&Dest, (const char *)&gText); if ( j >= i ) strcat(&Dest, " vs. other(s)"); else strcat(&Dest, ", "); ++v6; } heroWindow::BroadcastMessage(dword_485248, &evt); } break; default: break; } sub_41CEA6(v5); evt.xCoordOrKeycode = 54; evt.payload = (void *)v5; return heroWindow::BroadcastMessage(dword_485248, &evt); } //----- (0041CEA6) -------------------------------------------------------- signed int __fastcall sub_41CEA6(int a1) { signed int result; // eax@2 int v2; // [sp+14h] [bp-8h]@2 int v3; // [sp+18h] [bp-4h]@2 result = (unsigned __int8)gpMapHeader.winConditionType; switch ( gpMapHeader.winConditionType ) { case 1: result = sub_40E52F(a1, (int)&v3, (int)&v2); if ( result ) { gpMapHeader.winConditionArgument = v3; result = v2; gpMapHeader.field_2C = v2; } else { v3 = 1; } break; case 2: result = sub_40E634(a1, (int)&v3, (int)&v2); if ( result ) { gpMapHeader.winConditionArgument = v3; result = v2; gpMapHeader.field_2C = v2; } else { v3 = 1; } break; case 5: result = 10 * (5 * a1 + 5); gpMapHeader.winConditionArgument = 10 * (5 * a1 + 5); break; case 3: gpMapHeader.winConditionArgument = a1; result = (unsigned __int16)a1 - 1; if ( result >= 82 ) { result = (unsigned __int16)gpMapHeader.winConditionArgument + 5; gpMapHeader.winConditionArgument += 5; } break; case 4: result = a1 + 1; gpMapHeader.winConditionArgument = a1 + 1; break; case 0: return result; } return result; } //----- (0041CFDC) -------------------------------------------------------- int __cdecl sub_41CFDC() { int result; // eax@45 tag_message evt; // [sp+18h] [bp-FCh]@1 char Dest; // [sp+34h] [bp-E0h]@1 int v3; // [sp+FCh] [bp-18h]@1 void *v4; // [sp+100h] [bp-14h]@7 int i; // [sp+104h] [bp-10h]@4 int v6; // [sp+108h] [bp-Ch]@2 int v7; // [sp+10Ch] [bp-8h]@2 void *v8; // [sp+110h] [bp-4h]@20 v3 = 0; evt.eventCode = 512; evt.xCoordOrKeycode = 59; evt.yCoordOrFieldID = 321; heroWindow::BroadcastMessage(dword_485248, &evt); evt.xCoordOrKeycode = 56; evt.payload = &Dest; result = (unsigned __int8)gpMapHeader.field_22; switch ( gpMapHeader.field_22 ) { case 0: return result; case 1: if ( sub_40E52F(0, (int)&v7, (int)&v6) ) { for ( i = 0; i < 72 && sub_40E52F(i, (int)&v7, (int)&v6); ++i ) { v4 = gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(*(&gpMap.tiles[v7].field_4_1_1_isShadow_1_13_extraInfo + 10 * v6 * gpMap.width) >> 8) >> -5)]; if ( *((_BYTE *)v4 + 24) ) sprintf(&Dest, "(%d, %d) %s", v7, v6, (char *)v4 + 25); else sprintf(&Dest, "(%d, %d) %s", v7, v6, &unk_4852FC); heroWindow::BroadcastMessage(dword_485248, &evt); if ( *(unsigned __int16 *)&gpMapHeader.field_23 == v7 ) { if ( LOWORD(gpMapHeader.field_2E) == v6 ) v3 = i; } } } else { sprintf(&Dest, "No towns on map"); heroWindow::BroadcastMessage(dword_485248, &evt); } break; case 2: if ( sub_40E634(0, (int)&v7, (int)&v6) ) { for ( i = 0; i < 54 && sub_40E634(i, (int)&v7, (int)&v6); ++i ) { v8 = gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(*(&gpMap.tiles[v7].field_4_1_1_isShadow_1_13_extraInfo + 10 * v6 * gpMap.width) >> 8) >> -5)]; if ( *((_BYTE *)v8 + 45) ) sprintf(&Dest, "(%d, %d) %s", v7, v6, (char *)v8 + 46); else sprintf(&Dest, "(%d, %d) %s", v7, v6, &unk_485320); heroWindow::BroadcastMessage(dword_485248, &evt); if ( *(unsigned __int16 *)&gpMapHeader.field_23 == v7 && LOWORD(gpMapHeader.field_2E) == v6 ) v3 = i; } } else { sprintf(&Dest, "No heroes on map"); heroWindow::BroadcastMessage(dword_485248, &evt); } break; case 3: for ( i = 2; i <= 7; ++i ) { sprintf(&Dest, "%d days", i); heroWindow::BroadcastMessage(dword_485248, &evt); } for ( i = 2; i <= 8; ++i ) { sprintf(&Dest, "%d weeks", i); heroWindow::BroadcastMessage(dword_485248, &evt); } for ( i = 3; i <= 12; ++i ) { sprintf(&Dest, "%d months", i); heroWindow::BroadcastMessage(dword_485248, &evt); } if ( *(_WORD *)&gpMapHeader.field_23 ) { if ( (signed int)*(unsigned __int16 *)&gpMapHeader.field_23 > 7 ) { if ( (signed int)*(unsigned __int16 *)&gpMapHeader.field_23 > 56 ) v3 = *(unsigned __int16 *)&gpMapHeader.field_23 / 28 + 11; else v3 = *(unsigned __int16 *)&gpMapHeader.field_23 / 7 + 4; } else { v3 = *(unsigned __int16 *)&gpMapHeader.field_23 - 2; } } else { v3 = 0; } break; default: break; } sub_41D4C1(v3); evt.xCoordOrKeycode = 54; evt.payload = (void *)v3; return heroWindow::BroadcastMessage(dword_485248, &evt); } //----- (0041D4C1) -------------------------------------------------------- signed int __fastcall sub_41D4C1(int a1) { signed int result; // eax@2 int v2; // [sp+14h] [bp-8h]@2 int v3; // [sp+18h] [bp-4h]@2 result = (unsigned __int8)gpMapHeader.field_22; switch ( gpMapHeader.field_22 ) { case 1: result = sub_40E52F(a1, (int)&v3, (int)&v2); if ( result ) { *(_WORD *)&gpMapHeader.field_23 = v3; result = v2; LOWORD(gpMapHeader.field_2E) = v2; } else { v3 = 1; } break; case 2: result = sub_40E634(a1, (int)&v3, (int)&v2); if ( result ) { *(_WORD *)&gpMapHeader.field_23 = v3; result = v2; LOWORD(gpMapHeader.field_2E) = v2; } else { v3 = 1; } break; case 3: if ( a1 > 5 ) { if ( a1 > 13 ) { result = 28 * (a1 - 14) + 84; *(_WORD *)&gpMapHeader.field_23 = 28 * (a1 - 14) + 84; } else { result = 7 * (a1 - 6) + 14; *(_WORD *)&gpMapHeader.field_23 = 7 * (a1 - 6) + 14; } } else { result = a1 + 2; *(_WORD *)&gpMapHeader.field_23 = a1 + 2; } break; case 0: return result; } return result; } //----- (0041D5F6) -------------------------------------------------------- int __cdecl sub_41D5F6() { int result; // eax@43 tag_message evt; // [sp+Ch] [bp-24h]@1 int i; // [sp+28h] [bp-8h]@28 int v3; // [sp+2Ch] [bp-4h]@37 evt.eventCode = 512; evt.xCoordOrKeycode = 3; evt.yCoordOrFieldID = 410; evt.payload = gpMapHeader.name; heroWindow::BroadcastMessage(dword_485248, &evt); evt.yCoordOrFieldID = 501; evt.payload = gpMapHeader.description; heroWindow::BroadcastMessage(dword_485248, &evt); evt.yCoordOrFieldID = 411; sprintf((char *)&gText, mapFilename); evt.payload = &gText; heroWindow::BroadcastMessage(dword_485248, &evt); evt.payload = (void *)4; if ( gpMapHeader.winConditionType && gpMapHeader.winConditionType != 4 && gpMapHeader.winConditionType != 3 && gpMapHeader.winConditionType != 2 ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; evt.yCoordOrFieldID = 220; heroWindow::BroadcastMessage(dword_485248, &evt); evt.yCoordOrFieldID = 230; heroWindow::BroadcastMessage(dword_485248, &evt); if ( !gpMapHeader.field_1E ) evt.xCoordOrKeycode = 6; evt.yCoordOrFieldID = 240; heroWindow::BroadcastMessage(dword_485248, &evt); if ( gpMapHeader.winConditionType && gpMapHeader.winConditionType != 4 && gpMapHeader.winConditionType != 2 ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; evt.yCoordOrFieldID = 221; heroWindow::BroadcastMessage(dword_485248, &evt); evt.yCoordOrFieldID = 231; heroWindow::BroadcastMessage(dword_485248, &evt); if ( !gpMapHeader.allowDefeatAllVictory ) evt.xCoordOrKeycode = 6; evt.yCoordOrFieldID = 241; heroWindow::BroadcastMessage(dword_485248, &evt); if ( gpMapHeader.winConditionType ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; evt.yCoordOrFieldID = 250; heroWindow::BroadcastMessage(dword_485248, &evt); if ( gpMapHeader.winConditionType ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; evt.yCoordOrFieldID = 251; heroWindow::BroadcastMessage(dword_485248, &evt); if ( gpMapHeader.field_22 ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; evt.yCoordOrFieldID = 320; heroWindow::BroadcastMessage(dword_485248, &evt); if ( gpMapHeader.field_22 ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; evt.yCoordOrFieldID = 321; heroWindow::BroadcastMessage(dword_485248, &evt); for ( i = 0; i < 4; ++i ) { if ( LOBYTE(gpMapHeader.field_4) == i ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; evt.yCoordOrFieldID = i + 620; heroWindow::BroadcastMessage(dword_485248, &evt); } if ( gpMapHeader.noStartingHeroInCastle ) evt.xCoordOrKeycode = 6; else evt.xCoordOrKeycode = 5; evt.yCoordOrFieldID = 701; heroWindow::BroadcastMessage(dword_485248, &evt); evt.xCoordOrKeycode = 55; evt.yCoordOrFieldID = 901; heroWindow::BroadcastMessage(dword_485248, &evt); v3 = evt.payload == (void *)-1; if ( evt.payload == (void *)-1 ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; evt.payload = (void *)4096; evt.yCoordOrFieldID = 903; heroWindow::BroadcastMessage(dword_485248, &evt); evt.yCoordOrFieldID = 904; heroWindow::BroadcastMessage(dword_485248, &evt); evt.xCoordOrKeycode = 55; evt.yCoordOrFieldID = 801; heroWindow::BroadcastMessage(dword_485248, &evt); v3 = evt.payload == (void *)-1; if ( evt.payload == (void *)-1 ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; evt.payload = (void *)4096; evt.yCoordOrFieldID = 803; heroWindow::BroadcastMessage(dword_485248, &evt); evt.yCoordOrFieldID = 804; result = heroWindow::BroadcastMessage(dword_485248, &evt); evt.xCoordOrKeycode = 4; for ( i = 0; i < 6; ++i ) { evt.yCoordOrFieldID = i + 110; evt.payload = (void *)(gpMapHeader.playerMayBeHuman[i] + 2 * gpMapHeader.playerMayBeComp[i] + 4 * i + 19); result = heroWindow::BroadcastMessage(dword_485248, &evt); } return result; } //----- (0041DABC) -------------------------------------------------------- editManager *__cdecl sub_41DABC() { editManager *result; // eax@2 char Dest; // [sp+Ch] [bp-8Ch]@4 char v2; // [sp+70h] [bp-28h]@4 void *Dst; // [sp+74h] [bp-24h]@3 int v4; // [sp+78h] [bp-20h]@3 tag_message evt; // [sp+7Ch] [bp-1Ch]@1 evt.eventCode = 512; if ( (signed int)(unsigned __int8)gpMapHeader.numEvents < 50 ) { Dst = BaseAlloc(0x32u, (int)"F:\\h2xsrc\\Editor\\specedit.cpp", 633); memset(Dst, 0, 0x32u); *(_BYTE *)Dst = 0; *(_WORD *)((char *)Dst + 29) = -1; *(_WORD *)((char *)Dst + 33) = 1; *((_BYTE *)Dst + 42) = 1; memset((char *)Dst + 43, 1, 6u); gpEditManager->mapExtra[gpEditManager->nMapExtra] = Dst; gpEditManager->lenMapExtra[gpEditManager->nMapExtra] = 50; v4 = eventsManager::EditEvent((eventsManager *)gpEditManager->toolManager, gpEditManager->nMapExtra); if ( v4 == 30721 ) { BaseFree(gpEditManager->mapExtra[gpEditManager->nMapExtra], "F:\\h2xsrc\\Editor\\specedit.cpp", 664); gpEditManager->mapExtra[gpEditManager->nMapExtra] = 0; result = (editManager *)gpEditManager->nMapExtra; gpEditManager->lenMapExtra[(_DWORD)result] = 0; } else { gpEventDataIndices[(unsigned __int8)gpMapHeader.numEvents] = gpEditManager->nMapExtra; evt.xCoordOrKeycode = 56; evt.yCoordOrFieldID = 901; strncpy( &Dest, (const char *)gpEditManager->mapExtra[gpEventDataIndices[(unsigned __int8)gpMapHeader.numEvents]] + 49, 0x64u); v2 = 0; sprintf( (char *)&gText, "Day %d - %s", *(_WORD *)((char *)gpEditManager->mapExtra[gpEventDataIndices[(unsigned __int8)gpMapHeader.numEvents]] + 33), &Dest); evt.payload = &gText; heroWindow::BroadcastMessage(dword_485248, &evt); ++gpMapHeader.numEvents; result = gpEditManager; ++result->nMapExtra; } } else { sprintf((char *)&gText, "No more events can be added unless some are deleted."); result = (editManager *)NormalDialog((char *)&gText, 1, -1, -1, -1, 0, -1, 0, -1, 0); } return result; } //----- (0041DD01) -------------------------------------------------------- void *__cdecl sub_41DD01() { void *result; // eax@1 char Dest; // [sp+Ch] [bp-8Ch]@3 char v2; // [sp+70h] [bp-28h]@3 void *v3; // [sp+74h] [bp-24h]@2 int v4; // [sp+78h] [bp-20h]@1 tag_message evt; // [sp+7Ch] [bp-1Ch]@1 evt.eventCode = 512; evt.xCoordOrKeycode = 55; evt.yCoordOrFieldID = 901; heroWindow::BroadcastMessage(dword_485248, &evt); result = evt.payload; v4 = (int)evt.payload; if ( evt.payload != (void *)-1 ) { result = (void *)eventsManager::EditEvent((eventsManager *)gpEditManager->toolManager, gpEventDataIndices[v4]); v3 = result; if ( result != (void *)30721 ) { evt.xCoordOrKeycode = 57; evt.yCoordOrFieldID = 901; strncpy(&Dest, (const char *)gpEditManager->mapExtra[gpEventDataIndices[v4]] + 49, 0x64u); v2 = 0; sprintf( (char *)&gText, "Day %d - %s", *(_WORD *)((char *)gpEditManager->mapExtra[gpEventDataIndices[v4]] + 33), &Dest); evt.inputTypeBitmask = v4; evt.payload = &gText; result = (void *)heroWindow::BroadcastMessage(dword_485248, &evt); } } return result; } //----- (0041DE0E) -------------------------------------------------------- void *__cdecl sub_41DE0E() { void *result; // eax@1 void *v1; // [sp+Ch] [bp-20h]@1 tag_message evt; // [sp+10h] [bp-1Ch]@1 evt.eventCode = 512; evt.xCoordOrKeycode = 55; evt.yCoordOrFieldID = 901; heroWindow::BroadcastMessage(dword_485248, &evt); result = evt.payload; v1 = evt.payload; if ( evt.payload != (void *)-1 ) { if ( (void *)((unsigned __int8)gpMapHeader.numEvents - 1) != evt.payload ) memmove( &gpEventDataIndices[(unsigned int)evt.payload], (char *)&unk_48E2E2 + 2 * (unsigned int)evt.payload, 2 * ((unsigned __int8)gpMapHeader.numEvents - (unsigned int)evt.payload) - 2); --gpMapHeader.numEvents; evt.xCoordOrKeycode = 58; evt.yCoordOrFieldID = 901; evt.payload = v1; result = (void *)heroWindow::BroadcastMessage(dword_485248, &evt); } return result; } //----- (0041DEBF) -------------------------------------------------------- editManager *__cdecl sub_41DEBF() { editManager *result; // eax@2 char Dest; // [sp+Ch] [bp-8Ch]@4 char v2; // [sp+70h] [bp-28h]@4 int v3; // [sp+74h] [bp-24h]@3 tag_message evt; // [sp+78h] [bp-20h]@1 void *Dst; // [sp+94h] [bp-4h]@3 evt.eventCode = 512; if ( (signed int)(unsigned __int8)gpMapHeader.numRumors < 30 ) { Dst = BaseAlloc(9u, (int)"F:\\h2xsrc\\Editor\\specedit.cpp", 739); memset(Dst, 0, 9u); gpEditManager->mapExtra[gpEditManager->nMapExtra] = Dst; gpEditManager->lenMapExtra[gpEditManager->nMapExtra] = 9; v3 = sub_426180(gpEditManager->nMapExtra); if ( v3 == 30721 ) { BaseFree(gpEditManager->mapExtra[gpEditManager->nMapExtra], "F:\\h2xsrc\\Editor\\specedit.cpp", 763); gpEditManager->mapExtra[gpEditManager->nMapExtra] = 0; result = (editManager *)gpEditManager->nMapExtra; gpEditManager->lenMapExtra[(_DWORD)result] = 0; } else { gpRumorIndices[(unsigned __int8)gpMapHeader.numRumors] = gpEditManager->nMapExtra; evt.xCoordOrKeycode = 56; evt.yCoordOrFieldID = 801; strncpy( &Dest, (const char *)gpEditManager->mapExtra[gpRumorIndices[(unsigned __int8)gpMapHeader.numRumors]] + 8, 0x64u); v2 = 0; sprintf((char *)&gText, "%s", &Dest); evt.payload = &gText; heroWindow::BroadcastMessage(dword_485248, &evt); ++gpMapHeader.numRumors; result = gpEditManager; ++result->nMapExtra; } } else { sprintf((char *)&gText, "No more rumors can be added unless some are deleted."); result = (editManager *)NormalDialog((char *)&gText, 1, -1, -1, -1, 0, -1, 0, -1, 0); } return result; } //----- (0041E0AE) -------------------------------------------------------- void *__cdecl sub_41E0AE() { void *result; // eax@1 char Dest; // [sp+Ch] [bp-8Ch]@3 char v2; // [sp+70h] [bp-28h]@3 void *v3; // [sp+74h] [bp-24h]@2 int v4; // [sp+78h] [bp-20h]@1 tag_message evt; // [sp+7Ch] [bp-1Ch]@1 evt.eventCode = 512; evt.xCoordOrKeycode = 55; evt.yCoordOrFieldID = 801; heroWindow::BroadcastMessage(dword_485248, &evt); result = evt.payload; v4 = (int)evt.payload; if ( evt.payload != (void *)-1 ) { result = (void *)sub_426180(gpRumorIndices[v4]); v3 = result; if ( result != (void *)30721 ) { evt.xCoordOrKeycode = 57; evt.yCoordOrFieldID = 801; strncpy(&Dest, (const char *)gpEditManager->mapExtra[gpRumorIndices[v4]] + 8, 0x64u); v2 = 0; sprintf((char *)&gText, "%s", &Dest); evt.inputTypeBitmask = v4; evt.payload = &gText; result = (void *)heroWindow::BroadcastMessage(dword_485248, &evt); } } return result; } //----- (0041E19B) -------------------------------------------------------- void *__cdecl sub_41E19B() { void *result; // eax@1 void *v1; // [sp+Ch] [bp-20h]@1 tag_message evt; // [sp+10h] [bp-1Ch]@1 evt.eventCode = 512; evt.xCoordOrKeycode = 55; evt.yCoordOrFieldID = 801; heroWindow::BroadcastMessage(dword_485248, &evt); result = evt.payload; v1 = evt.payload; if ( evt.payload != (void *)-1 ) { if ( (void *)((unsigned __int8)gpMapHeader.numRumors - 1) != evt.payload ) memmove( &gpRumorIndices[(unsigned int)evt.payload], (char *)&unk_48E8DA + 2 * (unsigned int)evt.payload, 2 * ((unsigned __int8)gpMapHeader.numRumors - (unsigned int)evt.payload) - 2); --gpMapHeader.numRumors; evt.xCoordOrKeycode = 58; evt.yCoordOrFieldID = 801; evt.payload = v1; result = (void *)heroWindow::BroadcastMessage(dword_485248, &evt); } return result; } //----- (0041E24C) -------------------------------------------------------- signed int __thiscall sub_41E24C(tag_message *msg) { int v2; // [sp+Ch] [bp-A4h]@23 int v3; // [sp+10h] [bp-A0h]@4 int v4; // [sp+14h] [bp-9Ch]@3 int v6; // [sp+88h] [bp-28h]@35 int v7; // [sp+8Ch] [bp-24h]@34 signed int v8; // [sp+90h] [bp-20h]@1 tag_message evt; // [sp+94h] [bp-1Ch]@1 v8 = 0; evt.eventCode = 512; evt.xCoordOrKeycode = 7; evt.yCoordOrFieldID = msg->yCoordOrFieldID; if ( msg->eventCode != 512 ) return 0; v4 = msg->xCoordOrKeycode; if ( v4 == 12 ) { v8 = 1; v2 = msg->yCoordOrFieldID; if ( v2 > 210 ) { if ( v2 > 251 ) { if ( v2 > 321 ) { if ( v2 > 501 ) { if ( v2 > 701 ) { if ( v2 == 801 ) { if ( msg->inputTypeBitmask == 2 ) sub_41E0AE(); goto LABEL_84; } if ( v2 == 901 ) { if ( msg->inputTypeBitmask == 2 ) sub_41DD01(); goto LABEL_84; } } else { if ( v2 == 701 ) { gpMapHeader.noStartingHeroInCastle = 1 - gpMapHeader.noStartingHeroInCastle; goto LABEL_84; } if ( v2 >= 620 && v2 <= 623 ) { LOBYTE(gpMapHeader.field_4) = msg->yCoordOrFieldID - 108; goto LABEL_84; } } } else { if ( v2 == 501 ) { heroWindow::BroadcastMessage(dword_485248, &evt); strcpy(gpMapHeader.description, (const char *)evt.payload); goto LABEL_84; } if ( v2 == 410 ) { heroWindow::BroadcastMessage(dword_485248, &evt); strcpy(gpMapHeader.name, (const char *)evt.payload); goto LABEL_84; } } } else { if ( v2 == 321 ) { msg->xCoordOrKeycode = 55; heroWindow::BroadcastMessage(dword_485248, msg); sub_41D4C1((int)msg->payload); goto LABEL_84; } if ( v2 == 310 ) { msg->xCoordOrKeycode = 55; heroWindow::BroadcastMessage(dword_485248, msg); if ( (void *)(unsigned __int8)gpMapHeader.field_22 != msg->payload ) { gpMapHeader.field_22 = LOBYTE(msg->payload); LOWORD(gpMapHeader.field_2E) = 0; *(_WORD *)&gpMapHeader.field_23 = 0; sub_41CFDC(); v8 = 1; } goto LABEL_84; } } } else { if ( v2 == 251 ) { msg->xCoordOrKeycode = 55; heroWindow::BroadcastMessage(dword_485248, msg); sub_41CEA6((int)msg->payload); goto LABEL_84; } if ( v2 == 240 ) { gpMapHeader.field_1E = 1 - gpMapHeader.field_1E; goto LABEL_84; } if ( v2 == 241 ) { gpMapHeader.allowDefeatAllVictory = 1 - gpMapHeader.allowDefeatAllVictory; goto LABEL_84; } } } else { if ( v2 == 210 ) { msg->xCoordOrKeycode = 55; heroWindow::BroadcastMessage(dword_485248, msg); if ( (void *)(unsigned __int8)gpMapHeader.winConditionType != msg->payload ) { gpMapHeader.winConditionType = LOBYTE(msg->payload); gpMapHeader.field_2C = 0; gpMapHeader.winConditionArgument = 0; sub_41C876(); v8 = 1; } goto LABEL_84; } if ( v2 >= 110 && v2 <= 115 ) { v7 = msg->yCoordOrFieldID - 110; if ( gpMapHeader.hasPlayer[v7] ) { v6 = gpMapHeader.playerMayBeHuman[v7] + 2 * gpMapHeader.playerMayBeComp[v7] + 1; if ( v6 == 4 ) LOBYTE(v6) = 1; if ( v6 & 1 ) gpMapHeader.playerMayBeHuman[v7] = 1; else gpMapHeader.playerMayBeHuman[v7] = 0; if ( v6 & 2 ) gpMapHeader.playerMayBeComp[v7] = 1; else gpMapHeader.playerMayBeComp[v7] = 0; CalculatePlayerNumbers(); } goto LABEL_84; } } v8 = 0; goto LABEL_84; } if ( v4 == 13 ) { v3 = msg->yCoordOrFieldID; if ( v3 > 902 ) { if ( v3 <= 30722 ) { if ( v3 >= 30721 ) { gpWindowManager->buttonPressedCode = msg->yCoordOrFieldID; msg->eventCode = 512; msg->yCoordOrFieldID = 10; msg->xCoordOrKeycode = msg->yCoordOrFieldID; return 2; } if ( v3 == 903 ) { sub_41DD01(); v8 = 1; } else if ( v3 == 904 ) { sub_41DE0E(); v8 = 1; } } } else { switch ( v3 ) { case 902: sub_41DABC(); v8 = 1; break; case 802: sub_41DEBF(); v8 = 1; break; case 803: sub_41E0AE(); v8 = 1; break; case 804: sub_41E19B(); v8 = 1; break; } } } LABEL_84: if ( v8 ) { sub_41D5F6(); heroWindow::DrawWindow(); } return 1; } //----- (0041E880) -------------------------------------------------------- void __thiscall eventsManager::EditTown(eventsManager *this, int x, int y) { tag_message evt; // [sp+1Ch] [bp-3Ch]@6 int j; // [sp+38h] [bp-20h]@8 int i; // [sp+40h] [bp-18h]@6 char v6; // [sp+44h] [bp-14h]@3 gpExaminedCell = &gpMap.tiles[y * gpMap.width] + x; if ( (unsigned __int8)(*(&gpMap.tiles[x].field_4_1_1_isShadow_1_13_extraInfo + 10 * y * gpMap.width) >> 8) >> -5 ) { memcpy(&v6, gpExaminedCell, 0x14u); memcpy( &gEditTownExtra, gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)], sizeof(TownExtra)); if ( operator new(0x44u) ) gpCellEditDialog = heroWindow::heroWindow(0, 0, "townedit.bin"); else gpCellEditDialog = 0; SetWinText(gpCellEditDialog, 15); evt.eventCode = 512; evt.xCoordOrKeycode = GUI_MESSAGE_DROPLIST_ADD; for ( i = 0; i < 5; ++i ) { sprintf((char *)&gText, "-empty-"); evt.payload = &gText; evt.yCoordOrFieldID = i + 220; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); for ( j = 0; j < 66; ++j ) { sprintf((char *)&gText, "%s", gArmyNames[j]); LOBYTE(gText) = (_BYTE)gText - 32; evt.payload = &gText; evt.yCoordOrFieldID = i + 220; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } } evt.payload = &gText; evt.yCoordOrFieldID = 471; sprintf((char *)&gText, "%s", "-None-"); heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf((char *)&gText, "%s", "Level 1"); heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf((char *)&gText, "%s", "Level 2"); heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf((char *)&gText, "%s", "Level 3"); heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf((char *)&gText, "%s", "Level 4"); heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf((char *)&gText, "%s", "Level 5"); heroWindow::BroadcastMessage(gpCellEditDialog, &evt); for ( i = 0; i < 11; ++i ) { evt.xCoordOrKeycode = 3; evt.yCoordOrFieldID = i + 410; evt.payload = &gText; if ( gBuildingIdxtoId[i] == BUILDING_SPECIAL ) { sprintf((char *)&gText, gSpecialBuildingNames[gEditTownExtra.faction]); } else if ( gBuildingIdxtoId[i] == BUILDING_SPECIAL_GROWTH ) { sprintf((char *)&gText, gWellExtraNames[gEditTownExtra.faction]); } else { sprintf((char *)&gText, gpGeneralBuildings[gBuildingIdxtoId[i]]); } heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } FillInTownEdit(&gEditTownExtra); heroWindowManager::DoDialog(gpWindowManager, gpCellEditDialog, (int (__thiscall *)(_DWORD))EditTownHandler, 0); operator delete(gpCellEditDialog); if ( gpWindowManager->buttonPressedCode != 30721 ) { gpEditManager->setOnEventUpdate = 1; memcpy( gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)], &gEditTownExtra, sizeof(TownExtra)); } editManager::UpdateCursor(gpEditManager); RedrawEditPane(); } else { NormalDialog("Unable to edit town - created under old editor", 1, -1, -1, -1, 0, -1, 0, -1, 0); } } // 46BFE0: using guessed type char *gArmyNames[133]; // 48F6C8: using guessed type TownExtra gEditTownExtra; //----- (0041ECB3) -------------------------------------------------------- int __stdcall FillInTownEdit(TownExtra *extra) { int result; // eax@64 char Dest; // [sp+10h] [bp-64h]@71 tag_message evt; // [sp+1Ch] [bp-58h]@1 int v4; // [sp+38h] [bp-3Ch]@68 int i; // [sp+3Ch] [bp-38h]@7 char v6; // [sp+40h] [bp-34h]@15 evt.eventCode = 512; evt.payload = (void *)4; evt.yCoordOrFieldID = 206; if ( extra->customGarrison ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 204; if ( extra->customGarrison ) evt.xCoordOrKeycode = 6; else evt.xCoordOrKeycode = 5; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); for ( i = 210; i <= 239; ++i ) { evt.yCoordOrFieldID = i; if ( extra->customGarrison ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } for ( i = 0; i < 5; ++i ) { sprintf(&v6, "%d", extra->garrison.quantities[i]); evt.xCoordOrKeycode = 3; evt.payload = &v6; evt.yCoordOrFieldID = i + 230; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.xCoordOrKeycode = 54; evt.payload = (void *)(extra->garrison.creatureTypes[i] + 1); evt.yCoordOrFieldID = i + 220; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } evt.payload = (void *)4; evt.yCoordOrFieldID = 606; if ( extra->customName ) evt.xCoordOrKeycode = GUI_MESSAGE_ADD_FLAGS; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 604; if ( extra->customName ) evt.xCoordOrKeycode = 6; else evt.xCoordOrKeycode = 5; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 607; if ( extra->customName ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf(&v6, "%s", extra->name); evt.xCoordOrKeycode = 3; evt.yCoordOrFieldID = 607; evt.payload = &v6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.payload = (void *)4; evt.yCoordOrFieldID = 302; if ( extra->hasCaptain ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); if ( extra->isCastle ) { evt.payload = (void *)4; evt.xCoordOrKeycode = 6; evt.yCoordOrFieldID = 312; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 311; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 310; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } else { evt.payload = (void *)4; evt.yCoordOrFieldID = 312; if ( 1 == extra->disallowCastle ) evt.xCoordOrKeycode = 6; else evt.xCoordOrKeycode = 5; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } evt.payload = (void *)4; evt.yCoordOrFieldID = 406; if ( extra->customBuildings ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 404; if ( extra->customBuildings ) evt.xCoordOrKeycode = 6; else evt.xCoordOrKeycode = 5; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); for ( i = 410; i <= 569; ++i ) { evt.yCoordOrFieldID = i; if ( extra->customBuildings ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } evt.xCoordOrKeycode = 54; evt.payload = (void *)extra->mageGuildLevel; evt.yCoordOrFieldID = 471; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.payload = (void *)4; for ( i = 0; i < 6; ++i ) { evt.yCoordOrFieldID = 2 * i + 550; if ( extra->customBuildings && (1 << (i + 19)) & extra->buildingsBuilt ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 2 * i + 551; if ( extra->customBuildings && (1 << (i + 24)) & extra->buildingsBuilt ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } for ( i = 0; i < 11; ++i ) { evt.yCoordOrFieldID = i + 450; if ( extra->customBuildings && (1 << LOBYTE(gBuildingIdxtoId[i])) & extra->buildingsBuilt ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } result = gEditTownExtra.faction; if ( gEditTownExtra.faction < 6 ) { for ( i = 25; i <= 29; ++i ) { if ( !((1 << i) & gTownEligibleBuildMask[gEditTownExtra.faction]) ) { evt.xCoordOrKeycode = 6; v4 = i - 24; evt.payload = (void *)4; evt.yCoordOrFieldID = 2 * (i - 24) + 551; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 2 * v4 + 531; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 2 * v4 + 511; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } } result = gEditTownExtra.faction; if ( gEditTownExtra.faction == FACTION_NECROMANCER ) { evt.xCoordOrKeycode = GUI_MESSAGE_SET_CONTENTS; evt.yCoordOrFieldID = 411; strcpy(&Dest, "Shrine"); evt.payload = &Dest; result = heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } } return result; } // 48F6C8: using guessed type TownExtra gEditTownExtra; //----- (0041F34B) -------------------------------------------------------- signed int __thiscall EditTownHandler(tag_message *this) { int v2; // [sp+10h] [bp-2Ch]@8 int v3; // [sp+14h] [bp-28h]@3 int v4; // [sp+18h] [bp-24h]@2 INPUT_EVENT_CODE code; // [sp+1Ch] [bp-20h]@1 tag_message *evt; // [sp+20h] [bp-1Ch]@1 int v7; // [sp+2Ch] [bp-10h]@9 signed int v8; // [sp+30h] [bp-Ch]@1 signed int v9; // [sp+38h] [bp-4h]@19 evt = this; v8 = 0; code = this->eventCode; if ( code == 1 ) { if ( this->xCoordOrKeycode == 1 ) { this->eventCode = 512; this->yCoordOrFieldID = 10; this->xCoordOrKeycode = this->yCoordOrFieldID; return 2; } } else if ( code == INPUT_GUI_MESSAGE_CODE ) { v4 = this->xCoordOrKeycode; if ( v4 == 12 ) { v2 = this->yCoordOrFieldID; if ( v2 > 224 ) { if ( v2 > 302 ) { if ( v2 > 404 ) { switch ( v2 ) { case 471: this->xCoordOrKeycode = 55; heroWindow::BroadcastMessage(gpCellEditDialog, this); gEditTownExtra.mageGuildLevel = LOBYTE(evt->payload); if ( gEditTownExtra.mageGuildLevel ) gEditTownExtra.buildingsBuilt |= 1u; else gEditTownExtra.buildingsBuilt &= 0xFFFFFFFEu; v8 = 1; break; case 550: case 552: case 554: case 556: case 558: case 560: v9 = 1 << (((this->yCoordOrFieldID - 550) >> 1) + 19); goto LABEL_22; case 551: case 553: case 555: case 557: case 559: case 561: v9 = 1 << (((this->yCoordOrFieldID - 550) >> 1) + 24); goto LABEL_22; case 450: case 451: case 452: case 453: case 454: case 455: case 456: case 457: case 458: case 459: case 460: v9 = 1 << LOBYTE(gBuildingIdxtoId[this->yCoordOrFieldID - 450]); LABEL_22: if ( v9 & gEditTownExtra.buildingsBuilt ) gEditTownExtra.buildingsBuilt -= v9; else gEditTownExtra.buildingsBuilt += v9; v8 = 1; break; case 405: case 406: gEditTownExtra.customBuildings = 1; v8 = 1; break; case 603: case 604: gEditTownExtra.customName = 0; v8 = 1; break; case 605: case 606: gEditTownExtra.customName = 1; v8 = 1; break; case 607: this->xCoordOrKeycode = 7; heroWindow::BroadcastMessage(gpCellEditDialog, this); strcpy(gEditTownExtra.name, (const char *)evt->payload); v8 = 1; break; default: break; } } else if ( v2 >= 403 ) { gEditTownExtra.customBuildings = 0; v8 = 1; } else if ( v2 == 312 ) { gEditTownExtra.disallowCastle = 1 - gEditTownExtra.disallowCastle; v8 = 1; } } else if ( v2 == 302 ) { gEditTownExtra.hasCaptain = 1 - gEditTownExtra.hasCaptain; v8 = 1; } else if ( v2 >= 230 && v2 <= 234 ) { this->xCoordOrKeycode = 7; heroWindow::BroadcastMessage(gpCellEditDialog, this); v7 = atoi((const char *)evt->payload); if ( v7 < 0 ) v7 = 0; if ( v7 > 9999 ) LOWORD(v7) = 9999; word_48F509[evt->yCoordOrFieldID] = v7; v8 = 1; } } else if ( v2 >= 220 ) { this->xCoordOrKeycode = 55; heroWindow::BroadcastMessage(gpCellEditDialog, this); byte_48F5F4[evt->yCoordOrFieldID] = (char)((char *)evt->payload - 1); v8 = 1; } else { switch ( v2 ) { case 203: case 204: gEditTownExtra.customGarrison = 0; v8 = 1; break; case 205: case 206: gEditTownExtra.customGarrison = 1; v8 = 1; break; default: break; } } } else if ( v4 == 13 ) { v3 = this->yCoordOrFieldID; if ( v3 >= 30721 && v3 <= 30722 ) { gpWindowManager->buttonPressedCode = this->yCoordOrFieldID; this->eventCode = 512; this->yCoordOrFieldID = 10; this->xCoordOrKeycode = this->yCoordOrFieldID; return 2; } } } if ( v8 ) { FillInTownEdit(&gEditTownExtra); heroWindow::DrawWindow(); } return 1; } // 48F509: using guessed type __int16 word_48F509[]; // 48F6C8: using guessed type TownExtra gEditTownExtra; //----- (0041F960) -------------------------------------------------------- signed int __fastcall OverlayMaskBitSet(__int64 *mask, int x, int y) { signed int result; // eax@2 int v4; // [sp+14h] [bp-4h]@1 v4 = 8 - x + 8 * (6 - y) - 9; if ( v4 >= 32 ) // return (1 << v4) & a1 (64-bit) result = ((1 << (v4 - 32)) & *(_DWORD *)mask) != 0; else result = ((1 << v4) & *((_DWORD *)mask + 1)) != 0; return result; } //----- (0041F9EC) -------------------------------------------------------- baseManager *__thiscall overlayManager::overlayManager(baseManager *this) { baseManager::baseManager(this); this->vtable = (managerVtable *)&overlayManager::_vftable_; return this; } // 449118: using guessed type int (__stdcall *overlayManager___vftable_)(int); //----- (0041FA16) -------------------------------------------------------- int __thiscall overlayManager::Open(overlayManager *ecx0, int idx) { void *thisa; // [sp+10h] [bp-14h]@10 border *v5; // [sp+18h] [bp-Ch]@3 void *Dest; // [sp+1Ch] [bp-8h]@7 signed int i; // [sp+20h] [bp-4h]@1 ecx0->field_1E612 = 0; ecx0->overlayTiles = resourceManager::GetIcon("overlay.icn"); ecx0->overlaySelectBoxes = resourceManager::GetIcon("objpalet.icn"); for ( i = 0; i < 14; ++i ) { v5 = (border *)operator new(0x2Au); if ( v5 ) ecx0->objTypeButtons[i] = border::border( v5, gObjButtonPositions[i][0], gObjButtonPositions[i][1], 27, 27, i + 500, 1, 0, 0); else ecx0->objTypeButtons[i] = 0; heroWindow::AddWidget(gpEditManager->editWindow, (widget *)ecx0->objTypeButtons[i], -1); } Dest = BaseAlloc(2u, (int)"F:\\h2xsrc\\Editor\\OVERLAY.CPP", 68); strcpy((char *)Dest, byte_4855B0); if ( operator new(0x2Bu) ) ecx0->textWid = (textWidget *)textWidget::textWidget(493, 367, 117, 10, Dest, "smalfont.fnt", 1, 1400, 8, 1); else ecx0->textWid = 0; heroWindow::AddWidget(gpEditManager->editWindow, (widget *)ecx0->textWid, -1); thisa = (void *)operator new(0x2Du); if ( thisa ) ecx0->selectionHighlight = (widget *)iconWidget::iconWidget( thisa, gObjButtonPositions[0][0] - 2, gObjButtonPositions[0][1] - 2, 31, 31, "terrains.icn", 9, 0, 25, 16, 1); else ecx0->selectionHighlight = 0; heroWindow::AddWidget(gpEditManager->editWindow, ecx0->selectionHighlight, -1); heroWindow::DrawWindow(); icon::DrawToBuffer(509, 227, 0, 0); overlayManager::DrawSelection(ecx0, 0); gpEditManager->field_26E = -1; gpEditManager->field_26A = gpEditManager->field_26E; overlayManager::PopulateAvailOverlays(ecx0, giSelectedObjType); DoNothing(); ecx0->type = 0x4000u; ecx0->idx = idx; ecx0->ready = 1; strcpy(ecx0->name, "overlayManager"); return 0; } // 433510: using guessed type _DWORD __stdcall icon__DrawToBuffer(_DWORD, _DWORD, _DWORD, _DWORD); // 439150: using guessed type _DWORD __stdcall textWidget__textWidget(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, __int16, _DWORD, _DWORD, char); //----- (0041FCD0) -------------------------------------------------------- overlayManager *__thiscall overlayManager::Close(overlayManager *this) { overlayManager *result; // eax@10 widget *v3; // [sp+14h] [bp-18h]@8 textWidget *v4; // [sp+1Ch] [bp-10h]@6 widget *v5; // [sp+24h] [bp-8h]@3 signed int i; // [sp+28h] [bp-4h]@1 resourceManager::Dispose(this->overlayTiles); resourceManager::Dispose(this->overlaySelectBoxes); for ( i = 0; i < 14; ++i ) { heroWindow::RemoveWidget(this->objTypeButtons[i]); v5 = (widget *)this->objTypeButtons[i]; if ( v5 ) v5->vtable->Close(v5, 1); } heroWindow::RemoveWidget(this->textWid); v4 = this->textWid; if ( v4 ) v4->vtable->Close((widget *)v4, 1); heroWindow::RemoveWidget(this->selectionHighlight); v3 = this->selectionHighlight; if ( v3 ) v3->vtable->Close(v3, 1); heroWindow::DrawWindow((int)&gpEditManager->editWindow->idx, 0); editManager::UpdateCursor(gpEditManager); RedrawEditPane(); result = this; this->ready = 0; return result; } // 430790: using guessed type _DWORD __stdcall heroWindow__RemoveWidget(_DWORD); // 4310B0: using guessed type _DWORD __stdcall resourceManager__Dispose(_DWORD); //----- (0041FE3A) -------------------------------------------------------- void __thiscall overlayManager::DrawSelection(overlayManager *this, int update) { tag_message evt; // [sp+10h] [bp-20h]@1 sprintf((char *)&gText, gpObjClassNames[giSelectedObjType]); evt.eventCode = INPUT_GUI_MESSAGE_CODE; evt.xCoordOrKeycode = GUI_MESSAGE_SET_CONTENTS; evt.yCoordOrFieldID = 1400; evt.payload = &gText; heroWindow::BroadcastMessage(gpEditManager->editWindow, &evt); this->selectionHighlight->offsetX = gObjButtonPositions[giSelectedObjType][0] - 2; this->selectionHighlight->offsetY = gObjButtonPositions[giSelectedObjType][1] - 2; heroWindow::DrawWindow((int)&gpEditManager->editWindow->idx, 0); if ( update ) heroWindowManager::UpdateScreenRegion(480, 232, 144, 160); } //----- (0041FF11) -------------------------------------------------------- signed int __thiscall overlayManager::Main(overlayManager *this, tag_message *msg) { int v2; // eax@26 signed int result; // eax@28 int v4; // [sp+10h] [bp-58h]@2 INPUT_EVENT_CODE v5; // [sp+14h] [bp-54h]@1 char v7; // [sp+1Ch] [bp-4Ch]@27 int y; // [sp+38h] [bp-30h]@29 int x; // [sp+3Ch] [bp-2Ch]@29 int v10; // [sp+40h] [bp-28h]@27 int v11; // [sp+5Ch] [bp-Ch]@1 int v12; // [sp+60h] [bp-8h]@10 int v13; // [sp+64h] [bp-4h]@1 v13 = 0; v11 = -1; v5 = msg->eventCode; if ( v5 != INPUT_MOUSEMOVE_EVENT_CODE ) { if ( v5 != 512 ) goto LABEL_42; v4 = msg->xCoordOrKeycode; if ( v4 != 12 ) { if ( v4 == GUI_MESSAGE_BUTTON_PRESSED ) { if ( !(BYTE1(msg->inputTypeBitmask) & 2) ) { if ( msg->yCoordOrFieldID != 25 ) { if ( msg->yCoordOrFieldID < 500 || msg->yCoordOrFieldID >= 514 ) goto LABEL_42; giSelectedObjType = msg->yCoordOrFieldID - 500; } giSelectedObj = overlayManager::SelectObject(this, giSelectedObjType); DoNothing(); overlayManager::DrawSelection(this, 1); inputManager::Flush(gpInputManager); } LABEL_42: if ( v13 == 1 ) { msg->eventCode = 16384; msg->xCoordOrKeycode = 1; result = 2; } else { result = 0; } return result; } if ( v4 != 14 ) goto LABEL_42; } if ( BYTE1(msg->inputTypeBitmask) & 2 ) { if ( msg->yCoordOrFieldID >= 500 && msg->yCoordOrFieldID < 514 ) NormalDialog((&off_46ABF0)[4 * msg->yCoordOrFieldID], 4, -1, -1, -1, 0, -1, 0, -1, 0); } else if ( msg->yCoordOrFieldID == 9 ) { if ( giSelectedObj >= 0 ) { sub_410B3A(); CopyMap(); v12 = PlaceOverlay( &this->availOverlays[giSelectedObj], gpEditManager->cursorX - 7, gpEditManager->cursorY - 5, 1); if ( v12 ) { gpEditManager->field_26A = gpEditManager->cursorX; gpEditManager->field_26E = gpEditManager->cursorY + 6 - this->field_1E5C2; gpEditManager->field_272 = 0; editManager::UpdateCursor(gpEditManager); RedrawEditPane(); sub_40365F(gpEditManager, 1); gpEditManager->setOnEventUpdate = 1; } } } goto LABEL_42; } LOBYTE(v2) = InMapArea(msg->altXCoord, msg->altYCoord); if ( v2 ) { memcpy(&v10, (const void *)inputManager::PeekEvent(&v7), 0x1Cu); if ( v10 == 4 ) return 1; x = msg->altXCoord; y = msg->altYCoord; editManager::ToCellIdx(gpEditManager, &x, &y); x += gpEditManager->cellLeft; y += gpEditManager->cellTop; if ( gpEditManager->cursorX != x || gpEditManager->cursorY != y ) { gpEditManager->cursorX = x; gpEditManager->cursorY = y; x -= gpEditManager->cellLeft; y -= gpEditManager->cellTop; if ( giSelectedObj != -1 ) { editManager::UpdateCursor(gpEditManager); x -= 7; y -= 5; x = x * tileSizes[gpEditManager->zoomLevel] + 16; y = y * tileSizes[gpEditManager->zoomLevel] + 16; if ( giSelectedObj != -1 ) { overlayManager::DrawAffectedTileGrid(this, x, y, 8, 6, &this->availOverlays[giSelectedObj], 1); overlayManager::DrawOverlay( this, &this->availOverlays[giSelectedObj], x, y, 1, 8, 6, 1, gpEditManager->cursorX, gpEditManager->cursorY); this->field_1E612 = 1; } RedrawEditPane(); editManager::HighlightCursorCoordinates(gpEditManager); } editManager::HighlightCursorCoordinates(gpEditManager); } } else if ( this->field_1E612 ) { this->field_1E612 = 0; editManager::UpdateCursor(gpEditManager); RedrawEditPane(); editManager::HighlightCursorCoordinates(gpEditManager); } return 1; } // 437610: using guessed type int __thiscall inputManager__Flush(_DWORD); // 4376D0: using guessed type _DWORD __stdcall inputManager__PeekEvent(_DWORD); // 46B100: using guessed type int tileSizes[]; // 485568: using guessed type int giSelectedObj; //----- (00420411) -------------------------------------------------------- void __thiscall overlayManager::DrawAffectedTileGrid(overlayManager *this, int x, int y, int width, int height, overlay *ovr, signed int a7) { int v8; // [sp+10h] [bp-1Ch]@5 overlay *v9; // [sp+14h] [bp-18h]@3 int v10; // [sp+18h] [bp-14h]@5 int a3; // [sp+1Ch] [bp-10h]@5 int a2; // [sp+20h] [bp-Ch]@7 char color; // [sp+24h] [bp-8h]@11 int v14; // [sp+28h] [bp-4h]@5 if ( *(_DWORD *)&showObjectBoxes ) { if ( ovr->category == OVERLAY_CATEGORY_TOWN ) v9 = &gOverlayDatabase[955]; else v9 = ovr; v8 = 6 - height; v10 = 8 - width; v14 = tileSizes[gpEditManager->zoomLevel]; for ( a3 = 6 - height; a3 < 6; ++a3 ) { for ( a2 = 8 - width; a2 < 8; ++a2 ) { if ( OverlayMaskBitSet(&v9->intersectsTileMask, a2, a3) ) { if ( OverlayMaskBitSet(&v9->coveredNonObstructedMask, a2, a3) ) { color = 101; } else if ( OverlayMaskBitSet(&v9->shadowsMask, a2, a3) ) { color = 36; } else if ( OverlayMaskBitSet(&v9->interactionPointMask, a2, a3) ) { color = -49; } else { color = -60; // blocked } if ( !a7 || x + v14 * (a2 - v10) >= 16 && x + v14 * (a2 - v10 + 1) <= 464 && y + v14 * (a3 - v8) >= 16 && y + v14 * (a3 - v8 + 1) <= 464 ) MonoIconToBitmap( (int)this->overlayTiles, (int)gpWindowManager->screenBuffer, x + v14 * (a2 - v10), y + v14 * (a3 - v8), gpEditManager->zoomLevel, color, a7, 16, 16, 0x1C0u, 448); } } } } } // 46B100: using guessed type int tileSizes[]; //----- (0042060A) -------------------------------------------------------- signed int __fastcall ValidOverlayPlacement(overlay *ovr, int left, signed int top, int a4) { signed int result; // eax@6 signed int nonShadow; // [sp+14h] [bp-28h]@39 mapCell *cell; // [sp+18h] [bp-24h]@18 int j; // [sp+20h] [bp-1Ch]@92 int k; // [sp+24h] [bp-18h]@7 int i; // [sp+28h] [bp-14h]@90 int l; // [sp+2Ch] [bp-10h]@9 mapCellExtra *cellExtra; // [sp+30h] [bp-Ch]@24 mapCellExtra *cellExtraa; // [sp+30h] [bp-Ch]@43 mapCellExtra *cellExtrab; // [sp+30h] [bp-Ch]@73 int v16; // [sp+34h] [bp-8h]@4 int nIntersect; // [sp+38h] [bp-4h]@4 if ( ovr->category == 5 ) ovr = &gOverlayDatabase[955]; else ; nIntersect = 0; v16 = 0; if ( ovr->locationType != LOCATION_ALCHEMIST_LAB || top >= -3 ) { for ( k = 0; k < 6; ++k ) { for ( l = 0; l < 8; ++l ) { if ( OverlayMaskBitSet(&ovr->intersectsTileMask, l, k) && !OverlayMaskBitSet(&ovr->shadowsMask, l, k) ) { if ( left + l < 0 || left + l > MAP_WIDTH - 1 || top + k < 0 || top + k > MAP_HEIGHT - 1 ) return 0; cell = &gpMap.tiles[(top + k) * gpMap.width] + left + l; if ( OverlayMaskBitSet(&ovr->coveredNonObstructedMask, l, k) ) { if ( cell->overlayIndex != 255 ) gOverlayIntersect[nIntersect++] = cell->ovrLink; if ( cell->objectIndex != 255 ) gOverlayIntersect[nIntersect++] = cell->objLink; if ( cell->extraIdx ) { cellExtra = &gpMap.cellExtras[cell->extraIdx]; while ( cellExtra ) { if ( cellExtra->overlayIndex != 255 ) gOverlayIntersect[nIntersect++] = cellExtra->ovrLink; if ( cellExtra->objectIndex != 255 ) gOverlayIntersect[nIntersect++] = cellExtra->objLink; if ( cellExtra->nextIdx ) cellExtra = &gpMap.cellExtras[cellExtra->nextIdx]; else cellExtra = 0; } } } else { if ( !((1 << gTileTerrainTypes[*(&gpMap.tiles[(top + k) * gpMap.width].groundIndex + 10 * (left + l))]) & ovr->allowedTerrainPlacementMask) ) return 0; if ( OverlayMaskBitSet(&ovr->interactionPointMask, l, k) ) { if ( cell->objectIndex != 255 ) { nonShadow = 0; if ( !((cell->field_4_1_1_isShadow_1_13_extraInfo >> 1) & 1) ) nonShadow = 1; cellExtraa = cell->extraIdx && gpMap.cellExtras[cell->extraIdx].objectIndex != 255 ? &gpMap.cellExtras[cell->extraIdx] : 0; while ( cellExtraa ) { if ( !(((unsigned __int8)cellExtraa->field_4_1_1_1_isShadow_5 >> 1) & 1) ) nonShadow = 1; if ( cellExtraa->nextIdx && gpMap.cellExtras[cellExtraa->nextIdx].objectIndex != 255 ) cellExtraa = &gpMap.cellExtras[cellExtraa->nextIdx]; else cellExtraa = 0; } if ( nonShadow && ovr->locationType != LOCATION_MINE ) return 0; } } else if ( cell->objType & (unsigned __int8)TILE_HAS_EVENT && !OverlayMaskBitSet(&ovr->shadowsMask, l, k) ) { return 0; } if ( cell->overlayIndex != 255 || cell->objectIndex != 255 && !(cell->field_4_1_1_isShadow_1_13_extraInfo & 1) && ovr->field_4B ) word_48F710[v16++] = cell->ovrLink; if ( cell->objectIndex != 255 && !a4 ) return 0; if ( cell->objectIndex != 255 && (!ovr->field_4B || cell->field_4_1_1_isShadow_1_13_extraInfo & 1) ) gOverlayIntersect[nIntersect++] = cell->objLink; if ( cell->extraIdx ) { cellExtrab = &gpMap.cellExtras[cell->extraIdx]; while ( cellExtrab ) { if ( cellExtrab->overlayIndex != 255 || cellExtrab->objectIndex != 255 && !(cellExtrab->field_4_1_1_1_isShadow_5 & 1) && ovr->field_4B ) word_48F710[v16++] = cellExtrab->ovrLink; if ( cellExtrab->objectIndex != 255 && (!ovr->field_4B || cellExtrab->field_4_1_1_1_isShadow_5 & 1) ) gOverlayIntersect[nIntersect++] = cellExtrab->objLink; if ( cellExtrab->nextIdx ) cellExtrab = &gpMap.cellExtras[cellExtrab->nextIdx]; else cellExtrab = 0; } } } } } } for ( i = 0; i < nIntersect; ++i ) { for ( j = 0; j < v16; ++j ) { if ( word_48F710[j] == gOverlayIntersect[i] ) return 0; } } result = 1; } else { result = 0; } return result; } // 48F710: using guessed type __int16 word_48F710[]; // 48FA30: using guessed type __int16 gOverlayIntersect[]; //----- (00420CD0) -------------------------------------------------------- void __fastcall UnknownPlaceOverlayHelper(overlay *ovr, int left, int right) { mapCell *cell; // [sp+14h] [bp-14h]@12 int i; // [sp+18h] [bp-10h]@1 int v7; // [sp+1Ch] [bp-Ch]@11 int j; // [sp+20h] [bp-8h]@3 mapCellExtra *v9; // [sp+24h] [bp-4h]@19 for ( i = 0; i < 6; ++i ) { for ( j = 0; j < 8; ++j ) { if ( j + left >= 0 ) { if ( j + left <= MAP_WIDTH - 1 ) { if ( i + right >= 0 ) { if ( i + right <= MAP_HEIGHT - 1 ) { v7 = j + 8 * i; if ( OverlayMaskBitSet(&ovr->intersectsTileMask, j, i) ) { cell = &gpMap.tiles[(i + right) * gpMap.width] + j + left; if ( ovr->fullGridIconIndices[v7] == *(&gpMap.tiles[j].overlayIndex + 20 * left + 20 * (i + right) * gpMap.width) && (((unsigned __int8)cell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset >> 2) & 0x3F) == ovr->tileset ) sub_408633(cell->ovrLink); if ( ovr->fullGridIconIndices[v7] == cell->objectIndex && (((unsigned __int8)cell->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F) == ovr->tileset ) sub_408633(cell->objLink); if ( cell->extraIdx ) { v9 = &gpMap.cellExtras[cell->extraIdx]; while ( v9 ) { if ( ovr->fullGridIconIndices[v7] == v9->overlayIndex && (((unsigned __int8)v9->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset >> 2) & 0x3F) == ovr->tileset ) sub_408633(v9->ovrLink); if ( ovr->fullGridIconIndices[v7] == v9->objectIndex && (((unsigned __int8)v9->_1_animatedObject_7_objTileset >> 1) & 0x7F) == ovr->tileset ) sub_408633(v9->objLink); if ( v9->nextIdx ) v9 = &gpMap.cellExtras[v9->nextIdx]; else v9 = 0; } } } } } } } } } } //----- (00420F76) -------------------------------------------------------- int __fastcall PlaceOverlay(overlay *ovr, int left, int top, int userDemanded) { int result; // eax@4 int v5; // ST54_4@39 unsigned __int16 v6; // ax@101 unsigned __int16 v7; // ax@108 unsigned __int16 v8; // ax@111 SignExtra *signExtra; // ST44_4@136 SphinxExtra *sphinxMapExtra; // ST3C_4@145 unsigned __int16 v11; // ax@181 unsigned __int16 v12; // ax@182 unsigned __int16 v13; // ax@183 unsigned __int16 v14; // ax@184 unsigned __int16 v15; // ax@185 unsigned __int16 v16; // ax@186 unsigned __int16 v17; // ax@192 unsigned __int16 v18; // ax@193 unsigned __int16 v19; // ax@194 unsigned __int16 v20; // ax@195 int faction; // [sp+20h] [bp-40h]@159 HeroExtra *heroMapExtra; // [sp+24h] [bp-3Ch]@149 EventExtra *eventMapExtra; // [sp+2Ch] [bp-34h]@139 TownExtra *townMapExtra; // [sp+34h] [bp-2Ch]@125 int v27; // [sp+3Ch] [bp-24h]@37 int v28; // [sp+44h] [bp-1Ch]@20 mapCell *tile; // [sp+4Ch] [bp-14h]@48 int y; // [sp+50h] [bp-10h]@14 signed int ya; // [sp+50h] [bp-10h]@40 int ovrTileIdx; // [sp+54h] [bp-Ch]@48 signed int ovrTileIdxa; // [sp+54h] [bp-Ch]@139 signed int ovrTileIdxb; // [sp+54h] [bp-Ch]@149 signed int ovrTileIdxc; // [sp+54h] [bp-Ch]@152 signed int ovrTileIdxd; // [sp+54h] [bp-Ch]@155 int x; // [sp+58h] [bp-8h]@12 signed int xa; // [sp+58h] [bp-8h]@42 mapCellExtra *extra; // [sp+5Ch] [bp-4h]@51 mapCellExtra *extraa; // [sp+5Ch] [bp-4h]@78 if ( userDemanded ) ++giCurOverlayIdx; if ( ValidOverlayPlacement(ovr, left, top, 1) ) { UnknownPlaceOverlayHelper(ovr, left, top); if ( ovr->category != OVERLAY_CATEGORY_TOWN || CountTowns() < 72 ) { if ( ovr->locationType != LOCATION_EVENT || CountPlacedEvents() < 50 ) { if ( (ovr->locationType & 0x7F) != LOCATION_ULTIMATE_ARTIFACT ) goto LABEL_212; for ( x = 0; x < MAP_WIDTH; ++x ) { for ( y = 0; y < MAP_WIDTH; ++y ) { if ( (*(&gpMap.tiles[x].objType + 20 * y * gpMap.width) & 0x7F) == 44 ) { sprintf((char *)&gText, "The ultimate artifact has already been placed."); ShowErrorMessage((const char *)&gText); return 0; } } } v28 = top + 5; if ( left + 7 >= 9 && MAP_WIDTH - 10 >= left + 7 && v28 >= 9 && MAP_HEIGHT - 10 >= v28 ) { LABEL_212: if ( ovr->locationType != LOCATION_ABANDONED_MINE && ovr->locationType != LOCATION_MINE && ovr->locationType != LOCATION_SAWMILL && ovr->locationType != LOCATION_ALCHEMIST_LAB && ovr->locationType != 50 && ovr->locationType != LOCATION_DRAGON_CITY && ovr->locationType != LOCATION_LIGHTHOUSE || CountMines() < 144 ) { if ( ovr->category == OVERLAY_CATEGORY_TOWN ) { if ( ovr->idx < 835 || ovr->idx > 918 ) v27 = (((unsigned __int64)(ovr->idx - 939) >> 32) ^ (((unsigned __int8)((unsigned __int64)(ovr->idx - 939) >> 32) ^ (unsigned __int8)(LOBYTE(ovr->idx) + 85)) - (unsigned __int8)((unsigned __int64)(ovr->idx - 939) >> 32)) & 1) - ((unsigned __int64)(ovr->idx - 939) >> 32) + 941; else v27 = (ovr->idx - 835) % 12 + 919; v5 = gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(top + 5) * gpMap.width].groundIndex + 5 * (4 * left + 20))] + 930; PlaceOverlay(&gOverlayDatabase[v27], left, top, 0); PlaceOverlay(&gOverlayDatabase[v5], left, top, 0); } for ( ya = 0; ya < 6; ++ya ) { for ( xa = 0; xa < 8; ++xa ) { if ( left + xa >= 0 ) { if ( left + xa < MAP_WIDTH ) { if ( top + ya >= 0 ) { if ( top + ya < MAP_HEIGHT ) { ovrTileIdx = xa + 8 * ya; tile = &gpMap.tiles[(top + ya) * gpMap.width] + left + xa; if ( ovr->fullGridIconIndices[ovrTileIdx] != 255 ) { if ( OverlayMaskBitSet(&ovr->coveredNonObstructedMask, xa, ya) ) { if ( tile->overlayIndex == 255 ) { tile->ovrLink = giCurOverlayIdx; tile->overlayIndex = ovr->fullGridIconIndices[ovrTileIdx]; tile->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset = tile->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset & 3 | 4 * ovr->tileset; if ( ya >= 4 || !OverlayMaskBitSet(&ovr->intersectsTileMask, xa, ya + 1) || ovr->locationType == LOCATION_ROAD && OverlayMaskBitSet(&ovr->interactionPointMask, xa, ya + 1) || OverlayMaskBitSet(&ovr->shadowsMask, xa, ya + 1) ) tile->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset &= 0xFDu; else tile->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset |= 2u; if ( OverlayMaskBitSet(&ovr->animatedLateOverlay, xa, ya) ) tile->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset |= 1u; else tile->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset &= 0xFEu; } else { extra = fullMap::GetNewCellExtraOverlay(&gpMap, left + xa, top + ya); extra->ovrLink = giCurOverlayIdx; extra->overlayIndex = ovr->fullGridIconIndices[ovrTileIdx]; extra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset = extra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset & 3 | 4 * ovr->tileset; if ( ya >= 4 || !OverlayMaskBitSet(&ovr->intersectsTileMask, xa, ya + 1) || ovr->locationType == 18 && OverlayMaskBitSet(&ovr->interactionPointMask, xa, ya + 1) || OverlayMaskBitSet(&ovr->shadowsMask, xa, ya + 1) ) extra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset &= 0xFDu; else extra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset |= 2u; if ( OverlayMaskBitSet(&ovr->animatedLateOverlay, xa, ya) ) extra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset |= 1u; else extra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset &= 0xFEu; } } else { if ( tile->objectIndex != 255 && OverlayMaskBitSet(&ovr->interactionPointMask, xa, ya) && ovr->locationType != LOCATION_MINE ) fullMap::MoveInfoToCellExtra(&gpMap, left + xa, top + ya); if ( tile->objectIndex == 255 ) { if ( unknownTerrainTileAttribute[tile->groundIndex] & 0x80 ) tile->groundIndex = SelectTerrainTile( gTileTerrainTypes[tile->groundIndex], unknownTerrainTileAttribute[tile->groundIndex] - 128, 0, 0, 0, 0, 1.0); tile->objLink = giCurOverlayIdx; tile->objectIndex = ovr->fullGridIconIndices[ovrTileIdx]; tile->bitfield_1_hasObject_1_isRoad_6_objTileset = tile->bitfield_1_hasObject_1_isRoad_6_objTileset & 3 | 4 * ovr->tileset; if ( OverlayMaskBitSet(&ovr->shadowsMask, xa, ya) ) tile->objType = 0; else tile->objType = ovr->locationType; if ( OverlayMaskBitSet(&ovr->shadowsMask, xa, ya) ) { v6 = tile->field_4_1_1_isShadow_1_13_extraInfo; LOBYTE(v6) = v6 | 2; tile->field_4_1_1_isShadow_1_13_extraInfo = v6; } else { tile->field_4_1_1_isShadow_1_13_extraInfo &= 0xFFFDu; } if ( ya >= 5 || ovr->field_4B || OverlayMaskBitSet(&ovr->shadowsMask, xa, ya) || !OverlayMaskBitSet(&ovr->intersectsTileMask, xa, ya + 1) || OverlayMaskBitSet(&ovr->shadowsMask, xa, ya + 1) ) { tile->field_4_1_1_isShadow_1_13_extraInfo &= 0xFFFBu; } else { v7 = tile->field_4_1_1_isShadow_1_13_extraInfo; LOBYTE(v7) = v7 | 4; tile->field_4_1_1_isShadow_1_13_extraInfo = v7; } if ( ovr->field_4B ) { v8 = tile->field_4_1_1_isShadow_1_13_extraInfo; LOBYTE(v8) = v8 | 1; tile->field_4_1_1_isShadow_1_13_extraInfo = v8; } else { tile->field_4_1_1_isShadow_1_13_extraInfo &= 0xFFFEu; } if ( OverlayMaskBitSet(&ovr->animatedLateOverlay, xa, ya) ) tile->bitfield_1_hasObject_1_isRoad_6_objTileset |= 1u; else tile->bitfield_1_hasObject_1_isRoad_6_objTileset &= 0xFEu; } else { extraa = fullMap::GetNewCellExtraObject(&gpMap, left + xa, top + ya); extraa->objLink = giCurOverlayIdx; extraa->objectIndex = ovr->fullGridIconIndices[ovrTileIdx]; extraa->_1_animatedObject_7_objTileset = extraa->_1_animatedObject_7_objTileset & 1 | 2 * ovr->tileset; if ( OverlayMaskBitSet(&ovr->shadowsMask, xa, ya) ) extraa->field_4_1_1_1_isShadow_5 |= 2u; else extraa->field_4_1_1_1_isShadow_5 &= 0xFDu; if ( ya >= 5 || ovr->field_4B || OverlayMaskBitSet(&ovr->shadowsMask, xa, ya) || !OverlayMaskBitSet(&ovr->intersectsTileMask, xa, ya + 1) || OverlayMaskBitSet(&ovr->shadowsMask, xa, ya + 1) ) extraa->field_4_1_1_1_isShadow_5 &= 0xFBu; else extraa->field_4_1_1_1_isShadow_5 |= 4u; if ( ovr->field_4B ) extraa->field_4_1_1_1_isShadow_5 |= 1u; else extraa->field_4_1_1_1_isShadow_5 &= 0xFEu; if ( OverlayMaskBitSet(&ovr->animatedLateOverlay, xa, ya) ) extraa->_1_animatedObject_7_objTileset |= 1u; else extraa->_1_animatedObject_7_objTileset &= 0xFEu; } } if ( OverlayMaskBitSet(&ovr->interactionPointMask, xa, ya) && ovr->locationType == LOCATION_MINE ) tile->objType = LOCATION_MINE; if ( OverlayMaskBitSet(&ovr->interactionPointMask, xa, ya) ) tile->objType |= TILE_HAS_EVENT; if ( (tile->objType == 163 || tile->objType == 176 || tile->objType == 177) && OverlayMaskBitSet(&ovr->interactionPointMask, xa, ya) ) { townMapExtra = (TownExtra *)BaseAlloc( sizeof(TownExtra), (int)"F:\\h2xsrc\\Editor\\OVERLAY.CPP", 965); memset(townMapExtra, 0, sizeof(TownExtra)); tile->field_4_1_1_isShadow_1_13_extraInfo = tile->field_4_1_1_isShadow_1_13_extraInfo & 7 | 8 * gpEditManager->nMapExtra; gpEditManager->mapExtra[gpEditManager->nMapExtra] = townMapExtra; gpMapHeader.nextTownName = ((unsigned __int8)gpMapHeader.nextTownName + 1) % 72; strcpy(townMapExtra->name, gpTownNames[(unsigned __int8)gpMapHeader.nextTownName]); if ( ovr->townColorOrMineColor == 6 ) townMapExtra->color = -1; else townMapExtra->color = ovr->townColorOrMineColor; if ( ovr->idx < 939 || ovr->idx > 954 ) { townMapExtra->faction = (ovr->idx - 835) % 12 / 2; townMapExtra->isCastle = 1 - ((((unsigned __int64)(ovr->idx - 835) >> 32) ^ abs(LOBYTE(ovr->idx) - 67) & 1) - ((unsigned __int64)(ovr->idx - 835) >> 32)); } else { townMapExtra->faction = 6; townMapExtra->isCastle = 1 - ((((unsigned __int64)(ovr->idx - 939) >> 32) ^ ((((unsigned __int64)(ovr->idx - 939) >> 32) ^ (unsigned __int8)(LOBYTE(ovr->idx) + 85)) - ((unsigned __int64)(ovr->idx - 939) >> 32)) & 1) - ((unsigned __int64)(ovr->idx - 939) >> 32)); } gpEditManager->lenMapExtra[gpEditManager->nMapExtra++] = 70; } if ( (tile->objType == 130 || tile->objType == 221) && OverlayMaskBitSet(&ovr->interactionPointMask, xa, ya) ) { signExtra = (SignExtra *)BaseAlloc(0xAu, (int)"F:\\h2xsrc\\Editor\\OVERLAY.CPP", 1000); memset(signExtra, 0, sizeof(SignExtra)); signExtra->field_0 = 1; tile->field_4_1_1_isShadow_1_13_extraInfo = tile->field_4_1_1_isShadow_1_13_extraInfo & 7 | 8 * gpEditManager->nMapExtra; gpEditManager->mapExtra[gpEditManager->nMapExtra] = signExtra; gpEditManager->lenMapExtra[gpEditManager->nMapExtra++] = 10; } if ( tile->objType == 147 && OverlayMaskBitSet(&ovr->interactionPointMask, xa, ya) ) { eventMapExtra = (EventExtra *)BaseAlloc( sizeof(EventExtra), (int)"F:\\h2xsrc\\Editor\\OVERLAY.CPP", 1017); memset(eventMapExtra, 0, sizeof(EventExtra)); eventMapExtra->field_0 = 1; eventMapExtra->artifactReward = -1; eventMapExtra->cancelAfterFirstVisit = 1; for ( ovrTileIdxa = 0; ovrTileIdxa < 6; ++ovrTileIdxa ) eventMapExtra->colorCanSee[ovrTileIdxa] = 1; tile->field_4_1_1_isShadow_1_13_extraInfo = tile->field_4_1_1_isShadow_1_13_extraInfo & 7 | 8 * gpEditManager->nMapExtra; gpEditManager->mapExtra[gpEditManager->nMapExtra] = eventMapExtra; gpEditManager->lenMapExtra[gpEditManager->nMapExtra++] = sizeof(EventExtra); } if ( tile->objType == 207 && OverlayMaskBitSet(&ovr->interactionPointMask, xa, ya) ) { sphinxMapExtra = (SphinxExtra *)BaseAlloc( sizeof(SphinxExtra), (int)"F:\\h2xsrc\\Editor\\OVERLAY.CPP", 1037); memset(sphinxMapExtra, 0, sizeof(SphinxExtra)); sphinxMapExtra->artifactReward = -1; tile->field_4_1_1_isShadow_1_13_extraInfo = tile->field_4_1_1_isShadow_1_13_extraInfo & 7 | 8 * gpEditManager->nMapExtra; gpEditManager->mapExtra[gpEditManager->nMapExtra] = sphinxMapExtra; gpEditManager->lenMapExtra[gpEditManager->nMapExtra++] = sizeof(SphinxExtra); } if ( (tile->objType == 183 || tile->objType == 251) && OverlayMaskBitSet(&ovr->interactionPointMask, xa, ya) ) { heroMapExtra = (HeroExtra *)BaseAlloc( sizeof(HeroExtra), (int)"F:\\h2xsrc\\Editor\\OVERLAY.CPP", 1058); memset(heroMapExtra, 0, sizeof(HeroExtra)); for ( ovrTileIdxb = 0; ovrTileIdxb < 5; ++ovrTileIdxb ) heroMapExtra->army.creatureTypes[ovrTileIdxb] = -1; for ( ovrTileIdxc = 0; ovrTileIdxc < 3; ++ovrTileIdxc ) heroMapExtra->artifacts[ovrTileIdxc] = -1; for ( ovrTileIdxd = 0; ovrTileIdxd < 8; ++ovrTileIdxd ) heroMapExtra->secondarySkills[ovrTileIdxd] = -1; if ( tile->objType == 251 ) faction = 0; else faction = tile->objectIndex % 7; if ( !faction ) { heroMapExtra->secondarySkills[0] = SECONDARY_SKILL_LEADERSHIP; heroMapExtra->secondarySkillLevel[0] = 1; heroMapExtra->secondarySkills[1] = SECONDARY_SKILL_BALLISTICS; heroMapExtra->secondarySkillLevel[1] = 1; } if ( faction == FACTION_SORCERESS ) { heroMapExtra->secondarySkills[0] = SECONDARY_SKILL_NAVIGATION; heroMapExtra->secondarySkillLevel[0] = 2; heroMapExtra->secondarySkills[1] = SECONDARY_SKILL_WISDOM; heroMapExtra->secondarySkillLevel[1] = 1; } if ( faction == FACTION_BARBARIAN ) { heroMapExtra->secondarySkills[0] = SECONDARY_SKILL_PATHFINDING; heroMapExtra->secondarySkillLevel[0] = 2; } if ( faction == FACTION_WARLOCK ) { heroMapExtra->secondarySkills[0] = SECONDARY_SKILL_SCOUTING; heroMapExtra->secondarySkillLevel[0] = 2; heroMapExtra->secondarySkills[1] = 7; heroMapExtra->secondarySkillLevel[1] = 1; } if ( faction == FACTION_WIZARD ) { heroMapExtra->secondarySkills[0] = SECONDARY_SKILL_WISDOM; heroMapExtra->secondarySkillLevel[0] = 2; } if ( faction == FACTION_NECROMANCER ) { heroMapExtra->secondarySkills[0] = SECONDARY_SKILL_NECROMANCY; heroMapExtra->secondarySkillLevel[0] = 1; heroMapExtra->secondarySkills[1] = SECONDARY_SKILL_WISDOM; heroMapExtra->secondarySkillLevel[1] = 1; } tile->field_4_1_1_isShadow_1_13_extraInfo = tile->field_4_1_1_isShadow_1_13_extraInfo & 7 | 8 * gpEditManager->nMapExtra; gpEditManager->mapExtra[gpEditManager->nMapExtra] = heroMapExtra; gpEditManager->lenMapExtra[gpEditManager->nMapExtra++] = sizeof(HeroExtra); } if ( tile->objType == 169 && (tile->objectIndex & 0xFE) == 172 ) tile->field_4_1_1_isShadow_1_13_extraInfo &= 7u; if ( tile->objType == 250 && OverlayMaskBitSet(&ovr->interactionPointMask, xa, ya) ) { switch ( ovr->idx ) { case 0x316: tile->field_4_1_1_isShadow_1_13_extraInfo &= 7u; break; case 0x317: v11 = tile->field_4_1_1_isShadow_1_13_extraInfo & 7; LOBYTE(v11) = v11 | 8; tile->field_4_1_1_isShadow_1_13_extraInfo = v11; break; case 0x31D: v12 = tile->field_4_1_1_isShadow_1_13_extraInfo & 7; LOBYTE(v12) = v12 | 0x10; tile->field_4_1_1_isShadow_1_13_extraInfo = v12; break; case 0x31E: v13 = tile->field_4_1_1_isShadow_1_13_extraInfo & 7; LOBYTE(v13) = v13 | 0x18; tile->field_4_1_1_isShadow_1_13_extraInfo = v13; break; case 0x32F: v14 = tile->field_4_1_1_isShadow_1_13_extraInfo & 7; LOBYTE(v14) = v14 | 0x20; tile->field_4_1_1_isShadow_1_13_extraInfo = v14; break; case 0x331: v15 = tile->field_4_1_1_isShadow_1_13_extraInfo & 7; LOBYTE(v15) = v15 | 0x28; tile->field_4_1_1_isShadow_1_13_extraInfo = v15; break; case 0x332: v16 = tile->field_4_1_1_isShadow_1_13_extraInfo & 7; LOBYTE(v16) = v16 | 0x30; tile->field_4_1_1_isShadow_1_13_extraInfo = v16; break; default: break; } } if ( tile->objType == 249 && OverlayMaskBitSet(&ovr->interactionPointMask, xa, ya) ) { switch ( ovr->idx ) { case 792: tile->field_4_1_1_isShadow_1_13_extraInfo &= 7u; break; case 793: v17 = tile->field_4_1_1_isShadow_1_13_extraInfo & 7; LOBYTE(v17) = v17 | 8; tile->field_4_1_1_isShadow_1_13_extraInfo = v17; break; case 794: v18 = tile->field_4_1_1_isShadow_1_13_extraInfo & 7; LOBYTE(v18) = v18 | 16; tile->field_4_1_1_isShadow_1_13_extraInfo = v18; break; case 795: v19 = tile->field_4_1_1_isShadow_1_13_extraInfo & 7; LOBYTE(v19) = v19 | 0x18; tile->field_4_1_1_isShadow_1_13_extraInfo = v19; break; case 796: v20 = tile->field_4_1_1_isShadow_1_13_extraInfo & 7; LOBYTE(v20) = v20 | 0x20; tile->field_4_1_1_isShadow_1_13_extraInfo = v20; break; default: break; } } if ( tile->objType == 247 && OverlayMaskBitSet(&ovr->interactionPointMask, xa, ya) ) tile->field_4_1_1_isShadow_1_13_extraInfo = tile->field_4_1_1_isShadow_1_13_extraInfo & 7 | 8 * (LOWORD(ovr->idx) - 799); if ( tile->objType == 248 && OverlayMaskBitSet(&ovr->interactionPointMask, xa, ya) ) tile->field_4_1_1_isShadow_1_13_extraInfo = tile->field_4_1_1_isShadow_1_13_extraInfo & 7 | 8 * (LOWORD(ovr->idx) - 807); if ( OverlayMaskBitSet(&ovr->resourceField, xa, ya) ) SetMineResourceIcon( &gOverlayDatabase[ovr->townColorOrMineColor + 128], left + xa, top + ya, 0); // Resource icons } } } } } } } if ( ovr->category == OVERLAY_CATEGORY_TOWN ) { PlaceOverlay(&gOverlayDatabase[2 * ovr->townColorOrMineColor + 134], left - 3, top - 1, 0); PlaceOverlay(&gOverlayDatabase[2 * ovr->townColorOrMineColor + 135], left - 1, top - 1, 0); } result = 1; } else { sprintf((char *)&gText, "Max mines, sawmills and alchemists on map (%d) has been reached.", 144); ShowErrorMessage((const char *)&gText); result = 0; } } else { sprintf((char *)&gText, "The ultimate artifact must be placed at least 9 squares in from map edge."); ShowErrorMessage((const char *)&gText); result = 0; } } else { sprintf((char *)&gText, "Max map events (%d) has been reached.", 50); ShowErrorMessage((const char *)&gText); result = 0; } } else { sprintf((char *)&gText, "Max towns on map (%d) has been reached.", 72); ShowErrorMessage((const char *)&gText); result = 0; } } else { LogStr("Invalid Placement"); ShowErrorMessage("Invalid Placement"); result = 0; } return result; } //----- (004224B9) -------------------------------------------------------- int __fastcall SetMineResourceIcon(overlay *ovr, int x, int y, int a4) { int result; // eax@8 signed int v5; // [sp+18h] [bp-4h]@1 v5 = 1; if ( a4 && ovr->field_42 & 1 && (*(&gpMap.tiles[x].objType + 20 * y * gpMap.width) != LOCATION_MINE || x < 1 || *(&gpMap.tiles[y * gpMap.width].objType + 5 * (4 * x - 4)) != 151) ) v5 = 0; if ( v5 ) { fullMap::ChangeTilesetIndex( &gpMap, &gpMap.tiles[y * gpMap.width] + x, x, y, TILESET_EXTRA_OVERLAY, ovr->fullGridIconIndices[47], 0, giCurOverlayIdx); result = 1; } else { ShowErrorMessage("Invalid Placement"); result = 0; } return result; } //----- (004225E6) -------------------------------------------------------- void __thiscall overlayManager::DrawOverlay(overlayManager *this, overlay *ovr, int xoff, int yoff, int a4, int width, int height, int draw, signed int a8, int a9) { int v10; // edx@15 IconEntry *icnEntry; // eax@32 int v13; // [sp+10h] [bp-24h]@4 int v14; // [sp+14h] [bp-20h]@6 int top; // [sp+20h] [bp-14h]@1 int left; // [sp+24h] [bp-10h]@1 int y; // [sp+28h] [bp-Ch]@18 int x; // [sp+2Ch] [bp-8h]@20 int sz; // [sp+30h] [bp-4h]@18 top = 6 - height; left = 8 - width; if ( ovr->category == OVERLAY_CATEGORY_TOWN ) { if ( ovr->idx < 835 || ovr->idx > 918 ) v13 = (((unsigned __int64)(ovr->idx - 939) >> 32) ^ (((unsigned __int8)((unsigned __int64)(ovr->idx - 939) >> 32) ^ (unsigned __int8)(LOBYTE(ovr->idx) + 85)) - (unsigned __int8)((unsigned __int64)(ovr->idx - 939) >> 32)) & 1) - ((unsigned __int64)(ovr->idx - 939) >> 32) + 941; else v13 = (ovr->idx - 835) % 12 + 919; v14 = 931; if ( a8 != -1 ) { if ( a8 < 2 ) a8 = 2; if ( a9 < 0 ) a9 = 0; if ( MAP_WIDTH - 1 < a8 ) a8 = MAP_WIDTH - 1; if ( MAP_HEIGHT - 1 < a9 ) a9 = MAP_HEIGHT - 1; v10 = *(__int16 *)((char *)&gpMap.tiles[a9 * gpMap.width].groundIndex + 5 * (4 * a8 - 8)); if ( gTileTerrainTypes[v10] ) v14 = gTileTerrainTypes[v10] + 930; } overlayManager::DrawOverlay(this, &gOverlayDatabase[v13], xoff, yoff, a4, width, height, 0, -1, -1); overlayManager::DrawOverlay(this, &gOverlayDatabase[v14], xoff, yoff, a4, width, height, 0, -1, -1); } sz = tileSizes[gpEditManager->zoomLevel]; for ( y = 6 - height; y < 6; ++y ) { for ( x = 8 - width; x < 8; ++x ) { if ( *(&ovr->fullGridIconIndices[8 * y] + x) != 255 && (!a4 || xoff + sz * (x - left) >= 16 && xoff + sz * (x - left + 1) <= 464 && yoff + sz * (y - top) >= 16 && yoff + sz * (y - top + 1) <= 464) ) { if ( ovr->tileset == TILESET_HERO ) sub_436460( gpEditManager->overlayIcons[ovr->tileset][0], gpWindowManager->screenBuffer, xoff + sz * (x - left), yoff + sz * (y - top) - 14 / dword_46B0D0[gpEditManager->zoomLevel], *(&ovr->fullGridIconIndices[8 * y] + x), a4, 16, 16, 0x1C0u, 448, dword_46B0E0[gpEditManager->zoomLevel]); else IconToBitmapScale( gpEditManager->overlayIcons[ovr->tileset][0], (int)gpWindowManager->screenBuffer, xoff + sz * (x - left), yoff + sz * (y - top), *(&ovr->fullGridIconIndices[8 * y] + x), a4, 16, 16, 448, 448, dword_46B0E0[gpEditManager->zoomLevel]); if ( OverlayMaskBitSet(&ovr->animatedLateOverlay, x, y) ) { icnEntry = GetIconEntry(gpEditManager->overlayIcons[ovr->tileset][0], *(&ovr->fullGridIconIndices[8 * y] + x)); IconToBitmapScale( gpEditManager->overlayIcons[ovr->tileset][0], (int)gpWindowManager->screenBuffer, xoff + sz * (x - left), yoff + sz * (y - top), gpEditManager->probablyAnimationTick % (icnEntry->someSortOfLength & 0x1F) + *(&ovr->fullGridIconIndices[8 * y] + x) + 1, a4, 16, 16, 448, 448, dword_46B0E0[gpEditManager->zoomLevel]); } if ( ovr->field_42 & 2 && OverlayMaskBitSet(&ovr->resourceField, x, y) ) IconToBitmapScale( gpEditManager->overlayIcons[29][0], (int)gpWindowManager->screenBuffer, xoff + sz * (x - left), yoff + sz * (y - top), ovr->townColorOrMineColor, a4, 16, 16, 448, 448, dword_46B0E0[gpEditManager->zoomLevel]); if ( ovr->category == 5 && x == 4 && y == 4 ) IconToBitmapScale( gpEditManager->overlayIcons[14][0], (int)gpWindowManager->screenBuffer, xoff + sz * (4 - left), yoff + sz * (4 - top), 2 * ovr->townColorOrMineColor, a4, 16, 16, 448, 448, dword_46B0E0[gpEditManager->zoomLevel]); if ( ovr->category == OVERLAY_CATEGORY_TOWN && x == 6 && y == 4 ) IconToBitmapScale( gpEditManager->overlayIcons[14][0], (int)gpWindowManager->screenBuffer, xoff + sz * (6 - left), yoff + sz * (4 - top), 2 * ovr->townColorOrMineColor + 1, a4, 16, 16, 448, 448, dword_46B0E0[gpEditManager->zoomLevel]); if ( draw ) heroWindowManager::UpdateScreenRegion(509, 194, 86, 70); } } } } // 46B0D0: using guessed type int dword_46B0D0[]; // 46B0E0: using guessed type int dword_46B0E0[]; // 46B100: using guessed type int tileSizes[]; //----- (00422C31) -------------------------------------------------------- int __thiscall overlayManager::PopulateAvailOverlays(overlayManager *this, int objType) { int k; // [sp+10h] [bp-9Ch]@9 OVERLAY_CONSTANTS i; // [sp+18h] [bp-94h]@1 int j; // [sp+18h] [bp-94h]@7 overlay tmp; // [sp+20h] [bp-8Ch]@12 int v7; // [sp+A4h] [bp-8h]@9 int v8; // [sp+A8h] [bp-4h]@1 this->nAvailOverlays = 0; v8 = 0; for ( i = 0; i < NUM_OVERLAYS; ++i ) { if ( gOverlayDatabase[i].category == gOverlayTypeCategories[objType] ) { if ( gOverlayDatabase[i].terrainObjCategoryMask & gObjTypeTerrains[objType] ) memcpy( &this->availOverlays[this->nAvailOverlays++], &gOverlayDatabase[i], sizeof(this->availOverlays[this->nAvailOverlays++])); } } for ( j = 0; ; ++j ) // bubble sort availOverlays in increasing order of field_8 { if ( this->nAvailOverlays > j ) { v7 = 0; for ( k = this->nAvailOverlays - 1; k > 0; --k ) { if ( this->availOverlays[k - 1].ordinal > this->availOverlays[k].ordinal ) { memcpy(&tmp, &this->availOverlays[k], 128u); *(_WORD *)&tmp.fullGridIconIndices[46] = *(_WORD *)&this->availOverlays[k].fullGridIconIndices[46];// still part of memcpy memcpy(&this->availOverlays[k], &this->availOverlays[k - 1], sizeof(this->availOverlays[k])); memcpy(&this->availOverlays[k - 1], &tmp, 0x80u); *(_WORD *)&this->availOverlays[k - 1].fullGridIconIndices[46] = *(_WORD *)&tmp.fullGridIconIndices[46]; v7 = 1; } } if ( v7 ) continue; } break; } return this->nAvailOverlays != 0; } //----- (00422E8D) -------------------------------------------------------- int __thiscall sub_422E8D(overlayManager *this, int a2) { int result; // eax@1 int a3; // [sp+10h] [bp-8h]@1 int a2a; // [sp+14h] [bp-4h]@3 this->field_1E5BE = 1; result = this->field_1E5BE; this->field_1E5C2 = result; for ( a3 = 0; a3 < 6; ++a3 ) { for ( a2a = 0; a2a < 8; ++a2a ) { result = OverlayMaskBitSet((__int64 *)(a2 + 17), a2a, a3); if ( result ) { if ( this->field_1E5BE < 8 - a2a ) this->field_1E5BE = 8 - a2a; result = (int)this; if ( this->field_1E5C2 < 6 - a3 ) { result = 6 - a3; this->field_1E5C2 = 6 - a3; } } } } return result; } //----- (00422F80) -------------------------------------------------------- signed int __thiscall sub_422F80(void *ecx0, int a2) { void *this; // [sp+Ch] [bp-34h]@1 int v4; // [sp+10h] [bp-30h]@6 int v5; // [sp+14h] [bp-2Ch]@6 int v6; // [sp+18h] [bp-28h]@6 int v7; // [sp+20h] [bp-20h]@6 int v8; // [sp+24h] [bp-1Ch]@6 int v9; // [sp+2Ch] [bp-14h]@6 int v10; // [sp+30h] [bp-10h]@6 int v11; // [sp+34h] [bp-Ch]@1 int j; // [sp+38h] [bp-8h]@3 int i; // [sp+3Ch] [bp-4h]@1 this = ecx0; v11 = giSelectedObjType; for ( i = 13; i >= 0; --i ) { giSelectedObjType = i; overlayManager::PopulateAvailOverlays((overlayManager *)this, i); for ( j = 0; *(_DWORD *)((char *)this + 124346) > j; ++j ) { if ( *(_DWORD *)((char *)this + 130 * j + 66) == gOverlayDatabase[a2].idx ) { giSelectedObj = j; DoNothing(); overlayManager::DrawSelection((overlayManager *)this, 1); gpEditManager->cursorX = -1; v4 = 4; mouseManager::MouseCoords(&v10, &v9); v5 = v10; v7 = v10; v6 = v9; v8 = v9; (*(void (__thiscall **)(void *, int *))(*(_DWORD *)this + 8))(this, &v4); return 1; } } } giSelectedObj = -1; giSelectedObjType = v11; return 0; } // 42FB60: using guessed type _DWORD __stdcall mouseManager__MouseCoords(_DWORD, _DWORD); // 485568: using guessed type int giSelectedObj; //----- (004230AC) -------------------------------------------------------- void __thiscall sub_4230AC(overlayManager *this, int draw) { overlay *ovr; // ST3C_4@25 char *v4; // [sp+1Ch] [bp-64h]@4 char cellFilled[9][9]; // [sp+20h] [bp-60h]@1 int row; // [sp+74h] [bp-Ch]@4 int col; // [sp+78h] [bp-8h]@4 int i; // [sp+7Ch] [bp-4h]@1 memset(cellFilled, 1, 0x51u); for ( i = 0; i + giOverlaySelectMaybeNumUnseen < this->nAvailOverlays && i < 81; ++i ) { v4 = (char *)&this->availOverlays[i + giOverlaySelectMaybeNumUnseen]; col = i % 9; row = i / 9; if ( this->availOverlays[i + giOverlaySelectMaybeNumUnseen].locationType == LOCATION_TOWN || this->availOverlays[i + giOverlaySelectMaybeNumUnseen].locationType == LOCATION_RANDOM_TOWN || this->availOverlays[i + giOverlaySelectMaybeNumUnseen].locationType == LOCATION_RANDOM_CASTLE ) { if ( this->availOverlays[i + giOverlaySelectMaybeNumUnseen].townColorOrMineColor == 6 ) cellFilled[col][row] = 1; else cellFilled[col][row] = this->availOverlays[i + giOverlaySelectMaybeNumUnseen].townColorOrMineColor + 2; } if ( v4[76] == 55 ) cellFilled[col][row] = (unsigned __int8)v4[129] / 7 + 2; } if ( giOverlaySelectNRows <= 9 ) this->slider->offsetY = 215; else this->slider->offsetY = (signed __int64)(393.0 / ((double)(giOverlaySelectNRows - 8) - 1.0) * (double)(giOverlaySelectMaybeNumUnseen / 9) + 19.0); heroWindow::DrawWindow((int)&this->selectionWindow->idx, 0); for ( col = 0; col < 9; ++col ) { for ( row = 0; row < 9; ++row ) icon::DrawToBuffer(69 * col, 53 * row, cellFilled[col][row], 0); } for ( i = 0; i + giOverlaySelectMaybeNumUnseen < this->nAvailOverlays && i < 81; ++i ) { ovr = &this->availOverlays[i + giOverlaySelectMaybeNumUnseen]; col = 69 * (i % 9) + 2; row = 53 * (i / 9) + 2; overlayManager::DrawAffectedTileGrid( this, 69 * (i % 9) + 2, row, 4, 3, &this->availOverlays[i] + giOverlaySelectMaybeNumUnseen, 0); overlayManager::DrawOverlay(this, ovr, col, row, 0, 4, 3, 0, -1, -1); } if ( draw ) heroWindowManager::UpdateScreen(gpWindowManager); } // 433510: using guessed type _DWORD __stdcall icon__DrawToBuffer(_DWORD, _DWORD, _DWORD, _DWORD); // 48556C: using guessed type int giOverlaySelectMaybeNumUnseen; // 48FD50: using guessed type int giOverlaySelectNRows; // 4230AC: using guessed type char cellFilled[84]; //----- (004233A2) -------------------------------------------------------- int __thiscall overlayManager::SelectObject(overlayManager *ecx0, int objType) { int neededBlanks; // [sp+14h] [bp-3Ch]@12 void *v5; // [sp+1Ch] [bp-34h]@7 void *buf; // [sp+20h] [bp-30h]@4 int oldCursorType; // [sp+28h] [bp-28h]@1 oldCursorType = gpEditManager->zoomLevel; if ( operator new(0x44u) ) ecx0->selectionWindow = heroWindow::heroWindow(0, 0, "editpalt.bin"); else ecx0->selectionWindow = 0; buf = (void *)operator new(0x2Du); if ( buf ) ecx0->scrollBar = (widget *)iconWidget::iconWidget(buf, 622, 16, 16, 416, "escroll.icn", 1, 0, 11, 16, 1); else ecx0->scrollBar = 0; v5 = (void *)operator new(0x2Du); if ( v5 ) ecx0->slider = (widget *)iconWidget::iconWidget(v5, 626, 19, 8, 17, "escroll.icn", 3, 0, 13, 16, 1); else ecx0->slider = 0; heroWindow::AddWidget(ecx0->selectionWindow, ecx0->scrollBar, -1); heroWindow::AddWidget(ecx0->selectionWindow, ecx0->slider, -1); gpEditManager->zoomLevel = 1; overlayManager::PopulateAvailOverlays(ecx0, objType); if ( giOverlaySelectMaybeNumUnseen + 81 >= ecx0->nAvailOverlays ) { if ( ecx0->nAvailOverlays % 9 ) neededBlanks = 9 - ecx0->nAvailOverlays % 9; else neededBlanks = 0; giOverlaySelectMaybeNumUnseen = neededBlanks + ecx0->nAvailOverlays - 81; } if ( giOverlaySelectMaybeNumUnseen < 0 ) giOverlaySelectMaybeNumUnseen = 0; giOverlaySelectNRows = (ecx0->nAvailOverlays - 1) / 9 + 1; inputManager::Flush(gpInputManager); heroWindowManager::AddWindow(ecx0->selectionWindow, -1, 0); sub_4230AC(ecx0, 1); heroWindowManager::DoDialog(gpWindowManager, ecx0->selectionWindow, sub_423649, 0); heroWindowManager::RemoveWindow(ecx0->selectionWindow); operator delete(ecx0->selectionWindow); inputManager::Flush(gpInputManager); gpEditManager->zoomLevel = oldCursorType; return dword_485570; } // 432040: using guessed type _DWORD __stdcall heroWindowManager__AddWindow(_DWORD, _DWORD, _DWORD); // 432100: using guessed type _DWORD __stdcall heroWindowManager__RemoveWindow(_DWORD); // 437610: using guessed type int __thiscall inputManager__Flush(_DWORD); // 48556C: using guessed type int giOverlaySelectMaybeNumUnseen; // 485570: using guessed type int dword_485570; // 48FD50: using guessed type int giOverlaySelectNRows; //----- (00423649) -------------------------------------------------------- signed int __thiscall sub_423649(int this) { return overlayManager::SelectOverlayMain(gpEditManager->toolManager, this); } //----- (00423673) -------------------------------------------------------- signed int __thiscall overlayManager::SelectOverlayMain(int ecx0, int a2) { signed int result; // eax@53 int v3; // [sp+Ch] [bp-28h]@35 int v4; // [sp+10h] [bp-24h]@16 int v5; // [sp+18h] [bp-1Ch]@2 int v6; // [sp+1Ch] [bp-18h]@1 int this; // [sp+20h] [bp-14h]@1 int v8; // [sp+24h] [bp-10h]@19 int v9; // [sp+28h] [bp-Ch]@19 signed int v10; // [sp+2Ch] [bp-8h]@1 signed int v11; // [sp+30h] [bp-4h]@1 this = ecx0; v11 = 0; v10 = 0; v6 = *(_DWORD *)a2; if ( v6 == 1 ) { v3 = *(_DWORD *)(a2 + 4); if ( v3 == 1 ) { dword_485570 = -1; v10 = 1; } else if ( v3 == 73 ) { giOverlaySelectMaybeNumUnseen -= 81; if ( giOverlaySelectMaybeNumUnseen < 0 ) giOverlaySelectMaybeNumUnseen = 0; v11 = 1; } else if ( v3 == 81 && *(_DWORD *)(ecx0 + 124346) >= 81 ) { giOverlaySelectMaybeNumUnseen += 81; if ( *(_DWORD *)(ecx0 + 124346) <= giOverlaySelectMaybeNumUnseen + 81 ) giOverlaySelectMaybeNumUnseen = *(_DWORD *)(ecx0 + 124346) + (9 - *(_DWORD *)(ecx0 + 124346) % 9) % 9 - 81; v11 = 1; } } else if ( v6 == 512 ) { v5 = *(_DWORD *)(a2 + 4); if ( v5 == 12 ) { v4 = *(_DWORD *)(a2 + 8); switch ( v4 ) { case 11: sub_423A53((void *)ecx0, 1, *(_DWORD *)(a2 + 16), *(_DWORD *)(a2 + 20)); break; case 13: sub_423A53((void *)ecx0, 0, -1, -1); break; case 110: v9 = *(_DWORD *)(a2 + 16) / 69; v8 = *(_DWORD *)(a2 + 20) / 53; if ( v9 < 9 ) { if ( v8 < 9 ) { if ( v9 >= 0 ) { if ( v8 >= 0 ) { dword_485570 = v9 + giOverlaySelectMaybeNumUnseen + 9 * v8; if ( *(_DWORD *)(ecx0 + 124346) > v9 + giOverlaySelectMaybeNumUnseen + 9 * v8 ) v10 = 1; } } } } break; } } else if ( v5 == 13 ) { switch ( *(_DWORD *)(a2 + 8) ) { case 0x64: giOverlaySelectMaybeNumUnseen -= 9; if ( giOverlaySelectMaybeNumUnseen < 0 ) giOverlaySelectMaybeNumUnseen = 0; v11 = 1; break; case 0x65: if ( *(_DWORD *)(ecx0 + 124346) >= 81 ) { if ( *(_DWORD *)(ecx0 + 124346) > giOverlaySelectMaybeNumUnseen + 81 ) giOverlaySelectMaybeNumUnseen += 9; v11 = 1; } break; case 0x66: giSelectedObjType = (giSelectedObjType + 13) % 14; goto LABEL_13; case 0x67: giSelectedObjType = (giSelectedObjType + 15) % 14; LABEL_13: giOverlaySelectMaybeNumUnseen = 0; giSelectedObj = 0; v11 = 1; overlayManager::PopulateAvailOverlays((overlayManager *)ecx0, giSelectedObjType); giOverlaySelectNRows = (*(_DWORD *)(this + 124346) - 1) / 9 + 1; break; default: break; } } } if ( v11 ) sub_4230AC((overlayManager *)this, 1); if ( v10 ) { gpWindowManager->buttonPressedCode = *(_DWORD *)(a2 + 8); *(_DWORD *)a2 = 512; *(_DWORD *)(a2 + 8) = 10; *(_DWORD *)(a2 + 4) = *(_DWORD *)(a2 + 8); result = 2; } else { result = 1; } return result; } // 485568: using guessed type int giSelectedObj; // 48556C: using guessed type int giOverlaySelectMaybeNumUnseen; // 485570: using guessed type int dword_485570; // 48FD50: using guessed type int giOverlaySelectNRows; //----- (00423A53) -------------------------------------------------------- void __thiscall sub_423A53(void *this, int a2, int a3, int a4) { void *v4; // [sp+18h] [bp-80h]@1 char v5; // [sp+1Ch] [bp-7Ch]@19 char retstr; // [sp+38h] [bp-60h]@10 int v7; // [sp+54h] [bp-44h]@11 int v8; // [sp+58h] [bp-40h]@4 int v9; // [sp+5Ch] [bp-3Ch]@4 int v10; // [sp+60h] [bp-38h]@4 char v11; // [sp+74h] [bp-24h]@8 int v12; // [sp+7Ch] [bp-1Ch]@11 double v13; // [sp+90h] [bp-8h]@2 v4 = this; if ( giOverlaySelectNRows > 9 ) { v13 = 402.0 / (double)(giOverlaySelectNRows - 8); if ( a3 == -1 ) mouseManager::MouseCoords(&a3, &a4); inputManager::Flush(gpInputManager); v8 = 4; v9 = a3; v10 = a4; while ( v8 != 16 && v8 != 64 ) { Process1WindowsMessage(); if ( v8 == 4 ) { memcpy(&v11, &v8, 0x1Cu); while ( v8 == 4 ) { memcpy(&v11, &v8, 0x1Cu); memcpy(&v8, inputManager::GetEvent(gpInputManager, (inputManager *)&retstr), 0x1Cu); } (*(void (__thiscall **)(mouseManager *, char *))(LODWORD(gpMouseManager->vtable) + 8))(gpMouseManager, &v11); v7 = (signed __int64)((double)(signed int)(signed __int64)((double)(v12 - 39) / v13) + 0.5); if ( v7 < 0 ) v7 = 0; if ( giOverlaySelectNRows - 9 < v7 ) v7 = giOverlaySelectNRows - 9; v7 *= 9; if ( giOverlaySelectMaybeNumUnseen != v7 ) { giOverlaySelectMaybeNumUnseen = v7; sub_4230AC((overlayManager *)v4, 1); } if ( a2 ) return; } else { memcpy(&v8, inputManager::GetEvent(gpInputManager, (inputManager *)&v5), 0x1Cu); } } } } // 42FB60: using guessed type _DWORD __stdcall mouseManager__MouseCoords(_DWORD, _DWORD); // 437610: using guessed type int __thiscall inputManager__Flush(_DWORD); // 48556C: using guessed type int giOverlaySelectMaybeNumUnseen; // 48FD50: using guessed type int giOverlaySelectNRows; //----- (00423C20) -------------------------------------------------------- int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { int result; // eax@3 struct tagMSG Msg; // [sp+Ch] [bp-20h]@8 DWORD v6; // [sp+28h] [bp-4h]@1 hInstApp = hInstance; gEventHandle = CreateEventA(0, 0, 0, "Heroes II Editor"); v6 = GetLastError(); if ( gEventHandle && v6 != 183 ) { memset(gcCommandLine, 0, 0x3Du); strncpy(gcCommandLine, lpCmdLine, 0x3Cu); if ( EarlySetup() ) { if ( AppInit(hInstance, (int)hPrevInstance, nShowCmd, (int)lpCmdLine) ) { while ( 1 ) { while ( !PeekMessageA(&Msg, 0, 0, 0, 1u) ) { if ( AppIdle() ) WaitMessage(); } if ( Msg.message == 18 ) break; TranslateMessage((const MSG *)&Msg); DispatchMessageA((const MSG *)&Msg); } ShutDown(0); result = Msg.wParam; } else { result = 0; } } else { result = 0; } } else { sprintf((char *)&gText, "Only one copy of %s may run at a time", "Heroes II Editor"); MessageBoxA(0, (LPCSTR)&gText, "Startup Error", 0x10u); result = 0; } return result; } //----- (00423D66) -------------------------------------------------------- signed int __fastcall AppInit(HINSTANCE a1, int a2, int nCmdShow, int a4) { int v4; // ST3C_4@1 signed int result; // eax@3 HWND v6; // eax@8 HICON v7; // eax@11 HCURSOR v8; // eax@13 HINSTANCE hInstance; // [sp+10h] [bp-40h]@1 struct tagRECT Rect; // [sp+18h] [bp-38h]@7 WNDCLASSA WndClass; // [sp+28h] [bp-28h]@2 v4 = a2; hInstance = a1; LogInt(-999, -999, -999, -999, -999, -999); memset(bProcessMessage, 0, 0x400u); byte_48FD81 = 1; byte_48FE80 = 1; byte_48FE81 = 1; byte_48FF80 = 1; byte_48FF81 = 1; byte_48FF83 = 1; byte_48FF84 = 1; byte_48FF86 = 1; byte_48FF82 = 1; byte_48FF85 = 1; byte_48FE93 = 1; byte_48FD9C = 1; byte_48FD94 = 1; byte_48FD83 = 1; byte_48FD85 = 1; byte_48FE91 = 1; byte_490091 = 1; byte_49008F = 1; byte_48FD8F = 1; byte_48FD82 = 1; byte_48FD92 = 1; byte_48FD90 = 1; byte_490139 = 1; if ( v4 || (WndClass.hCursor = 0, WndClass.hIcon = LoadIconA(hInstance, "Editor"), WndClass.lpszMenuName = 0, WndClass.lpszClassName = "Heroes II Editor", WndClass.hbrBackground = (HBRUSH)6, WndClass.hInstance = hInstance, WndClass.style = 4107, WndClass.lpfnWndProc = (WNDPROC)AppWndProc, WndClass.cbWndExtra = 0, WndClass.cbClsExtra = 0, RegisterClassA(&WndClass)) ) { if ( *(&bMenu + 7 * giCurExe) ) giCurWindowsStyleFlags = 349110272; else giCurWindowsStyleFlags = 335544320; Rect.top = 0; Rect.left = 0; Rect.right = *((_DWORD *)&dword_48EE30 + 7 * giCurExe) - 1; Rect.bottom = *((_DWORD *)&dword_48EE34 + 7 * giCurExe) - 1; AdjustWindowRect(&Rect, giCurWindowsStyleFlags, *(&bMenu + 7 * giCurExe)); if ( *(&bMenu + 7 * giCurExe) ) v6 = CreateWindowExA( 0, "Heroes II Editor", "Heroes II Editor", giCurWindowsStyleFlags, *((_DWORD *)&X + 7 * giCurExe), *((_DWORD *)&Y + 7 * giCurExe), Rect.right - Rect.left + 1, Rect.bottom - Rect.top + 1, 0, hmnuDflt, hInstance, 0); else v6 = CreateWindowExA( 0, "Heroes II Editor", "Heroes II Editor", giCurWindowsStyleFlags, *((_DWORD *)&X + 7 * giCurExe), *((_DWORD *)&Y + 7 * giCurExe), Rect.right - Rect.left + 1, Rect.bottom - Rect.top + 1, 0, 0, hInstance, 0); hwndApp = v6; if ( v6 ) { v7 = LoadIconA(hInstance, "Editor"); PostMessageA(hwndApp, 0x80u, 0, (LPARAM)v7); ShowWindow(hwndApp, nCmdShow); SetWindowLongA(hwndApp, -16, giCurWindowsStyleFlags); if ( !*(&bMenu + 7 * giCurExe) ) SetMenuStatus(0); InitGraphics(); v8 = LoadCursorA(0, (LPCSTR)0x7F00); SetCursor(v8); oldmain(); result = 1; } else { result = 0; } } else { result = 0; } return result; } // 435B20: using guessed type _DWORD __stdcall LogInt(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // 46AE34: using guessed type int giCurExe; // 48FD81: using guessed type char byte_48FD81; // 48FD82: using guessed type char byte_48FD82; // 48FD83: using guessed type char byte_48FD83; // 48FD85: using guessed type char byte_48FD85; // 48FD8F: using guessed type char byte_48FD8F; // 48FD90: using guessed type char byte_48FD90; // 48FD92: using guessed type char byte_48FD92; // 48FD94: using guessed type char byte_48FD94; // 48FD9C: using guessed type char byte_48FD9C; // 48FE80: using guessed type char byte_48FE80; // 48FE81: using guessed type char byte_48FE81; // 48FE91: using guessed type char byte_48FE91; // 48FE93: using guessed type char byte_48FE93; // 48FF80: using guessed type char byte_48FF80; // 48FF81: using guessed type char byte_48FF81; // 48FF82: using guessed type char byte_48FF82; // 48FF83: using guessed type char byte_48FF83; // 48FF84: using guessed type char byte_48FF84; // 48FF85: using guessed type char byte_48FF85; // 48FF86: using guessed type char byte_48FF86; // 49008F: using guessed type char byte_49008F; // 490091: using guessed type char byte_490091; // 490139: using guessed type char byte_490139; //----- (0042409F) -------------------------------------------------------- signed int __cdecl AppIdle() { return 1; } //----- (00424670) -------------------------------------------------------- signed int __stdcall AppAbout(HWND hDlg, int a2, __int16 a3, int a4) { signed int result; // eax@2 if ( a2 == 272 ) { result = 1; } else { if ( a2 == 273 ) { if ( a3 == 1 ) EndDialog(hDlg, 1); } PollSound(); result = 0; } return result; } //----- (00424929) -------------------------------------------------------- signed int __fastcall AppCommand(HWND a1, unsigned int a2, unsigned __int16 a3, __int32 a4) { signed int result; // eax@9 switch ( a3 ) { case 40053u: DialogBoxParamA(hInstApp, "EDITOR", a1, (DLGPROC)AppAbout, 0); goto LABEL_11; case 40052u: WinHelpA(hwndApp, ".\\HELP\\HEROES2.HLP", 0xBu, 0); goto LABEL_11; case 40005u: ResizeWindow(-1, -1, 640, 480); goto LABEL_11; case 40006u: ResizeWindow(-1, -1, 800, 600); goto LABEL_11; case 40007u: ResizeWindow(-1, -1, 1024, 768); goto LABEL_11; case 40008u: ResizeWindow(-1, -1, 1280, 1024); goto LABEL_11; case 40009u: SetFullScreenStatus((void *)(1 - *((_DWORD *)&dword_48EE38 + 7 * giCurExe))); LABEL_11: result = 0; break; default: result = sub_410C39((void *)a3); break; } return result; } // 4247E2: using guessed type void __fastcall ResizeWindow(_DWORD, _DWORD, _DWORD, _DWORD); // 46AE34: using guessed type int giCurExe; //----- (00424C43) -------------------------------------------------------- void __thiscall SetMenuStatus(BOOL this) { int v1; // ST1C_4@3 int v2; // ST20_4@3 if ( !*((_DWORD *)&dword_48EE38 + 7 * giCurExe) || !this ) { v1 = *((_DWORD *)&dword_48EE30 + 7 * giCurExe); v2 = *((_DWORD *)&dword_48EE34 + 7 * giCurExe); *(&bMenu + 7 * giCurExe) = this; KBChangeMenu(0); *((_DWORD *)&dword_48EE30 + 7 * giCurExe) = v1; *((_DWORD *)&dword_48EE34 + 7 * giCurExe) = v2; WritePrefs(); GetWindowLongA(hwndApp, -16); if ( *(&bMenu + 7 * giCurExe) ) giCurWindowsStyleFlags = 349110272; else giCurWindowsStyleFlags = 335544320; SetWindowLongA(hwndApp, -16, giCurWindowsStyleFlags); ShowWindow(hwndApp, 8); ResizeWindow(-1, -1, *((_DWORD *)&dword_48EE30 + 7 * giCurExe), *((_DWORD *)&dword_48EE34 + 7 * giCurExe)); } } // 4247E2: using guessed type void __fastcall ResizeWindow(_DWORD, _DWORD, _DWORD, _DWORD); // 424B97: using guessed type void __fastcall KBChangeMenu(void *); // 46AE34: using guessed type int giCurExe; //----- (00424D9F) -------------------------------------------------------- void __thiscall SetNoDialogMenus(void *this) { if ( !gbNoDialogMenusOn || this ) { if ( gbNoDialogMenusOn || !this ) { if ( hmnuApp ) { gbNoDialogMenusOn = 1 - (_DWORD)this; SetMenus(hmnuApp, (unsigned int)this); } } } } // 485828: using guessed type void *hmnuApp; // 485848: using guessed type int gbNoDialogMenusOn; //----- (00424E1A) -------------------------------------------------------- void __fastcall SetMenus(HMENU a1, unsigned int a2) { HMENU v2; // eax@4 unsigned int v3; // [sp+Ch] [bp-20h]@1 HMENU hMenu; // [sp+10h] [bp-1Ch]@1 UINT uIDEnableItem; // [sp+14h] [bp-18h]@3 signed int i; // [sp+18h] [bp-14h]@7 int nPos; // [sp+1Ch] [bp-10h]@1 int v8; // [sp+20h] [bp-Ch]@4 int v9; // [sp+24h] [bp-8h]@1 signed int v10; // [sp+28h] [bp-4h]@7 v3 = a2; hMenu = a1; v9 = GetMenuItemCount(a1); for ( nPos = 0; v9 > nPos; ++nPos ) { uIDEnableItem = GetMenuItemID(hMenu, nPos); if ( uIDEnableItem == -1 ) { v2 = GetSubMenu(hMenu, nPos); SetMenus(v2, v3); v8 = 0; } else if ( v3 ) { v8 = 1; } else { v10 = 0; for ( i = 0; i < 70; ++i ) { if ( *(struct SMenuEnableStatus **)((char *)&gsMenuEnableStatus + 7 * i) == (struct SMenuEnableStatus *)uIDEnableItem ) v10 = i; } if ( dword_46AEC8 ) v8 = 1 - (unsigned __int8)byte_46AED5[7 * v10]; else v8 = 1 - (unsigned __int8)byte_46AED4[7 * v10]; } if ( v8 ) EnableMenuItem(hMenu, uIDEnableItem, v3 < 1); } UpdateDfltMenu(hMenu); } // 424AC0: using guessed type void __fastcall UpdateDfltMenu(void *); // 46AEC8: using guessed type int dword_46AEC8; // 46AED0: using guessed type struct SMenuEnableStatus *gsMenuEnableStatus; //----- (00424FA0) -------------------------------------------------------- _DWORD __thiscall eventsManager::EditHero(eventsManager *this, int x, int y, int isJailed) { int result; // eax@43 tag_message evt; // [sp+1Ch] [bp-3Ch]@5 int k; // [sp+38h] [bp-20h]@10 int j; // [sp+3Ch] [bp-1Ch]@8 int i; // [sp+40h] [bp-18h]@6 char v9; // [sp+44h] [bp-14h]@1 gbModifyingJailedHero = isJailed; gpExaminedCell = &gpMap.tiles[y * gpMap.width] + x; memcpy(&v9, gpExaminedCell, 0x14u); memcpy( &gEditedHeroExtra, gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)], 0x4Cu); if ( operator new(0x44u) ) gpCellEditDialog = heroWindow::heroWindow(0, 0, "heroedit.bin"); else gpCellEditDialog = 0; SetWinText(gpCellEditDialog, 5); if ( gbModifyingJailedHero ) { evt.eventCode = 512; evt.xCoordOrKeycode = 3; evt.yCoordOrFieldID = 800; evt.payload = "Type"; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } evt.eventCode = 512; evt.xCoordOrKeycode = 56; for ( i = 0; i < 8; ++i ) { sprintf((char *)&gText, "-empty-"); evt.payload = &gText; evt.yCoordOrFieldID = i + 520; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); for ( j = 0; j < 3; ++j ) { for ( k = 0; k < 14; ++k ) { sprintf((char *)&gText, "%s %s", off_46CF88[j], off_46CF98[k]); evt.payload = &gText; evt.yCoordOrFieldID = i + 520; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } } } for ( i = 0; i < 5; ++i ) { sprintf((char *)&gText, "-empty-"); evt.payload = &gText; evt.yCoordOrFieldID = i + 220; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); for ( k = 0; k < 66; ++k ) { sprintf((char *)&gText, "%s", gArmyNames[k]); LOBYTE(gText) = (_BYTE)gText - 32; evt.payload = &gText; evt.yCoordOrFieldID = i + 220; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } } for ( i = 0; i < 3; ++i ) { sprintf((char *)&gText, "-empty-"); evt.payload = &gText; evt.yCoordOrFieldID = i + 308; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); for ( k = 0; k < 103; ++k ) { if ( k < 82 || k > 86 ) { sprintf((char *)&gText, "%s", gArtifactNames[k]); evt.eventCode = 512; evt.xCoordOrKeycode = 56; evt.payload = &gText; evt.yCoordOrFieldID = i + 308; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } } } if ( gbModifyingJailedHero ) { for ( k = 0; k < 6; ++k ) { sprintf((char *)&gText, (&off_46BEB8)[4 * k]); evt.eventCode = 512; evt.xCoordOrKeycode = 56; evt.yCoordOrFieldID = 803; evt.payload = &gText; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } } else { sprintf((char *)&gText, "Stand still"); evt.payload = &gText; evt.yCoordOrFieldID = 803; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); for ( k = 1; k <= 10; ++k ) { if ( k == 1 ) sprintf((char *)&gText, "Radius %d square", 1); else sprintf((char *)&gText, "Radius %d squares", k); evt.eventCode = 512; evt.xCoordOrKeycode = 56; evt.payload = &gText; evt.yCoordOrFieldID = 803; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } } FillInHeroEdit(&gEditedHeroExtra); heroWindowManager::DoDialog(gpWindowManager, gpCellEditDialog, (int (__thiscall *)(_DWORD))EditHeroHandler, 0); operator delete(gpCellEditDialog); if ( gpWindowManager->buttonPressedCode != 30721 ) { gpEditManager->setOnEventUpdate = 1; memcpy( gpEditManager->mapExtra[(unsigned __int8)((unsigned __int8)(gpExaminedCell->field_4_1_1_isShadow_1_13_extraInfo >> 8) >> -5)], &gEditedHeroExtra, 0x4Cu); } editManager::UpdateCursor(gpEditManager); RedrawEditPane(); return result; } // 46BFE0: using guessed type char *gArmyNames[133]; // 46CF88: using guessed type char *off_46CF88[3]; // 46CF98: using guessed type char *off_46CF98[25]; // 4901D4: using guessed type int gbModifyingJailedHero; //----- (004254E7) -------------------------------------------------------- int __stdcall FillInHeroEdit(HeroExtra *hextra) { tag_message evt; // [sp+10h] [bp-54h]@1 int i; // [sp+2Ch] [bp-38h]@7 char Dest; // [sp+30h] [bp-34h]@24 evt.eventCode = 512; evt.payload = (void *)4; evt.yCoordOrFieldID = 206; if ( hextra->field_1 ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 204; if ( hextra->field_1 ) evt.xCoordOrKeycode = 6; else evt.xCoordOrKeycode = 5; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); for ( i = 210; i <= 239; ++i ) { evt.yCoordOrFieldID = i; if ( hextra->field_1 ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } if ( gbModifyingJailedHero ) { evt.yCoordOrFieldID = 803; evt.xCoordOrKeycode = 5; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } else { evt.yCoordOrFieldID = 803; if ( hextra->field_28[19] ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } if ( gbModifyingJailedHero ) { evt.xCoordOrKeycode = 6; evt.yCoordOrFieldID = 802; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 801; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } else { evt.yCoordOrFieldID = 802; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } for ( i = 0; i < 5; ++i ) { sprintf(&Dest, "%d", hextra->army.quantities[i]); evt.xCoordOrKeycode = 3; evt.payload = &Dest; evt.yCoordOrFieldID = i + 230; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.xCoordOrKeycode = 54; evt.payload = (void *)(hextra->army.creatureTypes[i] + 1); evt.yCoordOrFieldID = i + 220; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } for ( i = 0; i < 3; ++i ) { evt.xCoordOrKeycode = 54; evt.payload = (void *)(hextra->artifacts[i] + 1); if ( hextra->artifacts[i] >= 82 ) evt.payload = (char *)evt.payload - 5; evt.yCoordOrFieldID = i + 308; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } evt.xCoordOrKeycode = 54; evt.payload = (void *)hextra->field_3C; evt.yCoordOrFieldID = 803; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf(&Dest, "%d", *(_DWORD *)&hextra->field_17); evt.xCoordOrKeycode = 3; evt.yCoordOrFieldID = 401; evt.payload = &Dest; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.payload = (void *)4; evt.yCoordOrFieldID = 506; if ( hextra->field_1B ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 504; if ( hextra->field_1B ) evt.xCoordOrKeycode = 6; else evt.xCoordOrKeycode = 5; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); for ( i = 510; i <= 529; ++i ) { evt.yCoordOrFieldID = i; if ( hextra->field_1B ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } for ( i = 0; i < 8; ++i ) { evt.xCoordOrKeycode = 54; evt.yCoordOrFieldID = i + 520; if ( hextra->secondarySkills[i] == -1 ) evt.payload = 0; else evt.payload = (void *)(hextra->secondarySkills[i] + 14 * (*(&hextra->secondarySkillLevel + i) - 1) + 1); heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } evt.payload = (void *)4; evt.yCoordOrFieldID = 606; if ( hextra->field_28[5] ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 604; if ( hextra->field_28[5] ) evt.xCoordOrKeycode = 6; else evt.xCoordOrKeycode = 5; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 607; if ( hextra->field_28[5] ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); sprintf(&Dest, "%s", &hextra->field_28[6]); evt.xCoordOrKeycode = 3; evt.yCoordOrFieldID = 607; evt.payload = &Dest; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.xCoordOrKeycode = 4; evt.yCoordOrFieldID = 702; if ( hextra->field_11 ) evt.payload = (void *)(hextra->field_12 + 1); else evt.payload = 0; return heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } // 4901D4: using guessed type int gbModifyingJailedHero; //----- (00425A7C) -------------------------------------------------------- signed int __thiscall EditHeroHandler(tag_message *this) { int v2; // [sp+10h] [bp-1Ch]@20 int v3; // [sp+14h] [bp-18h]@3 int v4; // [sp+18h] [bp-14h]@2 INPUT_EVENT_CODE evt; // [sp+1Ch] [bp-10h]@1 int v7; // [sp+24h] [bp-8h]@21 int v8; // [sp+24h] [bp-8h]@30 signed int v9; // [sp+28h] [bp-4h]@1 v9 = 0; evt = this->eventCode; if ( evt == 1 ) { if ( this->xCoordOrKeycode == 1 ) { this->eventCode = 512; this->yCoordOrFieldID = 10; this->xCoordOrKeycode = this->yCoordOrFieldID; return 2; } } else if ( evt == 512 ) { v4 = this->xCoordOrKeycode; if ( v4 == 12 ) { v2 = this->yCoordOrFieldID; if ( v2 > 224 ) { if ( v2 > 311 ) { if ( v2 > 504 ) { if ( v2 > 527 ) { switch ( v2 ) { case 802: gEditedHeroExtra.field_28[19] = 1 - gEditedHeroExtra.field_28[19]; v9 = 1; break; case 803: this->xCoordOrKeycode = 55; heroWindow::BroadcastMessage(gpCellEditDialog, this); gEditedHeroExtra.field_3C = LOBYTE(this->payload); v9 = 1; break; case 607: this->xCoordOrKeycode = 7; heroWindow::BroadcastMessage(gpCellEditDialog, this); strcpy(&gEditedHeroExtra.field_28[6], (const char *)this->payload); v9 = 1; break; case 603: case 604: gEditedHeroExtra.field_28[5] = 0; v9 = 1; break; case 605: case 606: gEditedHeroExtra.field_28[5] = 1; v9 = 1; break; default: break; } } else if ( v2 >= 520 ) { this->xCoordOrKeycode = 55; heroWindow::BroadcastMessage(gpCellEditDialog, this); if ( this->payload ) { byte_48FF9C[this->yCoordOrFieldID] = (signed int)((char *)this->payload - 1) % 14; byte_48FFA4[this->yCoordOrFieldID] = (signed int)((char *)this->payload - 1) / 14 + 1; } else { byte_48FF9C[this->yCoordOrFieldID] = -1; byte_48FFA4[this->yCoordOrFieldID] = 0; } v9 = 1; } else if ( v2 >= 505 && v2 <= 506 ) { gEditedHeroExtra.field_1B = 1; v9 = 1; } } else if ( v2 >= 503 ) { gEditedHeroExtra.field_1B = 0; v9 = 1; } else if ( v2 == 401 ) { this->xCoordOrKeycode = 7; heroWindow::BroadcastMessage(gpCellEditDialog, this); v8 = atoi((const char *)this->payload); if ( v8 < 0 ) v8 = 0; if ( v8 > 999999 ) v8 = 999999; *(_DWORD *)&gEditedHeroExtra.field_17 = v8; v9 = 1; } } else if ( v2 >= 308 ) { this->xCoordOrKeycode = 55; heroWindow::BroadcastMessage(gpCellEditDialog, this); if ( (signed int)((char *)this->payload - 1) >= 82 ) this->payload = (char *)this->payload + 5; byte_490067[this->yCoordOrFieldID] = (char)((char *)this->payload - 1); v9 = 1; } else if ( v2 >= 230 && v2 <= 234 ) { this->xCoordOrKeycode = 7; heroWindow::BroadcastMessage(gpCellEditDialog, this); v7 = atoi((const char *)this->payload); if ( v7 < 0 ) v7 = 0; if ( v7 > 9999 ) LOWORD(v7) = 9999; word_48FFC3[this->yCoordOrFieldID] = v7; v9 = 1; } } else if ( v2 >= 220 ) { this->xCoordOrKeycode = 55; heroWindow::BroadcastMessage(gpCellEditDialog, this); byte_4900AE[this->yCoordOrFieldID] = (char)((char *)this->payload - 1); v9 = 1; } else { switch ( v2 ) { case 203: case 204: gEditedHeroExtra.field_1 = 0; v9 = 1; break; case 205: case 206: gEditedHeroExtra.field_1 = 1; v9 = 1; break; default: break; } } } else if ( v4 == 13 ) { v3 = this->yCoordOrFieldID; if ( v3 <= 30722 ) { if ( v3 >= 30721 ) { gpWindowManager->buttonPressedCode = this->yCoordOrFieldID; this->eventCode = 512; this->yCoordOrFieldID = 10; this->xCoordOrKeycode = this->yCoordOrFieldID; return 2; } if ( v3 == 703 ) { if ( gEditedHeroExtra.field_11 ) { if ( gEditedHeroExtra.field_12 ) { --gEditedHeroExtra.field_12; } else { gEditedHeroExtra.field_12 = -1; gEditedHeroExtra.field_11 = 0; } v9 = 1; } } else if ( v3 == 704 ) { if ( gEditedHeroExtra.field_11 ) { if ( gEditedHeroExtra.field_12 < 70 ) ++gEditedHeroExtra.field_12; } else { gEditedHeroExtra.field_11 = 1; gEditedHeroExtra.field_12 = 0; } v9 = 1; } } } } if ( v9 ) { FillInHeroEdit(&gEditedHeroExtra); heroWindow::DrawWindow(); } return 1; } // 48FFC3: using guessed type __int16 word_48FFC3[]; //----- (00426180) -------------------------------------------------------- int __stdcall sub_426180(int a1) { size_t v1; // ST2C_4@5 void *v2; // ST28_4@5 memcpy(&unk_4901D8, gpEditManager->mapExtra[a1], 9u); dword_485988 = (char *)BaseAlloc(0x7D0u, (int)"F:\\h2xsrc\\Editor\\rumredit.cpp", 23); strcpy(dword_485988, (const char *)gpEditManager->mapExtra[a1] + 8); if ( operator new(0x44u) ) gpCellEditDialog = heroWindow::heroWindow(0, 0, "rumredit.bin"); else gpCellEditDialog = 0; SetWinText(gpCellEditDialog, 11); sub_42635C((int)&unk_4901D8); heroWindowManager::DoDialog(gpWindowManager, gpCellEditDialog, sub_4263A0, 0); operator delete(gpCellEditDialog); if ( gpWindowManager->buttonPressedCode != 30721 ) { v1 = strlen(dword_485988) + 9; v2 = BaseAlloc(v1, (int)"F:\\h2xsrc\\Editor\\rumredit.cpp", 43); memcpy(v2, &unk_4901D8, 9u); strcpy((char *)v2 + 8, dword_485988); BaseFree(gpEditManager->mapExtra[a1], "F:\\h2xsrc\\Editor\\rumredit.cpp", 47); gpEditManager->mapExtra[a1] = v2; gpEditManager->lenMapExtra[a1] = v1; BaseFree(dword_485988, "F:\\h2xsrc\\Editor\\rumredit.cpp", 51); dword_485988 = 0; gpEditManager->setOnEventUpdate = 1; } RedrawEditPane(); return gpWindowManager->buttonPressedCode; } //----- (0042635C) -------------------------------------------------------- int __stdcall sub_42635C(int a1) { tag_message evt; // [sp+10h] [bp-1Ch]@1 evt.eventCode = 512; evt.xCoordOrKeycode = 3; evt.payload = dword_485988; evt.yCoordOrFieldID = 120; return heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } //----- (004263A0) -------------------------------------------------------- signed int __thiscall sub_4263A0(int this) { signed int v2; // [sp+14h] [bp-3Ch]@3 int v3; // [sp+18h] [bp-38h]@2 int v4; // [sp+1Ch] [bp-34h]@1 tag_message evt; // [sp+24h] [bp-2Ch]@9 int v6; // [sp+44h] [bp-Ch]@1 v6 = 0; v4 = *(_DWORD *)this; if ( v4 == 1 ) { if ( *(_DWORD *)(this + 4) == 1 ) { *(_DWORD *)this = 512; *(_DWORD *)(this + 8) = 10; *(_DWORD *)(this + 4) = *(_DWORD *)(this + 8); return 2; } } else if ( v4 == 512 ) { v3 = *(_DWORD *)(this + 4); if ( v3 == 12 ) { if ( *(_DWORD *)(this + 8) == 120 ) { evt.eventCode = 512; evt.xCoordOrKeycode = 7; evt.yCoordOrFieldID = *(_DWORD *)(this + 8); heroWindow::BroadcastMessage(gpCellEditDialog, &evt); strcpy(dword_485988, (const char *)evt.payload); } } else if ( v3 == 13 ) { v2 = *(_DWORD *)(this + 8); if ( v2 >= 30721 && v2 <= 30722 ) { gpWindowManager->buttonPressedCode = *(_DWORD *)(this + 8); *(_DWORD *)this = 512; *(_DWORD *)(this + 8) = 10; *(_DWORD *)(this + 4) = *(_DWORD *)(this + 8); return 2; } } } if ( v6 ) { sub_42635C((int)&unk_4901D8); heroWindow::DrawWindow(); } return 1; } //----- (00426580) -------------------------------------------------------- _DWORD __thiscall eventsManager::EditSphinx(eventsManager *this, int a2) { size_t v2; // ST2C_4@14 void *v3; // ST28_4@14 tag_message evt; // [sp+24h] [bp-28h]@4 int i; // [sp+40h] [bp-Ch]@4 ResetPlayerAvailability(); memcpy(&curSphinxExtra, gpEditManager->mapExtra[a2], 137u); curRiddleText = (char *)BaseAlloc(2000u, (int)"F:\\h2xsrc\\Editor\\ridledit.cpp", 18); strcpy(curRiddleText, (const char *)gpEditManager->mapExtra[a2] + 136); if ( operator new(0x44u) ) gpCellEditDialog = heroWindow::heroWindow(0, 0, "ridledit.bin"); else gpCellEditDialog = 0; SetWinText(gpCellEditDialog, 10); evt.eventCode = 512; evt.xCoordOrKeycode = 56; sprintf((char *)&gText, "-none-"); evt.payload = &gText; evt.yCoordOrFieldID = 301; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); for ( i = 0; i < 103; ++i ) { if ( i < 82 || i > 86 ) { sprintf((char *)&gText, "%s", gArtifactNames[i]); evt.payload = &gText; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } } for ( i = 0; curSphinxExtra.numAnswers > i; ++i ) { evt.eventCode = 512; evt.yCoordOrFieldID = 410; evt.xCoordOrKeycode = 56; evt.payload = curSphinxExtra.answers[i]; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } sub_42686D(&curSphinxExtra); heroWindowManager::DoDialog(gpWindowManager, gpCellEditDialog, (int (__thiscall *)(_DWORD))EditSphinxHandler, 0); operator delete(gpCellEditDialog); if ( gpWindowManager->buttonPressedCode != 30721 ) { v2 = strlen(curRiddleText) + 137; v3 = BaseAlloc(v2, (int)"F:\\h2xsrc\\Editor\\ridledit.cpp", 69); memcpy(v3, &curSphinxExtra, 0x89u); strcpy((char *)v3 + 136, curRiddleText); BaseFree(gpEditManager->mapExtra[a2], "F:\\h2xsrc\\Editor\\ridledit.cpp", 74); gpEditManager->mapExtra[a2] = v3; gpEditManager->lenMapExtra[a2] = v2; BaseFree(curRiddleText, "F:\\h2xsrc\\Editor\\ridledit.cpp", 80); curRiddleText = 0; gpEditManager->setOnEventUpdate = 1; } RedrawEditPane(); return gpWindowManager->buttonPressedCode; } //----- (0042686D) -------------------------------------------------------- int __stdcall sub_42686D(SphinxExtra *sphinx) { tag_message evt; // [sp+10h] [bp-58h]@1 int i; // [sp+2Ch] [bp-3Ch]@1 char Dest; // [sp+30h] [bp-38h]@1 int v5; // [sp+64h] [bp-4h]@9 evt.eventCode = 512; evt.xCoordOrKeycode = 3; evt.payload = &Dest; for ( i = 0; i < 7; ++i ) { sprintf(&Dest, "%d", curSphinxExtra.resourceReward[i]); evt.yCoordOrFieldID = i + 200; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } evt.payload = curRiddleText; evt.yCoordOrFieldID = 120; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.xCoordOrKeycode = 54; evt.payload = (void *)(curSphinxExtra.artifactReward + 1); if ( curSphinxExtra.artifactReward >= 82 ) evt.payload = (char *)evt.payload - 5; evt.yCoordOrFieldID = 301; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.eventCode = 512; evt.xCoordOrKeycode = 55; evt.yCoordOrFieldID = 410; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); if ( evt.payload == (void *)-1 && (signed int)curSphinxExtra.numAnswers > 0 ) { evt.eventCode = 512; evt.xCoordOrKeycode = 54; evt.yCoordOrFieldID = 410; evt.payload = 0; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } v5 = evt.payload == (void *)-1; if ( evt.payload == (void *)-1 ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; evt.payload = (void *)4096; evt.yCoordOrFieldID = 430; return heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } //----- (00426A0D) -------------------------------------------------------- signed int __thiscall EditSphinxHandler(tag_message *evt2) { int v2; // [sp+14h] [bp-A4h]@3 int v3; // [sp+18h] [bp-A0h]@2 INPUT_EVENT_CODE v4; // [sp+1Ch] [bp-9Ch]@1 char Source; // [sp+24h] [bp-94h]@5 void *v7; // [sp+88h] [bp-30h]@9 int v8; // [sp+90h] [bp-28h]@1 tag_message evt; // [sp+9Ch] [bp-1Ch]@1 v8 = 0; evt.eventCode = 512; evt.xCoordOrKeycode = 7; evt.yCoordOrFieldID = evt2->yCoordOrFieldID; v4 = evt2->eventCode; if ( v4 == 1 ) { if ( evt2->xCoordOrKeycode == 1 ) { evt2->eventCode = 512; evt2->yCoordOrFieldID = 10; evt2->xCoordOrKeycode = evt2->yCoordOrFieldID; return 2; } } else if ( v4 == 512 ) { v3 = evt2->xCoordOrKeycode; if ( v3 == 12 ) { v8 = 1; switch ( evt2->yCoordOrFieldID ) { case 0x78: heroWindow::BroadcastMessage(gpCellEditDialog, &evt); strcpy(curRiddleText, (const char *)evt.payload); break; case 0x12D: evt2->xCoordOrKeycode = 55; heroWindow::BroadcastMessage(gpCellEditDialog, evt2); if ( (signed int)((char *)evt2->payload - 1) >= 82 ) evt2->payload = (char *)evt2->payload + 5; curSphinxExtra.artifactReward = (__int16)((char *)evt2->payload - 1); v8 = 1; break; case 0xC8: case 0xC9: case 0xCA: case 0xCB: case 0xCC: case 0xCD: case 0xCE: heroWindow::BroadcastMessage(gpCellEditDialog, &evt); dword_48FEC9[evt2->yCoordOrFieldID] = atoi((const char *)evt.payload); break; default: v8 = 0; break; } } else if ( v3 == 13 ) { v2 = evt2->yCoordOrFieldID; if ( v2 > 430 ) { if ( v2 >= 30721 && v2 <= 30722 ) { gpWindowManager->buttonPressedCode = evt2->yCoordOrFieldID; evt2->eventCode = 512; evt2->yCoordOrFieldID = 10; evt2->xCoordOrKeycode = evt2->yCoordOrFieldID; return 2; } } else if ( v2 == 430 ) { evt.eventCode = 512; evt.xCoordOrKeycode = 55; evt.yCoordOrFieldID = 410; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); v7 = evt.payload; if ( evt.payload != (void *)-1 ) { evt.xCoordOrKeycode = 58; evt.payload = v7; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); v8 = 1; } } else if ( v2 == 420 ) { Source = 0; if ( (signed int)curSphinxExtra.numAnswers < 8 ) { GetDataEntry( "Please enter the answer.\n\n\nNotes:\n1) Only the first 4 characters are used in checking the answer.\n\n2) Any combination of letters, numbers, and punctuations is ok.\n\n3) The answer comparison is not case sensitive.\n\n4) A user entry matching any answer on the list is ok.", &Source, 11, 0, 0, 1); strcpy(curSphinxExtra.answers[curSphinxExtra.numAnswers], &Source); ++curSphinxExtra.numAnswers; evt.eventCode = 512; evt.xCoordOrKeycode = 56; evt.payload = &Source; evt.yCoordOrFieldID = 410; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); v8 = 1; } else { NormalDialog("Sorry, you have already entered the maximum number of answers.", 1, -1, -1, -1, 0, -1, 0, -1, 0); } } } } if ( v8 ) { sub_42686D(&curSphinxExtra); heroWindow::DrawWindow(); } return 1; } // 48FEC9: using guessed type int dword_48FEC9[]; //----- (00426F00) -------------------------------------------------------- _DWORD __thiscall eventsManager::EditEvent(eventsManager *this, int mapExtraIdx) { size_t v2; // ST2C_4@26 void *v3; // ST28_4@26 tag_message evt; // [sp+24h] [bp-28h]@4 int i; // [sp+40h] [bp-Ch]@4 int j; // [sp+48h] [bp-4h]@13 ResetPlayerAvailability(); memcpy(&curEventMapExtra, gpEditManager->mapExtra[mapExtraIdx], 50u); gpCurEvtDataThingy = (char *)BaseAlloc(0x7D0u, (int)"F:\\h2xsrc\\Editor\\evntedit.cpp", 24); strcpy(gpCurEvtDataThingy, (const char *)gpEditManager->mapExtra[mapExtraIdx] + 49); if ( operator new(sizeof(heroWindow)) ) gpCellEditDialog = heroWindow::heroWindow(0, 0, "evntedit.bin"); else gpCellEditDialog = 0; SetWinText(gpCellEditDialog, 4); evt.eventCode = INPUT_GUI_MESSAGE_CODE; evt.xCoordOrKeycode = GUI_MESSAGE_DROPLIST_ADD; sprintf((char *)&gText, "-none-"); evt.payload = &gText; evt.yCoordOrFieldID = 301; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); for ( i = 0; i < 103; ++i ) { if ( i < 82 || i > 86 ) { sprintf((char *)&gText, "%s", gArtifactNames[i]); evt.payload = &gText; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } } evt.yCoordOrFieldID = 430; for ( i = 0; i < 11; ++i ) { sprintf((char *)&gText, "%s", off_46B4E0[i]); evt.payload = &gText; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } evt.eventCode = 512; evt.payload = (void *)4; for ( j = 300; j < 304; ++j ) { evt.yCoordOrFieldID = j; if ( curEventMapExtra.field_0 ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } for ( j = 400; j < 479; ++j ) { evt.yCoordOrFieldID = j; if ( curEventMapExtra.field_0 ) evt.xCoordOrKeycode = 6; else evt.xCoordOrKeycode = 5; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } sub_427299(&curEventMapExtra); heroWindowManager::DoDialog(gpWindowManager, gpCellEditDialog, sub_427563, 0); operator delete(gpCellEditDialog); if ( gpWindowManager->buttonPressedCode != 30721 ) { v2 = strlen(gpCurEvtDataThingy) + 50; v3 = BaseAlloc(v2, (int)"F:\\h2xsrc\\Editor\\evntedit.cpp", 92); memcpy(v3, &curEventMapExtra, 0x32u); strcpy((char *)v3 + 49, gpCurEvtDataThingy); BaseFree(gpEditManager->mapExtra[mapExtraIdx], "F:\\h2xsrc\\Editor\\evntedit.cpp", 97); gpEditManager->mapExtra[mapExtraIdx] = v3; gpEditManager->lenMapExtra[mapExtraIdx] = v2; BaseFree(gpCurEvtDataThingy, "F:\\h2xsrc\\Editor\\evntedit.cpp", 103); gpCurEvtDataThingy = 0; gpEditManager->setOnEventUpdate = 1; } RedrawEditPane(); return gpWindowManager->buttonPressedCode; } // 46B4E0: using guessed type char *off_46B4E0[11]; //----- (00427299) -------------------------------------------------------- int __stdcall sub_427299(EventExtra *eventMapExtra) { tag_message evt; // [sp+10h] [bp-54h]@1 int i; // [sp+2Ch] [bp-38h]@1 char Dest; // [sp+30h] [bp-34h]@21 evt.eventCode = 512; evt.payload = (void *)4; for ( i = 0; i < 6; ++i ) { evt.yCoordOrFieldID = i + 460; if ( gpMapHeader.hasPlayer[i] ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = i + 470; if ( gpMapHeader.hasPlayer[i] && eventMapExtra->colorCanSee[i] ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } evt.yCoordOrFieldID = 304; if ( curEventMapExtra.field_0 && eventMapExtra->cancelAfterFirstVisit ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 307; if ( eventMapExtra->field_1F ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 442; if ( eventMapExtra->field_2A ) evt.xCoordOrKeycode = 5; else evt.xCoordOrKeycode = 6; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.xCoordOrKeycode = 3; evt.payload = &Dest; for ( i = 0; i < 7; ++i ) { sprintf(&Dest, "%d", curEventMapExtra.resourceReward[i]); evt.yCoordOrFieldID = i + 200; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } sprintf(&Dest, "%d", *(unsigned __int16 *)&curEventMapExtra.field_21); evt.yCoordOrFieldID = 410; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.payload = gpCurEvtDataThingy; evt.yCoordOrFieldID = 120; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.xCoordOrKeycode = 54; evt.payload = (void *)(curEventMapExtra.artifactReward + 1); if ( curEventMapExtra.artifactReward >= 82 ) evt.payload = (char *)evt.payload - 5; evt.yCoordOrFieldID = 301; heroWindow::BroadcastMessage(gpCellEditDialog, &evt); evt.yCoordOrFieldID = 430; if ( (signed int)*(unsigned __int16 *)&curEventMapExtra.field_23 <= 7 ) evt.payload = (void *)*(unsigned __int16 *)&curEventMapExtra.field_23; else evt.payload = (void *)(*(unsigned __int16 *)&curEventMapExtra.field_23 / 7 + 6); return heroWindow::BroadcastMessage(gpCellEditDialog, &evt); } //----- (00427563) -------------------------------------------------------- signed int __thiscall sub_427563(int this) { signed int v2; // [sp+10h] [bp-44h]@8 signed int v3; // [sp+14h] [bp-40h]@3 int v4; // [sp+18h] [bp-3Ch]@2 int v5; // [sp+1Ch] [bp-38h]@1 int v6; // [sp+20h] [bp-34h]@1 signed int v7; // [sp+2Ch] [bp-28h]@1 tag_message evt; // [sp+38h] [bp-1Ch]@1 v6 = this; v7 = 0; evt.eventCode = 512; evt.xCoordOrKeycode = 7; evt.yCoordOrFieldID = *(_DWORD *)(this + 8); v5 = *(_DWORD *)this; if ( v5 == 1 ) { if ( *(_DWORD *)(this + 4) == 1 ) { *(_DWORD *)this = 512; *(_DWORD *)(this + 8) = 10; *(_DWORD *)(this + 4) = *(_DWORD *)(this + 8); return 2; } } else if ( v5 == 512 ) { v4 = *(_DWORD *)(this + 4); if ( v4 == 12 ) { v7 = 1; v2 = *(_DWORD *)(this + 8); if ( v2 > 206 ) { switch ( v2 ) { case 304: curEventMapExtra.cancelAfterFirstVisit = 1 - curEventMapExtra.cancelAfterFirstVisit; break; case 307: curEventMapExtra.field_1F = 1 - curEventMapExtra.field_1F; break; case 442: curEventMapExtra.field_2A = 1 - curEventMapExtra.field_2A; break; case 470: case 471: case 472: case 473: case 474: case 475: curEventMapExtra.colorCanSee[*(_DWORD *)(this + 8) - 470] = 1 - curEventMapExtra.colorCanSee[*(_DWORD *)(this + 8) - 470]; break; case 301: *(_DWORD *)(this + 4) = 55; heroWindow::BroadcastMessage(gpCellEditDialog, (tag_message *)this); if ( *(_DWORD *)(v6 + 24) - 1 >= 82 ) *(_DWORD *)(v6 + 24) += 5; curEventMapExtra.artifactReward = *(_DWORD *)(v6 + 24) - 1; v7 = 1; break; case 430: *(_DWORD *)(this + 4) = 55; heroWindow::BroadcastMessage(gpCellEditDialog, (tag_message *)this); if ( *(_DWORD *)(v6 + 24) <= 7 ) *(_WORD *)&curEventMapExtra.field_23 = *(_DWORD *)(v6 + 24); else *(_WORD *)&curEventMapExtra.field_23 = 7 * (*(_WORD *)(v6 + 24) - 6); break; case 410: heroWindow::BroadcastMessage(gpCellEditDialog, &evt); *(_WORD *)&curEventMapExtra.field_21 = atoi((const char *)evt.payload); break; default: goto LABEL_23; } } else if ( v2 >= 200 ) { heroWindow::BroadcastMessage(gpCellEditDialog, &evt); dword_48FF59[*(_DWORD *)(v6 + 8)] = atoi((const char *)evt.payload); } else if ( v2 == 120 ) { heroWindow::BroadcastMessage(gpCellEditDialog, &evt); strcpy(gpCurEvtDataThingy, (const char *)evt.payload); } else { LABEL_23: v7 = 0; } } else if ( v4 == 13 ) { v3 = *(_DWORD *)(this + 8); if ( v3 >= 30721 && v3 <= 30722 ) { gpWindowManager->buttonPressedCode = *(_DWORD *)(this + 8); *(_DWORD *)this = 512; *(_DWORD *)(this + 8) = 10; *(_DWORD *)(this + 4) = *(_DWORD *)(this + 8); return 2; } } } if ( v7 ) { sub_427299(&curEventMapExtra); heroWindow::DrawWindow(); } return 1; } // 48FF59: using guessed type int dword_48FF59[]; //----- (004279F6) -------------------------------------------------------- void __thiscall fullMap::_fullMap(fullMap *this) { fullMap::Close(this); } //----- (00427A14) -------------------------------------------------------- void __thiscall fullMap::Close(fullMap *this) { if ( this->tiles ) operator delete(this->tiles); this->tiles = 0; if ( this->cellExtras ) operator delete(this->cellExtras); this->cellExtras = 0; this->numCellExtras = 0; } //----- (00427A95) -------------------------------------------------------- void __thiscall fullMap::Reset(fullMap *this, int width, int height) { signed int i; // [sp+10h] [bp-4h]@1 this->width = width; this->height = height; fullMap::Close(this); this->tiles = (mapCell *)operator new(sizeof(mapCell) * this->height * this->width); this->cellExtras = (mapCellExtra *)operator new(0xEFFF1u); this->numCellExtras = 65535; for ( i = 0; i < 65535; ++i ) this->cellExtras[i].nextIdx = -1; } //----- (00427B3B) -------------------------------------------------------- mapCellExtra *__thiscall fullMap::ClearCellExtra(fullMap *this, int i) { mapCellExtra *result; // eax@1 this->cellExtras[i]._1_animatedObject_7_objTileset &= 1u; this->cellExtras[i].objectIndex = -1; this->cellExtras[i]._1_animatedObject_7_objTileset &= 0xFEu; this->cellExtras[i].field_4_1_1_1_isShadow_5 &= 0xFEu; this->cellExtras[i].field_4_1_1_1_isShadow_5 &= 0xFDu; this->cellExtras[i].field_4_1_1_1_isShadow_5 &= 0xFBu; this->cellExtras[i]._1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset &= 3u; this->cellExtras[i].overlayIndex = -1; this->cellExtras[i]._1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset &= 0xFEu; this->cellExtras[i]._1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset &= 0xFDu; this->cellExtras[i].nextIdx = 0; this->cellExtras[i].objLink = 0; result = this->cellExtras; result[i].ovrLink = 0; return result; } //----- (00427C5E) -------------------------------------------------------- void *__thiscall fullMap::Clone(fullMap *this, fullMap *oth) { operator delete(this->cellExtras); this->numCellExtras = oth->numCellExtras; this->cellExtras = (mapCellExtra *)operator new(sizeof(mapCellExtra) * this->numCellExtras); memcpy(this->tiles, oth->tiles, sizeof(mapCell) * this->height * this->width); return memcpy(this->cellExtras, oth->cellExtras, 15 * this->numCellExtras); } //----- (00427D03) -------------------------------------------------------- int __thiscall fullMap::GetNewCellExtraIndex(fullMap *this) { void *v2; // ST2C_4@6 int i; // [sp+18h] [bp-Ch]@1 int j; // [sp+1Ch] [bp-8h]@6 for ( i = 1; this->numCellExtras > i; ++i ) { if ( this->cellExtras[i].nextIdx == 65535 ) { fullMap::ClearCellExtra(this, i); return i; } } v2 = (void *)operator new(5 * (3 * this->numCellExtras + 300)); memcpy(v2, this->cellExtras, sizeof(mapCellExtra) * this->numCellExtras); operator delete(this->cellExtras); this->cellExtras = (mapCellExtra *)v2; for ( j = this->numCellExtras; this->numCellExtras + 100 > j; ++j ) this->cellExtras[j].nextIdx = -1; this->numCellExtras += 100; fullMap::ClearCellExtra(this, this->numCellExtras - 100); return this->numCellExtras - 100; } //----- (00427E30) -------------------------------------------------------- mapCellExtra *__thiscall fullMap::GetNewCellExtraOverlay(fullMap *this, int a2, int a3) { mapCellExtra *result; // eax@2 __int16 v4; // ax@7 mapCellExtra *v5; // ST1C_4@7 int v7; // [sp+18h] [bp-8h]@3 mapCellExtra *i; // [sp+1Ch] [bp-4h]@3 if ( *(&this->tiles[a3 * this->width].extraIdx + 10 * a2) ) { v7 = *(&this->tiles[a3 * this->width].extraIdx + 10 * a2); for ( i = &this->cellExtras[*(&this->tiles[a3 * this->width].extraIdx + 10 * a2)]; ; i = &this->cellExtras[i->nextIdx] ) { if ( i->overlayIndex == 255 ) return i; if ( !i->nextIdx ) break; v7 = i->nextIdx; } v4 = fullMap::GetNewCellExtraIndex(this); v5 = &this->cellExtras[v7]; v5->nextIdx = v4; result = &this->cellExtras[v5->nextIdx]; } else { *(&this->tiles[a3 * this->width].extraIdx + 10 * a2) = fullMap::GetNewCellExtraIndex(this); result = &this->cellExtras[*(&this->tiles[a3 * this->width].extraIdx + 10 * a2)]; } return result; } //----- (0042800C) -------------------------------------------------------- mapCellExtra *__thiscall fullMap::GetNewCellExtraObject(fullMap *this, int a2, int a3) { mapCellExtra *result; // eax@2 __int16 v4; // ax@7 mapCellExtra *v5; // ST1C_4@7 int v7; // [sp+18h] [bp-8h]@3 mapCellExtra *extra; // [sp+1Ch] [bp-4h]@3 if ( *(&this->tiles[a2].extraIdx + 10 * a3 * this->width) ) { v7 = *(&this->tiles[a2].extraIdx + 10 * a3 * this->width); for ( extra = &this->cellExtras[*(&this->tiles[a2].extraIdx + 10 * a3 * this->width)]; ; extra = &this->cellExtras[extra->nextIdx] ) { if ( extra->objectIndex == 255 ) return extra; if ( !extra->nextIdx ) break; v7 = extra->nextIdx; } v4 = fullMap::GetNewCellExtraIndex(this); v5 = &this->cellExtras[v7]; v5->nextIdx = v4; result = &this->cellExtras[v5->nextIdx]; } else { *(&this->tiles[a2].extraIdx + 10 * a3 * this->width) = fullMap::GetNewCellExtraIndex(this); result = &this->cellExtras[*(&this->tiles[a2].extraIdx + 10 * a3 * this->width)]; } return result; } //----- (004281E0) -------------------------------------------------------- void __thiscall fullMap::RemoveCellExtra(fullMap *this, int idx) { int nextIdx; // ecx@1 mapCellExtra *nextCellExtra; // [sp+10h] [bp-Ch]@3 mapCellExtra *cellExtra; // [sp+18h] [bp-4h]@1 cellExtra = &this->cellExtras[idx]; nextIdx = cellExtra->nextIdx; if ( cellExtra->nextIdx && this->cellExtras[nextIdx].objectIndex != 255 ) { nextCellExtra = &this->cellExtras[nextIdx]; cellExtra->objLink = nextCellExtra->objLink; cellExtra->_1_animatedObject_7_objTileset = cellExtra->_1_animatedObject_7_objTileset & 1 | 2 * ((unsigned __int8)nextCellExtra->_1_animatedObject_7_objTileset >> 1); cellExtra->objectIndex = nextCellExtra->objectIndex; cellExtra->_1_animatedObject_7_objTileset = cellExtra->_1_animatedObject_7_objTileset & 0xFE | nextCellExtra->_1_animatedObject_7_objTileset & 1; cellExtra->field_4_1_1_1_isShadow_5 = cellExtra->field_4_1_1_1_isShadow_5 & 0xFE | nextCellExtra->field_4_1_1_1_isShadow_5 & 1; cellExtra->field_4_1_1_1_isShadow_5 = cellExtra->field_4_1_1_1_isShadow_5 & 0xFD | 2 * (((unsigned __int8)nextCellExtra->field_4_1_1_1_isShadow_5 >> 1) & 1); cellExtra->field_4_1_1_1_isShadow_5 = cellExtra->field_4_1_1_1_isShadow_5 & 0xFB | 4 * (((unsigned __int8)nextCellExtra->field_4_1_1_1_isShadow_5 >> 2) & 1); fullMap::RemoveCellExtra(this, nextIdx); if ( nextCellExtra->objectIndex == 255 ) { if ( nextCellExtra->overlayIndex == 255 ) { cellExtra->nextIdx = 0; nextCellExtra->nextIdx = -1; } } } else { cellExtra->objLink = 0; cellExtra->_1_animatedObject_7_objTileset &= 1u; cellExtra->objectIndex = -1; cellExtra->_1_animatedObject_7_objTileset &= 0xFEu; cellExtra->field_4_1_1_1_isShadow_5 &= 0xFEu; cellExtra->field_4_1_1_1_isShadow_5 &= 0xFDu; cellExtra->field_4_1_1_1_isShadow_5 &= 0xFBu; } } //----- (00428383) -------------------------------------------------------- void __thiscall fullMap::ClearCell(fullMap *this, int row, int col) { int cellExtraIdx; // ecx@1 mapCell *cell; // [sp+10h] [bp-Ch]@1 mapCellExtra *v6; // [sp+18h] [bp-4h]@3 cell = &this->tiles[col * this->width] + row; cellExtraIdx = cell->extraIdx; if ( cell->extraIdx && this->cellExtras[cellExtraIdx].objectIndex != 255 ) { v6 = &this->cellExtras[cellExtraIdx]; cell->objLink = v6->objLink; cell->bitfield_1_hasObject_1_isRoad_6_objTileset = cell->bitfield_1_hasObject_1_isRoad_6_objTileset & 3 | 4 * ((unsigned __int8)v6->_1_animatedObject_7_objTileset >> 1); cell->objectIndex = v6->objectIndex; cell->bitfield_1_hasObject_1_isRoad_6_objTileset = cell->bitfield_1_hasObject_1_isRoad_6_objTileset & 0xFE | v6->_1_animatedObject_7_objTileset & 1; cell->field_4_1_1_isShadow_1_13_extraInfo = cell->field_4_1_1_isShadow_1_13_extraInfo & 0xFFFE | v6->field_4_1_1_1_isShadow_5 & 1; cell->field_4_1_1_isShadow_1_13_extraInfo = cell->field_4_1_1_isShadow_1_13_extraInfo & 0xFFFD | 2 * (((unsigned __int8)v6->field_4_1_1_1_isShadow_5 >> 1) & 1); cell->field_4_1_1_isShadow_1_13_extraInfo = cell->field_4_1_1_isShadow_1_13_extraInfo & 0xFFFB | 4 * (((unsigned __int8)v6->field_4_1_1_1_isShadow_5 >> 2) & 1); cell->objType = 0; cell->field_4_1_1_isShadow_1_13_extraInfo &= 7u; fullMap::RemoveCellExtra(this, cellExtraIdx); if ( v6->objectIndex == 255 ) { if ( v6->overlayIndex == 255 ) { cell->extraIdx = 0; v6->nextIdx = -1; } } } else { cell->objLink = 0; cell->bitfield_1_hasObject_1_isRoad_6_objTileset &= 3u; cell->objectIndex = -1; cell->bitfield_1_hasObject_1_isRoad_6_objTileset &= 0xFEu; cell->field_4_1_1_isShadow_1_13_extraInfo &= 0xFFFEu; cell->field_4_1_1_isShadow_1_13_extraInfo &= 0xFFFDu; cell->field_4_1_1_isShadow_1_13_extraInfo &= 0xFFFBu; cell->field_4_1_1_isShadow_1_13_extraInfo &= 7u; cell->objType = 0; } } //----- (0042857F) -------------------------------------------------------- void __thiscall fullMap::MoveInfoToCellExtra(fullMap *this, int x, int y) { mapCell *cell; // ST18_4@1 mapCellExtra *cellExtra; // ST1C_4@1 cell = &this->tiles[y * this->width] + x; cellExtra = fullMap::GetNewCellExtraObject(&gpMap, x, y); cellExtra->_1_animatedObject_7_objTileset = cellExtra->_1_animatedObject_7_objTileset & 0xFE | cell->bitfield_1_hasObject_1_isRoad_6_objTileset & 1; cellExtra->_1_animatedObject_7_objTileset = cellExtra->_1_animatedObject_7_objTileset & 1 | 2 * (((unsigned __int8)cell->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F); cellExtra->objectIndex = cell->objectIndex; cellExtra->field_4_1_1_1_isShadow_5 = cellExtra->field_4_1_1_1_isShadow_5 & 0xFE | cell->field_4_1_1_isShadow_1_13_extraInfo & 1; cellExtra->field_4_1_1_1_isShadow_5 = cellExtra->field_4_1_1_1_isShadow_5 & 0xFD | 2 * ((cell->field_4_1_1_isShadow_1_13_extraInfo >> 1) & 1); cellExtra->field_4_1_1_1_isShadow_5 = cellExtra->field_4_1_1_1_isShadow_5 & 0xFB | 4 * ((cell->field_4_1_1_isShadow_1_13_extraInfo >> 2) & 1); cellExtra->objLink = cell->objLink; cell->bitfield_1_hasObject_1_isRoad_6_objTileset &= 0xFEu; cell->bitfield_1_hasObject_1_isRoad_6_objTileset &= 3u; cell->objectIndex = -1; cell->field_4_1_1_isShadow_1_13_extraInfo &= 0xFFFEu; cell->field_4_1_1_isShadow_1_13_extraInfo &= 0xFFFDu; cell->field_4_1_1_isShadow_1_13_extraInfo &= 0xFFFBu; cell->objLink = 0; cell->objType = 0; } //----- (004286BE) -------------------------------------------------------- void __thiscall fullMap::ClearOverlay(fullMap *this, int idx) { int nextIdx; // ecx@1 mapCellExtra *nextCellExtra; // [sp+10h] [bp-Ch]@3 mapCellExtra *cellExtra; // [sp+18h] [bp-4h]@1 cellExtra = &this->cellExtras[idx]; nextIdx = cellExtra->nextIdx; if ( cellExtra->nextIdx && this->cellExtras[nextIdx].overlayIndex != 255 ) { nextCellExtra = &this->cellExtras[nextIdx]; cellExtra->ovrLink = nextCellExtra->ovrLink; cellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset = cellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset & 3 | 4 * ((unsigned __int8)nextCellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset >> 2); cellExtra->overlayIndex = nextCellExtra->overlayIndex; cellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset = cellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset & 0xFE | nextCellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset & 1; cellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset = cellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset & 0xFD | 2 * (((unsigned __int8)nextCellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset >> 1) & 1); fullMap::ClearOverlay(this, nextIdx); if ( nextCellExtra->overlayIndex == 255 ) { cellExtra->nextIdx = 0; nextCellExtra->nextIdx = -1; } } else { cellExtra->ovrLink = 0; cellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset &= 3u; cellExtra->overlayIndex = -1; cellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset &= 0xFEu; cellExtra->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset &= 0xFDu; } } //----- (0042881D) -------------------------------------------------------- void __thiscall fullMap::RemoveOverlay(fullMap *this, int row, int col) { int cellExtraIdx; // ecx@1 mapCell *cell; // [sp+10h] [bp-Ch]@1 mapCellExtra *v6; // [sp+18h] [bp-4h]@3 cell = &this->tiles[row] + col * this->width; cellExtraIdx = cell->extraIdx; if ( cell->extraIdx && this->cellExtras[cellExtraIdx].overlayIndex != 255 ) { v6 = &this->cellExtras[cellExtraIdx]; cell->ovrLink = v6->ovrLink; cell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset = cell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset & 3 | 4 * ((unsigned __int8)v6->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset >> 2); cell->overlayIndex = v6->overlayIndex; cell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset = cell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset & 0xFE | v6->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset & 1; cell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset = cell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset & 0xFD | 2 * (((unsigned __int8)v6->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset >> 1) & 1); fullMap::ClearOverlay(this, cellExtraIdx); if ( v6->overlayIndex == 255 ) { cell->extraIdx = 0; v6->nextIdx = -1; } } else { cell->ovrLink = 0; cell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset &= 3u; cell->overlayIndex = -1; cell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset &= 0xFEu; cell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset &= 0xFDu; } } //----- (0042898D) -------------------------------------------------------- void __thiscall fullMap::RearrangeCellExtras(fullMap *this) { mapCellExtra *ce1; // eax@8 mapCellExtra *ce2; // ecx@8 void *v3; // ST48_4@20 __int16 *cellExtraMoved; // [sp+20h] [bp-20h]@1 int k; // [sp+24h] [bp-1Ch]@13 int l; // [sp+28h] [bp-18h]@17 int m; // [sp+28h] [bp-18h]@20 int j; // [sp+2Ch] [bp-14h]@11 int v10; // [sp+30h] [bp-10h]@1 int i; // [sp+34h] [bp-Ch]@1 cellExtraMoved = (__int16 *)BaseAlloc(0x20064u, (int)"F:\\h2xsrc\\Editor\\Mapcell.cpp", 370); v10 = 1; for ( i = 1; this->numCellExtras > i; ++i ) { if ( this->cellExtras[i].nextIdx != 65535 ) { if ( v10 != i ) { while ( v10 < 65535 && this->cellExtras[v10].nextIdx != 65535 ) ++v10; ce1 = &this->cellExtras[i]; ce2 = &this->cellExtras[v10]; // ce2 = ce1 *(_DWORD *)&ce2->nextIdx = *(_DWORD *)&ce1->nextIdx; *(_DWORD *)&ce2->field_4_1_1_1_isShadow_5 = *(_DWORD *)&ce1->field_4_1_1_1_isShadow_5; *(int *)((char *)&ce2->objLink + 1) = *(int *)((char *)&ce1->objLink + 1); *(_WORD *)((char *)&ce2->ovrLink + 1) = *(_WORD *)((char *)&ce1->ovrLink + 1); BYTE3(ce2->ovrLink) = BYTE3(ce1->ovrLink); this->cellExtras[i].nextIdx = -1; } cellExtraMoved[i] = v10++; } } *cellExtraMoved = 0; cellExtraMoved[65535] = -1; this->numCellExtras = v10; for ( j = 0; j < MAP_WIDTH; ++j ) { for ( k = 0; k < MAP_HEIGHT; ++k ) *(&this->tiles[j].extraIdx + 10 * k * this->width) = cellExtraMoved[*(&this->tiles[j].extraIdx + 10 * k * this->width)]; } for ( l = 1; this->numCellExtras > l; ++l ) this->cellExtras[l].nextIdx = cellExtraMoved[this->cellExtras[l].nextIdx]; BaseFree(cellExtraMoved, "F:\\h2xsrc\\Editor\\Mapcell.cpp", 403); v3 = (void *)operator new(sizeof(mapCellExtra) * (this->numCellExtras + 149)); memcpy(v3, this->cellExtras, sizeof(mapCellExtra) * this->numCellExtras); operator delete(this->cellExtras); this->cellExtras = (mapCellExtra *)v3; for ( m = this->numCellExtras; this->numCellExtras + 149 > m; ++m ) this->cellExtras[m].nextIdx = -1; this->numCellExtras += 149; fullMap::ClearCellExtra(this, this->numCellExtras - 149); } //----- (00428CAA) -------------------------------------------------------- void __thiscall fullMap::Write(fullMap *this, int fd) { _write(fd, &this->width, 4u); _write(fd, &this->height, 4u); _write(fd, this->tiles, sizeof(mapCell) * this->height * this->width); _write(fd, &this->numCellExtras, 4u); _write(fd, this->cellExtras, sizeof(mapCellExtra) * this->numCellExtras); } //----- (00428D47) -------------------------------------------------------- mapCellExtra *__thiscall fullMap::Read(fullMap *this, int fd, int a3) { mapCellExtra *result; // eax@1 int i; // [sp+10h] [bp-4h]@1 _read(fd, &this->width, 4u); _read(fd, &this->height, 4u); fullMap::Reset(this, this->width, this->height); _read(fd, this->tiles, 20 * this->height * this->width); _read(fd, &this->numCellExtras, 4u); _read(fd, this->cellExtras, 15 * this->numCellExtras); result = (mapCellExtra *)this->numCellExtras; for ( i = this->numCellExtras; i < 65535; ++i ) { result = this->cellExtras; result[i].nextIdx = -1; } return result; } //----- (00428E32) -------------------------------------------------------- void __thiscall fullMap::ChangeTilesetIndex(fullMap *this, mapCell *cell, int x, int y, int tileset, int idx, int a7, int ovrLink) { mapCellExtra *v8; // eax@16 mapCellExtra *v9; // eax@29 char v10; // [sp+10h] [bp-10h]@4 mapCellExtra *v11; // [sp+14h] [bp-Ch]@11 mapCellExtra *v12; // [sp+14h] [bp-Ch]@24 int j; // [sp+1Ch] [bp-4h]@9 int i; // [sp+1Ch] [bp-4h]@22 if ( ovrLink == -1 ) ovrLink = cell->objLink; if ( idx == 255 ) v10 = 0; else v10 = tileset; if ( a7 ) { if ( cell->overlayIndex == 255 || (((unsigned __int8)cell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset >> 2) & 0x3F) == tileset ) { cell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset &= 0xFEu; cell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset &= 0xFDu; cell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset = 4 * v10 | cell->field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset & 3; cell->overlayIndex = idx; cell->ovrLink = ovrLink; } else { for ( i = cell->extraIdx; i; i = v12->nextIdx ) { v12 = &this->cellExtras[i]; if ( v12->overlayIndex == 255 || (((unsigned __int8)v12->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset >> 2) & 0x3F) == tileset ) { v12->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset &= 0xFEu; v12->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset &= 0xFDu; v12->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset = 4 * v10 | v12->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset & 3; v12->overlayIndex = idx; v12->ovrLink = ovrLink; break; } } if ( !i ) { v9 = fullMap::GetNewCellExtraOverlay(this, x, y); v9->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset = 4 * v10 | v9->_1_animatedLateOverlay_1_hasLateOverlay_6_lateOverlayTileset & 3; v9->overlayIndex = idx; v9->ovrLink = ovrLink; } } } else if ( cell->objectIndex == 255 || (((unsigned __int8)cell->bitfield_1_hasObject_1_isRoad_6_objTileset >> 2) & 0x3F) == tileset ) { cell->bitfield_1_hasObject_1_isRoad_6_objTileset &= 0xFEu; cell->field_4_1_1_isShadow_1_13_extraInfo &= 0xFFFEu; cell->field_4_1_1_isShadow_1_13_extraInfo &= 0xFFFDu; cell->field_4_1_1_isShadow_1_13_extraInfo &= 0xFFFBu; cell->bitfield_1_hasObject_1_isRoad_6_objTileset = 4 * v10 | cell->bitfield_1_hasObject_1_isRoad_6_objTileset & 3; cell->objectIndex = idx; cell->objLink = ovrLink; } else { for ( j = cell->extraIdx; j; j = v11->nextIdx ) { v11 = &this->cellExtras[j]; if ( v11->objectIndex == 255 || (((unsigned __int8)v11->_1_animatedObject_7_objTileset >> 1) & 0x7F) == tileset ) { v11->_1_animatedObject_7_objTileset &= 0xFEu; v11->field_4_1_1_1_isShadow_5 &= 0xFEu; v11->field_4_1_1_1_isShadow_5 &= 0xFDu; v11->field_4_1_1_1_isShadow_5 &= 0xFBu; v11->_1_animatedObject_7_objTileset = 2 * v10 | v11->_1_animatedObject_7_objTileset & 1; v11->objectIndex = idx; v11->objLink = ovrLink; break; } } if ( !j ) { v8 = fullMap::GetNewCellExtraObject(this, x, y); v8->_1_animatedObject_7_objTileset = 2 * v10 | v8->_1_animatedObject_7_objTileset & 1; v8->objectIndex = idx; v8->objLink = ovrLink; } } } //----- (00429170) -------------------------------------------------------- int __fastcall sub_429170(overlay *a1, int a2, int a3) { return PlaceOverlay(a1, a2 - 7, a3 - 5, 1); } //----- (004291A2) -------------------------------------------------------- signed int __fastcall sub_4291A2(int a1, int a2, int a3, int a4) { return ValidOverlayPlacement((overlay *)a1, a2 - 7, a3 - 5, a4); } //----- (004291D6) -------------------------------------------------------- void __thiscall editManager::GenerateRandomMap(editManager *this) { int v1; // eax@1 int v2; // eax@27 int v3; // eax@29 int v5; // [sp+20h] [bp-14h]@11 int v6; // [sp+24h] [bp-10h]@8 signed int i; // [sp+2Ch] [bp-8h]@5 signed int j; // [sp+2Ch] [bp-8h]@11 signed int k; // [sp+2Ch] [bp-8h]@16 int l; // [sp+2Ch] [bp-8h]@21 int m; // [sp+2Ch] [bp-8h]@24 signed int v12; // [sp+30h] [bp-4h]@8 gbGeneratingRandomMap = 1; LOBYTE(v1) = sub_415574(); if ( v1 ) { if ( dword_46B0BC ) dword_46B0C0 = 1; editManager::InitializeMap(this, 1, MAP_WIDTH, MAP_HEIGHT); for ( i = 0; i < 6; ++i ) { gpMapHeader.playerMayBeHuman[i] = 1; gpMapHeader.playerMayBeComp[i] = 1; } v6 = 0; v12 = 0; while ( !v6 && v12 < 5 ) { ++v12; EraseRegion(0, 0, MAP_WIDTH, MAP_HEIGHT); editManager::UpdateCursor(this); RedrawEditPane(); sub_40365F(this, 1); v5 = 0; for ( j = 0; j <= 7; ++j ) { if ( gProportionTerrain[j] > 0.0 ) { sub_4296C1(j, 100, 0); v5 = j + 1; j = 99; } } for ( k = v5; k <= 7; ++k ) { if ( gProportionTerrain[k] > 0.0 ) { sprintf((char *)&gText, "Generating map - Drawing ground type - %s", gpTerrainNames2[k]); ShowDebugMessage((const char *)&gText); sub_4296C1(k, (signed __int64)gProportionTerrain[k], v5 - 1); } } ShowDebugMessage("Generating map - Cleaning up ground..."); editManager::CleanUpGround(); for ( l = 0; l <= 8; ++l ) sub_409D94(l, 1, 0, 1, 1); sub_409D94(0, 1, 0, 0, 1); ShowDebugMessage("Generating map - Placing mountains..."); editManager::PlaceRandomMountainsOrTrees((double *)(signed __int64)dbl_46AE90[0], 1); ShowDebugMessage("Generating map - Placing trees..."); editManager::PlaceRandomMountainsOrTrees((double *)(signed __int64)dbl_46AE98, 0); ShowDebugMessage("Generating map - Placing objects..."); editManager::PlaceRandomObjects(this, (double *)(signed __int64)dbl_46AEA0, (signed __int64)dbl_46AEB0); ShowDebugMessage("Generating map - Analyzing Land Mass..."); sub_42AD10(); for ( m = 0; m <= 8; ++m ) sub_409D94(m, 1, 0, 1, 0); unk_4685F4 = 1; sub_409D94(0, 1, 0, 0, 1); sub_40F1D8(this, 5); unk_4685F4 = 0; ShowDebugMessage("Generating map - Placing treasures..."); editManager::PlaceRandomTreasures(this, (signed __int64)dbl_46AEA8, (signed __int64)dbl_46AEB0); LOBYTE(v2) = sub_429604(); v6 = v2; } if ( dword_46B0C0 ) { LOBYTE(v3) = sub_41C370(); if ( v3 && !editManager::Save(this, mapFilename) ) { sprintf((char *)&gText, "'%s' saved successfully", gpMapHeader.name); NormalDialog((char *)&gText, 1, -1, -1, -1, 0, -1, 0, -1, 0); } EraseRegion(0, 0, MAP_WIDTH, MAP_HEIGHT); dword_46B0C0 = 0; } editManager::UpdateCursor(this); ShowDebugMessage(byte_485F00); sub_410B3A(); RedrawEditPane(); sub_40365F(this, 1); gbGeneratingRandomMap = 0; } else { editManager::UpdateCursor(this); RedrawEditPane(); sub_40365F(this, 1); } } // 4296C1: using guessed type _DWORD __stdcall sub_4296C1(_DWORD, _DWORD, _DWORD); // 46AE50: using guessed type double gProportionTerrain[]; // 46AE90: using guessed type double dbl_46AE90[]; // 46AE98: using guessed type double dbl_46AE98; // 46AEA0: using guessed type double dbl_46AEA0; // 46AEA8: using guessed type double dbl_46AEA8; // 46AEB0: using guessed type double dbl_46AEB0; // 46B0BC: using guessed type int dword_46B0BC; // 46B0C0: using guessed type int dword_46B0C0; // 46B440: using guessed type char *gpTerrainNames2[9]; // 485CF8: using guessed type int gbGeneratingRandomMap; //----- (00429604) -------------------------------------------------------- bool __cdecl sub_429604() { int i; // [sp+14h] [bp-Ch]@1 int j; // [sp+18h] [bp-8h]@3 int v3; // [sp+1Ch] [bp-4h]@1 v3 = 0; for ( i = 0; MAP_HEIGHT > i; ++i ) { for ( j = 0; MAP_WIDTH > j; ++j ) { if ( *(&gpMap.tiles[j].objType + 20 * i * gpMap.width) == 177 ) ++v3; } } return dword_46AE48 <= v3; } // 46AE48: using guessed type int dword_46AE48; //----- (004296C1) -------------------------------------------------------- int __stdcall sub_4296C1(int a1, int a2, int a3) { int result; // eax@3 int v4; // ST70_4@9 int v5; // ebx@22 int v6; // ebx@22 int v7; // ebx@22 int v8; // ebx@27 int v9; // ebx@27 int v10; // ebx@30 int v11; // ebx@30 int v12; // ebx@30 signed int v13; // ST2C_4@60 int i; // [sp+20h] [bp-50h]@15 int v15; // [sp+24h] [bp-4Ch]@34 signed int v16; // [sp+28h] [bp-48h]@10 int v17; // [sp+2Ch] [bp-44h]@1 int j; // [sp+30h] [bp-40h]@34 int v19; // [sp+34h] [bp-3Ch]@9 int v20; // [sp+38h] [bp-38h]@9 int v21; // [sp+3Ch] [bp-34h]@34 int v22; // [sp+40h] [bp-30h]@34 signed int v23; // [sp+44h] [bp-2Ch]@17 char v24; // [sp+48h] [bp-28h]@34 signed int v25; // [sp+4Ch] [bp-24h]@13 int v26; // [sp+50h] [bp-20h]@34 signed int v27; // [sp+54h] [bp-1Ch]@9 signed int v28; // [sp+58h] [bp-18h]@17 signed int v29; // [sp+58h] [bp-18h]@58 int a5; // [sp+60h] [bp-10h]@4 int a5a; // [sp+60h] [bp-10h]@58 int v32; // [sp+64h] [bp-Ch]@1 int a4; // [sp+68h] [bp-8h]@2 int a4a; // [sp+68h] [bp-8h]@58 int v35; // [sp+6Ch] [bp-4h]@17 v17 = 0; v32 = 0; if ( a2 == 100 ) { for ( a4 = 0; ; ++a4 ) { result = a4; if ( MAP_WIDTH <= a4 ) break; for ( a5 = 0; MAP_HEIGHT > a5; ++a5 ) *(&gpMap.tiles[a5 * gpMap.width].groundIndex + 10 * a4) = SelectTerrainTile(a1, 0, 0, a4, a5, 0, 1.0); } } else { v4 = a2 * MAP_HEIGHT * MAP_WIDTH / 100; v20 = Random(0, a2 + 51) / 30 + 1; v27 = v4; v19 = 0; if ( dword_46AEB8 ) v16 = 2; else v16 = 3; if ( dword_46AEB8 ) v25 = 7; else v25 = 6; for ( i = 0; ; ++i ) { result = i; if ( v20 <= i ) break; v35 = v27 / (v20 - i); v23 = 1; v28 = 0; while ( v28 < 200 && v23 ) { ++v28; if ( dword_46AEB8 ) { v17 = Random(0, MAP_WIDTH - 1); } else { v5 = Random(0, MAP_WIDTH - 1); v6 = Random(0, MAP_WIDTH - 1) + v5; v7 = Random(0, MAP_WIDTH - 1) + v6; v17 = (v7 + Random(0, MAP_WIDTH - 1)) / 4; } if ( dword_46AEB8 ) { if ( a1 != 5 && a1 != 7 && a1 != 4 ) { v32 = Random(0, MAP_HEIGHT - 1); } else { v8 = Random(0, MAP_HEIGHT - 1); v9 = Random(0, MAP_HEIGHT - 1) + v8; v32 = (v9 + Random(0, MAP_HEIGHT - 1)) / 3; } } else { v10 = Random(0, MAP_HEIGHT - 1); v11 = Random(0, MAP_HEIGHT - 1) + v10; v12 = Random(0, MAP_HEIGHT - 1) + v11; v32 = (v12 + Random(0, MAP_HEIGHT - 1)) / 4; } if ( gTileTerrainTypes[*(&gpMap.tiles[v32 * gpMap.width].groundIndex + 10 * v17)] == a3 ) v23 = 0; } v21 = Random(3, 7); v15 = Random(3, 7); v26 = Random(3, 7); v22 = (signed __int64)((double)v35 * 1.5); v24 = 0; for ( j = 0; v35 > j; ++j ) { ++v24; if ( (v24 & 7) == 7 ) { v17 += Random(0, 2) - 1; v32 += Random(0, 2) - 1; if ( v17 < 0 ) v17 = 0; if ( MAP_WIDTH <= v17 ) v17 = MAP_WIDTH - 1; if ( v32 < 0 ) v32 = 0; if ( MAP_HEIGHT <= v32 ) v32 = MAP_HEIGHT - 1; if ( (v24 & 0x3F) == 63 ) { v21 += Random(0, 2) - 1; v15 += Random(0, 2) - 1; v26 += Random(0, 2) - 1; if ( v16 > v21 ) v21 = v16; if ( v25 < v21 ) v21 = v25; if ( v16 > v15 ) v15 = v16; if ( v25 < v15 ) v15 = v25; if ( v16 > v26 ) v26 = v16; if ( v25 < v26 ) v26 = v25; } } a4a = v17; a5a = v32; v29 = 0; while ( gTileTerrainTypes[*(&gpMap.tiles[a5a * gpMap.width].groundIndex + 10 * a4a)] == a1 ) { v13 = v29++; if ( v13 >= 250 ) break; if ( Random(0, 9) >= v21 ) { if ( a5a ) { if ( MAP_HEIGHT - 1 == a5a ) { v29 += 50; --a5a; if ( v16 > v26 ) v26 = v16; } else if ( Random(0, 9) >= v26 ) { ++a5a; } else { --a5a; } } else { v29 += 50; a5a = 1; if ( v25 < v26 ) v26 = v25; } } else if ( a4a ) { if ( MAP_WIDTH - 1 == a4a ) { v29 += 50; --a4a; if ( v16 > v15 ) v15 = v16; } else if ( Random(0, 9) >= v15 ) { ++a4a; } else { --a4a; } } else { v29 += 50; a4a = 1; if ( v25 < v15 ) v15 = v25; } } if ( v29 >= 1000 ) ++v19; if ( gTileTerrainTypes[*(&gpMap.tiles[a5a * gpMap.width].groundIndex + 10 * a4a)] == a3 ) { *(&gpMap.tiles[a5a * gpMap.width].groundIndex + 10 * a4a) = SelectTerrainTile(a1, 0, 0, a4a, a5a, 0, 1.0); } else if ( v22 ) { --v22; --j; } else { ++v27; if ( i + 1 == v20 && v20 < 20 ) ++v20; } } v27 -= v35; } } return result; } // 4296C1: using guessed type _DWORD __stdcall sub_4296C1(_DWORD, _DWORD, _DWORD); // 4343F0: using guessed type int __fastcall Random(_DWORD, _DWORD); // 46AEB8: using guessed type int dword_46AEB8; //----- (00429DBE) -------------------------------------------------------- int __cdecl editManager::CleanUpGround() { int result; // eax@72 signed int k; // [sp+14h] [bp-40h]@19 int l; // [sp+14h] [bp-40h]@63 int v3; // [sp+18h] [bp-3Ch]@7 void *v4; // [sp+1Ch] [bp-38h]@1 int i; // [sp+20h] [bp-34h]@1 int v6; // [sp+24h] [bp-30h]@7 int j; // [sp+28h] [bp-2Ch]@3 int v8; // [sp+2Ch] [bp-28h]@7 signed int a5; // [sp+30h] [bp-24h]@17 int a5a; // [sp+30h] [bp-24h]@61 int v11; // [sp+34h] [bp-20h]@7 signed int v12; // [sp+38h] [bp-1Ch]@7 int n; // [sp+3Ch] [bp-18h]@73 void *Dst; // [sp+40h] [bp-14h]@1 int m; // [sp+44h] [bp-10h]@71 int a1; // [sp+48h] [bp-Ch]@7 signed int v17; // [sp+4Ch] [bp-8h]@7 int v18; // [sp+50h] [bp-4h]@7 Dst = BaseAlloc(MAP_HEIGHT * MAP_WIDTH, (int)"F:\\h2xsrc\\Editor\\RANDOM.CPP", 373); v4 = BaseAlloc(MAP_HEIGHT * MAP_WIDTH, (int)"F:\\h2xsrc\\Editor\\RANDOM.CPP", 374); memset(Dst, 0, MAP_HEIGHT * MAP_WIDTH); for ( i = 0; MAP_HEIGHT > i; ++i ) { for ( j = 0; MAP_WIDTH > j; ++j ) { if ( !*((_BYTE *)Dst + j + i * MAP_WIDTH) ) { memset(v4, 0, MAP_HEIGHT * MAP_WIDTH); ++*((_BYTE *)v4 + j + i * MAP_WIDTH); v11 = gTileTerrainTypes[*(&gpMap.tiles[i * gpMap.width].groundIndex + 10 * j)]; v17 = 1; v12 = 1; v18 = j - 1; v6 = j + 1; v3 = i - 1; v8 = i + 1; a1 = -1; while ( v17 ) { v17 = 0; if ( v18 < 0 ) v18 = 0; if ( v6 >= MAP_WIDTH ) v6 = MAP_WIDTH - 1; if ( v3 < 0 ) v3 = 0; if ( v8 >= MAP_HEIGHT ) v8 = MAP_HEIGHT - 1; a5 = v3; LABEL_18: if ( v8 >= a5 ) { for ( k = v18; ; ++k ) { if ( v6 < k ) { ++a5; goto LABEL_18; } if ( gTileTerrainTypes[*(&gpMap.tiles[a5 * gpMap.width].groundIndex + 10 * k)] != v11 ) { if ( a1 == -1 ) a1 = gTileTerrainTypes[*(&gpMap.tiles[a5 * gpMap.width].groundIndex + 10 * k)]; continue; } if ( *((_BYTE *)v4 + k + a5 * MAP_WIDTH) ) continue; if ( k < 71 && *((_BYTE *)v4 + k + a5 * MAP_WIDTH + 1) ) { ++*((_BYTE *)v4 + k + a5 * MAP_WIDTH); } else if ( k > 0 && *((_BYTE *)v4 + k + a5 * MAP_WIDTH - 1) ) { ++*((_BYTE *)v4 + k + a5 * MAP_WIDTH); } else if ( a5 < 71 && *((_BYTE *)v4 + k + MAP_WIDTH * (a5 + 1)) ) { ++*((_BYTE *)v4 + k + a5 * MAP_WIDTH); } else { if ( a5 <= 0 || !*((_BYTE *)v4 + k + MAP_WIDTH * (a5 - 1)) ) continue; ++*((_BYTE *)v4 + k + a5 * MAP_WIDTH); } v17 = 1; ++v12; if ( v18 == k ) --v18; if ( v6 == k ) ++v6; if ( v3 == a5 ) --v18; if ( v8 == a5 ) ++v8; if ( v18 < 0 ) v18 = 0; if ( v6 >= MAP_WIDTH ) v6 = MAP_WIDTH - 1; if ( v3 < 0 ) v3 = 0; if ( v8 >= MAP_HEIGHT ) v8 = MAP_HEIGHT - 1; } } } if ( v12 > 15 ) a1 = v11; for ( a5a = 0; MAP_HEIGHT > a5a; ++a5a ) { for ( l = 0; MAP_WIDTH > l; ++l ) { if ( *((_BYTE *)v4 + l + a5a * MAP_WIDTH) ) { *((_BYTE *)Dst + l + a5a * MAP_WIDTH) = 1; *(&gpMap.tiles[a5a * gpMap.width].groundIndex + 10 * l) = SelectTerrainTile(a1, 0, 0, a5a, a5a, 0, 1.0); } } } } } } BaseFree(Dst, "F:\\h2xsrc\\Editor\\RANDOM.CPP", 458); BaseFree(v4, "F:\\h2xsrc\\Editor\\RANDOM.CPP", 459); dword_48EFB8 = 0; for ( m = 0; ; ++m ) { result = m; if ( MAP_WIDTH <= m ) break; for ( n = 0; MAP_HEIGHT > n; ++n ) { if ( gTileTerrainTypes[*(&gpMap.tiles[n * gpMap.width].groundIndex + 10 * m)] ) ++dword_48EFB8; } } return result; } // 48EFB8: using guessed type int dword_48EFB8; //----- (0042A37A) -------------------------------------------------------- int __fastcall sub_42A37A(int a1, double *a2) { int result; // eax@2 if ( (signed int)a2 >= 50 ) { result = (signed int)a2 * *(_DWORD *)a1 / 50; *(_DWORD *)a1 = result; } else { result = *(_DWORD *)a1 * (signed int)((char *)a2 + 50) / 100; *(_DWORD *)a1 = result; } return result; } //----- (0042A3D9) -------------------------------------------------------- signed int __stdcall sub_42A3D9(int a1, int a2) { mapCell *v3; // [sp+10h] [bp-10h]@11 int j; // [sp+14h] [bp-Ch]@3 int i; // [sp+18h] [bp-8h]@1 int v6; // [sp+1Ch] [bp-4h]@1 v6 = 0; for ( i = a1 - 5; a1 + 5 > i; ++i ) { for ( j = a2 - 5; a2 + 5 > j; ++j ) { if ( i >= 0 ) { if ( MAP_WIDTH > i ) { if ( j >= 0 ) { if ( MAP_HEIGHT > j ) { v3 = &gpMap.tiles[j * gpMap.width] + i; if ( *(&gpMap.tiles[i].objType + 20 * j * gpMap.width) == 100 || v3->objType == 101 || v3->objType == 99 ) { if ( !i && !j ) return 100; ++v6; } } } } } } } return v6; } // 42A3D9: using guessed type _DWORD __stdcall sub_42A3D9(_DWORD, _DWORD); //----- (0042A4F8) -------------------------------------------------------- int __stdcall editManager::PlaceRandomMountainsOrTrees(double *a1, int doMountains) { int result; // eax@10 int v3; // ebx@14 unsigned int v4; // [sp+28h] [bp-40h]@64 int v5; // [sp+2Ch] [bp-3Ch]@9 int v6; // [sp+30h] [bp-38h]@1 int numNonWaterTiles; // [sp+34h] [bp-34h]@1 int v8; // [sp+38h] [bp-30h]@11 int v9; // [sp+3Ch] [bp-2Ch]@11 int y; // [sp+40h] [bp-28h]@3 int v11; // [sp+44h] [bp-24h]@9 int x; // [sp+48h] [bp-20h]@1 char iconId; // [sp+4Ch] [bp-1Ch]@1 int terrain; // [sp+54h] [bp-14h]@1 int v15; // [sp+5Ch] [bp-Ch]@24 int v16; // [sp+60h] [bp-8h]@31 int v17; // [sp+64h] [bp-4h]@77 v6 = 0; iconId = 0; terrain = 0; numNonWaterTiles = 0; for ( x = 0; MAP_WIDTH > x; ++x ) { for ( y = 0; MAP_HEIGHT > y; ++y ) { if ( gTileTerrainTypes[*(&gpMap.tiles[y * gpMap.width].groundIndex + 10 * x)] ) ++numNonWaterTiles; } } v5 = numNonWaterTiles / 30; sub_42A37A((int)&v5, a1); v11 = 13 * v5; while ( 1 ) { result = v11; if ( v6 >= v11 ) return result; v8 = 1; v9 = 0; while ( v8 ) { v8 = 0; x = Random(0, MAP_WIDTH - 1); y = Random(0, MAP_HEIGHT - 1); if ( v9 < 10 ) { v3 = 2 * sub_42A3D9(x, y); if ( v3 > Random(0, 100) ) { ++v9; v8 = 1; } } terrain = gTileTerrainTypes[*(&gpMap.tiles[y * gpMap.width].groundIndex + 10 * x)]; if ( !terrain ) v8 = 1; if ( !doMountains && (terrain == TERRAIN_IDX_LAVA || terrain == TERRAIN_IDX_WASTELAND) && Random(0, 100) < 80 ) v8 = 1; } v15 = 2 * Random(2, 3); if ( Random(0, 100) < 50 ) { if ( (double)x <= (double)MAP_WIDTH * 0.75 ) { if ( (double)x < (double)MAP_WIDTH * 0.25 ) v15 = 4; } else { v15 = 2; } } if ( Random(1, 100) <= 25 ) ++v15; v16 = 1; iconId = 0; if ( doMountains ) { switch ( terrain ) { case 1: iconId = 32; break; case 2: iconId = 22; break; case 3: iconId = 23; break; case 4: iconId = 24; break; case 5: iconId = 25; break; case 6: iconId = 26; break; case 7: iconId = 31; break; case 8: iconId = 25; break; case 0: ProcessAssert(0, "F:\\h2xsrc\\Editor\\RANDOM.CPP", 638); break; default: break; } } else { switch ( terrain ) { case 1: iconId = 49; break; case 2: iconId = 42; break; case 3: iconId = 33; break; case 4: iconId = 34; break; case 5: iconId = 34; break; case 6: iconId = 44; break; case 7: iconId = 34; break; case 8: iconId = 49; break; case 0: ProcessAssert(0, "F:\\h2xsrc\\Editor\\RANDOM.CPP", 655); break; default: break; } if ( iconId == 49 && Random(0, 100) < 30 ) iconId = 43; } while ( v16 ) { if ( sub_42AAF9(&x, &y, v15, doMountains, iconId) ) { v6 += 12; v4 = !v15 || v15 == 3 || v15 == 4 || v15 == 7; if ( doMountains ) { if ( Random(1, 100) < (v4 < 1 ? 40 : 20) ) v16 = 0; } else if ( Random(1, 100) < (v4 < 1 ? 30 : 10) ) { v16 = 0; } if ( doMountains ) { v17 = 40; } else if ( Random(1, 100) >= 35 ) { v17 = 50; } else { if ( v15 >= 4 ) x -= 2; else x += 2; v17 = 0; } v17 /= 3; if ( Random(1, 100) < v17 ) { if ( Random(0, 1) ) { x += dword_485D40[v15][0]; y += dword_485D40[v15][1]; v15 = (((unsigned __int64)(v15 + 10) >> 32) ^ abs(v15 + 10) & 7) - ((unsigned __int64)(v15 + 10) >> 32); } else { x += dword_485D40[v15][2]; y += dword_485D40[v15][3]; v15 = (((unsigned __int64)(v15 + 6) >> 32) ^ abs(v15 + 6) & 7) - ((unsigned __int64)(v15 + 6) >> 32); } } } else { v16 = 0; ++v6; } } } } // 42A3D9: using guessed type _DWORD __stdcall sub_42A3D9(_DWORD, _DWORD); // 4343F0: using guessed type int __fastcall Random(_DWORD, _DWORD); //----- (0042AAF9) -------------------------------------------------------- signed int __stdcall sub_42AAF9(int *a1, int *a2, int a3, int doMountains, char tileset) { signed int result; // eax@5 OVERLAY_CONSTANTS i; // [sp+10h] [bp-14h]@22 signed int v7; // [sp+1Ch] [bp-8h]@6 overlay *v8; // [sp+20h] [bp-4h]@22 if ( *a1 >= 0 && MAP_WIDTH - 1 >= *a1 && *a2 >= 0 && MAP_HEIGHT - 1 >= *a2 ) { v7 = 0; ProcessAssert((unsigned int)tileset >= 1, "F:\\h2xsrc\\Editor\\RANDOM.CPP", 750); if ( !a3 ) v7 = 1; if ( a3 == 1 ) v7 = 3; if ( a3 == 2 ) v7 = 2; if ( a3 == 3 ) v7 = 0; if ( a3 == 4 ) v7 = 1; if ( a3 == 5 ) v7 = 3; if ( a3 == 6 ) v7 = 2; if ( a3 == 7 ) v7 = 0; v8 = 0; for ( i = 0; i < NUM_OVERLAYS; ++i ) { if ( !v8 && gOverlayDatabase[i].tileset == tileset ) { if ( HIDWORD(gOverlayDatabase[i].intersectsTileMask) == 0xE0F07 ) v8 = &gOverlayDatabase[i + v7]; } } if ( sub_4291A2((int)v8, *a1, *a2, 1) ) { sub_429170(v8, *a1, *a2); *a1 += dword_485D00[2 * a3]; *a2 += dword_485D04[2 * a3]; result = 1; } else { result = 0; } } else { result = 0; } return result; } // 485D00: using guessed type int dword_485D00[]; // 485D04: using guessed type int dword_485D04[]; //----- (0042AD10) -------------------------------------------------------- void __cdecl sub_42AD10() { int v0; // edx@51 int v1; // eax@55 int v2; // ebx@118 int v3; // ST34_4@279 int v4; // ebx@282 int v5; // ebx@289 int v6[7]; // [sp+2Ch] [bp-D44h]@6 __int16 v7[256]; // [sp+48h] [bp-D28h]@47 int v8; // [sp+248h] [bp-B28h]@260 int v9; // [sp+24Ch] [bp-B24h]@9 int v10; // [sp+250h] [bp-B20h]@88 int v11; // [sp+254h] [bp-B1Ch]@9 int a5; // [sp+258h] [bp-B18h]@105 void *Dst; // [sp+25Ch] [bp-B14h]@4 int v14; // [sp+260h] [bp-B10h]@171 int v15; // [sp+264h] [bp-B0Ch]@190 int v16; // [sp+26Ch] [bp-B04h]@19 int v17; // [sp+270h] [bp-B00h]@185 int m; // [sp+274h] [bp-AFCh]@59 __int16 v19; // [sp+27Ch] [bp-AF4h]@58 __int16 v20; // [sp+27Eh] [bp-AF2h]@63 __int16 v21; // [sp+280h] [bp-AF0h]@70 __int16 v22; // [sp+282h] [bp-AEEh]@77 __int16 v23; // [sp+284h] [bp-AECh]@78 int v24; // [sp+47Ch] [bp-8F4h]@118 int ii; // [sp+480h] [bp-8F0h]@165 int v26; // [sp+484h] [bp-8ECh]@144 overlay *v27; // [sp+488h] [bp-8E8h]@4 overlay *v28; // [sp+48Ch] [bp-8E4h]@4 overlay *v29; // [sp+490h] [bp-8E0h]@4 overlay *v30; // [sp+494h] [bp-8DCh]@4 overlay *v31; // [sp+498h] [bp-8D8h]@4 overlay *v32; // [sp+49Ch] [bp-8D4h]@4 int v33; // [sp+4A0h] [bp-8D0h]@88 int jj; // [sp+4A4h] [bp-8CCh]@64 int v35; // [sp+4A8h] [bp-8C8h]@94 int i; // [sp+4ACh] [bp-8C4h]@1 int l; // [sp+4B0h] [bp-8C0h]@1 int a4; // [sp+4B4h] [bp-8BCh]@103 int v39; // [sp+4B8h] [bp-8B8h]@68 int v40; // [sp+4BCh] [bp-8B4h]@68 int v41; // [sp+4C0h] [bp-8B0h]@68 int v42; // [sp+4C4h] [bp-8ACh]@68 int v43; // [sp+4C8h] [bp-8A8h]@68 int v44; // [sp+4CCh] [bp-8A4h]@68 int k; // [sp+4D0h] [bp-8A0h]@1 int v46[6]; // [sp+4D4h] [bp-89Ch]@221 int j; // [sp+4ECh] [bp-884h]@7 double v48[255]; // [sp+4F0h] [bp-880h]@55 int v49; // [sp+CE8h] [bp-88h]@171 int v50; // [sp+CECh] [bp-84h]@151 int v51; // [sp+CF0h] [bp-80h]@171 int v52; // [sp+CF4h] [bp-7Ch]@7 int v53; // [sp+CF8h] [bp-78h]@131 int v54[11]; // [sp+CFCh] [bp-74h]@131 int v55; // [sp+D28h] [bp-48h]@179 int v56; // [sp+D2Ch] [bp-44h]@171 int v57; // [sp+D30h] [bp-40h]@203 int v58; // [sp+D34h] [bp-3Ch]@68 int n; // [sp+D38h] [bp-38h]@86 int a1; // [sp+D3Ch] [bp-34h]@136 int v61; // [sp+D40h] [bp-30h]@3 int v62; // [sp+D44h] [bp-2Ch]@213 int v63; // [sp+D48h] [bp-28h]@214 int v64; // [sp+D4Ch] [bp-24h]@215 int v65; // [sp+D50h] [bp-20h]@216 int v66; // [sp+D54h] [bp-1Ch]@217 int v67; // [sp+D58h] [bp-18h]@3 int v68; // [sp+D5Ch] [bp-14h]@208 int v69; // [sp+D60h] [bp-10h]@209 int v70; // [sp+D64h] [bp-Ch]@211 l = 0; k = 0; for ( i = 0; i < 6; ++i ) { *(&v61 + i) = 0; *(&v67 + i) = 0; } v27 = &gOverlayDatabase[939]; v28 = &gOverlayDatabase[943]; v29 = &gOverlayDatabase[945]; v30 = &gOverlayDatabase[947]; v31 = &gOverlayDatabase[949]; v32 = &gOverlayDatabase[951]; Dst = BaseAlloc(MAP_HEIGHT * MAP_WIDTH, (int)"F:\\h2xsrc\\Editor\\RANDOM.CPP", 854); memset(Dst, 0, MAP_HEIGHT * MAP_WIDTH); for ( i = 0; i < 6; ++i ) { v6[i] = (int)BaseAlloc(MAP_HEIGHT * MAP_WIDTH, (int)"F:\\h2xsrc\\Editor\\RANDOM.CPP", 858); memset((void *)v6[i], 0, MAP_HEIGHT * MAP_WIDTH); } v52 = 0; for ( j = 1; j < 255; ++j ) { v9 = -1; v11 = -1; for ( k = 0; k < MAP_WIDTH; ++k ) { for ( l = 0; l < MAP_HEIGHT; ++l ) { if ( gTileTerrainTypes[*(&gpMap.tiles[l * gpMap.width].groundIndex + 10 * k)] ) { if ( !*((_BYTE *)Dst + k + MAP_WIDTH * l) ) { ++v52; v11 = k; v9 = l; *((_BYTE *)Dst + k + MAP_WIDTH * l) = j; l = 999; k = 999; } } } } if ( v11 < 0 ) { j = 999; } else { v16 = 1; while ( v16 ) { v16 = 0; for ( k = 0; k < MAP_WIDTH; ++k ) { for ( l = 0; l < MAP_HEIGHT; ++l ) { if ( gTileTerrainTypes[*(&gpMap.tiles[l * gpMap.width].groundIndex + 10 * k)] && !*((_BYTE *)Dst + k + MAP_WIDTH * l) ) { if ( k <= 0 || (signed int)*((_BYTE *)Dst + k + MAP_WIDTH * l - 1) <= 0 ) { if ( MAP_WIDTH - 1 <= k || (signed int)*((_BYTE *)Dst + k + MAP_WIDTH * l + 1) <= 0 ) { if ( l <= 0 || (signed int)*((_BYTE *)Dst + k + MAP_WIDTH * (l - 1)) <= 0 ) { if ( MAP_HEIGHT - 1 > l && (signed int)*((_BYTE *)Dst + k + MAP_WIDTH * (l + 1)) > 0 ) *((_BYTE *)Dst + k + MAP_WIDTH * l) = *((_BYTE *)Dst + k + MAP_WIDTH * (l + 1)); } else { *((_BYTE *)Dst + k + MAP_WIDTH * l) = *((_BYTE *)Dst + k + MAP_WIDTH * (l - 1)); } } else { *((_BYTE *)Dst + k + MAP_WIDTH * l) = *((_BYTE *)Dst + k + MAP_WIDTH * l + 1); } } else { *((_BYTE *)Dst + k + MAP_WIDTH * l) = *((_BYTE *)Dst + k + MAP_WIDTH * l - 1); } if ( *((_BYTE *)Dst + k + MAP_WIDTH * l) ) v16 = 1; } } } } } } memset(v7, 0, 0x1FEu); for ( k = 0; k < MAP_WIDTH; ++k ) { for ( l = 0; l < MAP_HEIGHT; ++l ) { v0 = *((_BYTE *)Dst + k + MAP_WIDTH * l); ++v7[v0]; } } for ( i = 0; i < 255; ++i ) { v1 = i; LODWORD(v48[i]) = 0; HIDWORD(v48[v1]) = 0; } for ( i = 1; i <= v52; ++i ) { *(&v19 + i) = i; v48[i] = (double)v7[i] / (double)dword_48EFB8 * 100.0; } for ( m = 1; m < v52; ++m ) { for ( i = m; i < v52; ++i ) { if ( v7[*(&v20 + i)] > v7[*(&v19 + i)] ) { jj = *(&v19 + i); *(&v19 + i) = *(&v20 + i); *(&v20 + i) = jj; } } } if ( v48[v20] <= 80.0 ) { if ( v48[v20] <= 40.0 || v48[v21] >= 10.0 ) { if ( v48[v20] >= 55.0 || v48[v21] <= 25.0 ) { if ( v48[v20] >= 50.0 || v48[v21] <= 15.0 || v48[v22] <= 15.0 || v48[v23] <= 15.0 ) { if ( v48[v20] >= 30.0 || v48[v21] <= 8.0 || v48[v22] <= 8.0 || v48[v23] <= 8.0 ) { v44 = v20; v43 = v20; v42 = v20; v41 = v20; v40 = v20; v39 = v20; v58 = 1; } else { v39 = v20; v40 = v21; v41 = v22; v42 = v23; v43 = v20; v44 = v20; v58 = 4; } } else { v39 = v20; v40 = v21; v41 = v22; v42 = v23; v43 = v20; v44 = v20; v58 = 4; } } else { v43 = v20; v41 = v20; v39 = v20; v44 = v21; v42 = v21; v40 = v21; v58 = 2; } } else { v44 = v20; v43 = v20; v42 = v20; v41 = v20; v40 = v20; v39 = v20; v58 = 1; } } else { v44 = v20; v43 = v20; v42 = v20; v41 = v20; v40 = v20; v39 = v20; v58 = 1; } ShowDebugMessage("Generating map - Placing Castles..."); for ( n = 0; n < dword_46AE48; ++n ) { v33 = 0; v10 = 0; do { ++v33; for ( k = 4; MAP_WIDTH - 4 > k; ++k ) { for ( l = 4; MAP_HEIGHT - 4 > l; ++l ) { if ( *((_BYTE *)Dst + k + MAP_WIDTH * l) == *(&v39 + n) ) { v35 = Random(1000, 1200); v35 += Random(0, 100 * v33 + 1); if ( gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l + 1) * gpMap.width].groundIndex + 5 * (4 * k - 12))] ) { if ( !gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l + 2) * gpMap.width].groundIndex + 5 * (4 * k - 16))] ) { if ( v58 <= 1 ) v35 += 500; else v35 += 1000; } } else if ( v58 <= 1 ) { v35 += 500; } else { v35 += 1000; } for ( a4 = k - 4; k + 1 >= a4; ++a4 ) { for ( a5 = l - 2; a5 <= l; ++a5 ) { if ( *((_BYTE *)Dst + a4 + MAP_WIDTH * a5) == *(&v39 + n) ) v35 += 250; } } if ( v35 > v10 ) { for ( a4 = 0; MAP_WIDTH - 1 > a4; ++a4 ) { for ( a5 = 0; MAP_HEIGHT - 1 > a5; ++a5 ) { if ( (((unsigned __int8)*(&gpMap.tiles[a4].bitfield_1_hasObject_1_isRoad_6_objTileset + 20 * a5 * gpMap.width) >> 2) & 0x3F) == 38 && *(&gpMap.tiles[a4].objType + 20 * a5 * gpMap.width) & 0x80 ) { v2 = abs(a5 - l); v24 = abs(a4 - k) + v2; if ( *(&gpMap.tiles[a4].objType + 20 * a5 * gpMap.width) == 177 ) { if ( v24 >= 8 ) { if ( v24 < 40 ) v35 -= 15 * (40 - v24); } else { v35 -= 3000; } } else if ( v24 >= 6 ) { if ( v24 < 40 ) v35 -= 7 * (40 - v24); } else { v35 -= 3000; } } } } } if ( v35 > v10 ) { *(&v53 + 2 * n) = k - 2; v54[2 * n] = l - 1; v10 = v35; } } } } k = *(&v53 + 2 * n) + 2; l = v54[2 * n] + 1; if ( v10 < 0 ) ShutDown("Unable to place castles"); a1 = gTileTerrainTypes[*(&gpMap.tiles[l * gpMap.width].groundIndex + 10 * k)]; sub_408334(k - 4, l - 2, 5, 4, 65535, 1, 0); for ( a4 = k - 4; k + 1 >= a4; ++a4 ) { for ( a5 = l - 2; l + 1 >= a5; ++a5 ) *(&gpMap.tiles[a5 * gpMap.width].groundIndex + 10 * a4) = SelectTerrainTile(a1, 0, 0, a4, a5, 0, 1.0); } } while ( !sub_429170(*(&v27 + n), k, l) ); k = *(&v53 + 2 * n); l = v54[2 * n]; if ( v58 <= 1 ) { if ( gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l + 2) * gpMap.width].groundIndex + 5 * (4 * k - 4))] ) { if ( gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(l + 3) * gpMap.width].groundIndex + 5 * (4 * k - 8))] ) v26 = 0; else v26 = 3; } else { v26 = 1; } } else { v26 = 999; } if ( v26 ) { v50 = 0; a4 = k - 2; a5 = l + 2; EraseRegion(k - 2, l + 2, 2, 2); while ( !v50 && v26 ) { --v26; if ( gTileTerrainTypes[*(&gpMap.tiles[a5 * gpMap.width].groundIndex + 10 * a4)] && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[a5 * gpMap.width].groundIndex + 5 * (4 * a4 + 4))] ) { *(&gpMap.tiles[a5 * gpMap.width].groundIndex + 10 * a4) = SelectTerrainTile(0, 0, 0, a4, a5, 0, 1.0); *(__int16 *)((char *)&gpMap.tiles[a5 * gpMap.width].groundIndex + 5 * (4 * a4 + 4)) = SelectTerrainTile( 0, 0, 0, a4 + 1, a5, 0, 1.0); if ( a4 > 0 ) --a4; if ( MAP_HEIGHT - 1 > a5 ) ++a5; if ( !a4 && MAP_HEIGHT - 1 == a5 ) v50 = 1; } else { v50 = 1; } } } for ( ii = 0; ii < n; ++ii ) { if ( *(&a4 + n) == *(&v39 + n) ) { if ( *(&v53 + 2 * ii) >= *(&v53 + 2 * n) || v54[2 * ii] >= v54[2 * n] ) { if ( *(&v53 + 2 * ii) >= *(&v53 + 2 * n) || v54[2 * ii] < v54[2 * n] ) { if ( *(&v53 + 2 * ii) < *(&v53 + 2 * n) || v54[2 * ii] >= v54[2 * n] ) { v56 = k + 1; v14 = l + 1; v51 = *(&v53 + 2 * ii) - 1; v49 = *(&v53 + 2 * ii) - 2; } else { v56 = k + 1; v14 = l - 2; v51 = *(&v53 + 2 * ii) + 1; v49 = *(&v53 + 2 * ii) + 1; } } else { v56 = k + 1; v14 = l + 1; v51 = *(&v53 + 2 * ii) + 1; v49 = *(&v53 + 2 * ii) - 2; } } else { v56 = k - 2; v14 = l - 2; v51 = *(&v53 + 2 * ii) + 1; v49 = *(&v53 + 2 * ii) + 1; } a4 = v56; a5 = v14; v55 = 1; while ( v55 ) { if ( a4 == v51 && a5 == v49 ) v55 = 0; if ( a4 >= v51 ) { if ( a4 <= v51 ) v17 = 0; else v17 = -1; } else { v17 = 1; } if ( a5 >= v49 ) { if ( a5 <= v49 ) v15 = 0; else v15 = -1; } else { v15 = 1; } if ( v17 && gTileTerrainTypes[*(&gpMap.tiles[a5 * gpMap.width].groundIndex + 10 * (v17 + a4))] ) { v15 = 0; } else if ( v15 && gTileTerrainTypes[*(&gpMap.tiles[(v15 + a5) * gpMap.width].groundIndex + 10 * a4)] ) { v17 = 0; } else { v55 = 0; *(&v61 + n) = 1; *(&v61 + ii) = 1; } if ( v55 && gTileTerrainTypes[*(&gpMap.tiles[(v15 + a5) * gpMap.width].groundIndex + 10 * (v17 + a4))] ) { a4 += v17; a5 += v15; v57 = 64639; memset(byte_489DD0, 1, 0x40u); byte_489DF3 = 0; byte_489DF4 = 0; byte_489DF5 = 0; byte_489DF6 = 0; byte_489DE4 = 0; byte_489DDB = 0; byte_489DDC = 0; sub_408334(a4, a5, 1, 1, 0, 0, 1); } } } } } if ( Random(0, 100) < 50 ) { v67 = 1; v68 = 1; if ( Random(0, 100) < 50 ) v69 = 1; if ( Random(0, 100) < 50 ) v70 = 1; } if ( v61 || v62 || v63 || v64 || v65 || v66 || v67 ) { ShowDebugMessage("Generating map - Connecting Castles..."); for ( i = 0; dword_46AE48 > i; ++i ) { *(&v61 + i) = 0; v46[i] = 0; for ( k = *(&v53 + 2 * i) - 2; *(&v53 + 2 * i) + 2 >= k; ++k ) { for ( l = v54[2 * i] - 2; v54[2 * i] + 1 >= l; ++l ) *(_BYTE *)(v6[i] + MAP_WIDTH * l + k) = 1; } v16 = 1; while ( v16 ) { v16 = 0; for ( k = 0; k < MAP_WIDTH; ++k ) { for ( l = 0; l < MAP_HEIGHT; ++l ) { if ( gTileTerrainTypes[*(&gpMap.tiles[l * gpMap.width].groundIndex + 10 * k)] && (!(((unsigned __int8)*(&gpMap.tiles[k].bitfield_1_hasObject_1_isRoad_6_objTileset + 20 * l * gpMap.width) >> 2) & 0x3F) || (((unsigned __int8)*(&gpMap.tiles[k].bitfield_1_hasObject_1_isRoad_6_objTileset + 20 * l * gpMap.width) >> 2) & 0x3F) == 12) && !*(_BYTE *)(v6[i] + MAP_WIDTH * l + k) ) { if ( k <= 0 || (signed int)*(_BYTE *)(k + v6[i] + MAP_WIDTH * l - 1) <= 0 ) { if ( MAP_WIDTH - 1 <= k || (signed int)*(_BYTE *)(v6[i] + MAP_WIDTH * l + k + 1) <= 0 ) { if ( l <= 0 || (signed int)*(_BYTE *)(v6[i] + MAP_WIDTH * (l - 1) + k) <= 0 ) { if ( MAP_HEIGHT - 1 > l && (signed int)*(_BYTE *)(v6[i] + MAP_WIDTH * (l + 1) + k) > 0 ) *(_BYTE *)(v6[i] + MAP_WIDTH * l + k) = *(_BYTE *)(v6[i] + MAP_WIDTH * (l + 1) + k); } else { *(_BYTE *)(v6[i] + MAP_WIDTH * l + k) = *(_BYTE *)(v6[i] + MAP_WIDTH * (l - 1) + k); } } else { *(_BYTE *)(v6[i] + MAP_WIDTH * l + k) = *(_BYTE *)(v6[i] + MAP_WIDTH * l + k + 1); } } else { *(_BYTE *)(v6[i] + MAP_WIDTH * l + k) = *(_BYTE *)(k + v6[i] + MAP_WIDTH * l - 1); } if ( *(_BYTE *)(v6[i] + MAP_WIDTH * l + k) ) { v16 = 1; ++v46[i]; } } } } } } for ( i = 1; dword_46AE48 > i; ++i ) { for ( jj = 0; jj < i; ++jj ) { if ( *(&v39 + jj) == *(&v39 + i) ) { v8 = 0; for ( k = 0; k < MAP_WIDTH; ++k ) { for ( l = 0; l < MAP_HEIGHT; ++l ) { if ( *(_BYTE *)(v6[i] + MAP_WIDTH * l + k) && *(_BYTE *)(MAP_WIDTH * l + v6[jj] + k) ) v8 = 1; } } if ( !v8 ) { *(&v61 + i) = 1; *(&v61 + jj) = 1; } } } } for ( i = 0; dword_46AE48 > i; ++i ) { if ( *(&v61 + i) || *(&v67 + i) ) { v26 = 20000; v55 = 1; while ( v55 ) { v3 = v26--; if ( v3 < 0 ) v55 = 0; k = Random(0, MAP_WIDTH - 1); l = Random(0, MAP_HEIGHT - 1); if ( *(_BYTE *)(v6[i] + MAP_WIDTH * l + k) ) { v4 = abs(l - v54[2 * i]); v24 = abs(k - *(&v53 + 2 * i)) + v4; if ( v26 < 10000 || Random(0, 100) < v24 ) { v55 = 0; for ( a4 = 0; a4 < MAP_WIDTH; ++a4 ) { for ( a5 = 0; a5 < MAP_HEIGHT; ++a5 ) { if ( *(&gpMap.tiles[a4].objType + 20 * a5 * gpMap.width) == 164 ) { v5 = abs(l - a5); v24 = abs(k - a4) + v5; if ( v26 > 10000 ) { if ( v24 < 40 && Random(0, 100) > v24 ) v55 = 1; } } } } } } } sub_408334(k, l, 1, 1, 65535, 1, 0); sub_429170(&gOverlayDatabase[777], k, l); } } } BaseFree(Dst, "F:\\h2xsrc\\Editor\\RANDOM.CPP", 1369); for ( i = 0; i < 6; ++i ) BaseFree((void *)v6[i], "F:\\h2xsrc\\Editor\\RANDOM.CPP", 1371); } // 4343F0: using guessed type int __fastcall Random(_DWORD, _DWORD); // 46AE48: using guessed type int dword_46AE48; // 489DDB: using guessed type char byte_489DDB; // 489DDC: using guessed type char byte_489DDC; // 489DE4: using guessed type char byte_489DE4; // 489DF3: using guessed type char byte_489DF3; // 489DF4: using guessed type char byte_489DF4; // 489DF5: using guessed type char byte_489DF5; // 489DF6: using guessed type char byte_489DF6; // 48EFB8: using guessed type int dword_48EFB8; // 42AD10: using guessed type int var_D44[7]; // 42AD10: using guessed type __int16 var_D28[256]; // 42AD10: using guessed type double var_880[255]; // 42AD10: using guessed type int var_74[11]; // 42AD10: using guessed type int var_89C[6]; //----- (0042CFD8) -------------------------------------------------------- signed int __stdcall sub_42CFD8(int a1, int a2, int a3) { signed int result; // eax@3 int v4; // [sp+30h] [bp-8h]@1 v4 = gTileTerrainTypes[*(&gpMap.tiles[a2 * gpMap.width].groundIndex + 10 * a1)]; if ( a3 ) { if ( a3 == 1 ) { if ( v4 == 2 ) result = sub_429170(&gOverlayDatabase[552], a1, a2); else result = sub_429170(&gOverlayDatabase[770], a1, a2); } else { switch ( v4 ) { case 1: result = sub_429170(&gOverlayDatabase[a3 + 28], a1, a2); break; case 2: result = sub_429170(&gOverlayDatabase[a3 + 39], a1, a2); break; case 3: result = sub_429170(&gOverlayDatabase[a3 + 50], a1, a2); break; case 4: result = sub_429170(&gOverlayDatabase[a3 + 61], a1, a2); break; case 5: case 8: result = sub_429170(&gOverlayDatabase[a3 + 72], a1, a2); break; case 6: result = sub_429170(&gOverlayDatabase[a3 + 85], a1, a2); break; case 7: result = sub_429170(&gOverlayDatabase[a3 + 17], a1, a2); break; default: result = sub_429170(&gOverlayDatabase[a3 + 4], a1, a2); break; } } } else { switch ( v4 ) { case 2: result = sub_429170(&gOverlayDatabase[556], a1, a2); break; case 4: result = sub_429170(&gOverlayDatabase[618], a1, a2); break; case 6: result = sub_429170(&gOverlayDatabase[774], a1, a2); break; case 5: result = sub_429170(&gOverlayDatabase[661], a1, a2); break; case 7: result = sub_429170(&gOverlayDatabase[743], a1, a2); break; case 1: case 3: result = sub_429170(&gOverlayDatabase[789], a1, a2); break; default: result = sub_429170(&gOverlayDatabase[774], a1, a2); break; } } return result; } // 42CFD8: using guessed type _DWORD __stdcall sub_42CFD8(_DWORD, _DWORD, _DWORD); //----- (0042D2AB) -------------------------------------------------------- signed int __thiscall editManager::PlaceRandomObjects(editManager *this, double *a1, signed int a2) { int v3; // ebx@23 int v4; // ebx@62 signed int result; // eax@86 int v6; // eax@88 int v7; // edx@88 int v8; // [sp+1Ch] [bp-94h]@31 int j; // [sp+20h] [bp-90h]@9 int v10; // [sp+24h] [bp-8Ch]@23 int v11; // [sp+28h] [bp-88h]@89 int v12; // [sp+2Ch] [bp-84h]@31 int v13; // [sp+30h] [bp-80h]@31 int v14; // [sp+34h] [bp-7Ch]@31 int v15; // [sp+38h] [bp-78h]@31 int v16; // [sp+3Ch] [bp-74h]@31 int v17; // [sp+40h] [bp-70h]@31 int v18; // [sp+44h] [bp-6Ch]@31 int v19; // [sp+48h] [bp-68h]@1 overlay *v20; // [sp+4Ch] [bp-64h]@1 overlay *v21; // [sp+50h] [bp-60h]@1 int v22; // [sp+58h] [bp-58h]@7 int i; // [sp+5Ch] [bp-54h]@7 overlay *v24; // [sp+60h] [bp-50h]@1 int v25; // [sp+64h] [bp-4Ch]@82 int x; // [sp+68h] [bp-48h]@7 int v27; // [sp+6Ch] [bp-44h]@49 overlay *v28; // [sp+70h] [bp-40h]@1 int v29; // [sp+74h] [bp-3Ch]@89 overlay *v30; // [sp+78h] [bp-38h]@1 overlay *v31; // [sp+7Ch] [bp-34h]@1 overlay *v32; // [sp+80h] [bp-30h]@1 overlay *v33; // [sp+84h] [bp-2Ch]@1 overlay *v34; // [sp+88h] [bp-28h]@1 overlay *v35; // [sp+8Ch] [bp-24h]@1 overlay *v36; // [sp+90h] [bp-20h]@1 overlay *v37; // [sp+94h] [bp-1Ch]@1 int v38; // [sp+98h] [bp-18h]@46 overlay *v39; // [sp+9Ch] [bp-14h]@1 int v40; // [sp+A0h] [bp-10h]@1 int v41; // [sp+A4h] [bp-Ch]@73 int v42; // [sp+A8h] [bp-8h]@7 int v43; // [sp+ACh] [bp-4h]@49 int a2a; // [sp+BCh] [bp+Ch]@1 a2a = (signed __int64)((double)a2 * 1.2); v20 = &gOverlayDatabase[214]; v24 = &gOverlayDatabase[215]; v21 = &gOverlayDatabase[216]; v39 = &gOverlayDatabase[217]; v28 = &gOverlayDatabase[218]; v19 = 0; sub_42EC3D(); v30 = &gOverlayDatabase[514]; v31 = &gOverlayDatabase[550]; v32 = &gOverlayDatabase[598]; v33 = &gOverlayDatabase[615]; v34 = &gOverlayDatabase[655]; v35 = &gOverlayDatabase[709]; v36 = &gOverlayDatabase[742]; v37 = &gOverlayDatabase[709]; v40 = dword_48EFB8 / 640; if ( dword_48EFB8 / 640 > 22 ) v40 = 22; if ( v40 < 1 ) v40 = 1; v40 *= 100; while ( v40 > 0 ) { --v40; x = Random(2, MAP_WIDTH - 3); v22 = Random(2, MAP_WIDTH - 2); v42 = 1; for ( i = -2; i <= 2; ++i ) { for ( j = -2; j <= 1; ++j ) { if ( !gTileTerrainTypes[*(&gpMap.tiles[(v22 + j) * gpMap.width].groundIndex + 10 * (x + i))] || (((unsigned __int8)*(&gpMap.tiles[x].bitfield_1_hasObject_1_isRoad_6_objTileset + 20 * i + 20 * (v22 + j) * gpMap.width) >> 2) & 0x3F) == 38 || (((unsigned __int8)*(&gpMap.tiles[x].field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset + 20 * i + 20 * (v22 + j) * gpMap.width) >> 2) & 0x3F) == 38 ) v42 = 0; } } for ( i = 0; MAP_WIDTH - 1 > i; ++i ) { for ( j = 0; MAP_HEIGHT - 1 > j; ++j ) { if ( (((unsigned __int8)*(&gpMap.tiles[i].bitfield_1_hasObject_1_isRoad_6_objTileset + 20 * j * gpMap.width) >> 2) & 0x3F) == 38 ) { if ( *(&gpMap.tiles[i].objType + 20 * j * gpMap.width) & 0x80 ) { v3 = abs(i - x); v10 = abs(j - v22) + v3; if ( v10 < 10 || Random(0, 40) > v10 ) v42 = 0; } } } } if ( v42 ) { v40 -= 100; sub_408334(x - 2, v22 - 2, 5, 4, 65535, 1, 0); sub_429170(&gOverlayDatabase[954], x - 2, v22); } } v8 = dword_48EFB8 / 140; sub_42A37A((int)&v8, a1); v12 = (v8 - 13) / 7 + 5; v14 = (v8 - 13) / 7 + 5; v18 = (v8 - 13) / 7 + 2; v17 = (v8 - 13) / 7 + 2; v16 = (v8 - 13) / 7 + 2; v15 = (v8 - 13) / 7 + 2; v13 = (v8 - 13) / 7 + 2; if ( v8 > 34 ) v8 = 34; if ( v8 < 6 ) v8 = 6; v8 *= 1000; while ( v8 > 0 ) { --v8; v42 = 1; x = Random(1, MAP_WIDTH - 2); v22 = Random(1, MAP_WIDTH - 2); if ( v42 && gTileTerrainTypes[*(&gpMap.tiles[v22 * gpMap.width].groundIndex + 10 * x)] && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[v22 * gpMap.width].groundIndex + 5 * (4 * x + 4))] && gTileTerrainTypes[*(&gpMap.tiles[(v22 - 1) * gpMap.width].groundIndex + 10 * x)] && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(v22 - 1) * gpMap.width].groundIndex + 5 * (4 * x + 4))] && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(v22 + 1) * gpMap.width].groundIndex + 5 * (4 * x - 4))] && !(((unsigned __int8)*(&gpMap.tiles[x].field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset + 20 * (v22 - 1) * gpMap.width) >> 2) & 0x3F) && !(((unsigned __int8)*(&gpMap.tiles[(v22 - 1) * gpMap.width].field__1_hasOverlay_1_hasLateOverlay_6_overlayTileset + 5 * (4 * x + 4)) >> 2) & 0x3F) && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[v22 * gpMap.width].groundIndex + 5 * (4 * x + 4))] == gTileTerrainTypes[*(&gpMap.tiles[v22 * gpMap.width].groundIndex + 10 * x)] ) { v38 = 0; v42 = 1; while ( v42 && v38 < 10 ) { ++v38; v43 = Random(0, 6); v27 = 4; if ( *(&v12 + v43) > 0 ) v27 += 30; if ( !v43 ) v27 += 8; if ( v43 == 2 ) v27 += 8; for ( i = 0; i < MAP_WIDTH; ++i ) { for ( j = 0; j < MAP_WIDTH; ++j ) { if ( *(&gpMap.tiles[i].objType + 20 * j * gpMap.width) == 151 || *(&gpMap.tiles[i].objType + 20 * j * gpMap.width) == 157 || *(&gpMap.tiles[i].objType + 20 * j * gpMap.width) == 129 ) { v4 = abs(i - x); v10 = abs(j - v22) + v4; if ( v10 < 10 ) v27 -= 10 - v10; if ( (!v43 && *(&gpMap.tiles[i].objType + 20 * j * gpMap.width) == 157 || v43 == 1 && *(&gpMap.tiles[i].objType + 20 * j * gpMap.width) == 129) && v10 < 15 ) v27 -= 2 * (15 - v10); } } } if ( Random(0, 40) < v27 ) { sub_408334(x, v22 - 1, 2, 2, 65535, 0, 0); sub_408334(x - 1, v22 + 1, 1, 1, 65535, 0, 0); v41 = sub_42CFD8(x, v22, v43); if ( v41 ) { ++v19; --*(&v12 + v43); if ( Random(0, 100) < a2a ) { if ( Random(0, 100) < 30 ) sub_429170(v21, x - 1, v22 + 1); else sub_429170(v39, x - 1, v22 + 1); } v8 -= 1000; } v42 = 0; } } } } v25 = dword_48EFB8 / 180; if ( dword_48EFB8 / 180 > 24 ) v25 = 24; if ( v25 < 8 ) v25 = 8; result = 100 * v25; v25 *= 100; while ( v25 > 0 ) { --v25; v42 = 1; x = Random(0, MAP_WIDTH - 1); v6 = Random(0, MAP_WIDTH - 1); v22 = v6; v7 = *(&gpMap.tiles[v6 * gpMap.width].groundIndex + 10 * x); result = gTileTerrainTypes[v7]; if ( gTileTerrainTypes[v7] ) { v11 = gTileTerrainTypes[*(&gpMap.tiles[v22 * gpMap.width].groundIndex + 10 * x)]; result = sub_4291A2(*(&v29 + v11), x, v22, 0); if ( result ) { v25 -= 100; result = sub_429170((overlay *)*(&v29 + v11), x, v22); } } } return result; } // 42CFD8: using guessed type _DWORD __stdcall sub_42CFD8(_DWORD, _DWORD, _DWORD); // 4343F0: using guessed type int __fastcall Random(_DWORD, _DWORD); // 48EFB8: using guessed type int dword_48EFB8; //----- (0042DE95) -------------------------------------------------------- char __thiscall editManager::PlaceRandomTreasures(editManager *this, int a1, int a2) { int v3; // eax@121 int v4; // eax@123 int v5; // edx@123 int v7; // [sp+20h] [bp-70h]@1 signed int v8; // [sp+24h] [bp-6Ch]@53 signed int v9; // [sp+2Ch] [bp-64h]@5 signed int v10; // [sp+34h] [bp-5Ch]@5 signed int v11; // [sp+38h] [bp-58h]@5 signed int v12; // [sp+40h] [bp-50h]@5 int v13; // [sp+44h] [bp-4Ch]@1 int v14; // [sp+4Ch] [bp-44h]@121 int v15; // [sp+50h] [bp-40h]@125 int y; // [sp+54h] [bp-3Ch]@3 overlay *v17; // [sp+58h] [bp-38h]@1 overlay *v18; // [sp+5Ch] [bp-34h]@1 int x; // [sp+60h] [bp-30h]@3 overlay *v20; // [sp+64h] [bp-2Ch]@1 overlay *v21; // [sp+68h] [bp-28h]@1 int v22; // [sp+6Ch] [bp-24h]@5 overlay *v23; // [sp+70h] [bp-20h]@1 int v24; // [sp+74h] [bp-1Ch]@5 int v25; // [sp+78h] [bp-18h]@5 int v26; // [sp+7Ch] [bp-14h]@5 int v27; // [sp+80h] [bp-10h]@5 overlay *v28; // [sp+84h] [bp-Ch]@1 overlay *v29; // [sp+88h] [bp-8h]@1 int v30; // [sp+8Ch] [bp-4h]@1 v17 = &gOverlayDatabase[214]; v20 = &gOverlayDatabase[215]; v18 = &gOverlayDatabase[216]; v23 = &gOverlayDatabase[217]; v21 = &gOverlayDatabase[218]; v28 = &gOverlayDatabase[834]; v29 = &gOverlayDatabase[832]; v30 = dword_48EFB8 / 40; sub_42A37A((int)&v30, (double *)a1); v30 *= 100; v13 = 0; v7 = 0; while ( v30 > 0 ) { --v30; x = Random(1, MAP_WIDTH - 2); y = Random(1, MAP_WIDTH - 2); if ( gTileTerrainTypes[*(&gpMap.tiles[y * gpMap.width].groundIndex + 10 * x)] && !(((unsigned __int8)*(&gpMap.tiles[x].bitfield_1_hasObject_1_isRoad_6_objTileset + 20 * y * gpMap.width) >> 2) & 0x3F) ) { sub_408334(x, y, 1, 1, 65535, 0, 0); v22 = Random(0, 100); v9 = 0; v24 = 0; v25 = 0; v12 = 0; v27 = 0; v26 = 0; v11 = 0; v10 = 0; if ( !y || !gTileTerrainTypes[*(&gpMap.tiles[(y - 1) * gpMap.width].groundIndex + 10 * x)] || *(&gpMap.tiles[x].objectIndex + 20 * (y - 1) * gpMap.width) != 255 && !(*(&gpMap.tiles[x].field_4_1_1_isShadow_1_13_extraInfo + 10 * (y - 1) * gpMap.width) & 1) && !((*(&gpMap.tiles[x].field_4_1_1_isShadow_1_13_extraInfo + 10 * (y - 1) * gpMap.width) >> 1) & 1) ) v12 = 1; if ( MAP_HEIGHT - 1 == y || !gTileTerrainTypes[*(&gpMap.tiles[(y + 1) * gpMap.width].groundIndex + 10 * x)] || *(&gpMap.tiles[x].objectIndex + 20 * (y + 1) * gpMap.width) != 255 && !(*(&gpMap.tiles[x].field_4_1_1_isShadow_1_13_extraInfo + 10 * (y + 1) * gpMap.width) & 1) && !((*(&gpMap.tiles[x].field_4_1_1_isShadow_1_13_extraInfo + 10 * (y + 1) * gpMap.width) >> 1) & 1) ) v25 = 1; if ( !x || !gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[y * gpMap.width].groundIndex + 5 * (4 * x - 4))] || *(&gpMap.tiles[y * gpMap.width].objectIndex + 5 * (4 * x - 4)) != 255 && !(*(unsigned __int16 *)((char *)&gpMap.tiles[y * gpMap.width].field_4_1_1_isShadow_1_13_extraInfo + 5 * (4 * x - 4)) & 1) && !((*(unsigned __int16 *)((char *)&gpMap.tiles[y * gpMap.width].field_4_1_1_isShadow_1_13_extraInfo + 5 * (4 * x - 4)) >> 1) & 1) ) v9 = 1; if ( MAP_WIDTH - 1 == x || !gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[y * gpMap.width].groundIndex + 5 * (4 * x + 4))] || *(&gpMap.tiles[y * gpMap.width].objectIndex + 5 * (4 * x + 4)) != 255 && !(*(unsigned __int16 *)((char *)&gpMap.tiles[y * gpMap.width].field_4_1_1_isShadow_1_13_extraInfo + 5 * (4 * x + 4)) & 1) && !((*(unsigned __int16 *)((char *)&gpMap.tiles[y * gpMap.width].field_4_1_1_isShadow_1_13_extraInfo + 5 * (4 * x + 4)) >> 1) & 1) ) v24 = 1; if ( MAP_WIDTH + 1 > x && y > 0 && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(y - 1) * gpMap.width].groundIndex + 5 * (4 * x + 4))] && !(((unsigned __int8)*(&gpMap.tiles[(y - 1) * gpMap.width].bitfield_1_hasObject_1_isRoad_6_objTileset + 5 * (4 * x + 4)) >> 2) & 0x3F) ) v26 = 1; if ( MAP_WIDTH + 1 > x && MAP_HEIGHT - 1 > y && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(y + 1) * gpMap.width].groundIndex + 5 * (4 * x + 4))] && !(((unsigned __int8)*(&gpMap.tiles[(y + 1) * gpMap.width].bitfield_1_hasObject_1_isRoad_6_objTileset + 5 * (4 * x + 4)) >> 2) & 0x3F) ) v27 = 1; if ( x > 0 && MAP_HEIGHT - 1 > y && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(y + 1) * gpMap.width].groundIndex + 5 * (4 * x - 4))] && !(((unsigned __int8)*(&gpMap.tiles[(y + 1) * gpMap.width].bitfield_1_hasObject_1_isRoad_6_objTileset + 5 * (4 * x - 4)) >> 2) & 0x3F) ) v11 = 1; if ( x > 0 && y > 0 && gTileTerrainTypes[*(__int16 *)((char *)&gpMap.tiles[(y - 1) * gpMap.width].groundIndex + 5 * (4 * x - 4))] && !(((unsigned __int8)*(&gpMap.tiles[(y - 1) * gpMap.width].bitfield_1_hasObject_1_isRoad_6_objTileset + 5 * (4 * x - 4)) >> 2) & 0x3F) ) v10 = 1; if ( !v24 || !v9 || !v12 || !v25 ) { ++v13; v30 -= 100; v8 = 0; if ( 5 * v7 < v13 ) { if ( !v9 || !v25 || !v26 || v11 || v27 || v10 ) { if ( !v9 || !v12 || !v27 || v10 || v11 || v26 ) { if ( !v24 || !v12 || !v11 || v26 || v10 || v27 ) { if ( v24 && v25 && v10 && !v27 && !v11 && !v26 ) v8 = 4; } else { v8 = 3; } } else { v8 = 2; } } else { v8 = 1; } } if ( v8 <= 0 ) { if ( Random(0, 100) >= 90 ) { if ( gTileTerrainTypes[*(&gpMap.tiles[y * gpMap.width].groundIndex + 10 * x)] != 5 || v22 >= 12 ) { if ( v22 >= 2 || Random(0, 100) >= 30 ) { if ( v22 >= 35 ) { if ( v22 >= 40 ) sub_429170(&gOverlayDatabase[833], x, y); else sub_429170(&gOverlayDatabase[337], x, y); } else { sub_429170(v28, x, y); } } else { sub_429170(v29, x, y); } } else { sub_429170(v29, x, y); } } else { v30 += 101; --v13; } } else { ++v7; if ( v22 >= 20 ) { if ( v22 >= 75 ) sub_429170(&gOverlayDatabase[339], x, y); else sub_429170(&gOverlayDatabase[338], x, y); } else { sub_429170(v28, x, y); } switch ( v8 ) { case 1: sub_408334(x + 1, y - 1, 1, 1, 65535, 0, 0); if ( Random(0, 100) < 50 ) sub_429170(v23, x + 1, y - 1); else sub_429170(v21, x + 1, y - 1); break; case 2: sub_408334(x + 1, y + 1, 1, 1, 65535, 0, 0); if ( Random(0, 100) < 50 ) sub_429170(v23, x + 1, y + 1); else sub_429170(v21, x + 1, y + 1); break; case 3: sub_408334(x - 1, y + 1, 1, 1, 65535, 0, 0); if ( Random(0, 100) < 50 ) sub_429170(v23, x - 1, y + 1); else sub_429170(v21, x - 1, y + 1); break; default: sub_408334(x - 1, y - 1, 1, 1, 65535, 0, 0); if ( Random(0, 100) < 50 ) sub_429170(v23, x - 1, y - 1); else sub_429170(v21, x - 1, y - 1); break; } } } } } v14 = dword_48EFB8 / 130; sub_42A37A((int)&v14, (double *)a2); LOBYTE(v3) = 100 * v14; v14 *= 100; while ( v14 > 0 ) { --v14; x = Random(0, MAP_WIDTH - 1); v4 = Random(0, MAP_WIDTH - 1); y = v4; v5 = *(&gpMap.tiles[v4 * gpMap.width].groundIndex + 10 * x); v3 = gTileTerrainTypes[v5]; if ( gTileTerrainTypes[v5] ) { LOBYTE(v3) = (unsigned __int8)*(&gpMap.tiles[x].bitfield_1_hasObject_1_isRoad_6_objTileset + 20 * y * gpMap.width) >> 2; if ( !(v3 & 0x3F) ) { v14 -= 100; sub_408334(x, y, 1, 1, 65535, 0, 0); v15 = Random(0, 100); if ( v15 >= 40 ) { if ( v15 >= 80 ) LOBYTE(v3) = sub_429170(v23, x, y); else LOBYTE(v3) = sub_429170(v18, x, y); } else { LOBYTE(v3) = sub_429170(v20, x, y); } } } } return v3; } // 4343F0: using guessed type int __fastcall Random(_DWORD, _DWORD); // 48EFB8: using guessed type int dword_48EFB8; //----- (0042EC3D) -------------------------------------------------------- int __cdecl sub_42EC3D() { int result; // eax@2 signed int v1; // ST18_4@14 signed int v2; // eax@15 mapCell *v3; // [sp+14h] [bp-44h]@5 int j; // [sp+18h] [bp-40h]@3 int i; // [sp+1Ch] [bp-3Ch]@1 signed int v6; // [sp+24h] [bp-34h]@13 int v7; // [sp+28h] [bp-30h]@1 int v8; // [sp+2Ch] [bp-2Ch]@1 int v9; // [sp+30h] [bp-28h]@1 int v10; // [sp+34h] [bp-24h]@1 int v11; // [sp+38h] [bp-20h]@1 int v12; // [sp+3Ch] [bp-1Ch]@1 int v13; // [sp+40h] [bp-18h]@1 int v14; // [sp+44h] [bp-14h]@1 int v15; // [sp+48h] [bp-10h]@1 int v16; // [sp+4Ch] [bp-Ch]@15 int v17; // [sp+50h] [bp-8h]@5 int v18; // [sp+54h] [bp-4h]@15 v7 = 55; v8 = 120; v9 = 100; v10 = 100; v11 = 120; v12 = 80; v13 = 120; v14 = 80; v15 = 80; for ( i = 0; ; ++i ) { result = MAP_WIDTH; if ( i >= MAP_WIDTH ) break; for ( j = 0; j < MAP_HEIGHT; ++j ) { v3 = &gpMap.tiles[j * gpMap.width] + i; v17 = gTileTerrainTypes[*(&gpMap.tiles[j * gpMap.width].groundIndex + 10 * i)]; if ( *(&v7 + gTileTerrainTypes[*(&gpMap.tiles[j * gpMap.width].groundIndex + 10 * i)]) >= Random(1, 1000) && v3->objectIndex == 255 && v3->overlayIndex == 255 && (!unknownTerrainTileAttribute[v3->groundIndex] || unknownTerrainTileAttribute[v3->groundIndex] == 19 || unknownTerrainTileAttribute[v3->groundIndex] == 21 || unknownTerrainTileAttribute[v3->groundIndex] == 18 || unknownTerrainTileAttribute[v3->groundIndex] == 20) ) { v6 = 100; while ( 1 ) { v1 = v6--; if ( v1 <= 0 ) break; v18 = Random(0, 955); v2 = Random(1, 100); v16 = (int)&gOverlayDatabase[v18]; if ( gOverlayDatabase[v18].field_E >= v2 && (1 << v17) & *(_DWORD *)(v16 + 25) ) { if ( sub_4291A2(v16, i, j, 0) ) { sub_429170((overlay *)v16, i, j); v6 = 0; } } } } } } return result; } // 4343F0: using guessed type int __fastcall Random(_DWORD, _DWORD); //----- (0042F180) -------------------------------------------------------- int __stdcall mouseManager::Main(int a1) { return 0; } //----- (0042F6E0) -------------------------------------------------------- int __thiscall mouseManager::NewUpdate(int this, int a2) { int result; // eax@1 int v3; // esi@1 __int32 v4; // eax@7 __int32 v5; // edx@7 int v6; // edx@10 int v7; // edi@12 int v8; // edx@12 int v9; // ecx@12 int v10; // edx@12 int v11; // ebx@12 int v12; // eax@12 int v13; // ecx@24 int v14; // ecx@32 int v15; // eax@34 int v16; // ecx@51 int v17; // ebx@51 int v18; // edi@51 int v19; // edx@51 int v20; // ebp@54 int v21; // edx@54 int v22; // ebx@54 result = *(_DWORD *)(this + 134); v3 = this; if ( !result || a2 ) { result = *(_DWORD *)(this + 130); if ( result ) { result = bInNewMouseUpdate; if ( !bInNewMouseUpdate ) { bInNewMouseUpdate = 1; ++gbPutzingWithMouseCtr; if ( !a2 ) { result = gbColorMice; if ( !gbColorMice ) goto LABEL_61; GetCursorPos(&Point); ScreenToClient(hwndApp, &Point); v4 = 640 * Point.x / iMainWinScreenWidth; *(_DWORD *)(v3 + 86) = v4; v5 = 480 * Point.y / iMainWinScreenHeight; *(_DWORD *)(v3 + 90) = v5; CheckChangeCursor(v4, v5, 0); } result = gbColorMice; if ( gbColorMice ) { if ( a2 || (v6 = *(_DWORD *)(v3 + 70), *(_DWORD *)(v3 + 86) - LOBYTE((&iHotSpot)[v6]) != *(_DWORD *)(v3 + 102)) || (result = *(_DWORD *)(v3 + 90) - byte_486179[v6 * 2], result != *(_DWORD *)(v3 + 106)) ) { dword_4902B0 = *(_DWORD *)(v3 + 94); dword_490D38 = *(_DWORD *)(v3 + 98); dword_490D3C = *(_DWORD *)(v3 + 110); dword_491948 = *(_DWORD *)(v3 + 114); v7 = *(_DWORD *)(v3 + 70); v8 = *(_DWORD *)(v3 + 90); v9 = *(_DWORD *)(v3 + 86) - LOBYTE((&iHotSpot)[v7]); *(_DWORD *)(v3 + 102) = v9; v10 = v8 - byte_486179[v7 * 2]; *(_DWORD *)(v3 + 106) = v10; v11 = LOBYTE((&iMouseSize)[v7]) + v9 - 1; *(_DWORD *)(v3 + 110) = v11; v12 = byte_4860B9[v7 * 2] + v10 - 1; *(_DWORD *)(v3 + 114) = v12; if ( v11 > 639 ) *(_DWORD *)(v3 + 110) = 639; if ( v12 > 479 ) *(_DWORD *)(v3 + 114) = 479; *(_DWORD *)(v3 + 94) = 0; if ( v9 >= 0 ) *(_DWORD *)(v3 + 94) = v9; *(_DWORD *)(v3 + 98) = 0; if ( v10 >= 0 ) *(_DWORD *)(v3 + 98) = v10; if ( dword_4902B0 <= 639 && dword_490D38 <= 479 && dword_490D3C >= 0 && dword_491948 >= 0 ) { v13 = *(_DWORD *)(v3 + 94); if ( dword_490D3C >= v13 && *(_DWORD *)(v3 + 110) >= dword_4902B0 && *(_DWORD *)(v3 + 98) <= dword_491948 && *(_DWORD *)(v3 + 114) >= dword_490D38 ) { if ( dword_4902B0 > v13 ) dword_4902B0 = *(_DWORD *)(v3 + 94); if ( dword_490D38 > *(_DWORD *)(v3 + 98) ) dword_490D38 = *(_DWORD *)(v3 + 98); v14 = *(_DWORD *)(v3 + 94); if ( dword_490D3C < LOBYTE((&iMouseSize)[*(_DWORD *)(v3 + 70)]) + v14 - 1 ) dword_490D3C = LOBYTE((&iMouseSize)[*(_DWORD *)(v3 + 70)]) + v14 - 1; v15 = byte_4860B9[2 * *(_DWORD *)(v3 + 70)] + *(_DWORD *)(v3 + 98) - 1; if ( dword_491948 >= v15 ) goto LABEL_43; goto LABEL_42; } if ( dword_490D3C > 639 ) dword_490D3C = 639; if ( dword_491948 > 479 ) dword_491948 = 479; BlitBitmapToScreenNoMouseCheck( dword_490D38, dword_490D3C - dword_4902B0 + 1, dword_491948 - dword_490D38 + 1, dword_4902B0, dword_490D38); } dword_4902B0 = *(_DWORD *)(v3 + 94); dword_490D38 = *(_DWORD *)(v3 + 98); dword_490D3C = *(_DWORD *)(v3 + 94) + LOBYTE((&iMouseSize)[*(_DWORD *)(v3 + 74)]) - 1; v15 = *(_DWORD *)(v3 + 98) + byte_4860B9[2 * *(_DWORD *)(v3 + 74)] - 1; LABEL_42: dword_491948 = v15; LABEL_43: if ( dword_4902B0 <= 639 && dword_490D38 <= 479 && dword_490D3C >= 0 && dword_491948 >= 0 ) { if ( dword_490D3C > 639 ) dword_490D3C = 639; if ( dword_491948 > 479 ) dword_491948 = 479; v16 = *(_DWORD *)(v3 + 94); v17 = *(_DWORD *)(v3 + 70); v18 = v3 + 118; v19 = LOBYTE((&iMouseSize)[v17]); if ( v16 + v19 <= 640 ) *(_DWORD *)v18 = v19; else *(_DWORD *)v18 = 640 - v16; v20 = byte_4860B9[v17 * 2]; v21 = *(_DWORD *)(v3 + 98); v22 = v3 + 122; if ( v21 + v20 <= 480 ) *(_DWORD *)v22 = v20; else *(_DWORD *)v22 = 480 - v21; bitmap::CopyToCareful(*(_DWORD *)(v3 + 54), 0, 0, v16, v21, *(_DWORD *)v18, *(_DWORD *)v22); if ( !*(_DWORD *)(v3 + 134) ) IconToBitmap( *(icon **)(v3 + 62), gpWindowManager->screenBuffer, *(_DWORD *)(v3 + 102), *(_DWORD *)(v3 + 106), *(_DWORD *)(v3 + 58), 1, 0, 0, 0x280u, 480, 0); BlitBitmapToScreenNoMouseCheck( dword_490D38, dword_490D3C - dword_4902B0 + 1, dword_491948 - dword_490D38 + 1, dword_4902B0, dword_490D38); bitmap::CopyToCareful( gpWindowManager->screenBuffer, *(_DWORD *)(v3 + 94), *(_DWORD *)(v3 + 98), 0, 0, *(_DWORD *)v18, *(_DWORD *)v22); } result = *(_DWORD *)(v3 + 70); *(_DWORD *)(v3 + 74) = result; goto LABEL_61; } } LABEL_61: bInNewMouseUpdate = 0; --gbPutzingWithMouseCtr; return result; } } } return result; } // 439ED0: using guessed type _DWORD __stdcall bitmap__CopyToCareful(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // 46AAC8: using guessed type int gbColorMice; // 46ADA4: using guessed type int gbPutzingWithMouseCtr; // 4860B8: using guessed type signed __int8 (*iMouseSize)[2]; // 486178: using guessed type signed __int8 (*iHotSpot)[2]; // 48623C: using guessed type int bInNewMouseUpdate; // 4902B0: using guessed type int dword_4902B0; // 490D38: using guessed type int dword_490D38; // 490D3C: using guessed type int dword_490D3C; // 491948: using guessed type int dword_491948; //----- (0042FBC0) -------------------------------------------------------- int __thiscall mouseManager::SaveAndDraw(int this) { int v1; // edx@1 int v2; // esi@1 int v3; // edi@1 int v4; // eax@1 int v5; // ecx@1 int v6; // eax@3 int v7; // edi@3 int v8; // edx@3 int v9; // ecx@5 v1 = *(_DWORD *)(this + 102); v2 = this; v3 = *(_DWORD *)(this + 70); v4 = LOBYTE((&iMouseSize)[v3]); v5 = this + 118; if ( v1 + v4 > 640 ) v4 = 640 - v1; *(_DWORD *)v5 = v4; v6 = byte_4860B9[v3 * 2]; v7 = *(_DWORD *)(v2 + 106); v8 = v2 + 122; if ( v7 + v6 > 480 ) v6 = 480 - v7; v9 = *(_DWORD *)v5; *(_DWORD *)v8 = v6; bitmap::CopyToCareful(*(_DWORD *)(v2 + 54), 0, 0, *(_DWORD *)(v2 + 94), *(_DWORD *)(v2 + 98), v9, *(_DWORD *)v8); return IconToBitmap( *(icon **)(v2 + 62), gpWindowManager->screenBuffer, *(_DWORD *)(v2 + 102), *(_DWORD *)(v2 + 106), *(_DWORD *)(v2 + 58), 1, 0, 0, 0x280u, 480, 0); } // 439ED0: using guessed type _DWORD __stdcall bitmap__CopyToCareful(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // 4860B8: using guessed type signed __int8 (*iMouseSize)[2]; //----- (0042FCA0) -------------------------------------------------------- int __thiscall mouseManager::ReallyHidePointer(int this) { int result; // eax@2 if ( gbColorMice ) { result = *(_DWORD *)(this + 134) + 1; *(_DWORD *)(this + 134) = result; if ( result == 1 ) result = mouseManager::NewUpdate(this, 1); } else { result = ShowCursor(0); } return result; } // 46AAC8: using guessed type int gbColorMice; //----- (0042FCD0) -------------------------------------------------------- int __thiscall mouseManager::ReallyShowPointer(int this) { int v1; // esi@1 int result; // eax@2 __int32 v3; // eax@5 __int32 v4; // edx@5 v1 = this; if ( gbColorMice ) { result = *(_DWORD *)(this + 134); if ( result > 0 ) { --result; *(_DWORD *)(this + 134) = result; if ( !result ) { ++gbPutzingWithMouseCtr; if ( gbColorMice ) { GetCursorPos(&Point); ScreenToClient(hwndApp, &Point); v3 = 640 * Point.x / iMainWinScreenWidth; *(_DWORD *)(v1 + 86) = v3; v4 = 480 * Point.y / iMainWinScreenHeight; *(_DWORD *)(v1 + 90) = v4; CheckChangeCursor(v3, v4, 0); } mouseManager::NewUpdate(v1, 1); result = gbPutzingWithMouseCtr-- - 1; } } } else { result = ShowCursor(1); } return result; } // 46AAC8: using guessed type int gbColorMice; // 46ADA4: using guessed type int gbPutzingWithMouseCtr; //----- (0042FE50) -------------------------------------------------------- bool __thiscall mouseManager::IsVis(int this) { return *(_DWORD *)(this + 134) < 1u; } //----- (0042FE60) -------------------------------------------------------- int __thiscall mouseManager::SetColorMice(int this, int a2) { int result; // eax@1 int v3; // edi@1 int v4; // esi@2 int v5; // ebx@2 int v6; // eax@3 int v7; // ecx@6 int v8; // edx@6 int v9; // ebp@6 int v10; // eax@7 int v11; // eax@8 __int32 v12; // eax@10 __int32 v13; // edx@10 result = a2; v3 = this; if ( a2 != gbColorMice ) { v4 = gpWindowManager->cycleColors; gpWindowManager->cycleColors = 0; v5 = bInNewMouseUpdate; ++gbPutzingWithMouseCtr; bInNewMouseUpdate = 0; if ( gbColorMice ) { v6 = *(_DWORD *)(this + 134) + 1; *(_DWORD *)(this + 134) = v6; if ( v6 == 1 ) mouseManager::NewUpdate(this, 1); } else { ShowCursor(0); } v7 = *(_DWORD *)(v3 + 58); v8 = *(_DWORD *)(v3 + 66); v9 = *(_DWORD *)(v3 + 126); *(_DWORD *)(v3 + 130) = 0; gbColorMice = a2; *(_DWORD *)(v3 + 58) = -99; *(_DWORD *)(v3 + 66) = -1; *(_DWORD *)(v3 + 126) = 0; mouseManager::SetPointer(&unk_486384, v7, v8); *(_DWORD *)(v3 + 130) = 1; *(_DWORD *)(v3 + 126) = v9; if ( gbColorMice ) { v10 = *(_DWORD *)(v3 + 134); if ( v10 > 0 ) { v11 = v10 - 1; *(_DWORD *)(v3 + 134) = v11; if ( !v11 ) { ++gbPutzingWithMouseCtr; if ( gbColorMice ) { GetCursorPos(&Point); ScreenToClient(hwndApp, &Point); v12 = 640 * Point.x / iMainWinScreenWidth; *(_DWORD *)(v3 + 86) = v12; v13 = 480 * Point.y / iMainWinScreenHeight; *(_DWORD *)(v3 + 90) = v13; CheckChangeCursor(v12, v13, 0); } mouseManager::NewUpdate(v3, 1); --gbPutzingWithMouseCtr; } } } else { ShowCursor(1); } result = gbPutzingWithMouseCtr - 1; bInNewMouseUpdate = v5; --gbPutzingWithMouseCtr; gpWindowManager->cycleColors = v4; } return result; } // 42F190: using guessed type _DWORD __stdcall mouseManager__SetPointer(_DWORD, _DWORD, _DWORD); // 46AAC8: using guessed type int gbColorMice; // 46ADA4: using guessed type int gbPutzingWithMouseCtr; // 48623C: using guessed type int bInNewMouseUpdate; //----- (00431AE0) -------------------------------------------------------- void __thiscall CycleColors(void *this) { void *v1; // ebx@1 int v2; // eax@12 int v3; // esi@14 unsigned int v4; // ecx@14 int v5; // edx@15 int v6; // edx@15 __int16 v7; // ST1C_2@17 char v8; // ST1E_1@17 __int16 v9; // ST1C_2@17 char v10; // ST1E_1@17 __int16 v11; // ST1C_2@17 char v12; // ST1E_1@17 __int16 v13; // ST1C_2@17 char v14; // ST1E_1@17 __int16 v15; // ST1C_2@17 char v16; // ST1E_1@17 __int16 v17; // ST1C_2@19 char v18; // ST1E_1@19 int v19; // eax@22 int v20; // edx@24 int v21; // edx@26 int v22; // ecx@27 char v23; // [sp+14h] [bp-8h]@14 char v24; // [sp+15h] [bp-7h]@14 char v25; // [sp+16h] [bp-6h]@14 char v26; // [sp+17h] [bp-5h]@14 char v27; // [sp+18h] [bp-4h]@14 char v28; // [sp+19h] [bp-3h]@14 char v29; // [sp+1Ah] [bp-2h]@14 char v30; // [sp+1Bh] [bp-1h]@14 ++iCycle1Count; v1 = this; if ( gpWindowManager && gpBufferPalette && gpWindowManager->ready == 1 && (gpWindowManager->cycleColors || this) ) { if ( giCycleType ) gbEveryOtherCycle = 1 - gbEveryOtherCycle; else gbEveryOtherCycle = 1; if ( gbEveryOtherCycle ) { if ( giCycleType == 2 ) { iCombatCycleFrame = (((unsigned __int64)(iCombatCycleFrame + 1) >> 32) ^ abs(iCombatCycleFrame + 1) & 7) - ((unsigned __int64)(iCombatCycleFrame + 1) >> 32); if ( iCombatCycleFrame < 5 ) v2 = iCombatCycleFrame; else v2 = 8 - iCombatCycleFrame; v23 = -104; v24 = 67; v25 = 89; v26 = -75; v27 = 112; v3 = 0; v4 = (unsigned int)&gCyclePal; v28 = -37; v29 = -121; v30 = 16; do { v4 += 3; v5 = 3 * v2 + (unsigned __int8)*(&v23 + v3++); v6 = *(_DWORD *)(gpBufferPalette + 16) + 3 * v5; *(_WORD *)(v4 - 3) = *(_WORD *)v6; *(_BYTE *)(v4 - 1) = *(_BYTE *)(v6 + 2); } while ( v4 < (unsigned int)&unk_4919C0 ); goto LABEL_31; } v7 = word_4919B1; v8 = *((_BYTE *)&word_4919B1 + 2); memmove(&unk_4919AB, &gCyclePal, 9u); gCyclePal = v7; *((_BYTE *)&gCyclePal + 2) = v8; v9 = unk_4919BD; v10 = *((_BYTE *)&unk_4919BD + 2); memmove(&unk_4919B7, &unk_4919B4, 9u); unk_4919B4 = v9; *((_BYTE *)&unk_4919B4 + 2) = v10; v11 = unk_4919DB; v12 = *((_BYTE *)&unk_4919DB + 2); memmove(&unk_4919DB, &unk_4919DE, 0xCu); unk_4919E7 = v11; *((_BYTE *)&unk_4919E7 + 2) = v12; v13 = unk_4919F9; v14 = *((_BYTE *)&unk_4919F9 + 2); memmove(&unk_4919F3, &unk_4919F0, 9u); unk_4919F0 = v13; *((_BYTE *)&unk_4919F0 + 2) = v14; v15 = unk_491A05; v16 = *((_BYTE *)&unk_491A05 + 2); memmove(&unk_4919FF, &unk_4919FC, 9u); unk_4919FC = v15; *((_BYTE *)&unk_4919FC + 2) = v16; } if ( !giCycleType ) { v17 = word_4919ED; v18 = *((_BYTE *)&word_4919ED + 2); memmove(&word_4919ED, &unk_4919EA, 3u); unk_4919EA = v17; *((_BYTE *)&unk_4919EA + 2) = v18; goto LABEL_31; } if ( giCycleType == 1 ) { iCombatCycleFrame = (((unsigned __int64)(iCombatCycleFrame + 1) >> 32) ^ abs(iCombatCycleFrame + 1) & 7) - ((unsigned __int64)(iCombatCycleFrame + 1) >> 32); if ( iCombatCycleFrame < 5 ) v19 = iCombatCycleFrame; else v19 = 8 - iCombatCycleFrame; v20 = *(_DWORD *)(gpBufferPalette + 16) + 12 * v19 + 330; } else { if ( giCycleType != 3 ) goto LABEL_31; v21 = (iCombatCycleFrame + 1) % 6; iCombatCycleFrame = v21; if ( v21 < 4 ) v22 = iCombatCycleFrame; else v22 = 6 - v21; v20 = 21 * v22 + *(_DWORD *)(gpBufferPalette + 16) + 324; } unk_4919EA = *(_WORD *)v20; *((_BYTE *)&unk_4919EA + 2) = *(_BYTE *)(v20 + 2); LABEL_31: memcpy((void *)(*(_DWORD *)(gpBufferPalette + 16) + 642), &gCyclePal, 0x54u); ++iCycle2Count; if ( !v1 ) { ++iCycle3Count; UpdatePalette(*(void **)(gpBufferPalette + 16)); } } } // 46AAB8: using guessed type int giCycleType; // 486590: using guessed type int iCombatCycleFrame; // 486594: using guessed type int gbEveryOtherCycle; // 486598: using guessed type int iCycle1Count; // 48659C: using guessed type int iCycle2Count; // 4865A0: using guessed type int iCycle3Count; // 48EAD0: using guessed type int gpBufferPalette; // 4919B1: using guessed type __int16 word_4919B1; // 4919ED: using guessed type __int16 word_4919ED; //----- (004323D0) -------------------------------------------------------- void __thiscall heroWindowManager::FadeScreen(void *this, int a2, signed int a3, int a4) { void *v4; // esi@1 int v5; // edi@6 v4 = this; if ( a4 ) SetPalette(*(signed __int8 **)(a4 + 16), 0); if ( a2 ) { if ( a2 == 1 ) { dword_491A0C = *(_DWORD *)((char *)v4 + 86); *(_DWORD *)((char *)v4 + 86) = 0; PollSound(); FadeOut(a3); PollSound(); } else { PollSound(); } } else { v5 = *(_DWORD *)((char *)v4 + 86); *(_DWORD *)((char *)v4 + 86) = 0; PollSound(); FadeIn(a3); *(_DWORD *)((char *)v4 + 86) = v5 | dword_491A0C; PollSound(); } } // 4357D0: using guessed type void __fastcall SetPalette(signed __int8 *, _DWORD); // 491A0C: using guessed type int dword_491A0C; //----- (004324E0) -------------------------------------------------------- void *__thiscall iconWidget::_scalar_deleting_destructor_(void *Memory, char a2) { int v2; // eax@1 void *v3; // esi@1 v2 = *((_DWORD *)Memory + 8); *(_DWORD *)Memory = &iconWidget::_vftable_; v3 = Memory; resourceManager::Dispose(v2); widget::_widget(v3); if ( a2 & 1 ) operator delete(v3); return v3; } // 4310B0: using guessed type _DWORD __stdcall resourceManager__Dispose(_DWORD); // 449220: using guessed type int (*iconWidget___vftable_)(); //----- (00432DB0) -------------------------------------------------------- void __thiscall font::DrawString(font *this, char *txt, int a3, int a4, int a5) { this->field_18 = 0; font::DrawStringExecute(this, txt, a3, a4, a5, 0, 0, 640, 480); } //----- (00433560) -------------------------------------------------------- _DWORD __thiscall icon::FillToBuffer(icon *this, int a2, int a3, int a4, int a5, int a6, int a7) { int result; // eax@2 int v8; // edi@5 int v9; // ebx@5 int v10; // ebp@5 if ( a6 ) { result = FlipMonoIconToBitmap((int)this, (int)gpWindowManager->screenBuffer, a2, a3, a4, a5, 0, 0, 0, 0, 0); } else if ( !dword_46AE10 || !a7 || (v8 = a2 + this->headersAndImageData[a4].offsetX, *(_DWORD *)a7 = v8, v9 = this->headersAndImageData[a4].width + v8 - 1, *(_DWORD *)(a7 + 4) = v9, v10 = a3 + this->headersAndImageData[a4].offsetY, *(_DWORD *)(a7 + 8) = v10, result = this->headersAndImageData[a4].height + v10 - 1, *(_DWORD *)(a7 + 12) = result, gbCurrArmyDrawn) && v8 <= giMaxExtentX && giMinExtentX <= v9 && v10 <= giMaxExtentY && giMinExtentY <= result ) { result = MonoIconToBitmap((int)this, (int)gpWindowManager->screenBuffer, a2, a3, a4, a5, 0, 0, 0, 0, 0); } return result; } // 46AE04: using guessed type int gbCurrArmyDrawn; // 46AE10: using guessed type int dword_46AE10; // 48ED98: using guessed type int giMaxExtentX; // 48ED9C: using guessed type int giMaxExtentY; // 48EFAC: using guessed type int giMinExtentX; // 48EFB0: using guessed type int giMinExtentY; //----- (00433670) -------------------------------------------------------- void __fastcall FillBitmapArea(int a1, int a2, int a3, unsigned int a4, int a5, char a6) { int v6; // ebp@1 int v7; // ecx@1 int v8; // ecx@1 int v9; // edi@2 int v10; // eax@2 v6 = a1; v7 = *(_DWORD *)(a1 + 22) + a3 * *(_WORD *)(a1 + 18); dword_491A10 = 0; v8 = a2 + v7; dword_491A14 = v8; if ( a5 > 0 ) { do { v9 = dword_491A14; BYTE1(v8) = a6; LOBYTE(v8) = a6; v10 = v8 << 16; LOWORD(v10) = v8; memset32((void *)dword_491A14, v10, a4 >> 2); memset((void *)(v9 + 4 * (a4 >> 2)), a6, a4 & 3); v8 = dword_491A10 + 1; dword_491A14 += *(_WORD *)(v6 + 18); dword_491A10 = v8; } while ( v8 < a5 ); } } // 491A10: using guessed type int dword_491A10; // 491A14: using guessed type int dword_491A14; //----- (004336F0) -------------------------------------------------------- int __fastcall sub_4336F0(int a1, int a2, int a3, unsigned int a4, int a5, char a6, int a7, int a8, int a9, int a10) { int result; // eax@1 int v11; // ebp@1 unsigned int v12; // esi@2 int v13; // edi@3 int v14; // ebx@4 int v15; // eax@13 int v16; // ecx@13 int v17; // edi@14 int v18; // eax@14 int v19; // [sp+10h] [bp-8h]@1 int v20; // [sp+14h] [bp-4h]@3 result = a9; v11 = a1; v19 = a7 + a9 - 1; if ( a2 < v19 ) { v12 = a4; result = a4 + a2 - 1; if ( a7 < result ) { result = a10; v13 = a3; v20 = a8 + a10 - 1; if ( v20 > a3 ) { v14 = a5; result = a3 + a5 - 1; if ( a8 < result ) { if ( (signed int)(a4 + a2 - 1) >= v19 ) v12 = a9 - a2 + a7; if ( a2 < a7 ) { v12 = a2 + v12 - a7; a2 = a7; } if ( a3 + a5 - 1 >= v20 ) v14 = a10 - a3 + a8; if ( a8 > a3 ) { v14 = a3 + v14 - a8; v13 = a8; } v15 = v13 * *(_WORD *)(a1 + 18); v16 = *(_DWORD *)(a1 + 22); dword_491A10 = 0; result = a2 + v16 + v15; dword_491A14 = result; if ( v14 > 0 ) { do { v17 = dword_491A14; BYTE1(v16) = a6; LOBYTE(v16) = a6; v18 = v16 << 16; LOWORD(v18) = v16; memset32((void *)dword_491A14, v18, v12 >> 2); memset((void *)(v17 + 4 * (v12 >> 2)), a6, v12 & 3); result = *(_WORD *)(v11 + 18) + dword_491A14; v16 = dword_491A10 + 1; dword_491A14 += *(_WORD *)(v11 + 18); dword_491A10 = v16; } while ( v16 < v14 ); } } } } } return result; } // 491A10: using guessed type int dword_491A10; // 491A14: using guessed type int dword_491A14; //----- (00433970) -------------------------------------------------------- int __fastcall IconToBitmapScale(icon *a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, signed int a11) { int v11; // esi@1 int result; // eax@2 signed int v13; // edx@6 int v14; // edx@8 int v15; // edi@10 int v16; // esi@10 signed int v17; // eax@11 bool v18; // zf@15 int v19; // [sp+10h] [bp-18h]@4 icon *v20; // [sp+14h] [bp-14h]@1 signed int v21; // [sp+14h] [bp-14h]@9 int v22; // [sp+18h] [bp-10h]@6 int v23; // [sp+18h] [bp-10h]@8 int v24; // [sp+1Ch] [bp-Ch]@8 v20 = a1; v11 = a2; if ( a11 == 32 ) { result = IconToBitmap(a1, (bitmap *)a2, a3, a4, a5, a6, a7, a8, a9, a10, 0); } else { if ( operator new(0x1Au) ) v19 = bitmap::bitmap(0, 64, 64); else v19 = 0; v13 = 0; v22 = *(_DWORD *)(v19 + 22); do { memset((void *)(v13 + v22), 0, 0x20u); v13 += 32; } while ( v13 < 2048 ); IconToBitmap(v20, (bitmap *)v19, 0, 0, a5, 1, 0, 0, 0x20u, 32, 0); v23 = *(_WORD *)(v11 + 18); v24 = *(_DWORD *)(v11 + 22) + *(_WORD *)(v11 + 18) * a4 + a3; v14 = *(_DWORD *)(v19 + 22) + 65 * ((32 / a11 * (1 - a11) + 32) >> 1); if ( a11 > 0 ) { v21 = a11; do { v15 = v14; v16 = v24; if ( a11 > 0 ) { v17 = a11; do { if ( *(_BYTE *)v15 ) *(_BYTE *)v16 = *(_BYTE *)v15; ++v16; v15 += 32 / a11; --v17; } while ( v17 ); } v14 += 32 / a11 << 6; v18 = v21 == 1; v24 += v23; --v21; } while ( !v18 ); } result = v19; if ( v19 ) result = (**(int (__fastcall ***)(_DWORD, _DWORD, _DWORD))v19)(v19, v14, 1); } return result; } // 439D70: using guessed type _DWORD __stdcall bitmap__bitmap(__int16, __int16, __int16); //----- (00434080) -------------------------------------------------------- void __cdecl PrintMemoryLeaks() { signed int v0; // ebx@3 FILE *v1; // ebp@6 char Str[500]; // [sp+10h] [bp-1F4h]@7 if ( giDebugLevel >= 1 && gpMemEntry ) { v0 = 0; LogInt(-999, -999, -999, -999, -999, -999); do { if ( *(_BYTE *)(v0 + gpMemEntry) ) { sprintf( (char *)&gText, "Memory Leak, File '%13s' Line % 4d, ptr %12d size %6d", v0 + gpMemEntry + 9, *(_DWORD *)(v0 + gpMemEntry + 70), *(_DWORD *)(v0 + gpMemEntry + 1), *(_DWORD *)(v0 + gpMemEntry + 5)); if ( giDebugLevel >= 2 ) { v1 = fopen("KB.LOG", "at+"); if ( v1 ) { strcpy(Str, (const char *)&gText); *(_WORD *)&Str[strlen(Str)] = word_487140; fputs(Str, v1); fclose(v1); if ( giDebugLevel == 4 ) OutputDebugStringA(Str); } } } v0 += 74; } while ( v0 < 148000 ); } } // 435B20: using guessed type _DWORD __stdcall LogInt(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // 486684: using guessed type int gpMemEntry; // 487140: using guessed type __int16 word_487140; // 48E288: using guessed type int giDebugLevel; // 434080: using guessed type const CHAR Str[500]; //----- (00434210) -------------------------------------------------------- __int32 __fastcall FadeIn(int a1) { int v1; // ebx@1 int v2; // eax@1 signed int v3; // ebp@5 __int32 result; // eax@7 signed int i; // esi@7 void *v6; // ecx@12 signed int v7; // edx@13 int v8; // eax@13 int v9; // [sp+10h] [bp-8h]@1 DWORD v10; // [sp+14h] [bp-4h]@11 v9 = a1; v1 = 0; v2 = operator new(0x14u); if ( v2 ) v1 = palette::palette(v2); if ( !v1 ) MemError(); v3 = 0; if ( !*((_DWORD *)&dword_48EE38 + 7 * giCurExe) ) v9 *= 2; result = 0; memset(*(void **)(v1 + 16), 0, 0x300u); for ( i = 0; ; i += v9 ) { if ( i < 64 ) goto LABEL_11; if ( v3 ) break; i = 63; LABEL_11: v10 = KBTickCount() + 20; PollSound(); if ( i == 63 ) { v3 = 1; v6 = *(void **)(gpBufferPalette + 16); } else { v7 = 0; v8 = 63 - i; do { if ( *(_BYTE *)(*(_DWORD *)(gpBufferPalette + 16) + v7) > v8 ) *(_BYTE *)(*(_DWORD *)(v1 + 16) + v7) = *(_BYTE *)(*(_DWORD *)(gpBufferPalette + 16) + v7) - v8; ++v7; } while ( v7 < 768 ); v6 = *(void **)(v1 + 16); } UpdatePalette(v6); result = DelayTil(&v10); } if ( v1 ) result = (**(int (__thiscall ***)(_DWORD, _DWORD))v1)(v1, 1); return result; } // 437D80: using guessed type int __thiscall palette__palette(_DWORD); // 46AE34: using guessed type int giCurExe; // 48EAD0: using guessed type int gpBufferPalette; //----- (00434300) -------------------------------------------------------- int __fastcall FadeOut(signed int a1) { signed int v1; // ebx@1 int v2; // ebp@1 int v3; // ecx@1 signed int v4; // esi@7 int result; // eax@9 signed int v6; // edx@13 int v7; // eax@14 int v8; // ecx@14 char v9; // al@14 signed int v10; // [sp+10h] [bp-8h]@5 DWORD v11; // [sp+14h] [bp-4h]@11 v1 = a1; v2 = 0; v3 = operator new(0x14u); if ( v3 ) v2 = palette::palette(v3); if ( !v2 ) MemError(); v10 = 0; if ( !*((_DWORD *)&dword_48EE38 + 7 * giCurExe) ) v1 *= 2; memcpy(*(void **)(v2 + 16), *(const void **)(gpBufferPalette + 16), 0x300u); v4 = 0; while ( 1 ) { if ( v4 < 64 ) goto LABEL_11; result = v10; if ( v10 ) break; v4 = 63; LABEL_11: v11 = KBTickCount() + 20; PollSound(); if ( v4 == 63 ) v10 = 1; v6 = 0; do { v7 = *(_DWORD *)(v2 + 16); v8 = v7 + v6; v9 = *(_BYTE *)(v7 + v6); if ( v9 > 0 ) { if ( v9 <= v1 ) *(_BYTE *)v8 = 0; else *(_BYTE *)v8 = v9 - v1; } ++v6; } while ( v6 < 768 ); v4 += v1; UpdatePalette(*(void **)(v2 + 16)); DelayTil(&v11); } if ( v2 ) result = (**(int (__thiscall ***)(_DWORD, _DWORD))v2)(v2, 1); return result; } // 437D80: using guessed type int __thiscall palette__palette(_DWORD); // 46AE34: using guessed type int giCurExe; // 48EAD0: using guessed type int gpBufferPalette; //----- (004344C0) -------------------------------------------------------- int __fastcall FindLastToken(const char *a1, char a2) { const char *v2; // esi@1 unsigned int v3; // ecx@1 int result; // eax@4 v2 = a1; v3 = strlen(a1) - 1; if ( (v3 & 0x80000000u) != 0 ) { LABEL_4: result = 0; } else { while ( v2[v3] != a2 ) { --v3; if ( (v3 & 0x80000000u) != 0 ) goto LABEL_4; } result = (int)&v2[v3]; } return result; } //----- (004344F0) -------------------------------------------------------- int __cdecl SetGameDefaults() { unsigned int v0; // eax@1 signed int v1; // ebx@2 int v2; // eax@6 int v3; // esi@6 signed int v4; // esi@6 int v5; // edi@6 signed int v6; // esi@6 int v7; // edi@6 DWORD v8; // eax@6 signed __int64 v9; // qax@6 int result; // eax@6 signed __int64 v11; // qt2@6 v0 = (unsigned int)&dword_48EE38; *(_DWORD *)&Data = 1; *(_DWORD *)&soundVolume = 1; *(_DWORD *)&shouldAutosave = 1; *(_DWORD *)&showRoute = 1; do { v1 = giMainVideoModeWidth; *(_DWORD *)(v0 - 20) = 1; *(_DWORD *)(v0 - 16) = 10; *(_DWORD *)(v0 - 12) = 10; *(_DWORD *)(v0 + 4) = 0; *(_DWORD *)v0 = 1; if ( v1 > 640 ) { *(_DWORD *)(v0 - 8) = 640; *(_DWORD *)(v0 - 4) = 480; } else { *(_DWORD *)(v0 - 8) = 480; *(_DWORD *)(v0 - 4) = 360; } v0 += 28; } while ( v0 < (unsigned int)&showCombatGrid ); *(_DWORD *)&showCombatGrid = 0; *(_DWORD *)&showCombatMouseHex = 0; *(_DWORD *)&combatShadeLevel = 0; *(_DWORD *)&combatArmyInfoLevel = 0; *(_DWORD *)&evilInterfaceUsage = 0; *(_DWORD *)&useOpera = 1; *(_DWORD *)&quickCombatLevel = 0; *(_DWORD *)&combatSpeed = 0; *(_DWORD *)&autoCombatUseSpells = 0; *(_DWORD *)&blackoutComputer = 0; currentMapOffset = 0; v2 = rand(); *(_DWORD *)&showObjectBoxes = 0; *(_DWORD *)&editorScreenAnimation = 0; *(_DWORD *)&editorPaletteCycling = 0; firstMapOffset = v2 % 32001; gbFirstTimeThrough = 1; *(_DWORD *)&slowVideo = 3; *(_DWORD *)&gConfig = 3; *(_DWORD *)&walkSpeed = 2; strcpy((char *)&networkDefaultName, "The Unknown Hero"); *(_DWORD *)&uniqueSystemID = 0; v3 = rand() % 999999 + 1; v4 = KBTickCount() + v3; *(&uniqueSystemID + 2) = byte_48684C[v4 % 36]; v5 = rand() % 999999 + 1; v6 = v5 + KBTickCount() + v4; *(&uniqueSystemID + 1) = byte_48684C[v6 % 36]; v7 = rand() % 999999 + 1; v8 = KBTickCount(); byte_48EE9F = 0; v9 = (signed int)(v6 + v7 + v8); v11 = v9 % 26; result = v9 / 26; uniqueSystemID = v11 + 65; return result; } // 469B30: using guessed type int giMainVideoModeWidth; // 46D618: using guessed type int gbFirstTimeThrough; // 48EE9F: using guessed type char byte_48EE9F; //----- (00434E60) -------------------------------------------------------- int __cdecl ReadPrefs() { memset(&gConfig, 0, 0x19Cu); *(&gConfig + 412) = 0; ReadPrefsFromRegistry(); sprintf(byte_48EF42, "RMT%sRL.BIN", &uniqueSystemID); sprintf(byte_48EF4F, "RMT%sRC.BIN", &uniqueSystemID); sprintf(byte_48EF5C, "RMT%sRD.BIN", &uniqueSystemID); sprintf(byte_48EF69, "RMT%sSL.BIN", &uniqueSystemID); sprintf(byte_48EF76, "RMT%sSC.BIN", &uniqueSystemID); return sprintf(byte_48EF83, "RMT%sSD.BIN", &uniqueSystemID); } //----- (004353B0) -------------------------------------------------------- LSTATUS __cdecl WritePrefs() { doNothing_0(); return WritePrefsToRegistry(); } //----- (00435810) -------------------------------------------------------- int __stdcall BlitBitmapToScreenNoMouseCheck(int a1, int a2, int a3, int a4, int a5) { return BlitBitmapToScreenVesa(a1, a2, a3, a4, a5); } // 43F170: using guessed type _DWORD __stdcall BlitBitmapToScreenVesa(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); //----- (00435F50) -------------------------------------------------------- int __fastcall GetDataEntry(void *a1, char *a2, int a3, const char *a4, unsigned int a5, int a6) { char *v6; // ebx@1 int v7; // edx@1 int v8; // ebp@1 int v9; // eax@3 int v10; // eax@5 int v11; // ebp@7 const char *v12; // edi@12 void *v13; // esi@16 void *v14; // ecx@16 int result; // eax@23 tag_message evt; // [sp+10h] [bp-9Ch]@12 void *v17; // [sp+2Ch] [bp-80h]@1 MOUSE_CURSOR_CATEGORY v18; // [sp+30h] [bp-7Ch]@1 int v19; // [sp+34h] [bp-78h]@1 char Source; // [sp+38h] [bp-74h]@7 char v21; // [sp+48h] [bp-64h]@14 int v22; // [sp+B8h] [bp+Ch]@14 v17 = a1; v6 = a2; v7 = gpMouseManager->spriteIdx; v8 = gpMouseManager->cursorDisabled; v18 = gpMouseManager->cursorCategory; v19 = v7; if ( v8 ) { do mouseManager::ShowColorPointer(gpMouseManager); while ( gpMouseManager->cursorDisabled ); } mouseManager::SetPointer("advmice.mse", 0, -999); cDEDest = v6; iDEMaxLen = a3; strcpy(v6, (const char *)&unk_48726C); v9 = 16 * font::LineLength((const char *)v17, 240); if ( a5 ) v9 += 39; v10 = (v9 + 15) / 45; if ( v10 > 6 ) v10 = 6; v11 = 45 * v10 - (a5 < 1 ? 0 : 0x1E) + 95; sprintf(&Source, "evntwin%d.bin", v10); if ( operator new(0x44u) ) DataEntryWin = heroWindow::heroWindow(177, 20, &Source); else DataEntryWin = 0; if ( !DataEntryWin ) MemError(); evt.payload = v17; evt.eventCode = 512; evt.xCoordOrKeycode = 3; evt.yCoordOrFieldID = 1; heroWindow::BroadcastMessage((heroWindow *)DataEntryWin, &evt); v12 = a4; if ( !a4 ) v12 = (const char *)&unk_487280; strcpy(&v21, v12); evt.payload = &v21; evt.yCoordOrFieldID = 10; heroWindow::BroadcastMessage((heroWindow *)DataEntryWin, &evt); strcpy(v6, &v21); evt.xCoordOrKeycode = 6; evt.payload = (void *)6; evt.eventCode = 512; evt.yCoordOrFieldID = 30721; heroWindow::BroadcastMessage((heroWindow *)DataEntryWin, &evt); evt.yCoordOrFieldID = 30727; heroWindow::BroadcastMessage((heroWindow *)DataEntryWin, &evt); evt.yCoordOrFieldID = 30728; heroWindow::BroadcastMessage((heroWindow *)DataEntryWin, &evt); evt.yCoordOrFieldID = 30725; heroWindow::BroadcastMessage((heroWindow *)DataEntryWin, &evt); evt.yCoordOrFieldID = 30726; heroWindow::BroadcastMessage((heroWindow *)DataEntryWin, &evt); if ( !v22 ) { evt.yCoordOrFieldID = 30722; heroWindow::BroadcastMessage((heroWindow *)DataEntryWin, &evt); } v13 = 0; v14 = (void *)operator new(0x4Eu); if ( v14 ) v13 = textEntryWidget::textEntryWidget( v14, 35, v11, 251, 20, a3, v6, (int)"bigfont.fnt", 0, (int)"buybuild.icn", 3, 10, 0, 4, 10, 3); if ( !v13 ) MemError(); inBoxX = 213; inBoxY = v11 + 23; heroWindow::AddWidget((heroWindow *)DataEntryWin, (widget *)v13, -1); if ( a6 ) { bDataEntryTime = 0; gbAllowTextEntryEscape = 0; } else { bDataEntryTime = 2; } heroWindowManager::DoDialog(gpWindowManager, (heroWindow *)DataEntryWin, DataEntryWindowHandler, 0); operator delete(DataEntryWin); result = mouseManager::SetPointer(&unk_4872A0, v19, v18); gbAllowTextEntryEscape = 1; return result; } // 42F190: using guessed type _DWORD __stdcall mouseManager__SetPointer(_DWORD, _DWORD, _DWORD); // 42FDB0: using guessed type int __thiscall mouseManager__ShowColorPointer(_DWORD); // 46AAB4: using guessed type int gbAllowTextEntryEscape; // 491A38: using guessed type int bDataEntryTime; // 491A3C: using guessed type int inBoxY; // 491A40: using guessed type int inBoxX; // 491A50: using guessed type int iDEMaxLen; //----- (004362E0) -------------------------------------------------------- signed int __thiscall DataEntryWindowHandler(int evt) { int v1; // esi@1 signed int result; // eax@2 int v3; // eax@6 v1 = evt; if ( !bDataEntryTime ) { ++bDataEntryTime; *(_DWORD *)evt = 8; *(_DWORD *)(evt + 4) = inBoxX; *(_DWORD *)(evt + 8) = inBoxY; heroWindow::BroadcastMessage((heroWindow *)DataEntryWin, (tag_message *)evt); return 1; } if ( bDataEntryTime == 1 ) { ++bDataEntryTime; LABEL_10: *(_DWORD *)evt = 512; *(_DWORD *)(evt + 8) = 10; *(_DWORD *)(evt + 4) = 7; heroWindow::BroadcastMessage((heroWindow *)DataEntryWin, (tag_message *)evt); if ( strlen(*(const char **)(v1 + 24)) != 0 ) { memset(cDEDest, 0, iDEMaxLen); strncpy(cDEDest, *(const char **)(v1 + 24), iDEMaxLen - 1); *(_DWORD *)v1 = 512; *(_DWORD *)(v1 + 4) = 3; *(_DWORD *)(v1 + 8) = 10; *(_DWORD *)(v1 + 24) = cDEDest; heroWindow::BroadcastMessage((heroWindow *)DataEntryWin, (tag_message *)v1); heroWindow::DrawWindow((int)DataEntryWin, 1, 10, 10); if ( !gbTextEntryEscaped ) { gpWindowManager->buttonPressedCode = *(_DWORD *)(v1 + 8); result = 2; *(_DWORD *)(v1 + 8) = 10; *(_DWORD *)(v1 + 4) = 10; return result; } } return sub_410918(v1); } if ( *(_DWORD *)evt != 512 ) return sub_410918(v1); v3 = *(_DWORD *)(evt + 4); if ( v3 == 12 ) { if ( *(_DWORD *)(evt + 8) != 10 ) return sub_410918(v1); goto LABEL_10; } if ( v3 != 13 || *(_DWORD *)(evt + 8) != 30722 ) return sub_410918(v1); result = 2; *(_DWORD *)(evt + 8) = 10; *(_DWORD *)(evt + 4) = 10; return result; } // 48E7EC: using guessed type int gbTextEntryEscaped; // 491A38: using guessed type int bDataEntryTime; // 491A3C: using guessed type int inBoxY; // 491A40: using guessed type int inBoxX; // 491A50: using guessed type int iDEMaxLen; //----- (00436460) -------------------------------------------------------- int __fastcall sub_436460(icon *icn, bitmap *bmp, int a3, int a4, int a5, signed int a6, int a7, int a8, unsigned int a9, int a10, signed int a11) { icon *v11; // esi@1 int result; // eax@2 int v13; // ebp@3 int v14; // edx@6 int v15; // edi@8 int v16; // esi@8 int v17; // eax@9 bool v18; // zf@13 int v19; // [sp+10h] [bp-14h]@4 int v20; // [sp+14h] [bp-10h]@7 bitmap *v21; // [sp+18h] [bp-Ch]@1 int v22; // [sp+1Ch] [bp-8h]@6 v21 = bmp; v11 = icn; if ( a11 == 32 ) { result = IconToBitmap(icn, bmp, a3, a4, a5, a6, a7, a8, a9, a10, 0); } else { v13 = 2 * a11; if ( operator new(0x1Au) ) v19 = bitmap::bitmap(0, 64, 64); else v19 = 0; memset(*(void **)(v19 + 22), 0, 0x1000u); IconToBitmap(v11, (bitmap *)v19, 0, 0, a5, 1, 0, 0, 0x40u, 64, 0); v22 = (int)(&v21->contents[a4 * v21->width] + a3); v14 = *(_DWORD *)(v19 + 22) + 65 * ((32 / a11 * (1 - a11) + 32) >> 1); if ( v13 > 0 ) { v20 = 2 * a11; do { v15 = v14; v16 = v22; if ( v13 > 0 ) { v17 = 2 * a11; do { if ( *(_BYTE *)v15 ) *(_BYTE *)v16 = *(_BYTE *)v15; ++v16; v15 += 32 / a11; --v17; } while ( v17 ); } v14 += 32 / a11 << 6; v18 = v20 == 1; v22 += v21->width; --v20; } while ( !v18 ); } result = v19; if ( v19 ) result = (**(int (__fastcall ***)(_DWORD, _DWORD, _DWORD))v19)(v19, v14, 1); } return result; } // 439D70: using guessed type _DWORD __stdcall bitmap__bitmap(__int16, __int16, __int16); //----- (004365D0) -------------------------------------------------------- char __fastcall RenderTile(tileset *a1, int a2, int a3, int a4, int a5, int a6) { int v6; // eax@2 int v7; // edi@3 int v8; // edx@5 int v9; // ecx@5 int v10; // ebp@5 int v11; // ebx@6 char v12; // al@7 int v13; // ebp@10 char *v14; // edx@10 int v15; // ecx@10 int v16; // ebp@11 int v17; // ebx@11 char v18; // al@12 int v19; // ecx@16 int v20; // edx@16 int v21; // ebp@16 int v22; // ebx@17 char v23; // dl@18 int v24; // ebx@21 char *v25; // ecx@21 int v26; // edx@21 int v27; // ebp@22 int v28; // ebx@22 char v29; // al@23 int v31; // [sp+10h] [bp-4h]@3 if ( a6 == 1 ) { LOBYTE(v6) = TileToBitmap(a1, (unsigned __int16)a2, a3, a4, a5); } else { v7 = a1->field_12; dword_491A70 = a1->field_14; dword_491A74 = a6 * v7; v31 = *(_WORD *)(a3 + 18); dword_491A6C = *(_WORD *)(a3 + 18); if ( BYTE1(a2) & 0x80 ) { dword_491A68 = v7; if ( BYTE1(a2) & 0x40 ) { v24 = *(_DWORD *)(a3 + 22); v25 = (char *)a1->contents + dword_491A70 * v7 * ((a2 & 0x3FFF) + 1) - 1; dword_491A78 = (int)v25; LOBYTE(v6) = (_BYTE)v25 - v7; v26 = a4 + v24 + v31 * a5; dword_491A7C = a4 + v24 + v31 * a5; dword_491A60 = (int)&v25[-v7]; dword_491A58 = a4 + v24 + v31 * a5; dword_491A64 = 0; if ( dword_491A70 > 0 ) { do { v27 = (int)&v25[-dword_491A74]; dword_491A78 = (int)v25; dword_491A7C = v26; v28 = 0; dword_491A58 += v31; dword_491A5C = 0; if ( v7 > 0 ) { do { v29 = *v25; ++v26; v25 -= a6; v28 += a6; *(_BYTE *)(v26 - 1) = v29; dword_491A78 = (int)v25; dword_491A7C = v26; dword_491A5C = v28; } while ( v28 < v7 ); } dword_491A78 = v27; v25 = (char *)v27; v26 = dword_491A58; v6 = a6 + dword_491A64; dword_491A60 = v27; dword_491A68 = v7; dword_491A7C = dword_491A58; dword_491A64 = v6; } while ( v6 < dword_491A70 ); } } else { v19 = (int)((char *)a1->contents + dword_491A70 * v7 * (a2 & 0x3FFF) + v7 - 1); v20 = *(_DWORD *)(a3 + 22) + v31 * a5; v6 = 0; dword_491A78 = v19; v21 = v20 + a4; dword_491A64 = 0; dword_491A7C = v20 + a4; for ( dword_491A58 = v20 + a4; v6 < dword_491A70; dword_491A64 = v6 ) { dword_491A78 = v19; dword_491A7C = v21; dword_491A60 = v19 + dword_491A74; dword_491A58 += v31; v22 = 0; for ( dword_491A5C = 0; v22 < v7; dword_491A5C = v22 ) { v23 = *(_BYTE *)v19; ++v21; v19 -= a6; v22 += a6; *(_BYTE *)(v21 - 1) = v23; dword_491A78 = v19; dword_491A7C = v21; } v19 = dword_491A60; v21 = dword_491A58; v6 += a6; dword_491A68 = v7; dword_491A78 = dword_491A60; dword_491A7C = dword_491A58; } } } else { dword_491A68 = v7; if ( BYTE1(a2) & 0x40 ) { v13 = *(_DWORD *)(a3 + 22); v14 = (char *)a1->contents + v7 * (dword_491A70 * ((a2 & 0x3FFF) + 1) - 1); v15 = a4 + v13 + v31 * a5; LOBYTE(v6) = dword_491A70; dword_491A78 = (int)v14; dword_491A7C = a4 + v13 + v31 * a5; dword_491A58 = a4 + v13 + v31 * a5; dword_491A64 = 0; if ( dword_491A70 > 0 ) { do { v16 = (int)&v14[-dword_491A74]; dword_491A78 = (int)v14; dword_491A7C = v15; v17 = 0; dword_491A58 += v31; dword_491A5C = 0; if ( v7 > 0 ) { do { v18 = *v14; ++v15; v14 += a6; v17 += a6; *(_BYTE *)(v15 - 1) = v18; dword_491A7C = v15; dword_491A78 = (int)v14; dword_491A5C = v17; } while ( v17 < v7 ); } dword_491A78 = v16; v14 = (char *)v16; v15 = dword_491A58; v6 = a6 + dword_491A64; dword_491A60 = v16; dword_491A68 = v7; dword_491A7C = dword_491A58; dword_491A64 = v6; } while ( v6 < dword_491A70 ); } } else { v8 = (int)((char *)a1->contents + dword_491A70 * v7 * (a2 & 0x3FFF)); v9 = a4 + *(_DWORD *)(a3 + 22) + v31 * a5; v10 = 0; LOBYTE(v6) = dword_491A70; dword_491A78 = v8; dword_491A7C = v9; dword_491A58 = v9; for ( dword_491A64 = 0; v10 < dword_491A70; dword_491A64 = v10 ) { dword_491A78 = v8; dword_491A7C = v9; dword_491A60 = v8 + dword_491A74; dword_491A58 += v31; v11 = 0; for ( dword_491A5C = 0; v11 < v7; dword_491A5C = v11 ) { v12 = *(_BYTE *)v8; ++v9; v8 += a6; v11 += a6; *(_BYTE *)(v9 - 1) = v12; dword_491A7C = v9; dword_491A78 = v8; } v8 = dword_491A60; v9 = dword_491A58; v10 += a6; LOBYTE(v6) = dword_491A70; dword_491A68 = v7; dword_491A78 = dword_491A60; dword_491A7C = dword_491A58; } } } } return v6; } // 491A58: using guessed type int dword_491A58; // 491A5C: using guessed type int dword_491A5C; // 491A60: using guessed type int dword_491A60; // 491A64: using guessed type int dword_491A64; // 491A68: using guessed type int dword_491A68; // 491A6C: using guessed type int dword_491A6C; // 491A70: using guessed type int dword_491A70; // 491A74: using guessed type int dword_491A74; // 491A78: using guessed type int dword_491A78; // 491A7C: using guessed type int dword_491A7C; //----- (00436E80) -------------------------------------------------------- signed int __fastcall KeyboardMessageHandler(void *a1, unsigned int a2, unsigned int a3, unsigned int a4) { char *v5; // esi@5 tag_message *v6; // eax@9 int v7; // ecx@9 int v8; // eax@20 bool v9; // cf@30 if ( !gpInputManager ) return 1; if ( *(int *)((char *)&gpInputManager[1].altYCoord + 2) != 1 ) return 1; v5 = (char *)&gpInputManager[*(INPUT_EVENT_CODE *)((char *)&gpInputManager[66].eventCode + 2) + 1].payload + 2; *((_DWORD *)v5 + 3) = 0; *((_DWORD *)v5 + 5) = 0; *((_DWORD *)v5 + 4) = 0; *((_DWORD *)v5 + 2) = 0; *((_DWORD *)v5 + 1) = 0; *(_DWORD *)v5 = 0; if ( a2 == 256 ) { *(_DWORD *)v5 = 1; *((_DWORD *)v5 + 1) = (a4 >> 16) & 0xFF; *((_DWORD *)v5 + 2) = 0; *((_DWORD *)v5 + 3) = 0; switch ( *((_DWORD *)v5 + 1) ) { case 0x1D: v6 = gpInputManager; v7 = *(int *)((char *)&gpInputManager[76].inputTypeBitmask + 2) | 4; goto LABEL_18; case 0x2A: v6 = gpInputManager; v7 = *(int *)((char *)&gpInputManager[76].inputTypeBitmask + 2) | 2; goto LABEL_18; case 0x36: v6 = gpInputManager; v7 = *(int *)((char *)&gpInputManager[76].inputTypeBitmask + 2) | 1; goto LABEL_18; case 0x38: v6 = gpInputManager; v7 = *(int *)((char *)&gpInputManager[76].inputTypeBitmask + 2) | 0x20; LABEL_18: *(int *)((char *)&v6[76].inputTypeBitmask + 2) = v7; break; default: break; } } else if ( a2 == 257 ) { *(_DWORD *)v5 = 2; *((_DWORD *)v5 + 1) = (a4 >> 16) & 0xFF; *((_DWORD *)v5 + 2) = 0; *((_DWORD *)v5 + 3) = 0; switch ( *((_DWORD *)v5 + 1) ) { case 0x1D: v6 = gpInputManager; v7 = *(int *)((char *)&gpInputManager[76].inputTypeBitmask + 2) & 0xFFFB; goto LABEL_18; case 0x2A: v6 = gpInputManager; v7 = *(int *)((char *)&gpInputManager[76].inputTypeBitmask + 2) & 0xFFFD; goto LABEL_18; case 0x36: v6 = gpInputManager; v7 = *(int *)((char *)&gpInputManager[76].inputTypeBitmask + 2) & 0xFFFE; goto LABEL_18; case 0x38: v6 = gpInputManager; v7 = *(int *)((char *)&gpInputManager[76].inputTypeBitmask + 2) & 0xFFDF; goto LABEL_18; default: break; } } if ( !*(_DWORD *)v5 ) goto LABEL_33; *((_DWORD *)v5 + 3) = *(int *)((char *)&gpInputManager[76].inputTypeBitmask + 2); ++*(INPUT_EVENT_CODE *)((char *)&gpInputManager[66].eventCode + 2); *(INPUT_EVENT_CODE *)((char *)&gpInputManager[66].eventCode + 2) = (((unsigned __int64)*(INPUT_EVENT_CODE *)((char *)&gpInputManager[66].eventCode + 2) >> 32) ^ abs(*(INPUT_EVENT_CODE *)((char *)&gpInputManager[66].eventCode + 2)) & 0x3F) - ((unsigned __int64)*(INPUT_EVENT_CODE *)((char *)&gpInputManager[66].eventCode + 2) >> 32); v8 = *(int *)((char *)&gpInputManager[65].payload + 2); if ( *(INPUT_EVENT_CODE *)((char *)&gpInputManager[66].eventCode + 2) == v8 ) { *(void **)((char *)&gpInputManager[65].payload + 2) = (void *)(v8 + 1); *(void **)((char *)&gpInputManager[65].payload + 2) = (void *)((((unsigned __int64)*(void **)((char *)&gpInputManager[65].payload + 2) >> 32) ^ abs(*(void **)((char *)&gpInputManager[65].payload + 2)) & 0x3F) - ((unsigned __int64)*(void **)((char *)&gpInputManager[65].payload + 2) >> 32)); } *(int *)((char *)&gpInputManager[76].yCoordOrFieldID + 2) = 0; if ( gpWindowManager->ready != 1 ) goto LABEL_33; if ( *(_DWORD *)v5 == 1 ) { if ( *((_DWORD *)v5 + 1) == 88 && *((_DWORD *)v5 + 3) & 3 ) heroWindowManager::ScreenShot(); if ( *(_DWORD *)v5 != 1 ) goto LABEL_33; if ( *((_DWORD *)v5 + 1) == 59 ) { SetFullScreenStatus(0); AppCommand(hwndApp, 0, 0x9C74u, 0); } } v9 = *(_DWORD *)v5 < 1u; if ( *(_DWORD *)v5 == 1 ) { if ( *((_DWORD *)v5 + 1) == 62 ) SetFullScreenStatus((void *)(1 - *((_DWORD *)&dword_48EE38 + 7 * giCurExe))); LABEL_33: v9 = *(_DWORD *)v5 < 1u; } return v9; } // 432450: using guessed type int heroWindowManager__ScreenShot(void); // 46AE34: using guessed type int giCurExe; //----- (00437600) -------------------------------------------------------- int __cdecl _getmbcp() { return 0; } // 437600: inconsistent function type and number of purged bytes //----- (00437C90) -------------------------------------------------------- int __fastcall CheckChangeCursor(signed int a1, signed int a2, int a3) { int result; // eax@1 result = bInCheckChangeCursor; if ( !bInCheckChangeCursor ) { result = 28 * giCurExe; if ( !*((_DWORD *)&dword_48EE38 + 7 * giCurExe) || a3 ) { if ( *(_DWORD *)(&dword_48EE3C + result) ) { bInCheckChangeCursor = 1; if ( a3 || a1 >= 0 && a1 < 640 && a2 >= 0 && a2 < 480 ) { if ( bLastMouseOffscreen ) { bLastMouseOffscreen = 0; mouseManager::SetPointer(1000); } result = bLastOnscreenMouseColor; if ( bLastOnscreenMouseColor != gbColorMice ) result = mouseManager::SetColorMice((int)gpMouseManager, 1); } else { result = bLastMouseOffscreen; if ( !bLastMouseOffscreen ) { bLastMouseOffscreen = 1; bLastOnscreenMouseColor = gbColorMice; if ( gbColorMice ) result = mouseManager::SetColorMice((int)gpMouseManager, 0); } } bInCheckChangeCursor = 0; } } } return result; } // 42F2D0: using guessed type _DWORD __stdcall mouseManager__SetPointer(_DWORD); // 46AAC8: using guessed type int gbColorMice; // 46AE34: using guessed type int giCurExe; // 4874BC: using guessed type int bLastMouseOffscreen; // 4874C0: using guessed type int bLastOnscreenMouseColor; // 4874C4: using guessed type int bInCheckChangeCursor; //----- (00437E00) -------------------------------------------------------- void *__thiscall palette::palette(void *this, int a2) { void *v2; // edi@1 v2 = this; resource::resource(2, a2, 1, 0); *(_DWORD *)v2 = &bitmap::_vftable_; *((_DWORD *)v2 + 4) = BaseAlloc(0x300u, (int)"F:\\h2xsrc\\Base\\PALETTE.CPP", 13); resourceManager::PointToFile(a2); resourceManager::ReadBlock(*((LPVOID *)v2 + 4), 0x300u); return v2; } // 431600: using guessed type _DWORD __stdcall resourceManager__PointToFile(_DWORD); // 43E440: using guessed type _DWORD __stdcall resource__resource(__int16, _DWORD, __int16, _DWORD); // 449244: using guessed type int (__thiscall *bitmap___vftable_)(void *Memory, int); //----- (00437E60) -------------------------------------------------------- void __fastcall soundManager::SoundError(MCIERROR a1, int a2) { int v2; // ST1C_4@1 v2 = a2; mciGetErrorStringA(a1, strReturnString, 0xFFu); sprintf( (char *)&gText, "CD MUSIC ERROR\n\nDescription '%s'\n\nCommand '%s'\n\n\nBecause of this problem running with CD stereo music, Heroes II has been configured to run with MIDI music in the future. You can always manually change this setting in the control panel within the game.", strReturnString, v2); byte_48EE9E = 1; *(_DWORD *)&useCDMusic = 0; WritePrefs(); ShutDown(&gText); } // 48EE9E: using guessed type char byte_48EE9E; //----- (00437ED0) -------------------------------------------------------- int __stdcall soundManager::UnimportantMethod5(signed int a1) { int result; // eax@5 char Str; // [sp+14h] [bp-18h]@6 int v3; // [sp+28h] [bp-4h]@6 if ( a1 < 0 || a1 >= 60 ) ProcessAssert(0, "F:\\h2xsrc\\Base\\soundmgr.cpp", 66); else ProcessAssert(1, "F:\\h2xsrc\\Base\\soundmgr.cpp", 66); result = byte_4875C8[15 * a1]; if ( byte_4875C8[15 * a1] ) { strcpy(&Str, &byte_4875C8[15 * a1]); v3 = FindToken(&Str, 58); if ( v3 ) *(_BYTE *)v3 = 0; result = atoi(&Str); if ( result != a1 ) { result = 3 * a1; byte_4875C8[15 * a1] = 0; } } return result; } // 434480: using guessed type int __fastcall FindToken(_DWORD, _DWORD); // 437ED0: using guessed type _DWORD __stdcall soundManager__UnimportantMethod5(_DWORD); //----- (00437FA0) -------------------------------------------------------- void __thiscall soundManager::UnimportantMethod4(int this) { int v1; // [sp+Ch] [bp-18h]@1 CHAR Source; // [sp+10h] [bp-14h]@7 v1 = this; if ( !gbNoSound && *(_DWORD *)(this + 1690) ) { _wsprintfA(strCommand, "stop CD wait"); dword_491A88 = mciSendStringA(strCommand, strReturnString, 0xFFu, 0); if ( dword_491A88 ) soundManager::SoundError(dword_491A88, (int)strCommand); if ( stricmp(strReturnString, "stopped") && (signed int)*(_BYTE *)(v1 + 1400) >= 0 ) { _wsprintfA(strCommand, "status CD position"); dword_491A88 = mciSendStringA(strCommand, &Source, 0x14u, 0); if ( dword_491A88 ) soundManager::SoundError(dword_491A88, (int)strCommand); strcpy(&byte_4875C8[15 * *(_BYTE *)(v1 + 1400)], &Source); soundManager::UnimportantMethod5(*(_BYTE *)(v1 + 1400)); } dword_487950 = 0; } } // 437ED0: using guessed type _DWORD __stdcall soundManager__UnimportantMethod5(_DWORD); // 46AE18: using guessed type int gbNoSound; // 487950: using guessed type int dword_487950; // 491A88: using guessed type int dword_491A88; //----- (004380E0) -------------------------------------------------------- void __thiscall soundManager::UnimportantMethod3(int this) { int v1; // [sp+Ch] [bp-4h]@1 v1 = this; if ( !gbNoSound ) { *(_DWORD *)(this + 1698) = 1; *(_DWORD *)(this + 1690) = 0; if ( !dword_46ADD4 ) { if ( !byte_48EE9E && !dword_46ADA8 ) { _wsprintfA(strCommand, "open %c: type cdaudio alias CD shareable", gcAnimPath[0]); dword_491A88 = mciSendStringA(strCommand, strReturnString, 0xFFu, 0); if ( dword_491A88 ) { *(_DWORD *)(v1 + 1690) = 0; byte_48EE9E = 1; *(_DWORD *)&useCDMusic = 0; WritePrefs(); } else { *(_DWORD *)(v1 + 1690) = 1; } } } } } // 46ADA8: using guessed type int dword_46ADA8; // 46ADD4: using guessed type int dword_46ADD4; // 46AE18: using guessed type int gbNoSound; // 48EE9E: using guessed type char byte_48EE9E; // 491A88: using guessed type int dword_491A88; //----- (004381E0) -------------------------------------------------------- void __thiscall soundManager::UnimportantMethod2(int this) { if ( !gbNoSound && *(_DWORD *)(this + 1690) ) { _wsprintfA(strCommand, "stop CD"); dword_491A88 = mciSendStringA(strCommand, strReturnString, 0xFFu, 0); if ( dword_491A88 ) soundManager::SoundError(dword_491A88, (int)strCommand); _wsprintfA(strCommand, "close CD"); dword_491A88 = mciSendStringA(strCommand, strReturnString, 0xFFu, 0); if ( dword_491A88 ) soundManager::SoundError(dword_491A88, (int)strCommand); } } // 46AE18: using guessed type int gbNoSound; // 491A88: using guessed type int dword_491A88; //----- (004382C0) -------------------------------------------------------- MMRESULT __thiscall soundManager::UnimportantMethod1(MMRESULT this, signed int a2, int a3) { MMRESULT result; // eax@2 int v4; // [sp+10h] [bp-Ch]@9 signed int v5; // [sp+18h] [bp-4h]@5 if ( !gbNoSound ) { result = this; if ( *(_DWORD *)(this + 1690) ) { result = *(_WORD *)(this + 1688); if ( result != -1 ) { if ( a2 == -1 ) v5 = *(_DWORD *)&Data; else v5 = a2; if ( v5 ) { if ( a3 ) v4 = 12 - (11 - v5 / 12); else v4 = 12 - v5; result = auxSetVolume(*(_WORD *)(this + 1688), (v4 << 12) | (v4 << 28)); } else { result = auxSetVolume(*(_WORD *)(this + 1688), 0); } } } } return result; } // 46AE18: using guessed type int gbNoSound; //----- (004383B0) -------------------------------------------------------- void __thiscall soundManager::CDPlay(void *this, int a2, int a3, int a4, int a5) { MCIERROR v5; // eax@24 MCIERROR v6; // eax@33 MMRESULT v7; // [sp+Ch] [bp-30h]@1 int v8; // [sp+1Ch] [bp-20h]@17 CHAR Source; // [sp+20h] [bp-1Ch]@14 DWORD v10; // [sp+34h] [bp-8h]@37 DWORD v11; // [sp+38h] [bp-4h]@17 v7 = (MMRESULT)this; if ( !gbNoSound && *(_DWORD *)((char *)this + 1690) && *(_DWORD *)&Data ) { if ( a2 == -1 ) { soundManager::UnimportantMethod4((int)this); } else if ( *((_BYTE *)this + 1400) != a2 || !dword_487950 || a5 ) { *((_DWORD *)this + 420) = a2; *((_DWORD *)this + 421) = a4; Process1WindowsMessage(); soundManager::ServiceSound(v7); KBTickCount(); _wsprintfA(strCommand, "set CD time format tmsf"); dword_491A88 = mciSendStringA(strCommand, strReturnString, 0xFFu, 0); if ( dword_491A88 ) soundManager::SoundError(dword_491A88, (int)strCommand); _wsprintfA(strCommand, "status CD mode"); dword_491A88 = mciSendStringA(strCommand, strReturnString, 0xFFu, 0); if ( dword_491A88 ) soundManager::SoundError(dword_491A88, (int)strCommand); if ( stricmp(strReturnString, "stopped") ) { _wsprintfA(strCommand, "status CD position"); dword_491A88 = mciSendStringA(strCommand, &Source, 0x14u, 0); if ( dword_491A88 ) soundManager::SoundError(dword_491A88, (int)strCommand); strcpy(&byte_4875C8[15 * *(_BYTE *)(v7 + 1400)], &Source); soundManager::UnimportantMethod5(*(_BYTE *)(v7 + 1400)); } v11 = KBTickCount(); v8 = (unsigned __int8)bMusicIsLooping[a2]; Process1WindowsMessage(); soundManager::ServiceSound(v7); if ( !a5 && a3 && byte_4875C8[15 * a2] ) { if ( a2 == 43 ) _wsprintfA( strCommand, "play CD from %s %s", &byte_4875C8[645], &aNotify[(&unk_487BE8 - (_UNKNOWN *)" notify") & ((v8 != 0) - 1)]); else _wsprintfA( strCommand, "play CD from %s to %d%s", &byte_4875C8[15 * a2], a2 + 1, &aNotify_0[(&unk_487C08 - (_UNKNOWN *)" notify") & ((v8 != 0) - 1)]); if ( v8 ) v5 = mciSendStringA(strCommand, strReturnString, 0xFFu, hwndApp); else v5 = mciSendStringA(strCommand, strReturnString, 0xFFu, 0); dword_491A88 = v5; if ( v5 ) soundManager::SoundError(dword_491A88, (int)strCommand); } else { if ( a2 == 43 ) _wsprintfA( strCommand, "play CD from %d %s", 43, &aNotify_1[(&unk_487C2C - (_UNKNOWN *)" notify") & ((v8 != 0) - 1)]); else _wsprintfA( strCommand, "play CD from %d to %d%s", a2, a2 + 1, &aNotify_2[(&unk_487C4C - (_UNKNOWN *)" notify") & ((v8 != 0) - 1)]); if ( v8 ) v6 = mciSendStringA(strCommand, strReturnString, 0xFFu, hwndApp); else v6 = mciSendStringA(strCommand, strReturnString, 0xFFu, 0); dword_491A88 = v6; if ( v6 ) soundManager::SoundError(dword_491A88, (int)strCommand); } v10 = KBTickCount(); dword_487950 = 1; Process1WindowsMessage(); soundManager::ServiceSound(v7); if ( *(_DWORD *)(v7 + 1672) <= 0 ) { soundManager::UnimportantMethod1(v7, a4, 0); } else { *(_DWORD *)(v7 + 1672) = 11; dword_48F130 = KBTickCount() + 480; soundManager::UnimportantMethod1(v7, 10, 0); } *(_BYTE *)(v7 + 1400) = a2; } } } // 437ED0: using guessed type _DWORD __stdcall soundManager__UnimportantMethod5(_DWORD); // 439090: using guessed type int __thiscall soundManager__ServiceSound(_DWORD); // 46AE18: using guessed type int gbNoSound; // 487950: using guessed type int dword_487950; // 48F130: using guessed type int dword_48F130; // 491A88: using guessed type int dword_491A88; //----- (00438830) -------------------------------------------------------- soundManager *__stdcall SetReady2Poll(unsigned __int32 a1) { soundManager *result; // eax@2 if ( gpSoundManager ) { *((_BYTE *)gpSoundManager + 1403) ^= 1u; result = (soundManager *)*((_BYTE *)gpSoundManager + 1403); if ( *((_BYTE *)gpSoundManager + 1403) ) { result = gpSoundManager; *((_BYTE *)gpSoundManager + 1402) = 1; } } return result; } //----- (00438890) -------------------------------------------------------- soundManager *__stdcall UpdateTimers(unsigned __int32 a1) { ++iCalibrateLoop; glMilliCounter += 16; return SetReady2Poll(0); } // 469B38: using guessed type unsigned __int32 glMilliCounter; // 487954: using guessed type int iCalibrateLoop; //----- (004388C0) -------------------------------------------------------- // public SoundManager { // super(); // this.field578 = 1; // this.field32 = 0; // this.field68C = 0; // this.field570 = 0; // // for(int i = 0; i < 32; i++) { // word_522B30[i] = 0; // } // // memset(174,0, &this.field42); // this.field688 = 0; // this.field3A = 0; // this.field3EH = 0; // this.field694 = 0; // this.field698 = 0; // } baseMAnager *__thiscall soundManager::soundManager(baseMAnager *ecx0) { baseMAnager *this; // [sp+Ch] [bp-8h]@1 signed int i; // [sp+10h] [bp-4h]@1 this = ecx0; baseManager::baseManager((baseManager *)ecx0); *((_DWORD *)this + 349) = 1; *(_DWORD *)this = &soundManager::_vftable_; *(_DWORD *)((char *)this + 50) = 0; *((_DWORD *)this + 418) = 0; *((_DWORD *)this + 347) = 0; for ( i = 0; i < 32; ++i ) iLastVolume[i] = 0; memset((char *)this + 62, 0, 0xAEu); *((_DWORD *)this + 417) = 0; *(_DWORD *)((char *)this + 54) = 0; *(_DWORD *)((char *)this + 58) = 0; *((_DWORD *)this + 420) = 0; *((_DWORD *)this + 421) = 0; return this; } // 449248: using guessed type int (__stdcall *soundManager___vftable_)(int); // 491CA0: using guessed type __int16 iLastVolume[]; //----- (00438B80) -------------------------------------------------------- int __thiscall soundManager::Open(int this, int a2) { int v3; // [sp+Ch] [bp-Ch]@1 signed int i; // [sp+14h] [bp-4h]@1 v3 = this; *(_DWORD *)(this + 1698) = 0; *(_DWORD *)(this + 1702) = 0; *(_DWORD *)(this + 1690) = 0; *(_DWORD *)(this + 1694) = 0; memset(bSaveMusicPosition, 0, 0x3Cu); memset(bMusicIsLooping, 0, 0x3Cu); byte_48E2B0 = 1; byte_48E2B2 = 1; byte_48E2AE = 1; byte_48E2AF = 1; byte_48E2AB = 1; byte_48E2AD = 1; byte_48E2B1 = 1; byte_48E2AC = 1; byte_48E2BC = 1; byte_48E2CA = 1; byte_48E928 = 1; byte_48E92A = 1; byte_48E926 = 1; byte_48E927 = 1; byte_48E923 = 1; byte_48E925 = 1; byte_48E929 = 1; byte_48E924 = 1; byte_48E920 = 1; byte_48E921 = 1; byte_48E91D = 1; byte_48E91E = 1; byte_48E922 = 1; byte_48E91F = 1; byte_48E942 = 1; byte_48E934 = 1; byte_48E943 = 1; byte_48E92E = 1; byte_48E930 = 1; for ( i = 2; i <= 4; ++i ) bMusicIsLooping[i] = 1; if ( (unsigned __int16)GetAsyncKeyState(117) >> 8 ) { *(_DWORD *)&useCDMusic = 0; WritePrefs(); } if ( (unsigned __int16)GetAsyncKeyState(118) >> 8 ) { *(_DWORD *)&useCDMusic = 1; WritePrefs(); } *(_BYTE *)(v3 + 1400) = -1; if ( !gbNoSound ) { *(_BYTE *)(v3 + 1401) = 0; *(_BYTE *)(v3 + 1402) = *(_BYTE *)(v3 + 1401); *(_BYTE *)(v3 + 1403) = *(_BYTE *)(v3 + 1402); AIL_startup(); if ( *(_DWORD *)&useCDMusic ) { soundManager::UnimportantMethod3(v3); if ( !*(_DWORD *)(v3 + 1690) ) { soundManager::MIDIStartup((void *)v3); if ( *(_DWORD *)(v3 + 1694) ) { *(_DWORD *)&useCDMusic = 0; WritePrefs(); } else { *(_DWORD *)&Data = 0; WritePrefs(); } } } else { soundManager::MIDIStartup((void *)v3); if ( !*(_DWORD *)(v3 + 1694) ) { soundManager::UnimportantMethod3(v3); if ( *(_DWORD *)(v3 + 1690) ) { *(_DWORD *)&useCDMusic = 1; WritePrefs(); } else { *(_DWORD *)&Data = 0; WritePrefs(); } } } *(_DWORD *)(v3 + 1668) = 1; memset((void *)(v3 + 62), 0, 0xAEu); if ( !gbDontTryDigital && !*(_DWORD *)(v3 + 54) ) *(_DWORD *)(v3 + 54) = WAVE_init_driver(1, 0); if ( !*(_DWORD *)(v3 + 54) ) { *(_DWORD *)&soundVolume = 0; WritePrefs(); } soundManager::AllocateSampleHandles(v3); *(_DWORD *)(v3 + 62) = 1; *(_DWORD *)(v3 + 80) = 0; memset((void *)(v3 + 1424), 0, 0xF0u); *(_DWORD *)(v3 + 1664) = 1; } *(_DWORD *)(v3 + 12) = 16; *(_DWORD *)(v3 + 16) = -1; *(_DWORD *)(v3 + 50) = 1; strcpy((char *)(v3 + 20), "soundManager"); return 0; } // 4389A0: using guessed type _DWORD __stdcall WAVE_init_driver(_DWORD, _DWORD); // 46ADB0: using guessed type int gbDontTryDigital; // 46AE18: using guessed type int gbNoSound; // 48E2AB: using guessed type char byte_48E2AB; // 48E2AC: using guessed type char byte_48E2AC; // 48E2AD: using guessed type char byte_48E2AD; // 48E2AE: using guessed type char byte_48E2AE; // 48E2AF: using guessed type char byte_48E2AF; // 48E2B0: using guessed type char byte_48E2B0; // 48E2B1: using guessed type char byte_48E2B1; // 48E2B2: using guessed type char byte_48E2B2; // 48E2BC: using guessed type char byte_48E2BC; // 48E2CA: using guessed type char byte_48E2CA; // 48E91D: using guessed type char byte_48E91D; // 48E91E: using guessed type char byte_48E91E; // 48E91F: using guessed type char byte_48E91F; // 48E920: using guessed type char byte_48E920; // 48E921: using guessed type char byte_48E921; // 48E922: using guessed type char byte_48E922; // 48E923: using guessed type char byte_48E923; // 48E924: using guessed type char byte_48E924; // 48E925: using guessed type char byte_48E925; // 48E926: using guessed type char byte_48E926; // 48E927: using guessed type char byte_48E927; // 48E928: using guessed type char byte_48E928; // 48E929: using guessed type char byte_48E929; // 48E92A: using guessed type char byte_48E92A; // 48E92E: using guessed type char byte_48E92E; // 48E930: using guessed type char byte_48E930; // 48E934: using guessed type char byte_48E934; // 48E942: using guessed type char byte_48E942; // 48E943: using guessed type char byte_48E943; //----- (00438F30) -------------------------------------------------------- void __thiscall soundManager::AllocateSampleHandles(int this) { int v1; // [sp+Ch] [bp-8h]@1 signed int i; // [sp+10h] [bp-4h]@3 v1 = this; if ( !gbNoSound && *(_DWORD *)(this + 54) ) { for ( i = 0; ; ++i ) { if ( i < 14 ) { *(_DWORD *)(v1 + 4 * i + 84) = AIL_allocate_sample_handle(*(_DWORD *)(v1 + 54)); if ( *(_DWORD *)(v1 + 4 * i + 84) ) continue; } break; } *(_DWORD *)(v1 + 148) = i; } } // 46AE18: using guessed type int gbNoSound; // 4945B4: using guessed type int __stdcall AIL_allocate_sample_handle(_DWORD); //----- (00438FD0) -------------------------------------------------------- int __thiscall soundManager::Close(int this) { int result; // eax@1 int v2; // [sp+Ch] [bp-4h]@1 v2 = this; result = this; if ( *(_DWORD *)(this + 50) == 1 ) { if ( !gbNoSound ) { LogStr("SD1"); soundManager::UnimportantMethod2(v2); LogStr("SD2"); soundManager::MIDIShutdown(v2); LogStr("SD3"); AIL_shutdown(); LogStr("SD4"); } result = v2; *(_DWORD *)(v2 + 50) = 0; gbNoSound = 1; } return result; } // 46AE18: using guessed type int gbNoSound; //----- (00439540) -------------------------------------------------------- __int16 __thiscall textWidget::SetText(int this, const char *a2) { __int16 result; // ax@1 int v3; // ebx@1 unsigned int v4; // esi@4 unsigned int v5; // ecx@6 result = *(_WORD *)(this + 20); v3 = this; if ( result == 512 || result == 16384 ) { v4 = (unsigned __int16)strlen(a2); if ( strlen(*(const char **)(v3 + 32)) < v4 ) { BaseFree(*(void **)(v3 + 32), "F:\\h2xsrc\\Base\\TEXTWDGT.CPP", 211); *(_DWORD *)(v3 + 32) = BaseAlloc(v4 + 5, (int)"F:\\h2xsrc\\Base\\TEXTWDGT.CPP", 212); } v5 = strlen(a2) + 1; result = v5; memcpy(*(void **)(v3 + 32), a2, v5); } else { *(_DWORD *)(this + 32) = a2; } return result; } //----- (00439A40) -------------------------------------------------------- int __fastcall MonoIconToBitmap(int a1, int a2, int a3, int a4, int a5, char a6, signed int a7, int a8, int a9, unsigned int a10, int a11) { int v11; // esi@1 int v12; // ecx@1 int v13; // eax@1 int v14; // esi@1 int v15; // edi@1 int v16; // esi@1 int v17; // eax@5 int v18; // ecx@5 int v19; // ecx@9 int v20; // ebp@9 int result; // eax@10 unsigned int v22; // edx@10 int v23; // edx@11 int v24; // eax@15 int v25; // edi@15 int v26; // eax@18 int v27; // ST10_4@23 int v28; // ecx@25 unsigned int v29; // ecx@25 int v30; // [sp+14h] [bp-4h]@9 v11 = *(_DWORD *)(a1 + 18); v12 = v11 + 13 * a5; dword_491D00 = v12; v13 = v11 + *(_DWORD *)(v12 + 9); v14 = *(_WORD *)v12; v15 = *(_WORD *)(v12 + 2); dword_491CF0 = v13; v16 = v14 + a3; dword_491CEC = v16; dword_491CE8 = v15 + a4; if ( !a7 ) goto LABEL_9; if ( a8 > dword_491CEC || dword_491CEC + *(_WORD *)(v12 + 4) > (signed int)(a8 + a10) || dword_491CE8 < a9 ) { v18 = a11; goto LABEL_8; } v17 = dword_491CE8 + *(_WORD *)(v12 + 6); v18 = a11; if ( v17 > a11 + a9 ) { LABEL_8: a7 = 1; dword_491CF8 = a8 + a10 - 1; dword_491CFC = a9 + v18 - 1; goto LABEL_9; } a7 = 0; LABEL_9: v19 = *(_DWORD *)(a2 + 22); v20 = v19 + *(_WORD *)(a2 + 18) * dword_491CE8; v30 = *(_WORD *)(a2 + 18); while ( 1 ) { while ( 1 ) { result = dword_491CF0 + 1; dword_491CE0 = v16; dword_491CF0 = result; v22 = *(_BYTE *)(result - 1); if ( (v22 & 0x80u) != 0 ) break; dword_491CE4 = *(_BYTE *)(result - 1); if ( v22 ) { if ( !a7 ) { BYTE1(v19) = a6; LOBYTE(v19) = a6; v24 = v19 << 16; LOWORD(v24) = v19; memset32((void *)(v20 + v16), v24, v22 >> 2); v25 = v20 + v16 + 4 * (v22 >> 2); LOBYTE(v19) = v22; LABEL_27: memset((void *)v25, v24, v19 & 3); HIWORD(v19) = 0; goto LABEL_28; } HIWORD(v19) = HIWORD(a9); if ( dword_491CE8 >= a9 ) { HIWORD(v19) = HIWORD(dword_491CFC); if ( dword_491CE8 <= dword_491CFC ) { v26 = v22 + v16; HIWORD(v19) = HIWORD(a8); if ( a8 < (signed int)(v22 + v16) ) { HIWORD(v19) = HIWORD(dword_491CF8); if ( v16 <= dword_491CF8 ) { HIWORD(v19) = HIWORD(dword_491CF8); if ( v16 < a8 ) { if ( v26 > dword_491CF8 ) { BYTE1(v19) = a6; LOBYTE(v19) = a6; v24 = v19 << 16; LOWORD(v24) = v19; memset32((void *)(v20 + a8), v24, a10 >> 2); v25 = v20 + a8 + 4 * (a10 >> 2); LOBYTE(v19) = a10; } else { v28 = v22 + v16 - a8; BYTE1(v28) = a6; LOBYTE(v28) = a6; v24 = v28 << 16; LOWORD(v24) = v28; v29 = (v22 + v16 - a8) >> 2; memset32((void *)(v20 + a8), v24, v29); v25 = v20 + a8 + 4 * v29; v19 = v22 + v16 - a8; } } else if ( v26 > dword_491CF8 ) { BYTE1(v19) = a6; LOBYTE(v19) = a6; v27 = dword_491CF8 - v16 + 1; v24 = v19 << 16; LOWORD(v24) = v19; v19 = (unsigned int)(dword_491CF8 - v16 + 1) >> 2; memset32((void *)(v20 + v16), v24, v19); v25 = v20 + v16 + 4 * v19; LOBYTE(v19) = v27; } else { BYTE1(v19) = a6; LOBYTE(v19) = a6; v24 = v19 << 16; LOWORD(v24) = v19; memset32((void *)(v20 + v16), v24, v22 >> 2); v25 = v20 + v16 + 4 * (v22 >> 2); LOBYTE(v19) = v22; } goto LABEL_27; } } } } LABEL_28: v16 += v22; dword_491CE4 = v22; } else { v16 = dword_491CEC; v20 += v30; v19 = dword_491CE8++ + 1; } } dword_491CF4 = v20; dword_491CE4 = v22; v23 = v22 & 0x7F; if ( !v23 ) return result; v16 += v23; } } // 491CE0: using guessed type int dword_491CE0; // 491CE4: using guessed type int dword_491CE4; // 491CE8: using guessed type int dword_491CE8; // 491CEC: using guessed type int dword_491CEC; // 491CF0: using guessed type int dword_491CF0; // 491CF4: using guessed type int dword_491CF4; // 491CF8: using guessed type int dword_491CF8; // 491CFC: using guessed type int dword_491CFC; // 491D00: using guessed type int dword_491D00; //----- (0043A500) -------------------------------------------------------- void *__thiscall listBoxWidget::_scalar_deleting_destructor_(void *Memory, char a2) { void *v2; // esi@1 v2 = Memory; listBoxWidget::_listBoxWidget((int)Memory); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0043A520) -------------------------------------------------------- void __thiscall listBoxWidget::_listBoxWidget(int this) { int v1; // eax@1 int v2; // esi@1 int v3; // ecx@1 int v4; // ebx@3 signed int v5; // edi@3 v1 = *(_DWORD *)(this + 32); *(_DWORD *)this = &listBoxWidget::_vftable_; v2 = this; resourceManager::Dispose(v1); resourceManager::Dispose(*(_DWORD *)(v2 + 36)); v3 = *(_DWORD *)(v2 + 142); if ( v3 ) (**(void (__stdcall ***)(_DWORD))v3)(1); v4 = 0; v5 = 0; while ( *(_WORD *)(v2 + 50) > v5 ) { v4 += 4; ++v5; BaseFree(*(void **)(*(_DWORD *)(v2 + 60) + v4 - 4), "F:\\h2xsrc\\Base\\listbox.cpp", 25); } BaseFree(*(void **)(v2 + 60), "F:\\h2xsrc\\Base\\listbox.cpp", 27); gbSendMouseMoveMessages = 0; widget::_widget((void *)v2); } // 4310B0: using guessed type _DWORD __stdcall resourceManager__Dispose(_DWORD); // 449278: using guessed type int (*listBoxWidget___vftable_)(); // 46AAC4: using guessed type int gbSendMouseMoveMessages; //----- (0043A820) -------------------------------------------------------- void __thiscall listBoxWidget::DeleteItem(int this, int a2) { __int16 v2; // dx@1 int v3; // ebx@1 int v4; // ecx@1 __int16 v5; // ax@4 bool v6; // sf@7 __int16 v7; // ax@11 void *v8; // ecx@17 __int16 v9; // ax@20 bool v10; // zf@20 void *v11; // [sp+10h] [bp-4h]@15 v2 = *(_WORD *)(this + 50); v3 = this; v4 = *(_WORD *)(this + 50); if ( v4 > a2 ) { if ( *(_WORD *)(v3 + 52) == a2 ) *(_WORD *)(v3 + 52) = -1; v5 = *(_WORD *)(v3 + 64); if ( *(_WORD *)(v3 + 64) == a2 && *(_WORD *)(v3 + 66) <= v5 ) *(_WORD *)(v3 + 64) = v5 - 1; v6 = (signed __int16)((*(_WORD *)(v3 + 66))-- - 1) < 0; if ( v6 ) *(_WORD *)(v3 + 66) = 0; if ( *(_WORD *)(v3 + 64) < 0 ) *(_WORD *)(v3 + 64) = 0; v7 = *(_WORD *)(v3 + 66); if ( *(_WORD *)(v3 + 64) > v7 ) *(_WORD *)(v3 + 64) = v7; if ( v2 == 1 ) { BaseFree(**(void ***)(v3 + 60), "F:\\h2xsrc\\Base\\listbox.cpp", 156); BaseFree(*(void **)(v3 + 60), "F:\\h2xsrc\\Base\\listbox.cpp", 157); *(_DWORD *)(v3 + 60) = 0; } else { v11 = BaseAlloc(4 * v4 - 4, (int)"F:\\h2xsrc\\Base\\listbox.cpp", 162); memcpy(v11, *(const void **)(v3 + 60), 4 * ((unsigned int)(4 * *(_WORD *)(v3 + 50) - 4) >> 2)); if ( *(_WORD *)(v3 + 50) - a2 - 1 > 0 ) memcpy( (char *)v11 + 4 * a2, (const void *)(*(_DWORD *)(v3 + 60) + 4 * a2 + 4), 4 * ((unsigned int)(4 * (*(_WORD *)(v3 + 50) - a2 - 1)) >> 2)); v8 = *(void **)(v3 + 60); if ( v8 ) BaseFree(v8, "F:\\h2xsrc\\Base\\listbox.cpp", 169); *(_DWORD *)(v3 + 60) = v11; } v9 = *(_WORD *)(v3 + 50) - 1; v10 = *(_WORD *)(v3 + 66) == 0; v6 = *(_WORD *)(v3 + 66) < 0; *(_WORD *)(v3 + 50) = v9; if ( v6 | v10 ) *(_WORD *)(v3 + 42) = v9; else *(_WORD *)(v3 + 42) = *(_WORD *)(v3 + 40); } } //----- (0043ACE0) -------------------------------------------------------- void __thiscall listBoxWidget::Draw(int this) { listBoxWidget::DrawLBStuff(this, 0); } //----- (0043ACF0) -------------------------------------------------------- void __thiscall listBoxWidget::DrawLBStuff(int this, int a2) { int v2; // eax@1 int v3; // esi@1 int v4; // edi@1 int v5; // ebx@1 signed int i; // ebp@1 int v7; // eax@5 int v8; // eax@8 int v9; // eax@12 int v10; // eax@17 int v11; // eax@24 int v12; // edi@26 int v13; // ebx@27 int v14; // eax@29 int v15; // eax@31 int v16; // ebx@31 int v17; // edi@31 signed __int16 v18; // cx@31 int v19; // eax@32 int v20; // ecx@34 int v21; // ST14_4@34 int v22; // eax@34 int v23; // [sp+10h] [bp-8h]@11 int v24; // [sp+10h] [bp-8h]@16 v2 = *(_DWORD *)(this + 4); v3 = this; v4 = *(_DWORD *)(v2 + 40) + *(_WORD *)(this + 96); v5 = *(_DWORD *)(v2 + 44) + *(_WORD *)(this + 98); for ( i = 0; *(_WORD *)(v3 + 40) > i; ++i ) { if ( i ) { if ( *(_WORD *)(v3 + 40) - i == 1 ) { icon::DrawToBuffer(v4, v5, *(_WORD *)(v3 + 72), 0); if ( *(_WORD *)(v3 + 42) > i ) { v23 = i + *(_WORD *)(v3 + 64); if ( *(_WORD *)(v3 + 52) == v23 ) v9 = *(_WORD *)(v3 + 46); else v9 = *(_WORD *)(v3 + 44); font::DrawBoundedString( *(font **)(v3 + 32), *(const char **)(*(_DWORD *)(v3 + 60) + 4 * v23), v4 + 5, v5 + 2, *(_WORD *)(v3 + 100) - 10, *(_DWORD *)(*(_DWORD *)(v3 + 32) + 16) + 1, v9, *(_WORD *)(v3 + 48)); } continue; } icon::DrawToBuffer(v4, v5, *(_WORD *)(v3 + 70), 0); if ( *(_WORD *)(v3 + 42) > i ) { v24 = i + *(_WORD *)(v3 + 64); if ( *(_WORD *)(v3 + 52) == v24 ) v10 = *(_WORD *)(v3 + 46); else v10 = *(_WORD *)(v3 + 44); font::DrawBoundedString( *(font **)(v3 + 32), *(const char **)(*(_DWORD *)(v3 + 60) + 4 * v24), v4 + 5, v5 + 2, *(_WORD *)(v3 + 100) - 10, *(_DWORD *)(*(_DWORD *)(v3 + 32) + 16) + 1, v10, *(_WORD *)(v3 + 48)); } v8 = *(_WORD *)(v3 + 92); } else { icon::DrawToBuffer(v4, v5, *(_WORD *)(v3 + 68), 0); if ( (signed int)*(_WORD *)(v3 + 42) > 0 ) { if ( *(_WORD *)(v3 + 52) == *(_WORD *)(v3 + 64) ) v7 = *(_WORD *)(v3 + 46); else v7 = *(_WORD *)(v3 + 44); font::DrawBoundedString( *(font **)(v3 + 32), *(const char **)(*(_DWORD *)(v3 + 60) + 4 * *(_WORD *)(v3 + 64)), v4 + 5, v5 + 4, *(_WORD *)(v3 + 100) - 10, *(_DWORD *)(*(_DWORD *)(v3 + 32) + 16) + 1, v7, *(_WORD *)(v3 + 48)); } v8 = *(_WORD *)(v3 + 90); } v5 += v8; } if ( *(_BYTE *)(v3 + 138) ) v11 = *(_WORD *)(v3 + 76); else v11 = *(_WORD *)(v3 + 74); icon::DrawToBuffer( *(_DWORD *)(*(_DWORD *)(v3 + 4) + 40) + *(_WORD *)(v3 + 104), *(_DWORD *)(*(_DWORD *)(v3 + 4) + 44) + *(_WORD *)(v3 + 106), v11, 0); v12 = 2; icon::DrawToBuffer( *(_WORD *)(v3 + 112) + *(_DWORD *)(*(_DWORD *)(v3 + 4) + 40), *(_WORD *)(v3 + 114) + *(_DWORD *)(*(_DWORD *)(v3 + 4) + 44), *(_WORD *)(v3 + 82), 0); if ( *(_WORD *)(v3 + 40) - 2 > 2 ) { do { v13 = v12++ - 1; icon::DrawToBuffer( *(_WORD *)(v3 + 112) + *(_DWORD *)(*(_DWORD *)(v3 + 4) + 40), *(_WORD *)(v3 + 114) + *(_DWORD *)(*(_DWORD *)(v3 + 4) + 44) + v13 * *(_WORD *)(v3 + 92), *(_WORD *)(v3 + 84), 0); } while ( *(_WORD *)(v3 + 40) - 2 > v12 ); } icon::DrawToBuffer( *(_WORD *)(v3 + 112) + *(_DWORD *)(*(_DWORD *)(v3 + 4) + 40), *(_WORD *)(v3 + 114) + *(_DWORD *)(*(_DWORD *)(v3 + 4) + 44) + (v12 - 1) * *(_WORD *)(v3 + 92), *(_WORD *)(v3 + 86), 0); if ( *(_BYTE *)(v3 + 139) ) v14 = *(_WORD *)(v3 + 80); else v14 = *(_WORD *)(v3 + 78); v15 = icon::DrawToBuffer( *(_DWORD *)(*(_DWORD *)(v3 + 4) + 40) + *(_WORD *)(v3 + 120), *(_DWORD *)(*(_DWORD *)(v3 + 4) + 44) + *(_WORD *)(v3 + 122), v14, 0); LOWORD(v15) = *(_WORD *)(v3 + 112); v16 = *(_DWORD *)(v3 + 4); v17 = *(_DWORD *)(v16 + 40) + v15 + 5; v18 = *(_WORD *)(v3 + 66); *(_WORD *)(v3 + 128) = v17; if ( v18 <= 0 ) v19 = *(_WORD *)(v3 + 136) / 2; else v19 = *(_WORD *)(v3 + 136) * (signed int)*(_WORD *)(v3 + 64) / v18; v20 = *(_DWORD *)(v16 + 44); LOWORD(v20) = *(_WORD *)(v3 + 114) + v20; v21 = *(_WORD *)(v3 + 88); v22 = v20 + v19 + 3; *(_WORD *)(v3 + 130) = v22; icon::DrawToBuffer((signed __int16)v17, (signed __int16)v22, v21, 0); if ( a2 ) heroWindowManager::UpdateScreenRegion( *(_DWORD *)(*(_DWORD *)(v3 + 4) + 40) + *(_WORD *)(v3 + 24), *(_DWORD *)(*(_DWORD *)(v3 + 4) + 44) + *(_WORD *)(v3 + 26), *(_WORD *)(v3 + 28), *(_WORD *)(v3 + 30)); } // 433510: using guessed type _DWORD __stdcall icon__DrawToBuffer(_DWORD, _DWORD, _DWORD, _DWORD); //----- (0043B030) -------------------------------------------------------- signed int __thiscall listBoxWidget::ProcessMouseMessage(int this, int a2) { int v2; // eax@1 int v3; // esi@1 int v4; // ebp@1 int v5; // edx@1 int v6; // ecx@1 int v7; // ebx@1 int v8; // eax@1 int v9; // ecx@6 int v10; // eax@7 int v11; // ecx@11 int v12; // edi@16 int v13; // eax@16 signed int result; // eax@22 int v15; // edi@24 int v16; // ecx@28 int v17; // ecx@29 __int16 v18; // ax@35 __int16 v19; // ax@39 int v20; // eax@42 __int16 v21; // di@45 int v22; // eax@45 int v23; // ecx@53 v2 = *(_DWORD *)(this + 4); v3 = this; v4 = *(_DWORD *)a2; v5 = *(_DWORD *)(a2 + 16) - *(_DWORD *)(v2 + 40); v6 = *(_DWORD *)(a2 + 20) - *(_DWORD *)(v2 + 44); v7 = *(_WORD *)(v3 + 98); v8 = *(_DWORD *)(a2 + 20) - *(_DWORD *)(v2 + 44) - v7; if ( *(_DWORD *)a2 == 4 ) { if ( *(_BYTE *)(v3 + 141) ) { v9 = *(_WORD *)(v3 + 90); if ( v8 <= v9 ) v10 = 0; else v10 = (v8 - v9) / *(_WORD *)(v3 + 92) + 1; if ( v10 < 0 ) v10 = 0; v11 = *(_WORD *)(v3 + 42); if ( v10 >= v11 ) v10 = v11 - 1; if ( v10 + *(_WORD *)(v3 + 64) == *(_WORD *)(v3 + 52) ) return 1; *(_WORD *)(v3 + 52) = *(_WORD *)(v3 + 64) + v10; } else { if ( !*(_BYTE *)(v3 + 140) ) return 0; v12 = *(_WORD *)(v3 + 66); v13 = (v12 + 1) * (v6 - *(_WORD *)(v3 + 134) / 2 - *(_WORD *)(v3 + 114) - 4) / *(_WORD *)(v3 + 136); if ( v13 < 0 ) v13 = 0; if ( v13 > v12 ) v13 = *(_WORD *)(v3 + 66); if ( *(_WORD *)(v3 + 64) == v13 ) return 1; *(_WORD *)(v3 + 64) = v13; } goto LABEL_59; } if ( v4 == 8 ) { if ( !*(_WORD *)(v3 + 50) ) return 1; v15 = *(_WORD *)(v3 + 96); if ( v5 < v15 || v6 < v7 || v15 + *(_WORD *)(v3 + 100) <= v5 || v7 + *(_WORD *)(v3 + 102) <= v6 ) { if ( *(_WORD *)(v3 + 110) + (signed int)*(_WORD *)(v3 + 106) <= v6 ) { if ( *(_WORD *)(v3 + 122) > v6 ) { v20 = *(_WORD *)(v3 + 130); if ( v6 >= v20 && v20 + *(_WORD *)(v3 + 134) > v6 ) { *(_BYTE *)(v3 + 140) = 1; gbSendMouseMoveMessages = 1; } v21 = *(_WORD *)(v3 + 66); v22 = (*(_WORD *)(v3 + 66) + 1) * (v6 - *(_WORD *)(v3 + 134) / 2 - *(_WORD *)(v3 + 114) - 4) / *(_WORD *)(v3 + 136); *(_WORD *)(v3 + 64) = v22; if ( (signed __int16)v22 < 0 ) *(_WORD *)(v3 + 64) = 0; if ( *(_WORD *)(v3 + 64) > v21 ) *(_WORD *)(v3 + 64) = v21; } else { v19 = *(_WORD *)(v3 + 64); if ( *(_WORD *)(v3 + 66) > v19 ) *(_WORD *)(v3 + 64) = v19 + 1; *(_BYTE *)(v3 + 139) = 1; } } else { v18 = *(_WORD *)(v3 + 64); if ( v18 > 0 ) *(_WORD *)(v3 + 64) = v18 - 1; *(_BYTE *)(v3 + 138) = 1; } } else { v16 = *(_WORD *)(v3 + 90); if ( v8 <= v16 ) v17 = *(_WORD *)(v3 + 64); else v17 = *(_WORD *)(v3 + 64) + (v8 - v16) / *(_WORD *)(v3 + 92) + 1; if ( *(_WORD *)(v3 + 50) <= v17 ) return 1; *(_BYTE *)(v3 + 141) = 1; gbSendMouseMoveMessages = 1; if ( *(_WORD *)(v3 + 52) == v17 ) return 1; *(_WORD *)(v3 + 52) = v17; } LABEL_59: listBoxWidget::DrawLBStuff(v3, 1); return 1; } if ( v4 != 16 ) return 1; gbSendMouseMoveMessages = 0; if ( *(_BYTE *)(v3 + 138) || *(_BYTE *)(v3 + 139) || *(_BYTE *)(v3 + 140) ) { *(_BYTE *)(v3 + 140) = 0; *(_BYTE *)(v3 + 139) = 0; *(_BYTE *)(v3 + 138) = 0; goto LABEL_59; } if ( *(_BYTE *)(v3 + 141) ) { *(_BYTE *)(v3 + 141) = 0; *(_DWORD *)(a2 + 4) = 12; *(_DWORD *)a2 = 512; *(_DWORD *)(a2 + 8) = *(_WORD *)(v3 + 16); v23 = *(_WORD *)(v3 + 52); *(_DWORD *)(a2 + 12) = 1; *(_DWORD *)(a2 + 24) = v23; if ( *(_WORD *)(v3 + 54) == *(_WORD *)(v3 + 52) ) { if ( (signed int)KBTickCount() < *(_DWORD *)(v3 + 56) + 400 ) *(_DWORD *)(a2 + 12) = 2; } *(_WORD *)(v3 + 54) = *(_WORD *)(v3 + 52); *(_DWORD *)(v3 + 56) = KBTickCount(); result = 2; } else { result = 0; } return result; } // 46AAC4: using guessed type int gbSendMouseMoveMessages; //----- (0043B390) -------------------------------------------------------- void *__thiscall dropListWidget::_scalar_deleting_destructor_(void *Memory, char a2) { void *v2; // esi@1 v2 = Memory; dropListWidget::_dropListWidget((int)Memory); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0043B3B0) -------------------------------------------------------- void __thiscall dropListWidget::_dropListWidget(int this) { int v1; // eax@1 int v2; // esi@1 int v3; // ecx@1 int v4; // ebx@3 signed int v5; // edi@3 v1 = *(_DWORD *)(this + 32); *(_DWORD *)this = &dropListWidget::_vftable_; v2 = this; resourceManager::Dispose(v1); resourceManager::Dispose(*(_DWORD *)(v2 + 36)); v3 = *(_DWORD *)(v2 + 176); if ( v3 ) (**(void (__stdcall ***)(_DWORD))v3)(1); v4 = 0; v5 = 0; while ( *(_WORD *)(v2 + 60) > v5 ) { v4 += 4; ++v5; BaseFree(*(void **)(*(_DWORD *)(v2 + 64) + v4 - 4), "F:\\h2xsrc\\Base\\droplist.cpp", 25); } BaseFree(*(void **)(v2 + 64), "F:\\h2xsrc\\Base\\droplist.cpp", 27); widget::_widget((void *)v2); } // 4310B0: using guessed type _DWORD __stdcall resourceManager__Dispose(_DWORD); // 449288: using guessed type int (*dropListWidget___vftable_)(); //----- (0043B430) -------------------------------------------------------- __int16 __thiscall dropListWidget::Read(int this) { int v1; // esi@1 __int16 v2; // ax@1 __int16 v3; // bp@1 int v4; // edx@1 __int16 v5; // bx@1 int v6; // eax@1 __int16 v7; // cx@1 int v8; // edi@1 int v9; // eax@1 __int16 result; // ax@1 int v11; // [sp+10h] [bp-10h]@1 v1 = this; *(_WORD *)(this + 24) = resourceManager::ReadWord(gpResourceManager); *(_WORD *)(v1 + 26) = resourceManager::ReadWord(gpResourceManager); *(_WORD *)(v1 + 28) = resourceManager::ReadWord(gpResourceManager); *(_WORD *)(v1 + 30) = resourceManager::ReadWord(gpResourceManager); resourceManager::Read13(&v11); resourceManager::SavePosition(gpResourceManager); *(_DWORD *)(v1 + 32) = resourceManager::GetFont(&v11); resourceManager::RestorePosition(gpResourceManager); resourceManager::Read13(&v11); resourceManager::SavePosition(gpResourceManager); *(_DWORD *)(v1 + 36) = resourceManager::GetIcon(&v11); resourceManager::RestorePosition(gpResourceManager); *(_WORD *)(v1 + 40) = resourceManager::ReadWord(gpResourceManager) + *(_WORD *)(v1 + 24); *(_WORD *)(v1 + 42) = resourceManager::ReadWord(gpResourceManager) + *(_WORD *)(v1 + 26); *(_WORD *)(v1 + 44) = resourceManager::ReadWord(gpResourceManager); *(_WORD *)(v1 + 46) = resourceManager::ReadWord(gpResourceManager); *(_WORD *)(v1 + 48) = resourceManager::ReadWord(gpResourceManager); *(_WORD *)(v1 + 52) = resourceManager::ReadWord(gpResourceManager); *(_WORD *)(v1 + 54) = resourceManager::ReadWord(gpResourceManager); *(_WORD *)(v1 + 56) = resourceManager::ReadWord(gpResourceManager); *(_WORD *)(v1 + 58) = resourceManager::ReadWord(gpResourceManager); v2 = resourceManager::ReadWord(gpResourceManager); *(_WORD *)(v1 + 72) = 0; *(_WORD *)(v1 + 74) = 1; *(_WORD *)(v1 + 76) = 2; *(_WORD *)(v1 + 78) = 3; *(_WORD *)(v1 + 80) = 4; *(_WORD *)(v1 + 82) = 5; *(_WORD *)(v1 + 84) = 6; *(_WORD *)(v1 + 86) = 7; *(_WORD *)(v1 + 88) = 8; *(_WORD *)(v1 + 90) = 9; *(_WORD *)(v1 + 92) = 10; *(_WORD *)(v1 + 16) = v2; v3 = *(_WORD *)(v1 + 24); v4 = *(_DWORD *)(v1 + 36) + 18; *(_WORD *)(v1 + 94) = 11; *(_WORD *)(v1 + 96) = 12; *(_WORD *)(v1 + 98) = 13; v5 = *(_WORD *)(v1 + 26); v6 = *(_DWORD *)v4; *(_WORD *)(v1 + 108) = v3; *(_WORD *)(v1 + 110) = v5; v7 = *(_WORD *)(v6 + 4); *(_WORD *)(v1 + 112) = v7; *(_WORD *)(v1 + 114) = *(_WORD *)(v6 + 6); v8 = *(_DWORD *)v4; *(_WORD *)(v1 + 100) = v3 + v7; v8 += 13; *(_WORD *)(v1 + 102) = v5; *(_WORD *)(v1 + 104) = *(_WORD *)(v8 + 4); *(_WORD *)(v1 + 106) = *(_WORD *)(v8 + 6); v9 = *(_DWORD *)v4 + 169; *(_WORD *)(v1 + 166) = *(_WORD *)(*(_DWORD *)v4 + 173); result = *(_WORD *)(v9 + 6); *(_WORD *)(v1 + 168) = result; return result; } // 431010: using guessed type _DWORD __stdcall resourceManager__GetFont(_DWORD); // 431720: using guessed type int __thiscall resourceManager__SavePosition(_DWORD); // 431780: using guessed type int __thiscall resourceManager__RestorePosition(_DWORD); // 4317E0: using guessed type int __thiscall resourceManager__ReadWord(_DWORD); // 4319F0: using guessed type _DWORD __stdcall resourceManager__Read13(LPVOID lpBuffer); // 48E8D4: using guessed type int gpResourceManager; //----- (0043B650) -------------------------------------------------------- void __thiscall dropListWidget::DeleteItem(int this, int a2) { int v2; // ebp@1 __int16 v3; // ax@1 int v4; // esi@1 void *v5; // ecx@8 void *v6; // [sp+10h] [bp-4h]@6 v2 = this; v3 = *(_WORD *)(this + 60); v4 = *(_WORD *)(this + 60); if ( a2 < v4 ) { if ( *(_WORD *)(this + 62) == a2 ) *(_WORD *)(this + 62) = -1; if ( v3 == 1 ) { BaseFree(**(void ***)(this + 64), "F:\\h2xsrc\\Base\\droplist.cpp", 111); BaseFree(*(void **)(v2 + 64), "F:\\h2xsrc\\Base\\droplist.cpp", 112); *(_DWORD *)(v2 + 64) = 0; } else { v6 = BaseAlloc(4 * v4 - 4, (int)"F:\\h2xsrc\\Base\\droplist.cpp", 117); memcpy(v6, *(const void **)(v2 + 64), 4 * ((unsigned int)(4 * *(_WORD *)(v2 + 60) - 4) >> 2)); if ( *(_WORD *)(v2 + 60) - a2 - 1 > 0 ) memcpy( (char *)v6 + 4 * a2, (const void *)(*(_DWORD *)(v2 + 64) + 4 * a2 + 4), 4 * ((unsigned int)(4 * (*(_WORD *)(v2 + 60) - a2 - 1)) >> 2)); v5 = *(void **)(v2 + 64); if ( v5 ) BaseFree(v5, "F:\\h2xsrc\\Base\\droplist.cpp", 123); *(_DWORD *)(v2 + 64) = v6; } --*(_WORD *)(v2 + 60); } } //----- (0043BA80) -------------------------------------------------------- int __thiscall dropListWidget::Draw(int this) { int v1; // esi@1 int result; // eax@1 __int16 v3; // dx@2 int v4; // eax@3 v1 = this; icon::DrawToBuffer( *(_DWORD *)(*(_DWORD *)(this + 4) + 40) + *(_WORD *)(v1 + 108), *(_DWORD *)(*(_DWORD *)(this + 4) + 44) + *(_WORD *)(v1 + 110), *(_WORD *)(this + 72), 0); result = icon::DrawToBuffer( *(_DWORD *)(*(_DWORD *)(v1 + 4) + 40) + *(_WORD *)(v1 + 100), *(_DWORD *)(*(_DWORD *)(v1 + 4) + 44) + *(_WORD *)(v1 + 102), *(_WORD *)(v1 + 74), 0); if ( *(_WORD *)(v1 + 60) > 0 ) { v3 = *(_WORD *)(v1 + 62); if ( v3 >= 0 ) { v4 = 3; if ( !(*(_BYTE *)(v1 + 22) & 8) ) v4 = *(_WORD *)(v1 + 52); result = font::DrawBoundedString( *(font **)(v1 + 32), *(const char **)(*(_DWORD *)(v1 + 64) + 4 * v3), *(_DWORD *)(*(_DWORD *)(v1 + 4) + 40) + *(_WORD *)(v1 + 40), *(_DWORD *)(*(_DWORD *)(v1 + 4) + 44) + *(_WORD *)(v1 + 42), *(_WORD *)(v1 + 44), *(_WORD *)(v1 + 46), v4, *(_WORD *)(v1 + 58)); } } return result; } // 433510: using guessed type _DWORD __stdcall icon__DrawToBuffer(_DWORD, _DWORD, _DWORD, _DWORD); //----- (0043BB30) -------------------------------------------------------- void __thiscall dropListWidget::DrawDropStuff(int this) { int v1; // eax@1 int v2; // esi@1 int v3; // edi@1 __int16 v4; // dx@1 int v5; // eax@2 int v6; // ebx@4 int v7; // edi@4 int v8; // edx@6 int v9; // eax@7 int v10; // edx@10 int v11; // eax@12 int v12; // eax@17 int v13; // edi@19 int v14; // ebx@20 int v15; // eax@22 int v16; // ecx@24 int v17; // edi@24 signed int v18; // ebx@24 int v19; // ecx@24 signed int v20; // eax@24 int v21; // eax@24 int v22; // edx@24 int v23; // eax@24 int v24; // edx@24 v1 = *(_DWORD *)(this + 4); v2 = this; v3 = *(_DWORD *)(v1 + 44) + *(_WORD *)(this + 132); icon::DrawToBuffer( *(_WORD *)(this + 130) + *(_DWORD *)(v1 + 40), *(_DWORD *)(v1 + 44) + *(_WORD *)(this + 132), *(_WORD *)(this + 78), 0); v4 = *(_WORD *)(v2 + 68); if ( *(_WORD *)(v2 + 62) == v4 ) v5 = *(_WORD *)(v2 + 54); else v5 = *(_WORD *)(v2 + 52); v6 = 1; font::DrawBoundedString( *(font **)(v2 + 32), *(const char **)(*(_DWORD *)(v2 + 64) + 4 * v4), *(_WORD *)(v2 + 130) + *(_DWORD *)(*(_DWORD *)(v2 + 4) + 40) + 5, v3 + 4, *(_WORD *)(v2 + 134) - 10, *(_DWORD *)(*(_DWORD *)(v2 + 32) + 16) + 1, v5, *(_WORD *)(v2 + 58)); v7 = *(_WORD *)(v2 + 116) + v3; if ( *(_WORD *)(v2 + 50) - 1 > 1 ) { do { if ( v6 + *(_WORD *)(v2 + 68) >= *(_WORD *)(v2 + 60) ) break; icon::DrawToBuffer(*(_WORD *)(v2 + 130) + *(_DWORD *)(*(_DWORD *)(v2 + 4) + 40), v7, *(_WORD *)(v2 + 80), 0); v8 = *(_WORD *)(v2 + 68) + v6; v9 = *(_WORD *)(v2 + 62) == v8 ? *(_WORD *)(v2 + 54) : (signed int)*(_WORD *)(v2 + 52); ++v6; font::DrawBoundedString( *(font **)(v2 + 32), *(const char **)(*(_DWORD *)(v2 + 64) + 4 * v8), *(_WORD *)(v2 + 130) + *(_DWORD *)(*(_DWORD *)(v2 + 4) + 40) + 5, v7 + 2, *(_WORD *)(v2 + 134) - 10, *(_DWORD *)(*(_DWORD *)(v2 + 32) + 16) + 1, v9, *(_WORD *)(v2 + 58)); v7 += *(_WORD *)(v2 + 118); } while ( *(_WORD *)(v2 + 50) - 1 > v6 ); } icon::DrawToBuffer(*(_WORD *)(v2 + 130) + *(_DWORD *)(*(_DWORD *)(v2 + 4) + 40), v7, *(_WORD *)(v2 + 82), 0); v10 = *(_WORD *)(v2 + 68) + v6; if ( *(_WORD *)(v2 + 60) > v10 ) { if ( *(_WORD *)(v2 + 62) == v10 ) v11 = *(_WORD *)(v2 + 54); else v11 = *(_WORD *)(v2 + 52); font::DrawBoundedString( *(font **)(v2 + 32), *(const char **)(*(_DWORD *)(v2 + 64) + 4 * v10), *(_WORD *)(v2 + 130) + *(_DWORD *)(*(_DWORD *)(v2 + 4) + 40) + 5, v7 + 2, *(_WORD *)(v2 + 134) - 10, *(_DWORD *)(*(_DWORD *)(v2 + 32) + 16) + 1, v11, *(_WORD *)(v2 + 58)); } if ( *(_WORD *)(v2 + 70) > 0 ) { if ( *(_BYTE *)(v2 + 172) ) v12 = *(_WORD *)(v2 + 86); else v12 = *(_WORD *)(v2 + 84); icon::DrawToBuffer( *(_DWORD *)(*(_DWORD *)(v2 + 4) + 40) + *(_WORD *)(v2 + 138), *(_DWORD *)(*(_DWORD *)(v2 + 4) + 44) + *(_WORD *)(v2 + 140), v12, 0); v13 = 2; icon::DrawToBuffer( *(_WORD *)(v2 + 146) + *(_DWORD *)(*(_DWORD *)(v2 + 4) + 40), *(_WORD *)(v2 + 148) + *(_DWORD *)(*(_DWORD *)(v2 + 4) + 44), *(_WORD *)(v2 + 92), 0); if ( *(_WORD *)(v2 + 50) - 2 > 2 ) { do { v14 = v13++ - 1; icon::DrawToBuffer( *(_WORD *)(v2 + 146) + *(_DWORD *)(*(_DWORD *)(v2 + 4) + 40), *(_WORD *)(v2 + 148) + *(_DWORD *)(*(_DWORD *)(v2 + 4) + 44) + v14 * *(_WORD *)(v2 + 118), *(_WORD *)(v2 + 94), 0); } while ( *(_WORD *)(v2 + 50) - 2 > v13 ); } icon::DrawToBuffer( *(_WORD *)(v2 + 146) + *(_DWORD *)(*(_DWORD *)(v2 + 4) + 40), *(_WORD *)(v2 + 148) + *(_DWORD *)(*(_DWORD *)(v2 + 4) + 44) + (v13 - 1) * *(_WORD *)(v2 + 118), *(_WORD *)(v2 + 96), 0); if ( *(_BYTE *)(v2 + 173) ) v15 = *(_WORD *)(v2 + 90); else v15 = *(_WORD *)(v2 + 88); icon::DrawToBuffer( *(_DWORD *)(*(_DWORD *)(v2 + 4) + 40) + *(_WORD *)(v2 + 154), *(_DWORD *)(*(_DWORD *)(v2 + 4) + 44) + *(_WORD *)(v2 + 156), v15, 0); LOWORD(v16) = *(_WORD *)(v2 + 146); v17 = *(_DWORD *)(v2 + 4); v18 = *(_WORD *)(v2 + 70); v19 = *(_DWORD *)(v17 + 40) + v16 + 5; v20 = *(_WORD *)(v2 + 68) * *(_WORD *)(v2 + 170); *(_WORD *)(v2 + 162) = v19; v21 = v20 / v18; v22 = *(_DWORD *)(v17 + 44); LOWORD(v22) = v21 + v22; LOWORD(v21) = *(_WORD *)(v2 + 148); v23 = v22 + v21 + 3; v24 = *(_WORD *)(v2 + 98); *(_WORD *)(v2 + 164) = v23; icon::DrawToBuffer((signed __int16)v19, (signed __int16)v23, v24, 0); } heroWindowManager::UpdateScreenRegion( *(_WORD *)(v2 + 24), *(_WORD *)(v2 + 26), *(_WORD *)(v2 + 28), *(_WORD *)(v2 + 30) + *(_WORD *)(v2 + 128)); } // 433510: using guessed type _DWORD __stdcall icon__DrawToBuffer(_DWORD, _DWORD, _DWORD, _DWORD); //----- (0043BEB0) -------------------------------------------------------- void __thiscall dropListWidget::ProcessSelectDialog(int this) { int v1; // ebx@1 signed __int16 v2; // si@1 __int16 v3; // dx@1 __int16 v4; // ax@2 __int16 v5; // cx@2 int v6; // ecx@11 int v7; // esi@11 int v8; // edx@11 int v9; // edi@11 __int16 v10; // bp@11 __int16 v11; // ax@11 __int16 v12; // di@11 __int16 v13; // dx@11 __int16 v14; // bp@11 __int16 v15; // si@11 int v16; // ebp@11 int v17; // ebp@11 int v18; // eax@11 int v19; // eax@11 bool v20; // zf@11 bool v21; // sf@11 __int16 v22; // bp@15 __int16 v23; // dx@15 int v24; // eax@21 int v25; // edx@21 int v26; // edi@21 int v27; // esi@21 int v28; // ecx@21 int v29; // eax@22 __int16 v30; // ax@24 __int16 v31; // ax@25 __int16 v32; // cx@28 __int16 v33; // ax@28 __int16 v34; // ax@30 int v35; // ecx@37 signed __int16 v36; // ax@37 __int16 v37; // cx@39 int v38; // eax@39 int v39; // edx@39 int v40; // ecx@42 int v41; // eax@42 int v42; // eax@43 int v43; // ecx@47 int v44; // edx@49 int v45; // esi@53 int v46; // eax@53 int v47; // eax@59 int v48; // edi@60 int v49; // eax@63 int v50; // edx@64 int v51; // eax@67 int v52; // ecx@67 int v53; // eax@67 int v54; // ecx@68 __int16 v55; // ax@74 __int16 v56; // ax@78 int v57; // eax@81 __int16 v58; // si@84 int v59; // eax@84 int v60; // ecx@95 __int16 v61; // [sp+10h] [bp-4Ch]@11 __int16 v62; // [sp+14h] [bp-48h]@11 __int16 v63; // [sp+18h] [bp-44h]@11 __int16 v64; // [sp+1Ch] [bp-40h]@11 signed int v65; // [sp+20h] [bp-3Ch]@1 int retstr; // [sp+24h] [bp-38h]@11 int v67; // [sp+40h] [bp-1Ch]@21 int v68; // [sp+44h] [bp-18h]@22 int v69; // [sp+50h] [bp-Ch]@21 int v70; // [sp+54h] [bp-8h]@21 v65 = 1; v1 = this; *(_BYTE *)(this + 172) = 0; *(_BYTE *)(this + 173) = 0; *(_BYTE *)(this + 175) = 0; *(_BYTE *)(this + 174) = 0; *(_WORD *)(this + 68) = 0; *(_WORD *)(this + 70) = 0; v2 = *(_WORD *)(this + 60); v3 = *(_WORD *)(this + 48); if ( v2 > v3 ) { v4 = v2 - v3; v5 = *(_WORD *)(this + 62); *(_WORD *)(v1 + 70) = v2 - v3; *(_WORD *)(v1 + 68) = v5; if ( v5 < 0 ) *(_WORD *)(v1 + 68) = 0; if ( *(_WORD *)(v1 + 68) > v4 ) *(_WORD *)(v1 + 68) = v4; } if ( *(_WORD *)(v1 + 70) <= 0 ) { if ( v2 <= 3 ) v2 = 3; *(_WORD *)(v1 + 50) = v2; } else { *(_WORD *)(v1 + 50) = v3; } v6 = *(_DWORD *)(v1 + 36); v7 = *(_WORD *)(v1 + 80); v8 = 13 * *(_WORD *)(v1 + 78); LOWORD(retstr) = *(_WORD *)(*(_DWORD *)(v6 + 18) + v8 + 6); *(_WORD *)(v1 + 116) = retstr; v9 = *(_WORD *)(v1 + 82); LOWORD(v7) = *(_WORD *)(13 * v7 + *(_DWORD *)(v6 + 18) + 6); *(_WORD *)(v1 + 118) = v7; v10 = *(_WORD *)(v1 + 108); v11 = *(_WORD *)(13 * v9 + *(_DWORD *)(v6 + 18) + 6); LOWORD(v9) = *(_WORD *)(v1 + 110); *(_WORD *)(v1 + 120) = v11; v12 = *(_WORD *)(v1 + 114) + v9; *(_WORD *)(v1 + 130) = v10; *(_WORD *)(v1 + 132) = v12; v13 = *(_WORD *)(*(_DWORD *)(v6 + 18) + v8 + 4); v14 = retstr + (_WORD)v7 * (*(_WORD *)(v1 + 50) - 2); *(_WORD *)(v1 + 134) = v13; v15 = v14 + v11; v16 = *(_WORD *)(v1 + 84); *(_WORD *)(v1 + 136) = v15; v17 = *(_DWORD *)(v6 + 18) + 13 * v16; v61 = *(_WORD *)(v17 + 4); *(_WORD *)(v1 + 142) = v61; v18 = *(_WORD *)(v1 + 88); LOWORD(v17) = *(_WORD *)(v17 + 6); retstr = *(_WORD *)(v1 + 88); v63 = v17; *(_WORD *)(v1 + 144) = v17; v19 = *(_DWORD *)(v6 + 18) + retstr + 12 * v18; v64 = *(_WORD *)(v19 + 4); *(_WORD *)(v1 + 158) = v64; v62 = *(_WORD *)(v19 + 6); *(_WORD *)(v1 + 160) = v62; *(_WORD *)(v1 + 122) = *(_WORD *)(v1 + 108); v20 = *(_WORD *)(v1 + 70) == 0; v21 = *(_WORD *)(v1 + 70) < 0; *(_WORD *)(v1 + 124) = v12; if ( v21 | v20 ) *(_WORD *)(v1 + 126) = v13; else *(_WORD *)(v1 + 126) = v13 + v61; v20 = *(_WORD *)(v1 + 70) == 0; v21 = *(_WORD *)(v1 + 70) < 0; *(_WORD *)(v1 + 128) = v15; if ( !(v21 | v20) ) { v22 = *(_WORD *)(v1 + 28) + *(_WORD *)(v1 + 24) - v61; *(_WORD *)(v1 + 138) = v22; *(_WORD *)(v1 + 140) = v12; *(_WORD *)(v1 + 154) = v22; *(_WORD *)(v1 + 156) = v12 - v62 + v15; v23 = v12 - v62 + v15 - (v12 + v63); *(_WORD *)(v1 + 146) = v22; *(_WORD *)(v1 + 148) = v12 + v63; *(_WORD *)(v1 + 150) = v64; *(_WORD *)(v1 + 152) = v23; *(_WORD *)(v1 + 170) = v23 - *(_WORD *)(v1 + 168) - 7; } icon::DrawToBuffer( *(_WORD *)(v1 + 100) + *(_DWORD *)(*(_DWORD *)(v1 + 4) + 40), *(_WORD *)(v1 + 102) + *(_DWORD *)(*(_DWORD *)(v1 + 4) + 44), *(_WORD *)(v1 + 76), 0); heroWindowManager::UpdateScreenRegion( *(_WORD *)(v1 + 100) + *(_DWORD *)(*(_DWORD *)(v1 + 4) + 40), *(_WORD *)(v1 + 102) + *(_DWORD *)(*(_DWORD *)(v1 + 4) + 44), *(_WORD *)(v1 + 104), *(_WORD *)(v1 + 106)); if ( operator new(0x1Au) ) *(_DWORD *)(v1 + 176) = bitmap::bitmap(0, *(_WORD *)(v1 + 126), *(_WORD *)(v1 + 128)); else *(_DWORD *)(v1 + 176) = 0; bitmap::GrabScreen(*(_WORD *)(v1 + 122), *(_WORD *)(v1 + 124)); LABEL_20: dropListWidget::DrawDropStuff(v1); while ( 2 ) { PollSound(); Process1WindowsMessage(); memcpy(&v67, inputManager::GetEvent(gpInputManager, (inputManager *)&retstr), 0x1Cu); (*(void (__stdcall **)(int *))(LODWORD(gpMouseManager->vtable) + 8))(&v67); v24 = *(_DWORD *)(v1 + 4); v25 = *(_DWORD *)(v24 + 40); v26 = *(_DWORD *)(v24 + 44); v27 = v69 - v25; v28 = v70 - v26; switch ( v67 ) { default: continue; case 1: v29 = v68 - 71; switch ( v68 ) { default: continue; case 71: *(_WORD *)(v1 + 68) = 0; *(_WORD *)(v1 + 62) = 0; goto LABEL_20; case 72: v30 = *(_WORD *)(v1 + 62); if ( v30 > 0 ) { *(_WORD *)(v1 + 62) = v30 - 1; v31 = *(_WORD *)(v1 + 62); if ( v31 > 0 ) { if ( *(_WORD *)(v1 + 68) > v31 ) *(_WORD *)(v1 + 68) = v31; } } break; case 73: v32 = *(_WORD *)(v1 + 48); v33 = *(_WORD *)(v1 + 68) - v32 + 1; *(_WORD *)(v1 + 68) = v33; if ( v33 < 0 ) *(_WORD *)(v1 + 68) = 0; v34 = *(_WORD *)(v1 + 62) - v32 + 1; *(_WORD *)(v1 + 62) = v34; if ( v34 < 0 ) *(_WORD *)(v1 + 62) = 0; break; case 79: *(_WORD *)(v1 + 68) = *(_WORD *)(v1 + 70); *(_WORD *)(v1 + 62) = *(_WORD *)(v1 + 60) - 1; break; case 80: if ( *(_WORD *)(v1 + 60) - 1 > *(_WORD *)(v1 + 62) ) ++*(_WORD *)(v1 + 62); if ( *(_WORD *)(v1 + 48) + (signed int)*(_WORD *)(v1 + 68) - 1 < *(_WORD *)(v1 + 62) ) *(_WORD *)(v1 + 68) = *(_WORD *)(v1 + 62) - *(_WORD *)(v1 + 48) + 1; break; case 81: LOWORD(v29) = *(_WORD *)(v1 + 68); LOWORD(v25) = *(_WORD *)(v1 + 48); v35 = v29 + v25 - 1; v36 = *(_WORD *)(v1 + 70); *(_WORD *)(v1 + 68) = v35; if ( v36 < (signed __int16)v35 ) *(_WORD *)(v1 + 68) = v36; LOWORD(v29) = *(_WORD *)(v1 + 62); v37 = *(_WORD *)(v1 + 60); v38 = v29 + v25 - 1; v39 = *(_WORD *)(v1 + 60); *(_WORD *)(v1 + 62) = v38; if ( v39 - 1 < (signed __int16)v38 ) *(_WORD *)(v1 + 62) = v37 - 1; break; } goto LABEL_20; case 4: if ( *(_BYTE *)(v1 + 175) ) { v40 = v28 - *(_WORD *)(v1 + 132); v41 = *(_WORD *)(v1 + 116); if ( v40 <= v41 ) v42 = 0; else v42 = (v40 - v41) / *(_WORD *)(v1 + 118) + 1; if ( v42 < 0 ) v42 = 0; v43 = *(_WORD *)(v1 + 50); if ( v42 >= v43 ) v42 = v43 - 1; v44 = *(_WORD *)(v1 + 68) + v42; if ( *(_WORD *)(v1 + 60) > v44 && *(_WORD *)(v1 + 62) != v44 ) { *(_WORD *)(v1 + 62) = *(_WORD *)(v1 + 68) + v42; goto LABEL_20; } } else if ( *(_BYTE *)(v1 + 174) ) { v45 = *(_WORD *)(v1 + 70); v46 = (v45 + 1) * (v28 - *(_WORD *)(v1 + 168) / 2 - *(_WORD *)(v1 + 148) - 4) / *(_WORD *)(v1 + 170); if ( v46 < 0 ) v46 = 0; if ( v46 > v45 ) v46 = *(_WORD *)(v1 + 70); if ( *(_WORD *)(v1 + 68) != v46 ) { *(_WORD *)(v1 + 68) = v46; goto LABEL_20; } } continue; case 8: v47 = *(_WORD *)(v1 + 122); if ( v27 < v47 ) goto LABEL_95; v48 = *(_WORD *)(v1 + 124); if ( v28 < v48 || v47 + *(_WORD *)(v1 + 126) <= v27 || v48 + *(_WORD *)(v1 + 128) <= v28 ) goto LABEL_95; v49 = *(_WORD *)(v1 + 130); if ( v27 < v49 || (v50 = *(_WORD *)(v1 + 132), v28 < v50) || v49 + *(_WORD *)(v1 + 134) <= v27 || v50 + *(_WORD *)(v1 + 136) <= v28 ) { if ( *(_WORD *)(v1 + 144) + (signed int)*(_WORD *)(v1 + 140) <= v28 ) { if ( *(_WORD *)(v1 + 156) > v28 ) { v57 = *(_WORD *)(v1 + 164); if ( v28 >= v57 && v57 + *(_WORD *)(v1 + 168) > v28 ) *(_BYTE *)(v1 + 174) = 1; v58 = *(_WORD *)(v1 + 70); v59 = (*(_WORD *)(v1 + 70) + 1) * (v28 - *(_WORD *)(v1 + 168) / 2 - *(_WORD *)(v1 + 148) - 4) / *(_WORD *)(v1 + 170); *(_WORD *)(v1 + 68) = v59; if ( (signed __int16)v59 < 0 ) *(_WORD *)(v1 + 68) = 0; if ( *(_WORD *)(v1 + 68) > v58 ) *(_WORD *)(v1 + 68) = v58; } else { v56 = *(_WORD *)(v1 + 68); if ( *(_WORD *)(v1 + 70) > v56 ) *(_WORD *)(v1 + 68) = v56 + 1; *(_BYTE *)(v1 + 173) = 1; } } else { v55 = *(_WORD *)(v1 + 68); if ( v55 > 0 ) *(_WORD *)(v1 + 68) = v55 - 1; *(_BYTE *)(v1 + 172) = 1; } goto LABEL_20; } v51 = v28; v52 = *(_WORD *)(v1 + 116); v53 = v51 - v50; if ( v53 <= v52 ) v54 = *(_WORD *)(v1 + 68); else v54 = *(_WORD *)(v1 + 68) + (v53 - v52) / *(_WORD *)(v1 + 118) + 1; *(_BYTE *)(v1 + 175) = 1; if ( *(_WORD *)(v1 + 60) > v54 && *(_WORD *)(v1 + 62) != v54 ) { *(_WORD *)(v1 + 62) = v54; goto LABEL_20; } continue; case 16: if ( v65 ) { v65 = 0; icon::DrawToBuffer(v25 + *(_WORD *)(v1 + 100), v26 + *(_WORD *)(v1 + 102), *(_WORD *)(v1 + 74), 0); heroWindowManager::UpdateScreenRegion( *(_WORD *)(v1 + 100) + *(_DWORD *)(*(_DWORD *)(v1 + 4) + 40), *(_WORD *)(v1 + 102) + *(_DWORD *)(*(_DWORD *)(v1 + 4) + 44), *(_WORD *)(v1 + 104), *(_WORD *)(v1 + 106)); continue; } if ( !*(_BYTE *)(v1 + 175) ) { if ( *(_BYTE *)(v1 + 172) || *(_BYTE *)(v1 + 173) || *(_BYTE *)(v1 + 174) ) { *(_BYTE *)(v1 + 174) = 0; *(_BYTE *)(v1 + 173) = 0; *(_BYTE *)(v1 + 172) = 0; goto LABEL_20; } continue; } LABEL_95: bitmap::DrawToBuffer(*(_WORD *)(v1 + 122), *(_WORD *)(v1 + 124)); heroWindowManager::UpdateScreenRegion( *(_WORD *)(v1 + 122), *(_WORD *)(v1 + 124), *(_WORD *)(v1 + 126), *(_WORD *)(v1 + 128)); v60 = *(_DWORD *)(v1 + 176); if ( v60 ) (**(void (__stdcall ***)(_DWORD))v60)(1); *(_DWORD *)(v1 + 176) = 0; (**(void (__thiscall ***)(_DWORD))v1)(v1); heroWindowManager::UpdateScreenRegion( *(_DWORD *)(*(_DWORD *)(v1 + 4) + 40) + *(_WORD *)(v1 + 24), *(_DWORD *)(*(_DWORD *)(v1 + 4) + 44) + *(_WORD *)(v1 + 26), *(_WORD *)(v1 + 28), *(_WORD *)(v1 + 30)); return; } } } // 433510: using guessed type _DWORD __stdcall icon__DrawToBuffer(_DWORD, _DWORD, _DWORD, _DWORD); // 439D70: using guessed type _DWORD __stdcall bitmap__bitmap(__int16, __int16, __int16); // 439E60: using guessed type _DWORD __stdcall bitmap__DrawToBuffer(__int16, __int16); // 439EA0: using guessed type _DWORD __stdcall bitmap__GrabScreen(__int16, __int16); //----- (0043C750) -------------------------------------------------------- void *__thiscall textEntryWidget::textEntryWidget(void *this, int a2, __int16 a3, __int16 a4, int a5, unsigned __int16 a6, const char *a7, int a8, __int16 a9, int a10, __int16 a11, int a12, int a13, __int16 a14, __int16 a15, __int16 a16) { void *v16; // ebx@1 int v17; // eax@1 icon *v18; // eax@1 __int16 v19; // cx@1 __int16 v20; // dx@1 __int16 v21; // cx@1 __int16 v22; // cx@2 __int16 v23; // ax@2 __int16 v24; // cx@2 v16 = this; HIWORD(v17) = HIWORD(a8); LOWORD(v17) = a4; textWidget::textWidget(a2, a3, v17, a5, a7, a8, a9, a12, a13, 1); *(_WORD *)((char *)v16 + 51) = a6; *(_WORD *)((char *)v16 + 49) = 0; *(_DWORD *)v16 = &textEntryWidget::_vftable_; v18 = resourceManager::GetIcon(a10); v19 = *((_WORD *)v16 + 12); *(_DWORD *)((char *)v16 + 43) = v18; *(_WORD *)((char *)v16 + 75) = 0; *((_WORD *)v16 + 10) = 16384; v20 = *((_WORD *)v16 + 13); *(_WORD *)((char *)v16 + 47) = a11; *(_WORD *)((char *)v16 + 69) = 1; *(_WORD *)((char *)v16 + 71) = 0; *((_WORD *)v16 + 20) = 1; LOWORD(v18) = *((_WORD *)v16 + 14); *(_WORD *)((char *)v16 + 53) = v19; v21 = *((_WORD *)v16 + 15); *(_WORD *)((char *)v16 + 55) = v20; *(_WORD *)((char *)v16 + 57) = (_WORD)v18; *(_WORD *)((char *)v16 + 51) = a6; *(_WORD *)((char *)v16 + 59) = v21; *((_DWORD *)v16 + 8) = BaseAlloc(a6 + 5, (int)"F:\\h2xsrc\\Base\\Textntry.cpp", 62); strcpy(*((char **)v16 + 8), a7); if ( a14 == 4 ) { *(_WORD *)((char *)v16 + 71) = 1; v22 = a16 + *((_WORD *)v16 + 13); *(_WORD *)((char *)v16 + 65) = a15 + *((_WORD *)v16 + 12); v23 = *((_WORD *)v16 + 14) - 2 * a15; *(_WORD *)((char *)v16 + 67) = v22; v24 = *((_WORD *)v16 + 15); *(_WORD *)((char *)v16 + 61) = v23; *(_WORD *)((char *)v16 + 63) = v24; } return v16; } // 439150: using guessed type _DWORD __stdcall textWidget__textWidget(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, __int16, _DWORD, _DWORD, char); // 449298: using guessed type int (*textEntryWidget___vftable_)(); //----- (0043D4E0) -------------------------------------------------------- signed int __thiscall textEntryWidget::SetupDisplayString(void *this, const char *Source, unsigned __int16 a3) { void *v3; // ebp@1 const char *v4; // esi@4 unsigned int v5; // ebx@7 signed int result; // eax@10 int v7; // ebx@18 signed int v8; // [sp+10h] [bp-130h]@13 char v9; // [sp+14h] [bp-12Ch]@13 char v10[299]; // [sp+15h] [bp-12Bh]@14 v3 = this; if ( (signed int)KBTickCount() > (signed int)glTimers ) { *((_BYTE *)v3 + 77) = 1 - *((_BYTE *)v3 + 77); glTimers = (int *)(KBTickCount() + 360); } if ( a3 ) { v4 = Source; strncpy(*((char **)v3 + 8), Source, a3); } else { v4 = Source; } if ( *((_BYTE *)v3 + 77) ) { v5 = a3; *(_BYTE *)(*((_DWORD *)v3 + 8) + a3) = 31; } else { v5 = a3; *(_BYTE *)(*((_DWORD *)v3 + 8) + a3) = 95; } if ( strlen(v4) <= v5 ) { result = *((_DWORD *)v3 + 8); *(_BYTE *)(result + v5 + 1) = 0; } else { result = *((_DWORD *)v3 + 8); strcpy((char *)(result + v5 + 1), &v4[v5]); } if ( *(_WORD *)((char *)v3 + 73) == 3 ) { do { v8 = 0; strcpy(&v9, (const char *)(*((_DWORD *)v3 + 8) + *(_WORD *)((char *)v3 + 75))); if ( font::LineWidth(&v9) > (signed int)*(_WORD *)((char *)v3 + 61) ) { v10[v5 - *(_WORD *)((char *)v3 + 75)] = 0; if ( font::LineWidth(&v9) > (signed int)*(_WORD *)((char *)v3 + 61) ) { v8 = 1; ++*(_WORD *)((char *)v3 + 75); } } result = v8; } while ( v8 ); if ( *(_WORD *)((char *)v3 + 75) > 0 ) { do { v7 = 0; strcpy(&v9, (const char *)(*(_WORD *)((char *)v3 + 75) + *((_DWORD *)v3 + 8) - 1)); result = font::LineWidth(&v9); if ( result > *(_WORD *)((char *)v3 + 61) ) v7 = 0; else --*(_WORD *)((char *)v3 + 75); if ( !*(_WORD *)((char *)v3 + 75) ) v7 = 0; } while ( v7 ); } } return result; } // 433390: using guessed type _DWORD __stdcall font__LineWidth(_DWORD); // 48F120: using guessed type int *glTimers; // 43D4E0: using guessed type char var_12B[299]; //----- (0043D6A0) -------------------------------------------------------- void *__thiscall dimmerWidget::dimmerWidget(void *this) { void *v1; // esi@1 void *result; // eax@1 v1 = this; widget::widget(0, 0, 0, 0, 0, 0); result = v1; *(_DWORD *)v1 = &dimmerWidget::_vftable_; return result; } // 43DF80: using guessed type _DWORD __stdcall widget__widget(__int16, __int16, __int16, __int16, __int16, __int16); // 4492A8: using guessed type int (*dimmerWidget___vftable_)(); //----- (0043D6C0) -------------------------------------------------------- void *__thiscall dimmerWidget::_scalar_deleting_destructor_(void *Memory, char a2) { void *v2; // esi@1 *(_DWORD *)Memory = &dimmerWidget::_vftable_; v2 = Memory; widget::_widget(Memory); if ( a2 & 1 ) operator delete(v2); return v2; } // 4492A8: using guessed type int (*dimmerWidget___vftable_)(); //----- (0043D6F0) -------------------------------------------------------- int __thiscall dimmerWidget::Read(int this) { int v1; // esi@1 int result; // eax@1 v1 = this; *(_WORD *)(this + 24) = resourceManager::ReadWord(gpResourceManager); *(_WORD *)(v1 + 26) = resourceManager::ReadWord(gpResourceManager); *(_WORD *)(v1 + 28) = resourceManager::ReadWord(gpResourceManager); *(_WORD *)(v1 + 30) = resourceManager::ReadWord(gpResourceManager); *(_WORD *)(v1 + 16) = resourceManager::ReadWord(gpResourceManager); result = resourceManager::ReadWord(gpResourceManager); *(_WORD *)(v1 + 20) = result; return result; } // 4317E0: using guessed type int __thiscall resourceManager__ReadWord(_DWORD); // 43D6F0: using guessed type int __thiscall dimmerWidget__Read(_DWORD); // 48E8D4: using guessed type int gpResourceManager; //----- (0043D750) -------------------------------------------------------- int __stdcall dimmerWidget::Main(int a1) { return widget::Main(a1); } // 43E020: using guessed type _DWORD __stdcall widget__Main(_DWORD); //----- (0043D7B0) -------------------------------------------------------- void *__thiscall button::_scalar_deleting_destructor_(void *Memory, char a2) { int v2; // eax@1 void *v3; // esi@1 v2 = *((_DWORD *)Memory + 8); *(_DWORD *)Memory = &button::_vftable_; v3 = Memory; resourceManager::Dispose(v2); widget::_widget(v3); if ( a2 & 1 ) operator delete(v3); return v3; } // 4310B0: using guessed type _DWORD __stdcall resourceManager__Dispose(_DWORD); // 4492B8: using guessed type int (*button___vftable_)(); //----- (0043DE80) -------------------------------------------------------- signed __int16 __thiscall button::Select(int this, int a2) { int v2; // eax@1 int v3; // esi@1 int v4; // edi@1 int v5; // ebx@1 bool v6; // zf@1 DWORD v7; // ecx@3 signed __int16 result; // ax@3 v2 = *(_DWORD *)(this + 4); v3 = this; v4 = (signed __int16)(*(_WORD *)(v2 + 40) + *(_WORD *)(this + 24)); v5 = (signed __int16)(*(_WORD *)(v2 + 44) + *(_WORD *)(this + 26)); icon::DrawToBuffer(v4, (signed __int16)(*(_WORD *)(v2 + 44) + *(_WORD *)(this + 26)), *(_WORD *)(this + 38), 0); heroWindowManager::UpdateScreenRegion(v4, v5, *(_WORD *)(v3 + 28), *(_WORD *)(v3 + 30)); *(_BYTE *)(v3 + 22) |= 1u; *(_DWORD *)a2 = 512; *(_DWORD *)(a2 + 8) = *(_WORD *)(v3 + 16); v6 = *(_WORD *)(v3 + 40) == 1; *(_DWORD *)(a2 + 4) = 10; if ( !v6 ) *(_DWORD *)(a2 + 4) = 12; v7 = KBTickCount() + 60; result = 2; dword_48F128 = v7; iLeftRightSave = *(_DWORD *)(a2 + 12) & 0x300; return result; } // 433510: using guessed type _DWORD __stdcall icon__DrawToBuffer(_DWORD, _DWORD, _DWORD, _DWORD); // 488234: using guessed type int iLeftRightSave; // 48F128: using guessed type int dword_48F128; //----- (0043DFE0) -------------------------------------------------------- void __thiscall widget::_widget(void *this) { *(_DWORD *)this = widget::_vftable_; } // 4492C8: using guessed type int (*widget___vftable_[3])(); //----- (0043E320) -------------------------------------------------------- __int16 __thiscall dimmerWidget::Draw(int this) { __int16 result; // ax@1 result = *(_WORD *)(this + 20); if ( result != 8 ) { if ( result != 512 ) result = DimBitmapArea( (signed __int16)(*(_WORD *)(*(_DWORD *)(this + 4) + 44) + *(_WORD *)(this + 26)), *(_WORD *)(this + 28), *(_WORD *)(this + 30), 0); } return result; } // 4338C0: using guessed type _DWORD __stdcall DimBitmapArea(_DWORD, _DWORD, _DWORD, _DWORD); //----- (0043E470) -------------------------------------------------------- void __thiscall resource::_resource(void *this) { *(_DWORD *)this = &resource::_vftable_; } // 4492D8: using guessed type int (*resource___vftable_)(); //----- (0043EF40) -------------------------------------------------------- int __fastcall FlipMonoIconToBitmap(int a1, int a2, int a3, int a4, int a5, char a6, signed int a7, int a8, int a9, int a10, int a11) { int v11; // edi@1 int v12; // ecx@1 int v13; // esi@1 int v14; // eax@1 int v15; // edi@1 int v16; // eax@1 int v17; // ebx@1 int v18; // edi@1 int v19; // eax@1 int v20; // eax@5 int v21; // esi@5 int v22; // ecx@9 int v23; // esi@9 int result; // eax@10 int v25; // edx@10 int v26; // edx@11 unsigned int v27; // ebp@15 int v28; // eax@15 int v29; // edi@15 int v30; // eax@18 int v31; // ecx@20 int v32; // [sp+10h] [bp-4h]@9 v11 = *(_DWORD *)(a1 + 18); v12 = *(_WORD *)(13 * a5 + v11 + 4); v13 = 13 * a5 + v11; v14 = v11 + *(_DWORD *)(13 * a5 + v11 + 9); dword_491EA4 = v13; v15 = *(_WORD *)v13; dword_491EBC = v14; v16 = a3 - v15 - v12; v17 = *(_WORD *)(v13 + 2); v18 = a3 - v15 + 1; v19 = v16 + 1; dword_491EA8 = v19; dword_491EAC = v18 - 1; dword_491EB0 = v18 - 1; dword_491EA0 = v17 + a4; if ( !a7 ) goto LABEL_9; if ( a8 > v19 || a8 + a10 < v18 || dword_491EA0 < a9 ) { v21 = a11; goto LABEL_8; } v20 = dword_491EA0 + *(_WORD *)(v13 + 6); v21 = a11; if ( v20 > a11 + a9 ) { LABEL_8: a7 = 1; dword_491EC0 = a8 + a10 - 1; dword_491EC4 = a9 + v21 - 1; goto LABEL_9; } a7 = 0; LABEL_9: v22 = *(_DWORD *)(a2 + 22); v23 = v22 + *(_WORD *)(a2 + 18) * dword_491EA0; v32 = *(_WORD *)(a2 + 18); while ( 1 ) { while ( 1 ) { result = dword_491EBC + 1; dword_491EBC = result; v25 = *(_BYTE *)(result - 1); if ( (char)v25 < 0 ) break; dword_491EB8 = *(_BYTE *)(result - 1); if ( v25 ) { if ( !a7 ) { v27 = v25; BYTE1(v22) = a6; LOBYTE(v22) = a6; v28 = v22 << 16; LOWORD(v28) = v22; v29 = dword_491EB0 - v25 + v23 + 1; LABEL_23: memset32((void *)v29, v28, v27 >> 2); memset((void *)(v29 + 4 * (v27 >> 2)), v28, v27 & 3); HIWORD(v22) = 0; goto LABEL_24; } HIWORD(v22) = HIWORD(dword_491EA0); if ( dword_491EA0 >= a9 ) { if ( dword_491EA0 <= dword_491EC4 ) { v27 = v25; HIWORD(v22) = HIWORD(a8); v30 = dword_491EB0 - v25 + 1; if ( a8 <= v30 ) { HIWORD(v22) = HIWORD(dword_491EB0); if ( dword_491EB0 <= dword_491EC0 ) { HIWORD(v31) = HIWORD(a8); if ( a8 > v30 ) { v27 = dword_491EB0 - a8 + 1; BYTE1(v31) = a6; LOBYTE(v31) = a6; v29 = v23 + a8; v28 = v31 << 16; LOWORD(v28) = v31; } else { BYTE1(v31) = a6; LOBYTE(v31) = a6; v28 = v31 << 16; LOWORD(v28) = v31; v29 = dword_491EB0 - v25 + v23 + 1; } goto LABEL_23; } } } } LABEL_24: dword_491EB8 = v25; dword_491EB0 -= v25; } else { HIWORD(v22) = HIWORD(dword_491EAC); v23 += v32; dword_491EB0 = dword_491EAC; ++dword_491EA0; } } dword_491EB4 = v23; dword_491EB8 = v25; v26 = v25 & 0x7F; if ( !v26 ) return result; dword_491EB0 -= v26; } } // 491EA0: using guessed type int dword_491EA0; // 491EA4: using guessed type int dword_491EA4; // 491EA8: using guessed type int dword_491EA8; // 491EAC: using guessed type int dword_491EAC; // 491EB0: using guessed type int dword_491EB0; // 491EB4: using guessed type int dword_491EB4; // 491EB8: using guessed type int dword_491EB8; // 491EBC: using guessed type int dword_491EBC; // 491EC0: using guessed type int dword_491EC0; // 491EC4: using guessed type int dword_491EC4; //----- (0043F354) -------------------------------------------------------- char __cdecl TileToBitmap(tileset *a1, int a2, int a3, int a4, int a5) { int v5; // ebx@1 int v6; // edi@1 unsigned int v7; // ecx@1 int v8; // ebx@1 int v9; // edx@1 char *v10; // esi@1 unsigned int v11; // eax@3 const void *v12; // esi@4 void *v13; // edi@4 const void *v14; // esi@4 void *v15; // edi@4 const void *v16; // esi@4 void *v17; // edi@4 const void *v18; // esi@4 void *v19; // edi@4 const void *v20; // esi@4 void *v21; // edi@4 const void *v22; // esi@4 void *v23; // edi@4 const void *v24; // esi@4 void *v25; // edi@4 const void *v26; // esi@4 void *v27; // edi@4 const void *v28; // esi@4 void *v29; // edi@4 const void *v30; // esi@4 void *v31; // edi@4 const void *v32; // esi@4 void *v33; // edi@4 const void *v34; // esi@4 void *v35; // edi@4 const void *v36; // esi@4 void *v37; // edi@4 const void *v38; // esi@4 void *v39; // edi@4 const void *v40; // esi@4 void *v41; // edi@4 int v42; // esi@6 __int16 v43; // dx@6 int v44; // edi@10 int v45; // ebx@10 unsigned int v46; // edx@10 unsigned int v47; // ecx@11 int v48; // esi@12 int v49; // edi@12 int v50; // esi@15 unsigned int v51; // edx@15 unsigned int v52; // ecx@16 int v53; // esi@17 int v54; // edi@17 int a2a; // [sp+14h] [bp+Ch]@1 v5 = *(_WORD *)(a3 + 18); v6 = a4 + v5 * a5 + *(_DWORD *)(a3 + 22); dword_48830C = a2; a2a = a2 & 0xFFF; v7 = a1->field_12; v8 = v5 - v7; HIWORD(v9) = (unsigned int)a2a * (unsigned __int64)(a1->field_14 * (unsigned int)a1->field_12) >> 48; LOWORD(v9) = a1->field_14; v10 = (char *)a1->contents + a2a * a1->field_14 * a1->field_12; if ( dword_48830C & 0x8000 ) { if ( dword_48830C & 0x4000 ) { v50 = (int)&v10[v7 * v7 - 1]; v51 = v7 >> 3; dword_488310 = a1->field_12; do { v52 = v51; do { LOBYTE(v11) = *(_BYTE *)v50; v53 = v50 + 1; *(_BYTE *)v6 = v11; v54 = v6 + 1; LOBYTE(v11) = *(_BYTE *)v53++; *(_BYTE *)v54++ = v11; LOBYTE(v11) = *(_BYTE *)v53++; *(_BYTE *)v54++ = v11; LOBYTE(v11) = *(_BYTE *)v53++; *(_BYTE *)v54++ = v11; LOBYTE(v11) = *(_BYTE *)v53++; *(_BYTE *)v54++ = v11; LOBYTE(v11) = *(_BYTE *)v53++; *(_BYTE *)v54++ = v11; LOBYTE(v11) = *(_BYTE *)v53++; *(_BYTE *)v54++ = v11; LOBYTE(v11) = *(_BYTE *)v53; v50 = v53 + 1; *(_BYTE *)v54 = v11; v6 = v54 + 1; --v52; } while ( v52 ); v6 += v8; --dword_488310; } while ( dword_488310 ); } else { v44 = v7 + v6 - 1; dword_488310 = v9; v45 = v7 + v7 + v8; v46 = v7 >> 3; do { v47 = v46; do { LOBYTE(v11) = *v10; v48 = (int)(v10 + 1); *(_BYTE *)v44 = v11; v49 = v44 - 1; LOBYTE(v11) = *(_BYTE *)v48++; *(_BYTE *)v49-- = v11; LOBYTE(v11) = *(_BYTE *)v48++; *(_BYTE *)v49-- = v11; LOBYTE(v11) = *(_BYTE *)v48++; *(_BYTE *)v49-- = v11; LOBYTE(v11) = *(_BYTE *)v48++; *(_BYTE *)v49-- = v11; LOBYTE(v11) = *(_BYTE *)v48++; *(_BYTE *)v49-- = v11; LOBYTE(v11) = *(_BYTE *)v48++; *(_BYTE *)v49-- = v11; LOBYTE(v11) = *(_BYTE *)v48; v10 = (char *)(v48 + 1); *(_BYTE *)v49 = v11; v44 = v49 - 1; --v47; } while ( v47 ); v44 += v45; --dword_488310; } while ( dword_488310 ); } } else if ( dword_48830C & 0x4000 ) { v42 = (int)&v10[v7 * (v7 - 1)]; v11 = a1->field_12; v43 = a1->field_12; do { memcpy((void *)v6, (const void *)v42, 4 * (v11 >> 2)); v6 += v8 + 4 * (v11 >> 2); v42 = v42 + 4 * (v11 >> 2) - v11 - v11; --v43; } while ( v43 ); } else { v11 = v7 >> 2; do { memcpy((void *)v6, v10, 4 * v11); v12 = &v10[4 * v11]; v13 = (void *)(v8 + v6 + 4 * v11); memcpy(v13, v12, 4 * v11); v14 = (char *)v12 + 4 * v11; v15 = (char *)v13 + 4 * v11 + v8; memcpy(v15, v14, 4 * v11); v16 = (char *)v14 + 4 * v11; v17 = (char *)v15 + 4 * v11 + v8; memcpy(v17, v16, 4 * v11); v18 = (char *)v16 + 4 * v11; v19 = (char *)v17 + 4 * v11 + v8; memcpy(v19, v18, 4 * v11); v20 = (char *)v18 + 4 * v11; v21 = (char *)v19 + 4 * v11 + v8; memcpy(v21, v20, 4 * v11); v22 = (char *)v20 + 4 * v11; v23 = (char *)v21 + 4 * v11 + v8; memcpy(v23, v22, 4 * v11); v24 = (char *)v22 + 4 * v11; v25 = (char *)v23 + 4 * v11 + v8; memcpy(v25, v24, 4 * v11); v26 = (char *)v24 + 4 * v11; v27 = (char *)v25 + 4 * v11 + v8; memcpy(v27, v26, 4 * v11); v28 = (char *)v26 + 4 * v11; v29 = (char *)v27 + 4 * v11 + v8; memcpy(v29, v28, 4 * v11); v30 = (char *)v28 + 4 * v11; v31 = (char *)v29 + 4 * v11 + v8; memcpy(v31, v30, 4 * v11); v32 = (char *)v30 + 4 * v11; v33 = (char *)v31 + 4 * v11 + v8; memcpy(v33, v32, 4 * v11); v34 = (char *)v32 + 4 * v11; v35 = (char *)v33 + 4 * v11 + v8; memcpy(v35, v34, 4 * v11); v36 = (char *)v34 + 4 * v11; v37 = (char *)v35 + 4 * v11 + v8; memcpy(v37, v36, 4 * v11); v38 = (char *)v36 + 4 * v11; v39 = (char *)v37 + 4 * v11 + v8; memcpy(v39, v38, 4 * v11); v40 = (char *)v38 + 4 * v11; v41 = (char *)v39 + 4 * v11 + v8; memcpy(v41, v40, 4 * v11); v10 = (char *)v40 + 4 * v11; v6 = (int)((char *)v41 + 4 * v11 + v8); LOWORD(v9) = v9 - 16; } while ( (_WORD)v9 ); } return v11; } // 48830C: using guessed type int dword_48830C; // 488310: using guessed type int dword_488310; //----- (0043F4F0) -------------------------------------------------------- int __thiscall soundManager::MIDIStartup(void *this) { void *v1; // ebx@1 int result; // eax@1 signed __int32 v3; // esi@3 v1 = this; LogStr(&aMs1_1); result = gbNoSound; if ( !gbNoSound ) { *(_DWORD *)((char *)v1 + 1702) = 1; result = gbDontTryMIDI; if ( !gbDontTryMIDI ) { LogStr(&aMs2_1); memset(pMIDIWrap, 0, 0xF0u); memset(&hSequence, 0, 0xF0u); *(_DWORD *)((char *)v1 + 1694) = 1; LogStr("MS6b"); v3 = AIL_midiOutOpen(&hMDI, 0, -1); result = LogInt(-999, -999, -999, -999, -999, -999); if ( v3 ) *(_DWORD *)((char *)v1 + 1694) = 0; } } return result; } // 435B20: using guessed type _DWORD __stdcall LogInt(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // 46ADAC: using guessed type int gbDontTryMIDI; // 46AE18: using guessed type int gbNoSound; // 491F70: using guessed type int pMIDIWrap[]; //----- (0043F5B0) -------------------------------------------------------- void __thiscall soundManager::MIDIShutdown(int this) { int v1; // esi@1 int v2; // eax@2 struct _SEQUENCE *v3; // eax@10 int v4; // eax@15 int v5; // eax@15 HSEQUENCE *v6; // edi@19 unsigned int v7; // esi@23 v1 = this; if ( !gbNoSound ) { v2 = *(_DWORD *)(this + 1694); if ( v2 ) { if ( !gbNoSound && v2 && CurrentMidiFile != -1 ) { if ( !gbNoSound ) { if ( *(_DWORD *)&Data ) { if ( v2 ) { if ( CurrentMidiFile != -1 ) { v3 = *(&hSequence + CurrentMidiFile); if ( v3 ) { if ( AIL_sequence_status(v3) == 4 ) { if ( *(&hSequence + CurrentMidiFile) ) { AIL_stop_sequence(*(&hSequence + CurrentMidiFile)); if ( gbLowMemory || !bSaveMusicPosition[CurrentMidiFile] ) { AIL_release_sequence_handle(*(&hSequence + CurrentMidiFile)); v4 = CurrentMidiFile; *(HSEQUENCE *)((char *)&hSequence + v4 * 4) = 0; v5 = pMIDIWrap[v4]; if ( v5 ) resourceManager::Dispose(v5); pMIDIWrap[CurrentMidiFile] = 0; } } } } } } } } CurrentMidiFile = -1; *(_BYTE *)(v1 + 1400) = -1; } v6 = &hSequence; LogStr("MS1"); do { if ( *v6 ) AIL_release_sequence_handle(*v6); *v6 = 0; ++v6; } while ( (unsigned int)v6 < (unsigned int)&lastPositionZ ); LogStr("MS2"); AIL_midiOutClose(hMDI); hMDI = 0; *(_DWORD *)(v1 + 1694) = 0; v7 = (unsigned int)pMIDIWrap; do { if ( *(_DWORD *)v7 ) resourceManager::Dispose(*(_DWORD *)v7); *(_DWORD *)v7 = 0; v7 += 4; } while ( v7 < (unsigned int)&hSequence ); LogStr("MS4"); } } } // 4310B0: using guessed type _DWORD __stdcall resourceManager__Dispose(_DWORD); // 46AE18: using guessed type int gbNoSound; // 46D614: using guessed type int gbLowMemory; // 48831C: using guessed type int CurrentMidiFile; // 491F70: using guessed type int pMIDIWrap[]; //----- (00442310) -------------------------------------------------------- int __cdecl sub_442310() { return 0; } //----- (00442FA0) -------------------------------------------------------- int __cdecl _flushall() { return flsall(1); } //----- (00444EC0) -------------------------------------------------------- int __cdecl __initstdio() { FILE *v0; // ecx@8 signed int v1; // eax@8 int v2; // esi@10 unsigned int v3; // edx@10 int result; // eax@11 if ( _nstream ) { if ( (signed int)_nstream < 20 ) _nstream = 20; } else { _nstream = 512; } __piob = (int)calloc(_nstream, 4u); if ( !__piob ) { _nstream = 20; __piob = (int)calloc(0x14u, 4u); if ( !__piob ) _amsg_exit(26); } v0 = _iob; v1 = 0; do { v1 += 4; *(_DWORD *)(__piob + v1 - 4) = v0; ++v0; } while ( v1 < 80 ); v2 = 0; v3 = (unsigned int)&unk_488DC8; do { result = *(_DWORD *)(*(int *)((char *)&__pioinfo + ((v2 & 0xFFFFFFE7) >> 3)) + 36 * (v2 & 0x1F)); if ( result == -1 || !result ) *(_DWORD *)v3 = -1; v3 += 32; ++v2; } while ( v3 < (unsigned int)&unk_488E28 ); return result; } // 440690: using guessed type _DWORD __cdecl _amsg_exit(_DWORD); // 492374: using guessed type int __piob; // 493390: using guessed type int __pioinfo; //----- (00445E80) -------------------------------------------------------- signed int __cdecl sub_445E80() { void *v0; // edi@1 unsigned int v1; // esi@4 unsigned int v2; // ebp@4 void *v3; // eax@4 void *v4; // ecx@8 signed int v5; // eax@8 char *v6; // ebx@13 char v7; // dl@14 signed int v8; // eax@15 void *v9; // ecx@19 signed int v10; // eax@19 char *v11; // ebx@23 char v12; // dl@24 signed int v13; // eax@25 int v14; // edx@26 signed int result; // eax@33 void *lpWideCharStr; // [sp+10h] [bp-18h]@1 struct _cpinfo CPInfo; // [sp+14h] [bp-14h]@10 v0 = 0; lpWideCharStr = 0; if ( !Locale ) { _pctype = &_ctype[1]; off_488804 = &_ctype[1]; free(dword_489054); free(dword_489058); result = 0; dword_489054 = 0; dword_489058 = 0; return result; } if ( !__lc_codepage && __getlocaleinfo(0, (unsigned __int16)word_48906C, 0xBu, (int)&__lc_codepage) ) { v1 = CPInfo.MaxCharSize; v2 = CPInfo.MaxCharSize; LABEL_35: free((void *)v1); free((void *)v2); free(v0); free(lpWideCharStr); return 1; } v1 = (unsigned int)malloc(0x202u); v2 = (unsigned int)malloc(0x202u); v0 = malloc(0x101u); v3 = malloc(0x202u); lpWideCharStr = v3; if ( !v1 ) goto LABEL_35; if ( !v2 ) goto LABEL_35; if ( !v0 ) goto LABEL_35; if ( !v3 ) goto LABEL_35; v4 = v0; v5 = 0; do { *(_BYTE *)v4 = v5; v4 = (char *)v4 + 1; ++v5; } while ( v5 < 256 ); if ( !GetCPInfo(__lc_codepage, &CPInfo) || CPInfo.MaxCharSize > 2 ) goto LABEL_35; __mb_cur_max = (unsigned __int16)CPInfo.MaxCharSize; if ( (signed int)(unsigned __int16)CPInfo.MaxCharSize > 1 ) { v6 = (char *)CPInfo.LeadByte; if ( CPInfo.LeadByte[0] ) { do { v7 = v6[1]; if ( !v7 ) break; v8 = (unsigned __int8)*v6; if ( (unsigned __int8)v7 >= v8 ) { do *((_BYTE *)v0 + v8++) = 0; while ( (unsigned __int8)v6[1] >= v8 ); } v6 += 2; } while ( *v6 ); } } if ( !__crtGetStringTypeA(1u, (LPCSTR)v0, 256, (LPWORD)(v1 + 2), 0, 0) ) goto LABEL_35; *(_WORD *)v1 = 0; v9 = lpWideCharStr; v10 = 0; do { *(_WORD *)v9 = v10; v9 = (char *)v9 + 2; ++v10; } while ( v10 < 256 ); if ( !__crtGetStringTypeW(1u, (LPCWSTR)lpWideCharStr, 256, (LPWORD)(v2 + 2), 0, 0) ) goto LABEL_35; *(_WORD *)v2 = 0; if ( __mb_cur_max > 1 ) { v11 = (char *)CPInfo.LeadByte; if ( CPInfo.LeadByte[0] ) { do { v12 = v11[1]; if ( !v12 ) break; v13 = (unsigned __int8)*v11; if ( (unsigned __int8)v12 >= v13 ) { v14 = v1 + 2 * v13 + 2; do { *(_WORD *)v14 = -32768; v14 += 2; ++v13; } while ( (unsigned __int8)v11[1] >= v13 ); } v11 += 2; } while ( *v11 ); } } _pctype = (const unsigned __int16 *)(v1 + 2); off_488804 = (void *)(v2 + 2); if ( dword_489054 ) free(dword_489054); dword_489054 = (void *)v1; if ( dword_489058 ) free(dword_489058); dword_489058 = (void *)v2; free(v0); free(lpWideCharStr); return 0; } // 488804: using guessed type void *off_488804; //----- (00446130) -------------------------------------------------------- int __cdecl sub_446130() { return 0; } //----- (00446AC0) -------------------------------------------------------- int __cdecl _ld12tof(int a1, int a2) { return _ld12cvt(a1, a2, &unk_489888); } // 4468F0: using guessed type _DWORD __cdecl _ld12cvt(_DWORD, _DWORD, _DWORD); // 446AC0: using guessed type _DWORD __cdecl _ld12tof(_DWORD, _DWORD); //----- (00446AE0) -------------------------------------------------------- void __cdecl abort() { int v0; // [sp+4h] [bp+4h]@0 int v1; // [sp+8h] [bp+8h]@0 _ld12cvt(v0, v1, &unk_4898A0); } // 4468F0: using guessed type _DWORD __cdecl _ld12cvt(_DWORD, _DWORD, _DWORD); //----- (00446B00) -------------------------------------------------------- int __cdecl sub_446B00(int a1, int a2) { char v3; // [sp+0h] [bp-10h]@1 char v4; // [sp+4h] [bp-Ch]@1 __strgtold12(&v4, &v3, a2, 0, 0, 0, 0); return _ld12tof(&v4, a1); } // 446AC0: using guessed type _DWORD __cdecl _ld12tof(_DWORD, _DWORD); // 447660: using guessed type _DWORD __cdecl __strgtold12(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); //----- (00446B40) -------------------------------------------------------- int __cdecl _atodbl(_CRT_DOUBLE *Result, char *Str) { char v2; // [sp+0h] [bp-10h]@1 char v3; // [sp+4h] [bp-Ch]@1 __strgtold12(&v3, &v2, Str, 0, 0, 0, 0); abort(); } // 447660: using guessed type _DWORD __cdecl __strgtold12(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // ALL OK, 361 function(s) have been successfully decompiled