663620c0db60c

663620c0dbb70
1 Guest is here.
 
663620c0dc382
Nah, keep the updates few and far between. An hour writing updates every day adds up. Fuck that. It's horrible for the player and the developer, as the player has to wait longer for actual development of the project, and the developer is wasting an hour of potential dev time each day on boring updates. Plus a large portion of content is not even good for show and tell. I don't want to hear the details on the process of Hank or JJ importing and supporting Shock's fonts, or the boring technical issues they ran into trying to replicate a particular lighting effect. Well, you and I do, as we do similar game dev type work, but most don't.

Would be nice if Hank popped in once in a while as he used to though, but he's seemingly ditched shock (for now, at least) and is focusing on Underworld. wise choice.

663620c0dc4acicemann

663620c0dc503
Oh I wasn't saying to be spending an hour each day to type up an update. I only meant like once a month / few months.

663620c0dc63chank morgan

663620c0dc691
Apologies for anyone that is on tenterhooks waiting for news. I'm really bad at doing updates but I am still plugging away. I'll either write up something on where I am with things before the end of the month and/or maybe attempt a play-through video.
Acknowledged by: icemann

663620c0dc822hank morgan

663620c0dc873
As promised a video.  Warts and all this is an attempted speedrun on the critical path with a roided up character. I hit a dead-end about 10 minutes from beating the game due to an inventory bug. Sigh.

https://www.youtube.com/watch?v=4DZj3eWP9cw

Major new/improved recent features
+AI now use original game goals and goal targets. Under the right conditions they can follow you as an ally or fight each other (this was in the original game but difficult to trigger)
+AI Ranged combat & magic spells
+Hit rolls and other RPG bits. Not really tuned so far.
+Better targeting by enemies
+Stealth based on range and sneak skill when an AI is hostile but not actively targeting the player
+Save/Load (slow)
+Context sensitive UI when interacting with objects as in the video.

Acknowledged by 2 members: icemann, Join usss!
663620c0dcb9a
Very nice, although I have no idea how you can stand the garish green/red dialogue text.

663620c0dce2bhank morgan

663620c0dce7c
Very nice, although I have no idea how you can stand the garish green/red dialogue text.

Youtube makes the colours look worse than they really are.

663620c0dd0c8hank morgan

663620c0dd113
So the good news is I've finally solved one of my longest standing open problems. How to loading the map at runtime using the original game files. Since the start of the project I've always relied on exporting the maps into an other format so I could load it into an engine. Along the way I've done exports to Doom3 (DarkMod) maps, Source engine (Dark Messiah!) and for Unity I was exporting to Autodesk's FBX format.

So this weekend I forced myself to sit down and overcome this issue. Luckily I was able to port most of my existing exporter code to do this task for me. Other than a few details such as door frames and pillars I've most of the maps loading now dynamically from an unaltered lev.ark file.

My immediate plan is to get a similar process to work for game objects. I'm very confident that this is achievable in the next couple of weeks. Once that is done I would be in a position to do a release of sorts where users who own the commercial release of Underworld 1 will be able to play.

My ultimate plan is to see if I can get this process to work in reverse as a save game/persistence tracking system much like the original games used. That is to write back the state of the tilemap and the objects list back into a lev.ark file that works in both my tool and the original games.

663620c0dd25cvoodoo47

663620c0dd2b2
ah, so it will be possible to use unaltered original game resources? that would be great, as you could make Citadel require original game data after all - as mentioned before, this would make the public release legally very safe, and that's desirable, I think.
Acknowledged by: icemann

663620c0dd34dicemann

663620c0dd397
Definitely would. Would avoid many of the legality issues.

663620c0dd441andwan0

663620c0dd490
Original poster: definitely update your first posting by adding a TLTR (too long to read)

How close is this to the original logic, physics?

Will we be able to get an Android app?


663620c0dd64d
It's called tl;dr. And it's really not necessary in this case.

663620c0dd6e6andwan0

