Jump to content

AggrorJorn

Members
  • Posts

    4,816
  • Joined

  • Last visited

Blog Entries posted by AggrorJorn

  1. AggrorJorn
    I am currently looking into some 2d basic/arcade game tutorials which might follow up on the OLED project once all the lua basics tutorials are done.
     
    Think about games like:
    Minesweeper
    Tetris
    Pong
    Bejeweld (match 3)
    Asteroids
    Snake
    Arkanoid (breakout)

     
    Minesweeper is already finished:

     
     
    Replicating all these games myself gives a great indication on their complexity, even for arcade games. Grid based games like minesweeper, bejeweled and tetris are the easiest and share a lot of functionality. So doing all of them might now prove usefull. Pong is great in the sense that it introduces vector mathematics. All these game have their own little mechanics. The trick in making the tutorials is also finding the right game order.
     
    One game that you might find missing in the list above is Pacman. Although certainly doable, the ghosts have their own behaviour which makes them a little trickier for beginnners. All in all it is a good way to really start tinkering about lua once you'r done learning the basics.
     
     
    What are your favorite arcade games?
  2. AggrorJorn
    Besides making tutorials I am also working on my own project. It is my biggest one yet, but I think I have enough knowledge to get at least really far. Right now I am building my own engine on top of Leadwerks 3. The entire project is written mainly in C++.
     
    Component Based engine design.
    Since Leadwerks is very flexible you can do a lot of different things with it. The Lua scripts in the editor are a good example of component based design. However if you switch to C++ you don't have this directly at your disposal for C++. That means you would have to implement it yourself. Of course there are tons of ways of doing this but this blog shows how I do it in my project.
    Instead of Component Based Design you can also choose to go for 'Direct programming' like Josh describes in his blog here. Both approaches have their pros and cons. The reason I am going for Component Based Design is because I want to create code that is highly flexible and can be interchanged between projects.
     
    The GameObject class
    The current system that I have is a combination of direct (hierarchical) and component based design. The following image shows how it starts.
     

    The first class is the GameObject. The gameObject is completely empty at first, meaning it doesn't contain any models or textures. The only thing that it contains are components. Every frame all the updates that are enabled are being updated and/or drawn. This is the core of the component based design. Lets say we create a Player Gameobject. We can add several components to it:
    ModelComponent
    WalkComponent
    JumpComponent
    FPSCameraComponent
    HealthGUIComponent

    Now lets say for instance that we want to have TPSCamera instead of a FPSCamera. All we need to do is remove the FPSCameraComponent and add a new TPSCameraComponent. Not only is this system very flexible, it allows us to create components that can be easily shared throughout your project and perhaps even other projects that also use this component based design.
     
    The Component class
    Every component is derived from the Component class. The component class itself is abstract and thus can not be instantiated.

     
    Increasing complexity
    When you look at the first 2 images, you will notice that some functions and variables are exactly the same. Most programmers will come to the conclusion that this is a bad design. So for that reason we enhance our design as follows:
     

     
    This means that a GameObject is also a component. The complexity hereby increases but works a lot better when it is properly integrated. (Note that the images are toned down a bit to simplify the idea.)
    It is debatable whether GameObject inherits from Component instead of the other way around. I decided to go for Component since it is called a Component Based Design and not a GameObject Based Design.
     
    FSM and Components
    At some point I came to the conclusion that it is not always necessary to create an entire component structure to get the desired hierarchy in a level. For instance in a menu it is easier to create a (finite) state machine rather then having to switch between components. Although components work perfectly well for menu's, I think it is a good principle to think about where to use FSM's and where to use Components.
     
    The Scene class
    The component based design is far from finished but the basics already work. The last thing that I show in this blog is the scene class. The scene class inherits from GameObject (and thus also Component) and contains a list of Components/GameObjects. Every gameObject that is created needs to be added to this list in order to be updated or drawn. I specifically want a scene to have a camera so that I allways know that when I load a new scene, a camera is being created.
     

     
     
    Thanks for reading.
    Jorn
  3. AggrorJorn
    I have been using Visual Studio Code for a couple of years now and it is my defacto text editor next to Notepadd++. I mainly use it however to write Lua scripts. 
    Opensource Lightweight Cross platform Completely adjustable hotkeys (or automatically map from Visual Studio: https://marketplace.visualstudio.com/items?itemName=ms-vscode.vs-keybindings) Fully customisable theming (with standard themes included) Supports all major languages. Lua is supported via an extension: https://marketplace.visualstudio.com/items?itemName=trixnz.vscode-lua Build in GIT source control Has a huge amount of extensions: https://code.visualstudio.com/docs/editor/extension-gallery Supports creating custom extensions: https://code.visualstudio.com/docs/extensions/overview Supports creating custom debuggers (on top of the ones that already exist).  
     
    Leadwerks extension
    Personally I would love to see it if Visual Studio Code would be the default code editor for Leadwerks (either with 4.x or 5.x). So I got started on working on a custom Leadwerks extension.  You can download it here: https://marketplace.visualstudio.com/items?itemName=aggror.Leadwerks
    Todo list:
    Done: Leadwerks extension has a dependency on the Lua extension. So this Lua extension is automatically installed when you install the Leadwerks extension. Done: Snippets. Every time you create a new script in the Leadwerks editor, you get a couple of default scripts like Function Script:Start(), UpdateWorld(), PostRender(context). Using a very simple snippet, these kind of functions can be inserted with ease. prop[type] : Creates Leadwerk editor properties print: Shortcut for System:Print("") lescripts: Inserts all entity script functions (commented) class: Creates a basic class objects with example functions start: Start function of an entity script updateworld: UpdateWorld function of an entity script updatephysics: UpdatesPhysics function of an entity script collision: Collision function of an entity script with all parameters PostRender: PostRender function of an entity script with the context parameter function: Creates a function for either a custom object or for the specific script if for pair ipar For instance: just type 'col' followed by 1 tab and you get:  function Script:Collision(entity0,entity1,position,normal,speed) end  
    Partially done: Supporting intellisense (sort of) with Leadwerks entities. Lua is a typeless language (not a strong typed language), which makes intellisense not really possible.  VS code is smart enough to recognise some functions that are available in your script, but it is not as complete as when you would work with C# or C++. Done: Generate snippets for the entire Leadwerks API.  Snippets are created per object and a second one without the object. For instance Entity:SetPosition() SetPosition() TODO: Classes with parents, would require matching functions. For instance: a pivot is an entity and thus requires Pivot:SetPosition() Done: parameters into placeholder slots. If I can extend the intellisense so that it recognises Leadwerks entities, perhaps we could see correct variables and functions of those entities. TODO: Loading in the API documentation in a split screen.  The API documentation is written in an XML format which I can retrieve in VS code. I can display it in a splitscreen.  I would have to play with the styling a bit but in general this should work really fast API documentation can be cached if in online mode. Documentation could also be periodically fetched. Moving the API documentation to Github would help improve this process. (newer file versions etc) Debugging Josh stated that he is getting someone to make this for him. So fingers crossed. The biggest issue at the moment is the lack of debugging support. Visual studio has debugging options of course, but it can't communicate with the Leadwerks editor. If you have an error in your script while running from the editor, the default Lua editor is opened.
  4. AggrorJorn
    After creating my Component based engine structure for my main project, I have now moved on to the next stage of development: an in-game console.
     
    Possibilities
    To sum up what you can do with it, here is a little video demonstration.
     


     
    On the To-Do list
    Although the core of the console is finished and working the way I want it to work, there are some slight improvements.
    Grapics are simple boxes at this point. I want to go for Valve's in-game console look , which looks simple but suits its purpose really well.

    Used command are stored and can be retrieved with arrow keys.
    Error message or help text should be displayed above the command line.
    Show a cursor.
    Adding useful commands, like toggle sound, sound volume, load level, set players health, ammo, armor etc.
    Trying to build the console as a library so that it can be easily included in other projects.

  5. AggrorJorn
    After 8 months since I purchased the Leadwerks Engine I'm still doubting about which direction to choose when it comes to game developing. At the moment I'm at a point where I can't choose whether I should focus more on moddeling, or if I should pay al my attention to scripting/coding. I'm doing a lot of these things at the same time without actually making some good progress. I never expected that I would learn how to programm by just messing around in the Leadwerks editor, but I have to admit that I expected to know a litlle bit more then that I do at the moment. I always thought that programming would be just a matter of time and lots of practice and since I'm on the waiting list for the programmers academy, I thought that I could take it easy.
     
    Unfortunately, due to delayed exams I missed my entrance into the programmers academy. I have to wait for another 8 months before I can go there. Sooo frustrating, because I'm someone who can learn well, as long as a teacher gives me an instruction. I have 2 books for C# (one cheap thing which is just sad, and a more expensive one from Microsoft), but I'm always stuck when I reach the OOP chapter (which is like after 70 pages.), but even when creating small programms I just get stuck. I've seen a lot of comments like 'If you want to learn to programm, don't expected to learn it when you are using Leadwerks' and 'Try to start with making some simple programs first, instead of making games'. Sometimes I wonder if programming is the thing for me to do and whether I'm making a good choice going to that programmers school. I don't think I lack the motivation, otherwise I would have quiet trying long a go, but perhaps programming just isn't my thing.
     
    In the mean time I'm wondering what I should do? Should I continue my struggeling with LUA? (C++ is certainly out of the question.. ) Or should I drop the programming for those 8 months and focus myself more in modeling, texturing and animating?
     
    To program or not to programm...It's the question that keeps me thinking. Don't get me wrong: the game development world is awesome and it has bin really motivating to see some stuff actually work. The community is awesome and some of the work I've seen is often just the thing I need to get the motivation flowing again.
     
    Some good advice or suggestions are welcome.
  6. AggrorJorn
    Finally done moving to my new house and today I got my computer setup again. And as a start, I thought, lets give it a go for the winter games tournament.
     
    It is a little racing game where the tracks gets randomly generated on the given seed. I think I will call it "On the road again", named after the song and because of the fact that the level generation allows you to skip parts of the track if you simple fall down on the track below you.
     
     

  7. AggrorJorn
    This is the final blog post for my game entry this tournament.
     
    GUI
    I am really happy the way the GUI came together in the end. UI really isn't my strongpoint so being able to produce something doable is a great reward.
     
    Car physics
    Although most car tracks can be finished with a car, it is not an easy task. The car tumbles over far to quickly. There is also a bug left were loading a new car level causes the car to glitch. Since I am reusing the same car here, I have no idea what is further causing this. I didn't have this in my first demo so there must be something on my end.
    The ball's swept collision physics have been disabled. There is a bug where object with swept collision collide with each other even if one of those items has the collision type set to none.
     
    Final version
    Although I released a final version, there have been 4 or 5 updates already. But then again that is one of the common phrases in the IT world: you are never done programming.
     
    Game Play Tournament
    I think I want to organise a little game play tournament with On the road again. There will be a couple of pre-selected levels and the person with the highest score per track will get a steam key for a game.
     
    All in all I am happy with the end result and I am looking forward to see that leaderboard fill up. I have also enabled the game analytics. I wonder what kind of conclusions we can draw from it.
     

  8. AggrorJorn
    Paid scripts
    I am looking in to publishing paid scripts to the workshop. There are 2 script collections that others might find interesting:
    Advanced Third Person Controller Many tweakable options: from double jumping, to camera offset, camera snapping, smoothing, speed controls etc Spline paths Not just useful for camera paths, but also for instance factory belts, vehicular movement (static cars, trains etc), airial paths (birds, planes), VR on rails. Tutorials and Patreon
    The newer tutorials (part of Project OLED, ) do not have a lot of visitors. Perhaps my focus on tutorial subject is just not right or people don't like the way it is setup. Perhaps the focus on editor tutorials is far more important. Who knows... With the lack of feedback in the past months I am quite hesitant in recording new videos, thats for sure.  
    The patreon page was an experiment to see if people would be interested in donating to the tutorials project OLED. There hasn't been much activitity on it, so this is something that I probably will discontinue.  A big thanks to ones who did support me though :).
     
     
  9. AggrorJorn
    In a previous developer blog I showed how I use spline paths inside the Leadwerks editor. The cool thing about splines as that they are extremely multipurpose. I started working on generating meshes based on the splines.  Think about ropes, wires, rivers, rollercoasters and of course roads
    Ropes and wires are in progress because I find them the coolest. Especially rope bridges are awesome to make and see in play. They require a lot of finetuning so I have put that on halt for now. In the meantime I also started working on road nodes. The Return to the Zone project uses terrain textures, but the original scene from Leadwerks 2.3 used the in-editor road tool. Time for some new roadfeatures.
    Roads
    The generic nature of the splines allows easy creation of meshes based on the spline. Constructing basic geometry was relatively easy. However, getting the road to appear on the terrain properly proved a little harder. When there is no terrain, the generation of the road is instantaneous. The roads that are created snap perfectly together and it is really satifying to see the result. Per node you can't only tweak the road with the spline handlers, but you can set a road width, a material and several terrain alignment options.
    When the node has to deal with terrain allignment the performance on startup is little slow at the moment, but the first results look promising. I want to add this feature to my winter game "On the road again", which makes cool random tracks from CSG brushes.  
    Another cool automatic feauture is that the road still functions as a path spline. You can attach a car to the road spline and it will follow the generated road. 
     
    Ropes and wires
    For a next video I will show the progress on the ropes and wires, with hopefully some working physics. Here is an older image based on the earlier splines to give you an idea on what I am going for:

  10. AggrorJorn
    I recently was introduced to a bug in my game. I had 20 AI units and only 19 of them were actively doing something. Number 20 was just standing there. The problem eventually lied in using '#enemies' to get the amount of enemies.
    Here is what happened:
    A lua table index by default starts on index 1. This in contrary to many other languages where it starts at 0. However, you can assign a value to index '0' if you want. Since I use C# on a daily basis, I am more comfortable using the 0 index as a start. As a result this is my (simplified) code:
    for i = 0, enemyCount-1, do enemies[i] = new Enemy() end In the AI script I loop over the enemies like this:
    for i = 0, #enemies-1, do enemies[i]:DoStuff() end This is really basic lua scripting with one tiny gotcha: The '#' is used to get the amount of consecutive keyed items in the list. This I knew. What I did not know, is that there is also the requirement that this order starts at index 1 (or at least not on index 0). It simply ignores the 0 index!
    Here is a full script to try
    local enemies = {} local enemyCount = 4 for i = 0, enemyCount-1, 1 do enemies[i] = "I am enemy " .. i System:Print(enemies[i]) end System:Print("#enemiesCount: " .. #enemies) for i = 0, #enemies-1 do System:Print(enemies[i]) end Output:
    I am enemy 0 I am enemy 1 I am enemy 2 I am enemy 3 #enemiesCount: 3 I am enemy 0 I am enemy 1 I am enemy 2 Problem
    So what was happening? I did get the amount of enemies back, except for the one enemy that was located on index 0. I quickly noticed the lower count of enemies, but since enemy number 20 wasn't doing anything I was also looking in the wrong place. It was actually enemy number 1 that was the culprit, even though it's AI was being executed.
    Solution
    It can be solved in numerous simple ways, but I guess best practice is to just stick to Lua's standard and not assign anything to 0. This can really prevent some time being wasted on absolutely silly issues like this.
     
  11. AggrorJorn
    Today I learned a pretty basic but very usefull programming principle. It is about declaring multiple initialisers in a for loop. I am working with a mobile application and speed and memory are more of an issue than on computer right now. My application is finished when you look at its functionality and construction, but it has to be optimized.
     
    Here is a narrowed down example of what I am doing:
     

    for(int i = 0; i < veryLongArray.length(); i++) { DoSomething(i); }
    This is very basic coding right here that can be found in many language.
     
     
    What I didn't know is that you can declare multiple initialisers. It is very simple but has increased the speed of the for loop (which is pretty huge) immensly. This is how it looks now:

    for(int i = 0, j = veryLongArray.length(); i < j ;i++) { DoSomething(i); }
    By initialising the j variable at the start of the for loop, we can save a little time. Instead of checking the length every loop we can simply refer to the j variable. ofcourse you can store the length of the array outside the loop as well, but this is so much nicer. One catch though: If the length of the array is dynamicly changed during the loop, then you shouldn't be using this.
     
    So simple, yet, I have never come accross it before.
  12. AggrorJorn
    Instead of spending more time on getting the car to work properly, I added in a simple ball real quick and to be honest: I like the faster gameplay a lot more. What do you guys think? I do miss the ghost cars, so those will definitely come back.
     
    I have updated the game in the launcher. http://www.leadwerks.com/werkspace/page/viewitem?fileid=821020417

  13. AggrorJorn
    Something that has always been a time consuming process is getting the audio right in my recordings. Although I have a very decent headset, recordings allways contained a lot of static noise and voice 'pops'. To get an acceptablequality I required a finetuned microphone placement for every recording. 1cm to the left could make a big difference. The recording software that I use has some build in noice reduction filters, but they do not always guarantee a smooth audio track.
     
    Since there are going to be many new videos to be recorded I finally invested in a good recording setup. I bought a studio microphone which could be placed on a small stand which would be placed in front the keyboard. A bit weird when simultaniously typing but I will get used to that.
     
    The first recording had a much better default recording sound than the headset. The static noise is pretty non existent but there are some occasonial pops. So I went ahead and also bought a popfilter (never relly bevieved how a simple' piece of synthetic fabric could improve sound quality). But the 'pops' in sentences have been significantly reduced.
     
    While I was on a spending spree anyway I also just went ahead and bought a good recording stand, which I can adjust freely without getting in the way of typing.
     
    Here is the final setup.

  14. AggrorJorn
    The world of games, game development and game design is awesome. I just love it. The fun part is, that I only realised this since the past year and a half. Before that, I just liked playing games. Nothing else slipped in to my mind about "how a game is made etc.".
     
    I like to tell you a little story about myself. We didn't have a computer at home until I was 10. Before that, I used to play games at my neighbours house. My neighgbours where German and their kid had a computer at his room with one game. This game was some kind of science fiction game. The first level you would have to fly above this icy landscape shooting all kinds of robots, including this really huge weird elephant kinda looking robot.

    It took about me about 5 years to understand that this was called "Starwars".
     
    I was 10 I think when my dad got himself a computer including 2 games specially for me. Since my dad worked in Germany, the games he bought were also German. Although the village where I live in lies in the Netherlands, most of the people are either German or Americans (Awacs airbase and Military Outpost are like half a click away from my village.) The 2 games where Abe's Oddysee (German)and Delta Force (my first English game).
     
    Okay now here is somethin funny: I liked playing games on my computer, but for the rest I disliked computers. I didn't like typing in this green/gray interface that was called 'W98'. I rather prefered writing stuff down on a piece of paper. When The first Dial-up connections were introduced most of my classmates started talking about a program called EM ES EN. Anyway I did not care about computers and their stupid programs and especialy not the inter net (back then I thought it were 2 words). I only liked the games. My first game that had an editor was 'Cossacks'. And alhtough it was a demo, you could play with it for as long as you want. Al the enemies in the game feared my massive armies muahaha (evil laugh).

     
    Now here comes the most ironic part of my live. I finished mid school aged 16 and I had absolutely no idea what to do next. I actually went to an open day for a Health care education. But the idea of changing old people's diapers quickly made me change my mind. A friend of me said he wanted to go IT because he new a lot more about computers then I did and it seemed interesting. I was still totally blunt about my direction, so I decided as a total "computer-newb" to join IT education. Ironicly my friend did not go IT after all. I felt really misserable the first year. Everyone knew more then me (which wasn't hard anyway, since I knew zero.). From Operating Systems to CPU, from Windows to something called "Linux". They could as well talked Chinese, because I did not understand a single word. I realise that my smartest decision I have ever made was when some IT student gave me this sticker saying "I Love Firefox.". Since my computer knowledge was pretty much nihil I hadn't the slightest idea what Firefox was. The decision was to not say that out loud. (I personally think that they would have killed if I had.) Yes, I still had trouble leaving my naive idea of my opinion towards computers. The 'Internet Explorer idea' was the biggest of them all. I thought that 'Internet' was an abbreviation of Internet Explorer, thus meaning the same thing. Probably 99% of the IT students played a game called "War of Worldcraft" or something like it. Since I already fell behind on everything, I decided to buy it as well. And I didn't like it. Sure it was fun at the beginning but it just boring after a while.
     
     
    But as time went by I became more and more familiar with the IT world. Year 1 was okay after all, since the rest of the education sucked big time. The education supposed to teach you a way to prepare yourself for adulthood. Big wonderful HAHAHAHA. I had a hard time understanding this all, because my education was more something like a pre-school slash prison slash citydump. If you want to see a collection of criminals, junkies and stereotype nerds, just visit my class. second problem: no girls what so ever. In the past 4 years there hasn't been a single women inside the school building. (except the cafeteria lady).
     
    In the mean while, games kept playing a big part of my life. I bought my first console: xbox 360. Although it is a great product, it can never, never break through the wall of computer gaming.
    So to sum up this part: 3,5 years ago I knew nothing about computers, programs, Operating systems and above all nothing about game development.
     
    This changed a little bit when I found a program via youtube, called '3ds Max'. Back then I used it for making small movies and animations, but not for game designing. This changed when I played this game called Marble Blast. It was made by the Torque engine. I don't know why exactly but I started googling this torque engine. We are talking about 1.5 years ago here. The Torque engine itself seemed too difficult, so we (Dreamhead ) started with buying the Torque game builder. It is a great program for making 2d games. However, due to bad documentation this program was very soon abonded. Dreamhead mentioned "FPS creator.". So we started using FPS creator. It was fun, it was cool, even made a few cool examples, but we reached the limits very soon.
    My first model in Fpscreator.

     
    The biggest mistake I made then was going for Darkbasic. With absolutely now programming experience I just couldn't handle darkbasic. And then I saw this add on the game creators forum about the Leadwerks engine.....!!
     
    So I am 8 months further and a lot has happened since I purchased the engine. First of I graduated my IT education . For the past few months I have been looking more and more for my upcoming education. At first I thought about NID (Netwerk Infrastructure Design), then I thought of Programming(C# and ASP.net) and only since a couple of months I have been considering going in to game development! At first I was sold when I went to an open day at the SAE Qantm college in Amsterdam (International college for media and game creation). However lady unfortunate came looking around the corner: Games programming was to be no longer given at the Amsterdam location. I would have to go to either Munich, Berlin or London. Luckely another option was available: High School of Amsterdam. They offer a game development education for 4 years. Many languages from Java, Actionscript to C++ are being tought there. I have subscribed for the classes of next year, so if that would come true, man what would be great!!
     
    What I want to tell you with this blog is the following: Josh mentioned in one of the video tutorials that he got in to games programming because of quake. For me it is the Leadwerks engine. And that is why I want to say to Josh (and his team)as well as the Werkspace community: Thanks for finnaly opening my eyes! It has been a dream for me to become a game developer, but I never realised it that it is actually possible to become one! Lets hope I can start at Game development in Amsterdam next year. :D
     
    Thanks for reading!!
  15. AggrorJorn
    So school time is over. I graduated from the Hogeschool of Amsterdam as a Game Developer which means I can officially put 'ing' (from engineer) in front of my applicant name. Now that the 'study' period of my life is over (although it isn't really, right? I mean when do you ever stop learning!) it is time to get a job and start earning some money.
     
    Guerrilla Games
    For the past 6 months I did my thesis internship at Guerrilla Games. Which was awesome. I was surprised at first that they offered me a internship and being it was an opportunity of a lifetime, I gladly accepted it.
    I spend most of my time on research rather than doing programming. But still, I spend a solid 2 months digging myself in to the engine, tools and what not the company has been developing over the years. Overwhelming, insanely complex and mesmerizing at the same time, I slowly began to understand the enormous process of making a AAA game. How they are able to produce games like Killzone is, from my point of view, a pure miracle.
    I did gain a lot of new experience in C++ since I was stationed between the Game coders. Working with Game designers was a lot of fun since I never ever worked in a team before which had team members which had such focused tasks. I met some very cool people along the way. One of them was John Gonzalez, who was the lead writer for Fallout New Vegas. It was so inspiring and awesome to have such people surrounding me. Also really cool: the building was located in the centre of Amsterdam near a beautiful canal.
     


     
    Looking for work
    So with a certificate in my pocket and a cool intership on my resumee it is now time to start seeking a job. Game developer jobs are not super scarce but it is not that you get a job without making any effort. I have yet to send out my first job applications but remarkably I did get a lot of offers to work as a software developer or web developer. That is kind of motivating and I am sure that if a job in the game development stays out, I will go for one of those. But my passion lies with games and a job in the game industry would have my preference. We'll see how it goes..
     
    Tutorial project Saturn
    In the mean time I am busy on my own project as well as a new tutorial series going under the name of 'Project Saturn'. The idea here is that we make a playable level and in each video we see the development take a direction. Nothing is really predetermined in to what kind of game it eventually should turn out to be. All assets and scripts needed for the tutorials are either created during the tutorials or they are already part of the Leadwerks SDK. If you have some nice gameplay mechanic that would be a good idea to add, you can leave a comment. Maybe it is something we can add if it is not to massive to implement during a video.
     
    See the first video here:

     
    Jorn
  16. AggrorJorn
    So now that game week is over lets have a look back at how things went.
     
    Game play
    Gameplay itself was done really quickly. The idea for Lenga is basically Jenga with a twist of colors. I thought of creating an AI that would remove blocks based on a calculation. However I though it would become really boring. So instead I let the player remove a block of a specific color.
     
    Scripts on the wrong entity
    At some point during testing I came across a script error. I lost a good hour trying to figure out what I was doing wrong in my script, but as it turned out it was something else: a lua script was somehow attached to a different entity even though I never attached a script to that object. It did turn out that I am not the only one experiencing this.
    http://www.leadwerks.com/werkspace/topic/7275-script-properties-showing-different-script-properties/
     
    Lua script editor
    A very annoying thing about the Leadwerks 3 script editor is that every new line starts without any indenting or tabs. This is really frustrating. Whether you enter for a new line or when you want to move your function one line lower. It breaks the flow and you are wasting a lot of time making sure that every line is aligned correctly.
     
    Physics
    The performance of the physics is just bad. There is not much else I can say about it. The newton 3 demos that you can play show a lot more physics activity and that without any fps drops or weird behavior. On my laptop I can barely run the game (For the record: I can play GTA 4 on my laptop). As soon as the tower falls over (24 blocks), the game slows down to 3 fps.
    After the game was finished I recreated it in C++, just to see if the physics performance would be better. Unfortunately that is not the case. I even went back to Leadwerks 2 (with newton 2) to do the same test. The performance is so much better. I can have 200 boxes in a tumbling tower without any fps drops.
     
    I am 100% certain that there is something wrong with the integration of Newton 3 into Leadwerks 3. Ofcourse this is really difficult to pinpoint but it sure is a showstopper. It isn't the first time this happened in a project with Leadwerks 3.
  17. AggrorJorn
    Back in 2010 Josh, creator of the Leadwerks Engine, asked Dave Lee to create a part of the exclusion zone. 7 years later, this project has been revisited and rebuild.
    Original footage from Leadwerks 2.3
     
    With Leadwerks 3 I asked Josh if I could convert the assets to the new engine. Most assets were uploaded to the workshop, but they lacked proper physics, materials etc. Back then the Leadwerks 3 engine didn't have the vegatation editor and no deferred renderer. So building the entire map was not pointless.
    Now in Leadwerks 4 the tools are perfect to recreate this beautifully designed scene. Josh gave me once again all the assets, and I started rebuilding the zone piece by piece. Many hours later in just the time span of 2 weeks we have some good results.
    Step 1: Terrain import and basic terrain painting. 

    2. Painting general layout and some first vegatation

    3. Placing the first bridges

    4. Placing the first large buildings. as you can see the texture are missing. 

     
    5 Reapplied building textures. Holy **** that was a lot of work. Some textures did get applied automatically, but a lot of the textures were combined in larger shared folders. A lot of manual searching and applying the right textures.

    6 Props, props and even more props. The more I started placing props, the more respect I got for Dave Lee's original design and prop placement. The amount of props is growing significantly. Here is a comparison of Bober station, with and without the building.

    7. Fine-tuning terrain textures and terrain.
    8. Adding more vegatation and rocks.
    9. Swamp emitters.
    10. Some more props.
    11. Performance optimizing. View distance, billboards etc. More on this in the next blog.
    12. Adding some post effects and sound.
     
    13 Some missing things: due to a tight deadline, no time for physics yet. Except for models that have box physics or where physics do not really matter that much. Optimizing and organising the scene is also far from done. I came across a nasty bug where all my assets were removed from the filters I had in place. That was painful.

     
    The final reveal of Return to the Zone project will be done by Josh. In the mean time...enjoy....


     
     
  18. AggrorJorn
    As of next year I will be studying Game development in Amsterdam This is going to be awesome!
     
    At the moment I am taking an extra course math. Although it is really tough, I really enjoy it! (in contrary to most of my surrounding living organisms.)
  19. AggrorJorn
    Technically the title isn't really correct since game development hasn't really started yet. The first 10 weeks are introduction weeks, which are probably neccesary for a lot people who do not know which business unit they want to choose. As for me it has been clear that Game Development is my direction but in the mean time I get all sorts of classes from different IT directions:

    System and Network engineer
    Software engineer
    IT manager
    Human Centered Design
    Technical Computing
    Network Forensic Research
    Game development

    Some of them are cool like network forensic researching. We used several programs to 'hack' protected wireless routers etc. but most of them are pretty boring.
     
     
    Programming == awesome
     
    Okay so we started with Java and I have to say that it is going really well. As a matter of fact: The school hired me to substitute for a teacher who quit his job on the first day of college. There are a lot of terms that make much more sense now that I am actually working with them a lot. terms like classes, arrays, constructors, publics and privates etc.
    I was a bit sceptical about Java but as it turns out its pretty cool. The comparison with C# is very small and that gives me more then enough boost to pickup were I left of with C#. Ofcourse I have just begun so this difference will probably change. Another 5 weeks to go and then Game development should really be kicking in. There are some cool classes that I am eagerly waiting on: Advanced Java, ActionScript and math. AI, Pathfinding and 3d games are things for next year which is a pitty but I have finally learned my lesson that a good programming knowledge in general is essential to developing games. (That took me only 2 years to realise.)
     
    In the mean time have a look at this topic:
    http://leadwerks.com/werkspace/index.php?/topic/2891-the-last-road/page__pid__26958#entry26958
     
     
    Thats it for this blog. I''ll keep you posted.
     
    Ceya,
    Aggror
  20. AggrorJorn
    In follow up to Andy, I also want to do a little blog on my experience with Leadwerks 3 so far. The first week after purchasing I didn't have much time to spend on it. Luckily after that week, there was quite some time left for the start of a new adventure.
     
     
     
    Lua
    In contrary to Leadwerks 2.3, I now want to lay most of my focus on C++. That is kind of Ironic, since a lot more people are interested in Lua now that Leadwerks 3 has arrived. It is not that surprising since the advantages of using Lua have improved quite a lot. Ofcourse we have debugging and stepping through Lua scripts which is a huge gain. And the other thing is the flowgraph editor. Rick has provided me an extra motivation boost to try out the flowgraph editor, with his cool scripts. (Of which the volume trigger is my personal favorite ). I tried to create a little script myself and within minutes, real simple gameplay interaction was set up.(Gravity activator) Something that was a lot harder to do with Leadwerks 2.3.
     


     
    C++ and Shaders
    For my own portfolio and skill set I started with C++ and the LE3 API. Just like with LE2, the API is very easy to use. Chris and Josh have done an excellent job on describing commands for both C++ and Lua. Pretty much every command comes with a working example. In the future I also hope to learn more about shaders. Shadmar has allready created severall of them, which you should check out.
     
    Tutorials
    A good way to teach yourself something, is to try teaching it to others. Thats the motto I have been going with since I have started creating tutorials for Leadwerks 2.3. The road is wide open again with the arrival of Leadwerks 3. The first 5 video tutorials for using C++ with LE3 are uploaded on youtube and more are on their way. Eventually I hope to reach a point were we will create a game that uses a combination of C++ and Lua. For a complete overview of tutorials, have a look here:
    http://www.leadwerks...-lua-tutorials/
     
    Future updates
    There are plenty of things that can be improved with Leadwerks 3. Thats a fact. I am not talking about the deferred rendering with dynamic shadows. It is really the little things that count. I am more than confident that these issues will be dealt with in the near future. As soon as Josh is back from the GDC, there will probably be updates every other day. For now, I am really happy with my purchase of Leadwerks 3. I am looking forward to all the cool stuff that this community is going to create.
     
     
    Jorn
  21. AggrorJorn
    Tower defense games are my favorite casual games. The last few weeks I have been spending some free time on playing several of them. Steam had a lot of sales recently which gave me no choice but to buy them. Here are a few:
    Defense Grid: The awakening
    Orcs must die
    iBomber: Pacific

    They are quite addictive and found myself buying a lot of available DLC´s.
     
     
    Mutant Madness
    I want to build a simple tower defense game. That means:
    Build a tower on flat ground
    Tower shoots on enemy
    Enemy dies: you get money for a new tower
    If the enemy reaches your base, you base will get partially destroyed.
    You win the game by surviving all the waves.
    You loose if your base is destroyed.

    There are many things that can be build to improve the simple basics of this game. However, experience has learned that I have to keep it simple. Trying to complete something with easy rules, is complex enough.
     
    Todo
    On my current todo list:
    Building placement on flat terrain
    Simple GUI display
    Tower shooting
    Different enemies
    Steering behaviour

     


  22. AggrorJorn
    Building selection
    A little update on the building placement. You can scroll with your mousewheel to select a different tower.
    I made the following code to cycle through the towers:

    //Mouse wheel checking m = LE.MouseZ(); if (prevM < m) { selectionID++; if (selectionID > 4) { selectionID = 0; Console.WriteLine("now 0"); } SetNewCurrentTempTower(); } else if (prevM > m) { selectionID--; if (selectionID < 0) { selectionID = 4; Console.WriteLine("now 4"); } SetNewCurrentTempTower(); } prevM = LE.MouseZ();

     
     
    Range ring
    Instead of creating a decal I thought it would be nice to display some rotating meshes to show the range of a tower. At the moment the meshes are not being adjusted by the terrain height but that is something on the to-do list. One thing I noticed was that the FPS dropped heavily when using this range ring. A loop was interfering with the process causing a lot of unnecessary instances being created.

     
     
    Firing towers
    I made a small beginning with the tower's firing mechanism. Towers are now able to lock on to a target if it is within range. The bunker and sniper tower are the only towers with a working firing mechanism. The canon and the flamer use rotation and have extra calculations for damage, rotation and area impact.

  23. AggrorJorn
    I have uploaded a new version containing save games and some improvements regarding restarting a level, going to back menus etc.
     
    Saves
    Every time you finish a level, a property is set to keep track of the levels you finished. Only downside when using the launcher is that this will only get set, when the game is closed. So when you finish 4 levels, it will not become clear you finished these levels until after you have restarted the game. But still a pretty nice feature to have.

     
    Track generation
    The level generation has been altered for the first time since the first blog. Nothing too complicated though, just a different seed when using a car or ball (One variable is called ballSeed ha). The tracks also now have a weighted percentage added to them, meaning that some track segments have a little less chance to get picked over others.
     
    Corpses
    The ball, just like the car, now has a corpse everytime you reset the level. Corpses of the car and the ball are now removed when going back to main menu to prevent cluttering up the game world.

     
    Sound
    Sound has been added, but they are ogg files. So for now, you wont hear anything yet in the game launcher.
     
    Car physics
    The car physics are driving me crazy (no pun intended). I got a reasonable/playable result but it is not entirely there yet. Ah well, it will do for the tournament. Everytime I get a combination of decent properties, there is always something wrong. Either, accelaration, steering, jumpiness, crash sensitivity (
    ) or rolling over with the slightest road curve. I think I have spend more time on the cart, than on everything else combined. Maybe I will give it one last go this week and otherwise I will have to revert back to the basic car. 
    Only 1 more week to go everyone! Good luck.
  24. AggrorJorn
    The easiest, but none the less effective, way to optimize a large outdoor scene is setting a view range for an entity. Here are some basic rules that I used during the rebuild of the Return to the Zone project.
    Max: Here you can think of essential buildings and large structures. Think about distant buildings, powerlines, bridges and entities that stick out above the vegetation or water plane. Far: Here we have the larger props: containers, trains, vehicles, walls, statues. This also contains props that are exposed in open areas. Think about road side props like stone piles, crates or oilddrums. Medium: Props that are placed inside buildings can have either Medium or Near as a view range. When a building has several large indoor areas or contain a lot of windows and doors use the medium setting. Near: Tiny props, like cans, toys, garbage and pretty much all props that are placed inside confined rooms. Also, a few static camera points showcasing the Zone:
     
×
×
  • Create New...