{"id":22968165,"url":"https://github.com/hankmorgan/uwreverseengineering","last_synced_at":"2025-08-13T09:34:20.514Z","repository":{"id":76214331,"uuid":"391486931","full_name":"hankmorgan/UWReverseEngineering","owner":"hankmorgan","description":"Repository for Reverse Engineering work on UW1/2","archived":false,"fork":false,"pushed_at":"2024-11-30T17:17:55.000Z","size":39477,"stargazers_count":16,"open_issues_count":1,"forks_count":1,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-11-30T18:27:10.535Z","etag":null,"topics":["reverse-engineering"],"latest_commit_sha":null,"homepage":"","language":"Assembly","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hankmorgan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-08-01T00:15:04.000Z","updated_at":"2024-11-30T17:17:58.000Z","dependencies_parsed_at":"2024-06-27T01:00:02.122Z","dependency_job_id":"1c36c7d6-50ce-4510-8309-8b70f28e9d2f","html_url":"https://github.com/hankmorgan/UWReverseEngineering","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hankmorgan%2FUWReverseEngineering","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hankmorgan%2FUWReverseEngineering/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hankmorgan%2FUWReverseEngineering/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hankmorgan%2FUWReverseEngineering/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hankmorgan","download_url":"https://codeload.github.com/hankmorgan/UWReverseEngineering/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229754889,"owners_count":18119134,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["reverse-engineering"],"created_at":"2024-12-14T21:16:27.343Z","updated_at":"2024-12-14T21:16:27.792Z","avatar_url":"https://github.com/hankmorgan.png","language":"Assembly","funding_links":[],"categories":[],"sub_categories":[],"readme":"# UWReverseEngineering\n\nRepository for Reverse Engineering work on UW1/2\n\n## Introduction\n\nUW.idb and UW2.idb are [IDA Pro 5 (Free)](https://www.scummvm.org/news/20180331/) decompilation database files of UW.exe and UW2.exe with some code identified.\n\nSee ida.asm for a text version of the disassembly.\n\nThe game mechanics are being documented in `Guide to the Ultima Underworlds.md`.\n\n## Following along\n\nSegments are named using the following convention(s):\n\n1. Code segments `segXXX_nnnn`, where `XXX` is the original segment number of the code and `nnnn` is the offset Dosbox debugger loads the data at. \n2. Overlay segments, labeled `ovrXXXX` are dynamically loaded to different offsets at runtime are not renamed. The only way of breaking into these overlays is by either breaking in a normal segment, or set a breakpoint to a memory address this overlay segment is modifying.\n3. Data segments are labeled `XXXX_dseg_nnn`, where `XXXX` is a description and `nnn` is the offset of the data in that specific data segment. Using this config, Dosbox typically loads the main data segment at base address `67d6h`.\n\nFor example, if you want to set a breakpoint to `seg040_352B_1AC6`, you have to use the command `bp 352B:1AC6`. Use Dosbox [0.74-3-debug](https://github.com/user-attachments/files/15995150/dosbox-74-3-debug.zip) with [this config file](https://github.com/user-attachments/files/15995208/dosbox-0.74-debug.-.Copy.txt) for reproducible offsets. \n\n## Other notes\n\nSometimes, when stepping into a function, the code will switch to INT21, which you should not step over, but into and until it returns to the function.\n\nKey variables to look at when researching the file:\n\n* `CurrObj_dseg_2256` is the currently processed game object.\n* `PlayerObject_dseg_828E` is the player object.\n\nIDA Pro 5 can have problems rendering fonts, making the program nigh unusable. Changing the font in the settings can fix this issue.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhankmorgan%2Fuwreverseengineering","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhankmorgan%2Fuwreverseengineering","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhankmorgan%2Fuwreverseengineering/lists"}