663620c0dd737
Possible to get multiplayer support? Would be excellent to play with friends co-cooperatively.

663620c0dd89b
I'm happy for Hank to get single-player sorted first which is in itself a huge job without worrying about multiplayer.  Without major structural changes it would be little more than a novelty if it were to incorporate the narrative, character development and available equipment / items.

663620c0dda38hank morgan

663620c0dda8b
Single player is more than enough for me to take on.

I'm happy to report that run-time loading of objects from lev.ark is working now. Fortunately my existing code carries across mostly intact. Most of the triggers/traps have been converted over are configured and operate in a more vanilla fashion.

Anytime I can simplify things is always a positive. I was previously generating level objects using generate scripts that ran into several thousand lines of code. This is now reduced to something more manageable where I load the base object info into a loader class which I then loop through to decide what type of object should be generated. I've very positive that this list can be used to generate a save game and persistence system that is compatible with the original game!

As of today I have level maps, nav meshes, objects and strings loading at run-time. I'd like to add support for textures & sprites if possible before I release but I think supporting npc animations as they are currently set up is the biggest problem to solve here due to the sheer number of possible frames. Also the conversation system was based on porting scripts generated by the Underworld adventures toolkit. I have no immediate plans to update them to load from the data files instead as this will require me to implement a sort of virtual machine to interpret the instruction sets. So for the moment conversation scripts are prebuilt. If I was to push on to do UW2 (no promises here) I would have to solve this problem and back-port the changes.




663620c0ddb51icemann

663620c0ddba3
Underworld 1 then System Shock 1, THEN worry about Underworld 2 :p.

How is AI going for npc's at this stage? Still basic? Or do you have some sort of loader (much like with the objects/doors/switches etc) that reads in the npc type with the intended AI routine to go by etc?

663620c0dddbahank morgan

663620c0dde07
I just updated my testing environment today to load object, textures and the fullscreen bitmaps from the files. Just needs to be integrated with my main code. I've also come across a potential solution to my animations issue so fingers crossed on that one.

AI's are stored as objects just the same as other items. The just have a bit of extra info for status.
AI has improved a fair bit. I did a bit of work on AI lately so they now mostly follow the original game rules such as
  • multiple attack types (ranged, magic and melee)
  • wandering aimlessly around a central location
  • standing still (big whoop)
  • fleeing the player if they panic near death
  • a basic stealth mechanic if they are hostile but not currently set to target the player
  • following or attacking other NPCs
Some AI behaviours you would only really see if you hex edited the npc goals and targets.

Some pathing issues remain. Especially getting AI's to literally stay on their side of the river. My previous heavy handed solution to that problem was to split up my nav meshes into regions of connected ground only only allow AIs to use certain navmeshes. Flying AIs are not supported yet.

663620c0de154hank morgan

663620c0de1a9
Very busy on the project lately. Being able to load data at runtime has given me a big shot in the arm in terms of motivation. So what I've mainly being doing lately is porting over code for loading data from my export tool into Unity's C#  and integrating it with the game code. Luckily the code is transferring with only syntax changes required in most cases. As I've being doing that I've being paring away imported game data that I no longer need to bundle.  As a result of all this my dev environment has shrunk from 1.4gb down to a more sensible 500mb -mainly cut-scene and critter sprite files. At the moment my goal before releasing is the only game data I will include is critter animation sequences, weapon animations, fonts, conversation code and a minimal amount of UI art that needed to be edited before usage.

I'm now capable of loading most of the graphics formats that Underworld uses at runtime. This include textures, sprites and UI art. As of this weekend I also have a working reader for pulling in critter animation sequences and frames.  The only art format I've yet to port over is the cut-scene art format. Mainly because I had wholesale lifted the code for this from another project so I just have to take some time to comprehend how all that works before I can update and port it.

