|
Post by xaleros on Feb 15, 2019 10:51:07 GMT -6
Hey everyone. I meant to post about this a couple of days ago but I just finished getting through this week's exams. This might be a bit of a read. For about the past year or so, I've been working on an open source version of Unreal Engine 1, written from the ground up. I started this project after a couple of months at my last internship where I was tasked with reverse engineering various parts of Android smartphones. The way of thinking I adopted there gave me enough confidence to try and figure out how Unreal Engine 1 works from a logical perspective and reimplement it with entirely new code (of course, the public headers and UnrealScript code seen in various mods have been very useful in pointing me in the right direction). It's worth emphasizing that this code has absolutely zero basis on any sort of original Unreal Engine code, since it is not available anywhere and since it is not open source. As it would turn out, there's already a lot of information online that documents a bunch of different aspects of the engine. In particular, the package format is very well documented (by the guy who wrote Unreal Tournament Package Tool, or UTPT). Inside the code repository is a bunch of documents, one of which is a PDF describing UE assets (referred to from now on as 'Objects') in great detail. Although there were some pieces missing here and there, it was easily possible to fill in those blanks by making some test packages and analyzing them in a hex editor. While this code is being built with the expectation that it could power a game engine later down the road, the big goal with this library right now is to provide a new way to create content for all Unreal Engine 1 games, regardless of version differences. While this probably isn't super exciting for Windows users right now, this would be huge for any other platform. Operating systems like Linux or Mac do not have any sort of means to do editing aside from running Windows in a VM or running through a compatibility layer like Wine. In a way, this would be very exciting for everyone since the earliest versions should allow for people to dump content from some obscure games that don't have editors at all, allowing them to at least be ported to other games that do have editors for the time being. The code is publically available with some extra info for those who are curious in the link posted below. I'm getting closer to having the first "official release" where people can download proper binaries without having to compile anything themselves. I don't really expect a whole lot of people to try compiling this themselves at the moment, but there are quite a bit of notes in the "docs" folder as well as some lengthy comments scattered throughout the code where it's actually relevant. Currently I am wrapping up UnrealScript class export (defaultproperties at the end of the script are a little problematic) and will be writing T3D exporting for maps shortly after. If you saw the thread regarding the ability to restore deleted brushwork, I will be adding the ability to check for deleted brushes and prompt the user to restore them when a map is exported to T3D format. I don't have an exact release date for the first version set, since my college schedule more or less dictates when I get to work on this, but I'm hoping that it will be within the next week or so. I'll probably be posting about major updates here as they become relevant. The first release will come with the library as well as a partially completed version of UCC that uses this (also written from scratch). libunr -> bitbucket.org/Xaleros/libunrLibunr UCC -> bitbucket.org/Xaleros/lucc
|
|
|
Post by Doc Flay on Mar 1, 2019 23:48:00 GMT -6
Very interesting project. This should have a thread at OldUnreal.
|
|
|
Post by medor on Mar 2, 2019 3:19:53 GMT -6
May be this help you
More Buttons functions
and UedIcons
|
|
|
Post by Hook on Mar 6, 2019 8:43:26 GMT -6
Very interesting project. This should have a thread at OldUnreal. FYI ... xaleros is keeping his research work confined to here at HUTP until he has finalized his findings. Then he may distribute it when he is finished and sure that it is all correct and functional. But yes
|
|
|
Post by xaleros on Mar 18, 2019 9:05:11 GMT -6
Very interesting project. This should have a thread at OldUnreal. I've definitely considered this, but at the moment I'm not sure what kind of resistance I'll meet in doing so. My only concern is that this project would have the appearance of trying to compete with 227 either now or in the future. Still working on the first release. I can export levels to T3D accurately and fully now, but so far I've only tested with Unreal maps. Both Chizra and TheSunspire export completely and play exactly as the originals once reimported and rebuilt. I'm currently working on filling in the blanks with UT99 and other games, which at this point seems to be as simple as comparing what the package expects is available with what I've made available thus far. As much as I'd love to say for sure when the first release will be ready, I've been making sure to patch up any bugs/oversights/design grievances I've encountered along the way. I will try to post my progress a bit more frequently after this first release. I'll be tackling a Vulkan, OpenGL, and maybe a Software renderer for the time being. Software rendering may get put on the wayside if I get stuck on it for too long, but it's definitely something I want to try my hand at.
|
|
|
Post by xaleros on Apr 14, 2019 7:42:29 GMT -6
|
|
|
Post by Doc Flay on Apr 14, 2019 15:43:56 GMT -6
|
|
|
Post by xaleros on Apr 14, 2019 16:37:14 GMT -6
I am, but for some reason didn't even consider to look at it. I'll definitely take a look at this. A couple of people were curious as to the actual use case for this. As of now, this release only provides a tool for dumping textures, scripts, sounds, music, and levels from any Unreal Engine 1 game. To this end, there are (currently) 5 commands that you can run with lucc (Libunr UCC) Since lucc is a command line tool, windows people would have to run cmd in order to properly use this. Running the command normally will just tell you the available commands that you can run. As an example, I'll give a rundown of how to the "batchclassexport" command works. Before running any command, lucc will ask you which game you want to operate on. An option for each game you've configured will appear plus an "Add game" option, where you can type in info for what game you want to work with. Here is what the output would look like for me (note that I am on linux so the filepath may look strange) xaleros@xalgnto ~/devel/openue/lucc $ ./lucc batchclassexport ====================================== lucc: libunr UCC Written by Adam 'Xaleros' Smith ======================================
[I] Log file opened on 2019-04-14 18:23:48 [I] Successfully read config file '/home/xaleros/.config/libunr/libunr.ini' Pick a game: (1) Unreal 227j (2) Add game 2 Choose a name for this game entry (i.e.; Unreal226, Un227i, UT436, etc): UT99-436 Enter the name of the Executable (i.e.; Unreal, UnrealTournament, DeusEx, etc): UnrealTournament Enter the relative path of the game: /mnt/3TB/games/UT99/UnrealTournament/ [I] Successfully read config file 'UnrealTournament.ini' [I] Successfully read config file 'User.ini' batchclassexport usage: lucc batchclassexport <Package Name> <Export Path>
Additionally, you can configure this with libunr.ini (make a copy from DefaultLibunr.ini first if you don't have libunr.ini). Notice that, when I typed "batchclassexport" with no arguments, it tells me how to use this. In this case, Package Name specifies the package that you wish to export scripts from. Export Path specifies where those scripts will be saved to. Lets try exporting classes from Botpack.u xaleros@xalgnto ~/devel/openue/lucc $ ./lucc batchclassexport Botpack ../lucctest/UnrealTournament/Botpack/Classes ====================================== lucc: libunr UCC Written by Adam 'Xaleros' Smith ======================================
[I] Log file opened on 2019-04-14 18:27:45 [I] Successfully read config file '/home/xaleros/.config/libunr/libunr.ini' Pick a game: (1) Unreal 227j (2) UT99-436 (3) Add game 2 [I] Successfully read config file 'UnrealTournament.ini' [I] Successfully read config file 'User.ini' [I] Exporting Bot.uc [I] Exporting TournamentConsole.uc [I] Exporting LadderInventory.uc ... <lots of text here> ... [I] Exporting RatedMatchDM7G.uc [I] Exporting RatedMatchCTF10.uc [I] Exporting RatedTeamInfo8.uc [I] Command completed successfully [I] Log file closed on 2019-04-14 18:27:49
And there you have it. lucc exported scripts from an Unreal Engine package in the same exact way that the official editor/UCC would do it. Hopefully this provides some insight on how to use this. Pretty much all of the commands that exist right now follow this same format, but if you're unsure, just run "lucc <command>" to find out. Now you might be wondering...what's the point of all this? Surely the editor can already do it, so what's the need for another tool that can do it on top of all the other tools that already exist? Since this initial release provides very simple functionality, it is true that this isn't a super exciting release. Perhaps the only part I can say is truly exciting is the T3D (level) exporter, since I think that this is the only tool besides UnrealEd to date that can do this. The main focus of this release is to provide a way for people to test this early on so that bugs in core parts of this project are fixed early on. The main hope with this is that, eventually, people can create content for all Unreal Engine games with a single set of tools and on any operating system they wish to run. The 0.3.x branch will feature a complete renderer, capable of displaying maps in the same way that the editor can. Of course, since that is very complex to do, it's not unreasonable to say that this might take me months to really flesh out. I will be posting updates on important milestones as they happen. If there are any questions/bugs/issues, shoot me a PM either here or on Discord. I am more active on Discord but I will try to check my inbox here regularly.
|
|
|
Post by xaleros on May 22, 2019 8:13:09 GMT -6
Bleh. What a crazy couple of weeks. I managed to get a 64-bit windows build of 0.2.1 compiled before work today, will have to put up the 32-bit version later. bitbucket.org/Xaleros/libunr/downloads/openue-0.2.1-win64.zipI added a Changelog as well as a document detailing each command and how it should be used. Good amount of bug fixes all around as well as some improvements on the tool itself (all detailed in the changelog). I'll be pushing out a 0.2.2 for mesh export and any other remaining bug fixes that need to be done hopefully soon, but with my new internship I only get to work on stuff in the morning, after work, and on weekends.
|
|
|
Post by Hook on May 22, 2019 14:38:27 GMT -6
I think that I am finally beginning to "grasp" what you are accomplishing now - a bit! My angle on this was to see how this could restore obfuscated brushes in maps - I am assuming that this tool could do that by my brief scanning of your explanations. We'll keep watching this progress. Thank you for you great work so far on this xaleros!
|
|
|
Post by xaleros on May 24, 2019 6:49:28 GMT -6
I think that I am finally beginning to "grasp" what you are accomplishing now - a bit! My angle on this was to see how this could restore obfuscated brushes in maps - I am assuming that this tool could do that by my brief scanning of your explanations. We'll keep watching this progress. Thank you for you great work so far on this xaleros ! Among many other things, yeah. At the moment it can't restore brushes that have been truly deleted (like in the case of UT), but a tool like this is going to help a lot in understanding what kinds of work can be done to get some version of the brushwork back. Probably once I get around to rendering the BSP stuff seen in maps would be when I can try to interpret all of that back into brushwork through some kind of deterministic analysis. I actually might post a more detailed idea of what I have in mind in case someone comes across it and wants to try it for themselves in the other topic regarding brush restoration.
|
|
*CROSSBONES Gamer*
Posts: 4
Posts: 4
Favorite weapon: Electric Rifle
Favorite map: CloserToHeaven.unr
UT99 Servers I play: naliplanet
UT99 Claim to Fame: AutoPlayArena][
InterSpaceStation
|
Post by chaosesqueteam on Feb 28, 2024 8:23:31 GMT -6
That's a very interesting thing. I used to make unreal and unreal tournament maps. I posted some of my old ones on my project: sourceforge.net/p/chaosesqueanthology/tickets/2/attachment/t3dexamplefilesmore.zip (has t3d and .unr versions of some of my old maps). One of them once got played on nali planet servers (autoplay arena) and got reviewed back then. Nowadays I hack on the quake1 engine (darkplaces) and code C and QC, make 3d models for it, map, all opensource. I was able to implement an extra format in the engine: Wolfenstine:EnemyTerritory bsp maps and their shaders. That allowed anyone using my project to use 600 more maps than previous (the engine supported previously: Q1, HL, Q3 as maps, and mdl md3, iqm psk(UT) as models. Now it supports also Wolfenstine:EnemyTerritory bsp as maps: aswell as obj can be used as maps (exported from minetest/minecraft bzflag and blender). So I extended it a little. It would be nice to beable to see my old maps again. Implementing another map format is somewhat straight forward but somewhat hard. model_brush.c is the file and a good example is Mod_Obj_Load(): which simply parses and loads the triangle and face data of an .obj file in one go and puts the data into buffers which the engine can handle. Then there is model_shared.c where if an .obj extention file is called to be loaded it executes Mod_Obj_Load(). So for someone who knows a file type back-to-front beforehand: a file parser could be written in 3 days (100 lines per day). But it took me a month straight for Wolfenstine:EnemyTerritory because I didn't know anything going in: except that I asked "the guys" 15 years ago to do it and the never did so I tried and did it. It's hard tho. I see after I posted my pack of my old maps to old unreal they uploaded it to the archive unrealarchive.org/authors/mikee.html
|
|
*CROSSBONES Gamer*
Posts: 4
Posts: 4
Favorite weapon: Electric Rifle
Favorite map: CloserToHeaven.unr
UT99 Servers I play: naliplanet
UT99 Claim to Fame: AutoPlayArena][
InterSpaceStation
|
Post by chaosesqueteam on Feb 28, 2024 8:40:18 GMT -6
xaleros : here is a post about my project on oldunreal: www.oldunreal.com/phpBB3/viewtopic.php?t=10641Here is a video showing the unreal style weapons we modeled and programmed (all opensource, code, media, etc): I did the: ASDW, electricrifle, razorjack, tyradimshardshooter (striker), flack cannon. Modeled them, programmed them. All opensource. So as you can see we're committed. We just need unreal map and texture loading. I also have modeled partially the goopgun, minigun1, and minigun2. But I haven't done the programming for them yet. I've done 100s of 3d models: my project has over 200 weapons. Everything is opensource. I've done 50 stand-alone maps for it, and 100s of BSP towers and other buildings. Everything from game logic programming to engine programming. Also I extended this engine's netcode to beable to address up to 4 million entities: so don't worry if you want to do procedural map generation: there is a network protocol that can handle it. (another thing I asked for 15 yrs ago from "the guys" and was denied). Additionally this engine can do all the modernish extra texture mappings (bump, normal, specular, etc) : so it's valuable to implement more maptypes into this. Thirdly anything implemented into this will likely filter to the other similar engines. And the engine is completely seperable from the rest of the project. Fourthly the sourcecode is always distributed with the project: both the engine in git_repos_both.zip, and the game code (in data/zzzzzz....pk3/QC/) (My project is here: sourceforge.net/p/chaosesqueanthology/tickets/2/ and the engine code can be browsed here: sourceforge.net/p/chaosesqueanthology/code-t3d_attempt_engine/ci/master/tree/model_brush.c ) Here is a post on old unreal about my old unreal maps. 20 years ago, or more, in 1997 and 1999 I was mapping for unreal and unreal tournament: www.oldunreal.com/phpBB3/viewtopic.php?t=10640Could you help make the dream of seeing these maps again a reality? If someone who knew what they were doing did the map parser they could do it without too much trouble. That's all we dream about.
|
|