Jump to content

Alienhead

Developers
  • Posts

    620
  • Joined

Everything posted by Alienhead

  1. ( UAGC ) - WorkLog #4 Introduction to the combat system. The controller will consist of four combat styles, Hand to hand, melee, ranged and magic. When no weapons or combat items are active in either primary or the off-hand, the system will fallback to the hand to hand combat mode. This mode consists off punches, kicks and martial arts style combat. The mode is heavy configurable and offers enough options to customize for any type of game play, including simulations to arcade hack-n-slash styles. The system is based off user input, left mouse button = left hand usage while the right mouse button operates anything in the players right hand. So for example, if the player has no items equipped in either hand than the system will assume martial arts style combat whenever the left or right mouse button is clicked. Combos - Combos can be preformed by stringing along a certain pattern of left to right attacks within a predetermined amount of time. You may configure as many or as little ( none ) combo attacks as you like. I have made it easy to define combo attacks: In the header of each attack style module you will find a section that looks like this: --->> Combos h2h_combos = {} h2h_combos[1] = "111" h2h_combos[2] = "1211" h2h_combos[3] = "2211" This is the combo table for that combat style ( in this case Hand to hand ). 1 represents the Left Mouse button, while 2 represents the Right Mouse button. So for example, when the player clicks the LMB for a combo timer starts, if the player completes the combo by clicking the left mouse button 2 more times within the time frame - h2h_combos[1] will occur. Each combo move has a unique animation and attack move, as well as a sound. There are 10 distinctive animations for combo's. If you declare more than 10 combo attacks then the system will start the animation count back at 1. So combo 11 would actually be combo 1 animation and so forth. Particles will be added once the game engine matures further. 'Damage done' can be defined per combo attack as well. Damage is calculated ( base damage + combo damage + player level ) - ( contingent value ) * ( weapons defined critical hit determiner ).
  2. https://www.ultraengine.com/community/topic/64026-tags-and-prefabs/ This must be a new bug, as it is wreaking havoc on my initialization routines.
  3. I had a guy in the Ultra discord server ask me how to do parkour after I showed a video.. While it's really not a technique to explain over discord, I told him I would post a video and a short description on how I went about doing it. I'm certain there are other methods but I really wanted preformat over drop-dead accuracy. In the video, I attached 2 cubes to the parkour solvers as to better show what's happening behind closed doors. The light blue, or cyan cube is the 'collector' and the purple or magenta, cube is the 'feeler'. What happens here is the feeler tests the area around the player at different update frequencies, it then reports back data to the collector. The collector then decides which data is relevant based off the players location and angle. Once the 'useable' data is determined, it is sent to the player controller where, based off user configurable settings, it is interpolated into an action (hurdling over a box for example). You'll have to pay close attention to see the feeler and the collector in action, the cubes hardly show everything they are doing but at least you'll get an idea. Most geometry sensor systems use up to 14 feelers, while that makes for a very realistic simulation I find it not so practical for game use. I originally was going to use just 'a one pass sample' of the geometry around the player for speed purposes but I found I couldn't do everything I wanted to do with that system. So after reading up on the process I went with a 2 sensor system at little to NO cost on performance. Now that the system is in place I can do a lot more with it rather than just simple vaulting ( as this video demonstrates ), so over the next few months you'll probably see a lot more stuff in my videos based off this system and you won't even know it! Wall runs is on the horizon ! One thing to keep in mind, the map is not staged in any way, this is straight csg brushes made with Ultra editor and dropped into the scene. The system is completely dynamic so there's no extra map configuring required (which is a major plus in my book). I cannot wait until I have time to build a real map with texturing and imported mesh, that's when this system will truly shine I believe, and yes. the system will work with imported geometry. Thanks to Ultra Engine for making this possible! ( and Josh with his emergency bug fixes and API additions. ).
  4. This bug still occurs, I can now import a model straight onto the map, give it a tag - save the map, run the map file and the code does not recongize the model as having a tag, If I load the map file back up into the editor the flag is completely gone.
  5. This seems to be fixed now.
  6. I had a guy in the Ultra discord server ask me how to do parkour after I showed a video.. While it's really not a technique to explain over discord, I told him I would post a video and a short description on how I went about doing it. I'm certain there are other methods but I really wanted preformat over drop-dead accuracy. In the video, I attached 2 cubes to the parkour solvers as to better show what's happening behind closed doors. The light blue, or cyan cube is the 'collector' and the purple or magenta, cube is the 'feeler'. What happens here is the feeler tests the area around the player at different update frequencies, it then reports back data to the collector. The collector then decides which data is relevant based off the players location and angle. Once the 'useable' data is determined, it is sent to the player controller where, based off user configurable settings, it is interpolated into an action (hurdling over a box for example). You'll have to pay close attention to see the feeler and the collector in action, the cubes hardly show everything they are doing but at least you'll get an idea. Most geometry sensor systems use up to 14 feelers, while that makes for a very realistic simulation I find it not so practical for game use. I originally was going to use just 'a one pass sample' of the geometry around the player for speed purposes but I found I couldn't do everything I wanted to do with that system. So after reading up on the process I went with a 2 sensor system at little to NO cost on performance. Now that the system is in place I can do a lot more with it rather than just simple vaulting ( as this video demonstrates ), so over the next few months you'll probably see a lot more stuff in my videos based off this system and you won't even know it! Wall runs is on the horizon ! One thing to keep in mind, the map is not staged in any way, this is straight csg brushes made with Ultra editor and dropped into the scene. The system is completely dynamic so there's no extra map configuring required (which is a major plus in my book). I cannot wait until I have time to build a real map with texturing and imported mesh, that's when this system will truly shine I believe, and yes. the system will work with imported geometry. Thanks to Ultra Engine for making this possible! ( and Josh with his emergency bug fixes and API additions. ).
  7. That will work ! Time to get some parsing done.
  8. As well as, Seed(Millisecs())
  9. Alienhead

    Random()

    ( LUA ) I keep running across these but your knocking them out faster than we can find them ! lol Invalid. local anum = Random(10,20)
  10. Although Pivot inherits the Entity class, entity:GetDistance(pivot) produces garbage.
  11. ( UAGC ) - WorkLog #3 Added: Camera-Shake feature. Call [ player:ShakeCamera(duration, magnitude) ] anywhere within your code to shake the camera. Added: Head-tracking, if turned on the player meshes head will track the direction the controller is turning, in addition the head will also track Y-up and Y-down angles. Added: Bailout-Roll, if turned on - when player is falling or coming down from a high jump he/she will have a split second to hit <spacebar> ( or whatever the jump key is defined to ) to preform a bail-out - saving him/her from certain fall damage. This move must be performed inches from the ground. Added: Point of Interest head-tracking (Poi). Objects on the map can be defined as Poi-trackable and the player will look their direction when within range. Poi Object Tracking: Now detects the nearest Poi object to the player instead of the first matched condition in the table/list. Poi Object Tracking: Added "Collision On/Off" toggle. Bolt-On Module: Ladders completed. Player model will no longer rotate when laying flat on the ground ( due to a hard or controlless fall or whatever may had caused him to fall flat ) . Added smooth SLERP rotation to camera when entering a ladder. Introducing 'TAGS' - some of the lesser interactive objects don't require Components attached, but rather simply placing a TAG on the object in the Ultra editor. Added TAG: ( UAGC:Slider ) - this tag will induce the player controller into a slide while the player is within the bounding box of the specified item. Added TAG: (UAGC:Sleep) - this tag defines a bed or place where the player controller can sleep. Added TAG: (UAGC:Sit) - this tag defines a chair or a place where the player controller is allowed to sit. Added TAG: (UAGC:Slide) - this tag defines a zone where the player controller can slide across the surface. Added TAG: (UAGC:Lift) - this tag declares an object as an up/dn elevator. The object name field holds the Lift's ID and Lift Panel TAGS can be tied to the lift ID for operation. Unlimited amount of lifts supported. Two empty game objects declare the up location and down location. * detailed setup instructions inside the PDF * Added 'Safe-Fall' toggle, when on - no fall damage or fall animation/effects will occur from any height. ( mainly used for ( rogue class ) arcade or platformer sims ). Added a new Label system, turn this toggle on and labels will be displayed where ever a UAGC component or TAG is located on the play map. Two types of sit and sleep have been added, 1) Auto : player walks into the tagged object and a sleep or sit will occur, 2) Use : Player walks near the tagged object and a label 'Press [F] to use' will pop up, the action will occur when the player hit's the use key or he/she can simply walk away. Added Component: ROPE. Simply place a blank object onto the map, position it to your liking and place a Rope component on it, define the length of the rope you desire and the that's it. The controller will build a physics rope that the player controller can fully interact with. ( unlimited amount of ropes possible ). Added definable speeds for lifts and elevators Lifts can be set to AUTO-RETURN to the top of bottom base, or none at all. ( definable by Millisecs() time in settings. ) Added vacuum view to tube surfing! Started some code for Light AI components so enemies will also be able to use the sliders and tube pipes. Started DOCUMENTION PDF file, the controller is starting to become more detailed so I thought best to begin the components API, installation and usage documentation. Update highlights include: Sit, Stand, Sliders, Surfing and Lifts/Elevators!
  12. ( LUA ) I haven't got most of the string commands to work yet. Even pulled some of the demos straight out of the docs. local string = "Hello, how are you today?" print(string:GetSize()) Trim seems to work, and lower/upper.. but for the others no luck Always the commands I'm in dire need of too.. lol Lucky the base lua string commands seem to be ok. string.len(a) for example.
  13. To take this one step further, loading a prefab unto the map, giving it a TAG then saving the map then exit the editor - reload the editor- reload the map and the TAG is gone.
  14. Prefabs do not seem to save TAGS, or at least they are not assigned when dragging and dropping a prefab onto the map.
  15. Alienhead

    POINT

    Yah I had crossed it out earlier this morning, I forgot I had formated yesterday and restored and earlier copy by accident..
  16. Alienhead

    POINT

    ( LUA ) self.entity:Point(self.piv, 2, 1, 0) Did this FIX ever make it into a live release? I'm still getting an error when attempting to use this command.
  17. Alienhead

    Locals

    This works: splabel = {} function AddSpriteLabelToTable(sprite) table.insert ( splabel, { sprite = sprite, }) end function UpdateSpriteLabels() for t, s in pairs ( splabel ) do consolepad:addtext(s.sprite,name) end end This does not: function AddSpriteLabelToTable(sprite) if splabel == nil then splabel = {} end table.insert ( splabel, { sprite = sprite, }) end function UpdateSpriteLabels() for t, s in pairs ( splabel ) do ---- CRASH NO SUCH TABLE consolepad:addtext(s.sprite,name) end end
  18. Alienhead

    Locals

    yes I will attempt to find where it breaks.. But I can tell you now the function does not recognize the table at all. This holds true when creating a table in a component script as well.. self.atable = {} table.insert( self.atable, { somevalue = 10 } then in a different function of the same script file the table is not recognized
  19. Alienhead

    Locals

    One last LUA question, and this one puzzles me. I have a file Require() I use for general utility stuff.. Inside the file is a bunch of functions. I can add a sprite to the table like so.. it prints the name fine. function AddSpriteLabelToTable(sprite) if splabel == nil then splabel = {} end table.insert ( splabel, { sprite = sprite, }) for t, s in ipairs ( splabel ) do consolepad:addtext(s.sprite,name) end end When calling an update function that access this global table I get all kinds of trouble. Usually always resulting in nil or missing table. function UpdateSpriteLabels() for t, s in pairs ( splabel ) do consolepad:addtext(s.sprite,name) end end These functions are located in the same Require() file, but oddly trying to access the table created in the AddSpriteLabelToTable function results in error. Do all my tables need to be created on the top level in order for the entire project to access them? be it Require() files or component scripts? LE allowed this kinda of access, I was just wondering if this is something new and if so where do I need to define global tables that all scripts can access?
  20. Alienhead

    Locals

    I see, I see... good to know.
  21. Alienhead

    Locals

    I wasn't for sure if this was a bug or if it is by design so I figured I'd ask here: Creating anything inside a Require() file or a component with the keyword Local results in the creation not showing. Be it a mesh, sprite, model or whatever.. Example: This is inside a Component script file. -- label if self.ynCreateDebugLabels then local sp = CreateSprite(world, self.font, "This is a sprite !", 14, TEXT_CENTER) sp:SetPosition(self.UAGCSliders[t]:GetPosition()) end It never shows up in the world. But it does exist as the SetPosition command never throws an error. This does: work as one would expect but only after declaring it as a Global. -- label if self.ynCreateDebugLabels then sp = CreateSprite(world, self.font, "This is a sprite !", 14, TEXT_CENTER) sp:SetPosition(self.UAGCSliders[t]:GetPosition()) end
  22. Josh, running debug in any project, even my controller project, results in this same thing - I dunno what the heck it's running:
  23. ( LUA ) I'm just putting this here for a reminder, I know you've told me in Discord it's declared but I can promise you it's not working in LUA.. At least not in my build. It hangs on the IntersectsPoint command. The command Brush::IntersectsPoint is in and working.. But haven't got aabb working. The lack of this command has me held up currently, but hopefully it's an easy fix? box=CreateBox(world) aabb = box:GetBounds(BOUNDS_LOCAL) aabb:IntersectsPoint(Vec3(1,1,1))
  24. Back in the saddle after a little delay with squaring away UltraEngine ( thanks Josh for the help ). This update features a new Bolt-On component: ROPES ! Ropes are another means of climbing or gaining height on your play maps. The setup process could not be any easier. You simply create a Empty game object on your play map and Position it where you want a rope to hang. Then attach the uagc:Rope component to it and define your height and segments! The Controller builds the rope meshes on map load and the player controller interacts with any rope module it comes into contact with. How's that for easy setup? Features and Info on ropes: Ropes can be of any size, length or thickness Physics based rope segments Adjustable Mass setting for stiff to swaying ropes. Player can enter ropes from any location Player can exit ropes from any location. Player can exit rope and enter new ropes or other objects on the map. Definable rope speed for climbing and descending. New animation sequences added for rope climbing bringing the total to 63 animation seqs. AI enemy modules mapped out for rope climbing, yes those pesky mobs will be able to traverse by rope. Rope strength and weakness settings, give the player something to worry about: "weak rope!" Rope sounds for climbing and strength of Rope coming soon ( waiting on more Ultra fixes ) Event command can be sent to any rope to break it apart in mid or idle use! Think of the possibilities. And a short demonstration with Ropes: This has been by far the most difficult feature added to the controller. I think I'm ready to try some simpler things before taking on another difficult process. I'm thinking about starting weapons next, at least get the foundation started for Range weapons ( rifles, machineguns etc.. ) then move on to melee, magic and unarmed. More later !
  25. Tnanks! I'm also happy to report that a fresh windows install and vstudio/vscode now has debug working.
×
×
  • Create New...