66362a377ae2c

66362a377b623
1 Guest is here.
 
66362a377bf69
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.

66362a377c0aficemann

66362a377c0fe
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.

66362a377c1c6hank morgan

66362a377c213
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

66362a377c390hank morgan

66362a377c3e2
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!
66362a377c818
Very nice, although I have no idea how you can stand the garish green/red dialogue text.

66362a377cb7fhank morgan

66362a377cbe0
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.

66362a377cebdhank morgan

66362a377cf0b
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.

66362a377d066voodoo47

66362a377d0ba
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

66362a377d160icemann

66362a377d1ab
Definitely would. Would avoid many of the legality issues.

66362a377d27eandwan0

66362a377d2d8
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?


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

66362a377d50aandwan0

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

66362a377d6f7
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.

66362a377d8b5hank morgan

66362a377d913
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.




66362a377da29icemann

66362a377da87
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?

66362a377dc8ehank morgan

66362a377dcdc
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.

66362a377e005hank morgan

66362a377e058
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

66362a377e16a
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.

66362a377e25dicemann

66362a377e2ad
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 »

66362a377e61ahank morgan

66362a377e66d
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!

66362a377e879hank morgan

66362a377e8cc
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 »

66362a377ecbdicemann

66362a377ed10
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.
66362a377ee31
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
66362a377ef2e