I also have a persistence object list manager going.  The way it works at the moment is:
I read the object data in from the game files and store in a storage array. When the level is loaded I create game objects from the items that I know are in use in the level. Each object links to and from the list. When an object is picked up (into inventory) it leaves the list and when an object is placed in the world it is added back to the list as a new instance in the first free slot in the list. When I leave a level I update this list to ensure all all the objects are linked together properly and that changed properties are kept up to date. When I return later just recreate the game objects from the stored info. Seems to work okay so far...

So at this point I have 2 big open problems I want to solve before I can release something.
+How to integrate critter animation data in a clean way. I have one solution that is promising but I'm a bit concerned that it is a bit of a sledge hammer.
+How to pull in cut-scene art and animation sequences.

Oh and I can now load UW2 maps and objects -that is as far as I've taken UW2 support.


Edit:

As always you can follow my progress more closely at https://github.com/hankmorgan/UnderworldExporter

663620c0de2af
Very cool, hank!  No real comments other than that.  Just wanted to let you know I always enjoy your updates, and there are definitely people following and looking forward to this project.

663620c0de34bicemann

663620c0de396
Myself included in those followers.

Has SS1 been looked at, at all lately? Or is the current focus 100% on UW1?
« Last Edit: 12. February 2017, 23:51:07 by icemann »

663620c0de7fbhank morgan

663620c0de877
Myself included in those followers.

Has SS1 been looked at, at all lately? Or is the current focus 100% on UW1?

100% on UW1 for about a year and a half. Between citadel and Nightdive's remake I felt the SS1 market was too tight... That's not to say it couldn't be revisited in the future. I was only looking over the decompression code for SS1 the other day to see if it would port easily.
Acknowledged by: Join usss!

663620c0deae9hank morgan

663620c0deb42
Well it's time to release something after 555 code commits.

I've just published to Github a zip file containing all you need to be able to play UW1 in Unity
There are instructions in the zip file on how to point the game at your game files. You will require the commercial release of UW1. See the attached readme for more info.

https://github.com/hankmorgan/UnderworldExporter/releases/

Your honest feedback is welcome. Please note however that "gameplay" is still a work in progress.

I will attempt to upload the development environment tomorrow night for anyone who wants to pull that apart.

PS
This project would not be possible without the trailblazing work of Blue Sky Software (LookingGlass Studios) and the various teams that dug deep into the file formats of the Underworld and Shock games.  If you post or lurk here thanks.  See the code credits.txt file for some specific examples where I used code from earlier projects.


Edit:just noticed a bug where game string won't load when the game is at a path that is not c:\games\uw1.  Uploading a fix now. Fixed
« Last Edit: 15. February 2017, 23:55:42 by hank morgan »

663620c0def57icemann

663620c0defc2
100% on UW1 for about a year and a half. Between citadel and Nightdive's remake I felt the SS1 market was too tight... That's not to say it couldn't be revisited in the future. I was only looking over the decompression code for SS1 the other day to see if it would port easily.

Well don't give up on the SS1 end. Yours was the only one going for the vanilla feel. And you made some great strides. For people like me, your remake of SS1 was the one I looked forward to most.

Night Dive and Citadel are works that plan to deviate a little from the original in minor (Citadel is going for new models for the enemies + some other changes) or major (in Night Dive's case) ways. So for those who prefer vanilla style remakes, yours was the one to watch. Totally up to you though, as your the one putting in the work at the end of the day. Would be good though if you had a program out there that played 1 to 1 all 3 of Ultima Underworld 1 & 2 + System Shock 1. Much like the excellent source ports for Doom which play Doom 1 & 2, Heretic, Hexen and Strife. All under the one roof.
663620c0df121
Probably wouldn't be too hard for shock.org to restore the sprites in citadel, if that's what people want.

The 100% focus on Underworld is definitely for the best. No way both these classics of this scale are simultaneously manageable by one guy.
1 Guest is here.
I woke up the swan. I WOKE UP THE SWAN
Contact SMF 2.0.19 | SMF © 2016, Simple Machines | Terms and Policies
FEEP
663620c0df211