I heard that this would be a bit of a pain, but with the help of some videos, it went rather smoothly.
There were the straightforward tutorials, about cooking your game into an exe but they never really mentioned what to change in the scripts, so I thought I'd post this here for future reference. I am using the September 2011 version of UDK, which is no longer available for download, but these are some extra precautions you can take to make sure that Unreal Frontend takes all your packages and game type.
I've been up to my eyeballs with work and yesterday I did my final Viva. The year is over. Woopee!
The updates are rather bad this month. I think it is really due to the fact there's nothing impressive to show anymore. However here is a trailer for the game along with screenshots of the level.
Started modelling the tower and bridges, I realised there's a lot of work to do for the roofs too. I'm hoping to create something to repeat so I can quickly construct these. Planks and metal bars are a great idea!
These Vases were rendered using a software called Marmoset, it's super awesome for rendering game props, I must recommend anyone needing this stuff for portfolio to use it!!
I think I may have a second texture for this pair, just ot mix it up a bit.
Took a day to model/texture this. It's odd that Maya's transparency map is the inverse of what you would use in UDK's material editor. Another annoyance I'm trying to overcome is rendering the normals with the diffuse in Maya, at least you can see how it looks in the UDK screenshots.
There is a random hard edge problem I get when I import from Maya to UDK, and it always happens, even though I tick the option 'Smoothing Groups' in the FBX exporter, and tick 'Import Tangents' when importing it to UDK.
Problem solved when you don't use the 'Triangulate' option in the FBX exporter- it's weird, but I guess the only way to avoid random hard edges is to triangulate your model before exporting.
Improvements on Cecilia's texture, her hair, face and dress and corrected normals (less clean cut egdes etc). Now the Hallway also has added wall Liner/structure to make it appear less square.
Here are some ideas that were floating around in my head during Easter for more puzzles and the theme of the maze:
3 Differen Keys for Different Purposes
Regular Coloured key (colours will differ to indicate door it matches. Old school)
Theme key (for special rooms with context)
FINAL key (for the exit)
Also I'm realising now that perhaps the keys don't actually have to be keys, but cryptical objects, I don't know, maybe if you are trying to unlocked a themed room, you must find an object that goes with the theme. Like the typical one would be dolls, a little girl's room full of creepy dolls. Find 3 pieces of a broken doll and you get access to the doll room. Once you walk in, you'll find the reminants of a horror story, something terrible that happened there.
So after two wonderful and relaxing days after my Viva (which went pretty well I think), I've been thinking up some ideas to better enhance my level, namely the assets and symbols in the level that can help the players solve the puzzle.
My main and probably only puzzle is 'find a key, unlock the door'. Which I admit is very basic and boring. The only thing I have going for it is to make the keys and doors look 'pretty'. I thought of other things like themes behind rooms- which would contain the next key to the next room.
I've put together a sort-of moodboard to help me decide on these little themes:
There cartoon ones, short, long, bulky, symbolic, gothic, eccentric, bold and even simple types. I personally really dig the gothic kind, but I think I want to try bring them out, so combining them with a cartoon look should do the trick. Think Kingdom Hearts only not as cartoony!
Here's the progress video of my project. It shows my current achievments with some mechanics, though it had to be cut down quite a bit since I'll be using this for my second Viva.
I just wish I had more time, maybe another day and I could do so much more.... off to Leamington Spa I go. Here's the latest shot of the room, it's looking good, the challenge is to get everything else to look as good.
In preparation for a good second Viva, I've been busting my bottom to get these out as quickly while trying to maintain the quality I try to stand by at all times. It was difficult trying to cut my time, unfortunately I hate it when things aren't as perfect as I wanted them to be, so these are rough- but I'm not done with them yet! I will continue to modify and improve and model more for the final Viva.
Standard Door Tris: 684
Simple Lamp Tris: 296
Trap Chandelier Tris: 1424
Cupid Bracket Tris: 196
Victorian Frame 01 Tris: 878
Victorian Frame 02 Tris: 166
Morbid Mermaid Candle Holder Tris: 734
I actually have more models to texture (it's been a very productive weekend), but that will be updated tomorrow.
More to come soon, these will be the last of the batch:
Arm Chair
Victorian Frame 03
Simple chair
Simple Bed
Door Frame
Book case
The path node finding is scripted almost entirely, now I can place as many path nodes in my game level and the monster will randomly choose the destination and head towards it. Therefore I don't need to rely on the MoveToActor kismet.
I cannot take much credit for the code I used to get pathfinding using nodes and scripts. After the pylons were placed into the map, mougli's code worked. So the only problem I really had with it in the first place was a lack of a navmesh. The pylons made everything work!
The code used before to calculated the velocity/speed/distance of the monster when travelling towards the player is now uneccessary. Because of that, I was able to use Mougli's AI Script mentioned in previous posts. Christian Skogen helped me out again especially with two parts of the code that would allow the monster to randomly choose any pathnode on the level and travel to it, of course it has to be within the range of the pylon placed there.
I will explain the additional parts of code here:
I used Mougli's code for AI with slight alterations like changing state names.
Then when it worked and the monster could navigate around corners, I tried looking up a way to call pathnodes into script (my monstersaicontroller). I came across this threadwhich told me about the arrays. This adds the pathnodes into an Array- a list of data. So then you can begin to use them in script.
simulated event PostBeginPlay()
{
local Pathnode Current;
Then looked up Random function, and vector maths (with much of christian's help). Applied that until I had a AIcontroller class that would make the monster choose random path nodes, navigate and travel to them. The chasing state (chasing the character) is still intact and just contains Mougli's code. Instead of an Idle, I changed it to Patrol, since it would no longer be idle and just copy/pasted mougli's code again.
He explained how vector maths worked so I could grasp the last bit of code. The last part of the code is an if statement- basically IF the distance between the monster and the player is less than the chaseDistance=1000 (which was alterable in the Default properties), the monster would give up and go back to finding patrol nodes.
This was placed at the end of the Chase state just before 'goto Begin;'
I was quite wrong about my 'discovery' yesterday. It seems that Pylons are picky about the ceiling height of your sub/add brush- they don't dislike subtractive brushes at all, as I tested again and it turns out the real issue was the height of the sub and add brushes. If you have a floor and also a ceiling there seems to be minimum height requirement. Which sucks really that I couldn't figure this out sooner. I was left scratching my head until now.
I tried and tried to impliment the code from the previous post in so many ways, I gave up. I looked far and high for a solution, and finally after four painful hours of self-inflicted mental torture there was a god... I mean, videos:
Still now I'm not sure why the code from before did not work, but I found that I can at least cheat the patrolling of my monster by using path nodes. Very generously Ben Townley shared me a kismet sequence he discovered last year that could attach a volume to a spawned bot and kill the player. Since I haven't enough time to get a full melee system working, this is a very important alternative for me. Thank you again Ben, you've saved me.
I had also used a 'MoveActorTo' sequence, and it should have worked perfectly but it didn't. At first I thought it was the nature of my AIController code, so I tried replacing everything with premade code (copy/paste). But nothing worked, besides the code I already had, and I had lost it. My housemate tried to calm me down and tried to help me look for anything to do with Pylons (because i had started muttering it and remembered Ed had mentioned it vaguely for navigational meshes). I felt like I looked it up almost everywhere, there wasn't any tutorials out there that would guide me except for the videos above (which were found not by me but my amazing housemate).
I watched it with the biggest feeling of doubt ever, since nothing was working I didn't think this would either. The current UDK version uses pylons with a area distinguished by a cube rather than a shere/cylinder/circle as shown in the video. I tried what the man in the tutorial had done but it gave me an error:
'error:Could not find ground position for pylon - this pylon will not build paths'
These lines appeared after building paths with the pylon.
... I then tried it on one of the simple premade levels, it worked, the paths built just fine. The floor there was a static mesh, and I took a very big note of that. Next then I had tried it in an empty level with and Add brush and subtractive brush inside, it didn't work...
So I was questioning if it was because it didn't work on brushes period... this made my heart sink very low. But that was stupid, either it was because the brushes had some form of navigational mesh there already and this pylon business was unessessary or I was doing something wrong- or both.
In the tutorial I finally noticed he was using and additive brush, and everything else was actually a static mesh. My level consists heavily of subtractive brushes. Turns out the pylons do not bod well with subtractive brushes... *BEEP*ing hell.
So i tested this again.
It works!! The monster travels to the second pathnode. This may mean I have to do some heavy reconstruction to my level. Sorry if this seemed obvious to you, but I am an incredible script/code noob. :)
!!!*EDIT*!!!!! Turns out I was wrong again. Check the next post.
I've progressed a lot, but it seems these two things are something that should be easy but are not for the reason that, I've got a crap load of code already and I don't know how to get it working with new code.
Mougli's Navigational Mesh tutorial
This guy Mougli is no doubt brilliant, but his code is something I would have to try and literally integrate with my own.
The customAIPawn is fine, but the customAIController is hard to impliment, here is Mougli's:
My dilemma is I don't know how to integrate his code into my own. I've tried many things, but alas I don't have enough scripting/code knowledge to do this.
Here is my code, you can see I've started to put in some code, I already have and Idle and Chase state though, and all the inner workings of the speed/velocity of the monster to player. However instead of using this odd 'Go to begin' method, I applied it per 'Tick' which is like a refresh, and probably considered a more stable method (as told by a programmer).
Footsteps trouble shoot thread
The guy who started the thread has solved his problems but I don't know what he means when he explains:
"Got it working, it seems like the footstep animnotify calls
PlayFootStepSound(); already, so all I had to do was setup the playsound
functions, and the footstep notify in the Animset."
Been asked for help by Neasa, so I thought I'd blog it here, it would be nice for others too, mind you this is super vague and I'm not an expert so I'm just showing how I went about it.
Video Tutorials on Maya to Motion Part 1, Part 2 from adachan1 on youtube.
Firstly, you need to have your animation data from ViconIQ, in .c3d format- or fbx if you've already messed about with it. You need Maya 2012 if you want to import/export it easily like I did. Also this tutorial uses the skeleton generated by the MotionBuilder characterisation plugin in maya. So if you have a custom skeleton, I can't help you too much with that.
Open up your MotionBuilder, and for your sake, set the keyboard configuration to 'Maya' so you won't have to relearn all the controls again for MotionBuilder. This means things like the move, scale and rotate tools are all asigned to the same 'W, E, R' keys.
Settings > Keyboard Configuration > Maya
Importing your Animation Data
In the Asset Browser tab under the 'Resources' area, you can selet useful files here like the Actor dummy. I added a file directory containing all my animation data, so it was easy for me to access. Right click > Add favourite path. You won't regret it.
So with your folder added, you can quickly select your files through this browser. Click and drag the file over, select the 'Import' option.