Jump to content
  • Advertisement
  • You can syndicate your blog to the GameDev.net community.
    Learn how here.

Blogs

SFX Outdoor Atmospheres SFX Pack

Hi there ! Today I would like to share the preview for my huuuuuge "Outdoor Atmospheres SFX Pack", soon available in the Untity Asset Store and the Unreal Market place: Don't forget to check out my website and subscribe to my newsletter to get some really cool free sounds all along the year: www.ogsoundfx.com And also check out my Patreon page and see all the goodies you could get all the while helping me out: https://www.patreon.com/ogsoundfx  

Olivier Girardot

Olivier Girardot

Python Mock for "cube_add" Blender API

This video tutorial is very great!
  For example, we want to add a cube on a scene: bpy.ops.mesh.primitive_cube_add() You can read about this API function in the documentation: primitive_cube_add Create a work folder with the name: mock-object-for-primitive_cube_add-api Open Blender and safe project in the work folder Open "Scripting" tab in Blender from the top menu Open your favourite Python editor. I use VSCode. You can read about how to use VSCode with Python here Python in Visual Studio Code Create a file with the name "main.py" in you favourite Python editor. This file must be placed in the "mock-object-for-primitive_cube_add-api" folder Write in the "main.py": print("hello from blender") You can run this code from command line terminal or from VSCode internal terminal. Press in VSCode "Ctrl+`" and enter command:
  python main.py You will see in the console terminal this message: If you opened "Scripting" tab in Blender you will see an ability to open Python script in Blender. Click on the "Open" Button in Blender Script editor inside Blender Choose the "main.py" file and click the "Open Text Block" button Open the Blender console terminal. For this you need to select in the main menu of Blender "Window" and select "Toggle System Console" Run the "main.py" script from Blender. For this you need to place your mouse pointer on text area and press "Alt+P" button You will see this message in the Blender console terminal:
If you will change a code in an external editor like VSCode you need to reload in the Blender text editor. For this you need to press the "Alt+R+R" button You need to add only one file: "main.py" to the Blender text editor. Another files you need place in the work directory: "mock-object-for-primitive_cube_add-api" Copy this code to the "main.py" file: main.py import bpy import sys import os   # Get a path to the directory with .blend file # There are the scripts in this directory dir = os.path.dirname(bpy.data.filepath)   # Is the directory in the list with included # directories? If no, include the directory if not dir in sys.path:     sys.path.append(dir)   import object3d_service   # Reload module. It is necessary if you use # external editor like VSCode # For reloading module you need to press in # Blender: Alt + R + R import importlib importlib.reload(object3d_service)   # Note. You do not need to open all scripts in Blender, # you need only this script   from object3d_service import Object3DService   def main():     objectService = Object3DService()     objectService.create_cube()   if __name__ == "__main__":     main() This is another files that you need to copy to the work directory: test_blender_service.py import unittest from unittest.mock import MagicMock   from object3d_service import Object3DService   class BlenderServiceTest(unittest.TestCase):       def test_myTest(self):         # Arrange         object3DService = Object3DService()         object3DService.blender_api.create_cube = MagicMock("create_cube")                  # Act         object3DService.create_cube()           # Assert         object3DService.blender_api.create_cube.assert_called_once() object3d_service.py from blender_api import BlenderAPI   class Object3DService:       def __init__(self):         self.blender_api = BlenderAPI()       def create_cube(self):         self.blender_api.create_cube() blender_api.py import bpy   class BlenderAPI:       def create_cube(self):         bpy.ops.mesh.primitive_cube_add() Delete a default cube from the scene. Now you can reload Blender code editor ("Alt+R+R") and run the code ("Alt + P"). You will see that a new code will be created: You can set breakpoints in "main.py" because there are mock-object for Blender API. And you can run unit tests using this command:
  python -m unittest
You will see that unit test are passed.

8Observer8

8Observer8

Small features + minimap.

Last month I posted a tech demo for my game. Only a handful of people played it, but the ones who did gave me some useful feedback.
Audio:
Background music and sound effects is high on the list. I haven't implemented any audio yet.
I'm currently talking to a composer - with a little luck he will be able to create something nice.
If I get around to working with audio before that happens I will be putting in some free or cheap assets to get a feel for the workflow.
The composer pointed me to fmod - it's worth taking a look at. Audio/Visual feedback:
It wasn't immediately apparent when items dropped, or that you could click on an NPC to talk to them.
I've implemented hover UI for items and mobs. This includes the name of the item/mob and for mobs it also includes a health bar.
This can be expanded upon with more info - colors for item quality, extra info for mobs etc.
I'm not sure if NPC hover should include a health bar - you probably won't be allowed to attack them in the final game anyway.
A dynamic cursor was also implemented to show if you could pick up items, attack mobs, talk to NPCs etc. It does seem a little busy / confusing when the cursor changes so I'm not sure if that's a good idea. Perhaps using the same basic cursor with a sub-icon will make it easier on the eyes.

The first NPC asks you to kill some spiders, but there are no spiders in the game... will do:)  The first area needs some love - a bit of story, better flow and a basic quest line. Quests are not yet implemented but the flow can be simulated with dialogues. Monsters tend to clump together in one spot, and when you kill them they respawn immediately at their spawn point.
The respawn behaviour is something I will address soon, but fixing the clumping requires quite a bit of work.
Originally I wasn't planning on implementing any sort of monster-blocking or dynamic obstacle avoidance. I'm afraid this simplistic approach won't cut it. Monster blocking is not in itself a must-have, but the clumping must be dealt with.
Implementing dynamic pathfinding / steering behaviour - in particular in a way that will perform well enough to scale to many players - is going to be a bit of a hurdle.

I got started on a minimap. The approach I have used is to visualize the navmesh by extracting the triangulation and turning it into a mesh, which is then rendered by another camera into a RenderTexture and shown on the screen. I need to find or write a good shader to make it look right.
Also I need to visualize enemies, NPCs, portals and other entities on the minimap, and visualize camera and player rotation. (Come to think of it I also need to implement camera rotation...) One thing I would really love to have is an installer and a launcher application that will be able to auto-update the game files. High on the wish-list is also a code-signing certificate, but due to costs this will have to wait unfortunately. But I really want to have the launcher in place soon.

A new build can be downloaded at: https://treacherousjourneys.com/downloads/journeys.zip. I really appreciate all of the feedback I can get:)  

Polydone

Polydone

 

Unreal Engine livestream

With the official launch of the Unreal Engine 4 plugin for mod.io just around the corner, we are joining Victor and the team on the Unreal Engine livestream to chat about mods and how easy it is to use mod.io in your game.
View the full article

intenscia

intenscia

 

small3d’s single Vulkan codebase now runs everywhere

I’m pleased to announce that the small3d game framework now works across all major desktop operating systems as was always the case and, thanks to having been migrated to Vulkan, it has also been adapted to Android and iOS. For the time being I will continue to maintain the OpenGL edition. It is easy to port a game’s codebase between that and the Vulkan edition because the two APIs are almost identical. Still, I am keeping them separate, with a view to someday dropping support for OpenGL completely.

dimi309

dimi309

Doomish - Done

Challenge: complete! It's basically a complete game, even though it's short. Normally I make the levels way too difficult and I have to tone them down, but this time I think they ended up about right. They aren't very difficult, just about right for the first three levels of a game. My project went mostly according to plan. I had planned to be done in six weeks, but it took me seven. Part of that was getting used to the level building tools. Part of that was forgetting to add in some things that would have made the game not work. Another part was down to balancing the mobs. Thankfully there was only one minor packaging error that took about five minutes to clear up. The last challenge I did baking the project was almost catastrophic. I had to roll back to a previous version. There are only three levels in the game, and one is a rip off from the first level of classic Doom. Turns out I need to work more on my own level building skills, because I can tell that there is a big difference in quality of design between the Doom level and my other two. It was a good learning experience for me. Well, it's done and here it is:  

DavinCreed

DavinCreed

AWT GUI Facade (5): Load a level

In this article, I propose to use the Visitor Pattern to easily load a level. The GUI facade in the previous post is used to display the level. This pattern allows (among other things) to easily browse a data structure to extract information. In our case, it is an XML file created by “Tiled Map Editor” which is analyzed to load a level in memory. This post is part of the AWT GUI Facade series I start by creating a level in XML with Tiled: You have to choose in the left panel Tile layer format as “XML”. This produces an XML file that looks like this: <map version="1.0" orientation="orthogonal" renderorder="left-up" width="16" height="16" tilewidth="16" tileheight="16" nextobjectid="1"> <tileset firstgid="1" name="advancewars-tileset1" tilewidth="16" tileheight="16" tilecount="256"> <image source="advancewars-tileset1.png" width="256" height="256"/> </tileset> <tileset firstgid="257" name="advancewars-tileset2" tilewidth="16" tileheight="16" tilecount="256"> <image source="advancewars-tileset2.png" width="256" height="256"/> </tileset> <layer name="Ground" width="16" height="16"> <data> <tile gid="41"/> <tile gid="41"/> <tile gid="41"/> <tile gid="41"/> <tile gid="41"/> <tile gid="41"/> <tile gid="41"/> <tile gid="41"/> ... <tile gid="41"/> </data> </layer> <layer name="Objects" width="16" height="16"> <data> <tile gid="0"/> <tile gid="0"/> <tile gid="0"/> <tile gid="0"/> <tile gid="0"/> ... <tile gid="0"/> <tile gid="0"/> <tile gid="0"/> </data> </layer> </map> We first have a <main> tag with global properties, then two <tileset> tags that define the tile sets used (one for the background, the other for the objects), and finally two <layer> tags that define the tiles for two layers (one for the background, the other for the objects). To decode this file, I propose to use the XML parser included in the standard Java library. It is based on the Visitor pattern, and allows you to easily work on tags without having to worry about character decoding issues. Visitor Pattern The Visitor pattern can be presented as follows: The IElement interface represents the elements of the structure. In this example, there are two possible types of objects: ElementA and ElementB. The interface requires a method like accept() which takes as argument a visitor who implements the IVisitor interface. There can be several ways to visit the structure, and so many other methods similar to accept(). Parameters can also be used to influence the traversal. The IVisitor interface is implemented by the user who wants to traverse the structured data. In general, the interface methods correspond to the different types of elements that compose it: in this example, they are the ElementA and ElementB classes. It is quite possible to imagine other cases that may interest a user, such as being at the beginning or at the end of an element. In all cases, the accept() method calls the methods of the IVisitor interface according to the cases encountered during its course. Within these methods, the user is free to view and modify the data. Load a level To read and store the level information, I define a Level class that contains this information in attributes: public class Level { private ArrayList<String> tilesetImages = new ArrayList(); private int tileWidth; private int tileHeight; private int width; private int height; private int[][][] level; private int tilesetWidth; private int tilesetHeight; private int x; private int y; ... The tilesetImages attribute contains the file names of texture images; The tileWidth and tileHeight attributes contain the width and height of a tile (16 x 16 pixels in our example); The width and height attributes contain the width and height of the level (16 x 16 cells in our example); The level attribute contains for each cell coordinate: the (x, y) tile coordinates of the tile to draw, and the tile set to use. The following attributes are only used to decode the information in the file. To decode the file, I define a LevelLoader class that implements org.xml.sax.helpers.DefaultHandler. The LevelLoader class is the equivalent of the Visitor class in the diagram above, and DefaultHandler is the equivalent of IVisitor. I’m only interested in the startElement() method, equivalent to the visitElementA() and visitElementB() methods in the diagram above. This method is called whenever the parser encounters a new opening tag: public class LevelLoader extends DefaultHandler { public void startElement (String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equals("tileset")) { if (tilesetImages.isEmpty()) { tileWidth = Integer.parseInt(attributes.getValue("tilewidth")); tileHeight = Integer.parseInt(attributes.getValue("tileheight")); } } else if (qName.equals("image")) { if (tilesetImages.isEmpty()) { tilesetWidth = Integer.parseInt(attributes.getValue("width")) / tileWidth; tilesetHeight = Integer.parseInt(attributes.getValue("height")) / tileHeight; } tilesetImages.add(attributes.getValue("source")); } else if (qName.equals("layer")) { if (level == null) { width = Integer.parseInt(attributes.getValue("width")); height = Integer.parseInt(attributes.getValue("height")); level = new int[height][width][3]; } x = 0; y = 0; } else if (qName.equals("tile")) { int id = Integer.parseInt(attributes.getValue("gid")); if (id != 0) { if (id >= 257) { level[x][y][2] = 1; id -= 256; level[x][y][0] = id % tilesetWidth - 1; level[x][y][1] = id / tilesetWidth - 1; } else { level[x][y][0] = id % tilesetWidth - 1; level[x][y][1] = id / tilesetWidth; } } x ++; if (x >= width) { x = 0; y ++; if (y > height) { throw new SAXException("Erreur dans le fichier"); } } } } } The method is a long discussion based on the tag encountered, whose name is placed in the qName argument. For the “tileset” and “image” cases the information relating to a set of tiles is decoded. For the “layer” case, the level is initialized, and for “tile”, the information relating to a tile is stored. The x and y attributes are used to store the coordinates of the next tile to be decoded. Finally, I define a load() method in the Level class that uses the LevelLoader class to load the level: public boolean load(String fileName) { try { SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser saxParser = spf.newSAXParser(); XMLReader xmlReader = saxParser.getXMLReader(); xmlReader.setContentHandler(new LevelLoader()); URL fileURL = this.getClass().getClassLoader().getResource(fileName); xmlReader.parse(fileURL.toString()); return true; } catch(Exception ex) { return false; } } The Level class also has accessors/mutators (getters/setters) not listed here. Display the level To display the level, I use the GUI facade from the previous post: Level level = new Level(); if (!level.load("advancewars-map1.tmx")) { JOptionPane.showMessageDialog(null, "Error when loading advancewars-map1.tmx", "Error", JOptionPane.ERROR_MESSAGE); return; } int scale = 2; Layer backgroundLayer = gui.createLayer(); backgroundLayer.setTileSize(level.getTileWidth(),level.getTileHeight()); backgroundLayer.setTexture(level.getTilesetImage(0)); backgroundLayer.setSpriteCount(level.getWidth()*level.getHeight()); for(int y=0;y<level.getHeight();y++) { for(int x=0;x<level.getWidth();x++) { int index = x + y * level.getWidth(); backgroundLayer.setSpriteLocation(index, new Rectangle(scale*x*level.getTileWidth(), scale*y*level.getTileHeight(), scale*level.getTileWidth(), scale*level.getTileHeight())); if (level.getTileset(x, y) == 0) { Rectangle tile = new Rectangle(level.getTile(x, y), new Dimension(1,1)); backgroundLayer.setSpriteTexture(index, tile); } } } Layer groundLayer = gui.createLayer(); groundLayer.setTileSize(level.getTileWidth(),level.getTileHeight()); groundLayer.setTexture(level.getTilesetImage(1)); groundLayer.setSpriteCount(level.getWidth()*level.getHeight()); for(int y=0;y<level.getHeight();y++) { for(int x=0;x<level.getWidth();x++) { int index = x + y * level.getWidth(); groundLayer.setSpriteLocation(index, new Rectangle(scale*x*level.getTileWidth(), scale*(y-1)*level.getTileHeight(), scale*level.getTileWidth(), scale*2*level.getTileHeight())); if (level.getTileset(x, y) == 1) { Rectangle tile = new Rectangle(level.getTile(x, y), new Dimension(1,2)); groundLayer.setSpriteTexture(index, tile); } } } gui.createWindow("Load a level with the Visitor Pattern", scale*level.getTileWidth()*level.getWidth(), scale*level.getTileHeight()*level.getHeight()); The code of this post can be downloaded here: Download Now! To compile: javac com/learngameprog/awtfacade05/Main.java
To run: java com.learngameprog.awtfacade05.Main   View the full article  

phylyp

phylyp

Release Date Announcement

Hi gamedevs, 

We are happy to announce the release of Nanotale in early access on the 23rd of October 2019.  http://www.youtube.com/watch?v=5IohCH2aCx8 Wishlist the game on Steam Why in Early Access? The initial plan was to release the full game in September 2019 but then, we noticed that if we really wanted to release the game we dreamed of along with our community, it would take a little bit more time. So, we decided to polish the first 35% of the game and put it in your hands to make sure that we are on the right track while finishing Nanotale. 












We give more info about the early access and its content in the following video. http://www.youtube.com/watch?v=Z2kd_ams2fo&t=4s
The more feedback we get, the better our game will be at release. So, thank you in advance for your support!

Have a wonderful week. 
-VirginRedemption

FishingCactus

FishingCactus

Ludum Dare 45

Introduction Yet another Ludum Dare event was around, and I found time to participate this time again (this time it is actually 10th Ludum Dare I've participated in so far). So, first of all - if you are interested, just roll down the post and play the game. Short gameplay video: Fig. 01 - A short gameplay video. What went right? This time around, we have decided to dive into the wonderful world of procedural generation quite fast, the actual work on the game started early saturday morning. Being heavily inspired by Angband, the decision was clear - our dungeon levels must be generated. Procedural generation of such dungeons is not really that hard, I have started off with simple algorithm and worked from there: Generate a 2D axis-aligned BSP tree, randomly terminating after at most N levels or when criteria is met Shrink rooms represented by leaves of the BSP tree Make connections in bottom-up order (first between leaves, then between interior nodes and leaves - picking always the closest room to the currently processed one). The results were quite promising, producing blocktober worthy images like: Fig. 02 - Randomly generated dungeon level At this stage entrance and exit were placed, followed by the monsters and power ups which you can pick up in the dungeon. The last thing to solve in level design were first and last level. Although as our levels during the generation phase are defined as byte arrays (containing actual chars defining what is on given tile) we simply used file and injected it into the process. Our first level looks like this: ### ###X### #.#...# #....## ##....# #...#.# ####### Where: # - represents wall . - represents empty space X - represents exit out of the level Apart from actual procedural generation, the development went quite smooth. I enjoyed making a non-realistic cartoon-ish models, and skeletal animation enabled just for the character hands. The models ended up being quite cute in the end: Fig. 03 - Mushroom in Unity engine editor, version without hands The game mechanics also overall felt quite comfortable (as I'd say finished enough to be playable), compared to some of my previous entries. Picking a smaller scope game definitely played in favor of this. What went wrong? As usual, time. Each game jam (and it doesn't matter whether it is Ludum Dare or anything else), it comes to the point where you have to start cutting features out to make it on time. Because at the end of the day for game jam, you either finish a game or you don't. We had to cut out various features that would make the game a LOT better, but most important of those was audio. Sound effects and music tend to improve the atmosphere a lot - or to be precise - it is one of the most underestimated feature of the game, with which atmosphere rises or completely falls. Due to our time constraints we ended up completely without audio in the game. User Interface, second item we left for the last moment of development was user interface, and we ended up having it very simple. While being informational enough for the game, making it graphically more attractive would improve the gameplay a lot (compared to having just default text giving you all the information you need). Next time around, I'd like to dedicate at least few hours on these two topics, even sacrificing some of the visual effects or details in world generation, to increase atmosphere of the game with audio and UI. Conclusion As said, this was 10th Ludum Dare for me, and I have enjoyed working on it very much. I'm quite satisfied with the game we have ended up with. For the next time, assuming I would have a free weekend, I'd like to participate again. Also, if any of you (who read this article) have participated in Ludum Dare, and would like me to play your game - please leave a comment here, and I will definitely play your game during the following weeks. Goodies So, for curious ones (I'm intentionally leaving just Itch.io link to the game, as I never know when I will remove it from the server - that would make the link inactive): Source code is available at: GitHub Game is available at: Itch.io Ludum Dare page is at: LDJAM

Vilem Otte

Vilem Otte

 

Arpago’s October report!

Well, let’s sum up most recent progress. Done some enemy balancing, major camera behaviour tweaks, graphical enhancements (mainly water, ambient light, and caustics), added mechanics behind talent tree nodes (for Ranger for now), added new zones, new puzzles, new areas, working zone-specific light effects and skyboxes, and a ton of fixes and additions. Witch encounter has been promoted to a boss fight, and she has received her own lair – a creepy house in the graveyard area, some lore, and an introductory cutscene. Spells and abilities now can have cooldown time, which is visible in the HUD. One of new NPCs, a void mage Introductory video of Wolfmother, yet another boss New interface during conversations – less limited space allow for longer options for the player, and it’s much less taxing on the system. Just an interesting area that definitely doesn’t serve any hidden purpose A lot of progress has been done in sound effect department, as I’ve been implementing various sounds in the game world, tweaking volume, balancing performance, and so on. I hope to share a video with sound soon. Thanks! The post Arpago’s October report! appeared first on Arpago.
View the full article

Paszq

Paszq

Devlog #2- Getting the Ball Rolling!

Devlog #2- Getting the Ball Rolling! Connect with us on Social Media: Facebook: www.facebook.com/TumultuousProductions Twitter: https://twitter.com/TumultuousGame Join our Discord Server: Join the Yami Discord Want to Join the Project? Fill out our google forms Online Application  For more about the Studio : About Us Tumultuous Productions For more about Yami: Our Game: Yami    
  Weekly Updates Week 2:Concepts of Creatures within Kinfallen Forest Here is a showcase of two enemies you will encounter in the Kinfallen Forest, including a brief description and concept art created by our talented artists:  Shrubble:  This small creature resembles the plant-life of Kinfallen Forest, and scurries along the forest floor, attacking any nearby threat by shooting seedpods or attempting a pitiful attack. When cornered, it will usually either burrow itself underground or flee.   Tresswing: (Before and after)   This aerial creature only has two wings and a beaked face, and flies amongst the canopy of the forest. When spotting an unsuspecting wanderer, it will swoop down to peck at any unlucky traveler’s head.  Weekly Member Spotlight: Beginning every week, there will be a small Q&A segment, wherein we ask a member of Tumultuous Productions some questions to learn more about our talented team!  For this week, we asked our Lead Composer for all Yami sounds and music, Sassykeys, a few questions to provide an insight into his creative process. Q: What originally inspired/brought you into pursuing and learning music? A: “As early as I can remember there was a piano in my  house. I used to enjoy sitting down and smashing some keys - even if the notes didn't make sense I still enjoyed it. So I think a natural interest at an early age really helped.” Q: What led you to want to create music for a video game? A: “I had been doing session jobs for a while, but felt something was missing. My main time spent on piano has always been composition. I don't actually know that many songs on piano, but I've always enjoyed coming up with original material. This stems from discovering new chords and combinations on the piano since an early age and developing that theoretical knowledge through trial and error. Anyway, it's helped me as a session musician, but with so much material I've recorded and haven't released, I figured doing some music for video games would be a really nice outlet. I also really like video games.” Q: What is your creative process? How do you get the ‘musical juices’ flowing? A: “Play piano. I've found this to be incredibly important in helping me come up with ideas, especially since I'm spending a lot more hours sitting at a computer than I'm used to. Whenever I have “writers block” it's normally because I haven't jammed for a few hours on the keys like I normally do.” Q:What is a random fact about you? A: “Yumface is my favourite emoji and it's more or less the only one I use.” Q: How does making music for a game differ from making it for a general audience? A: “It doesn't differ all too much asides from maybe you prioritise the music fitting in with the game over how somebody might perceive it if they were listening just for leisure. In saying that the video game is hopefully being made for a general audience too, so their enjoyment of the music is still very important to me.”
  ~Look for our post Next week where we provide more information on the Scavenger and Uprooter enemies and the release of our new website~   Remember to: Connect with us on Social Media: Facebook: www.facebook.com/TumultuousProductions Twitter: https://twitter.com/TumultuousGame Join our Discord Server: Join the Yami Discord Want to Join the Project? Fill out our google forms Online Application  For more about the Studio : About Us Tumultuous Productions For more about Yami: Our Game: Yami
 

Battle music

Continuing on with the recurring horn melody from my first post, here is a battle track that uses the same horn theme. Instead of sounding peaceful and calm, I wanted something that sounded really aggressive and energetic. I changed the key, put a chromatic bass line underneath it, and made the horns sound brassy. Here are two clips to compare.  Full story »Original post blogged on Rank: Warmaster Dev Blog.
View the full article

LordArt

LordArt

 

New Integration: Microsoft’s Mixed Reality Capture Studios Brings Lifelike Holograms to the Web

Image provided by MicrosoftOur latest integration will allow you to bring realistic holograms to life in WebAR. Microsoft’s Mixed Reality Capture Studios generates high res, low latency volumetric videos which can now be imported into your 8th Wall Web project. Check it out: https://medium.com/media/acbae201feaccb867ae41133f6e3924a/hrefNow your favorite celebs, athletes (and even you!) can teleport anywhere at anytime, using Microsoft’s MRCS and 8th Wall WebAR. Try the demo out for yourself here! We love the quality of the volumetric videos produced by MRCS and the speed at which they load in a web browser is unmatched. It isn’t too far-fetched to assume that we may see sporting events, concerts and even films being reenacted by human holograms on kitchen tables around the world very soon. “We’re thrilled to partner with 8th Wall, and have been impressed how great our holograms look and play in their WebAR solution. Such easy and instant access really delivers on the promise of volumetric video for mixed reality anytime, anywhere,” said Steve Sullivan, General Manager of MRCS. View all of 8th Wall’s supported integrations in our docs. Is there an integration that you’d like to see 8th Wall support? Drop us a note in the comments below, message us on Slack or tweet us @the8thwall 📢 New Integration: Microsoft’s Mixed Reality Capture Studios Brings Lifelike Holograms to the Web was originally published in 8th Wall on Medium, where people are continuing the conversation by highlighting and responding to this story.
View the full article

8thWallDev

8thWallDev

 

It’s my birthday!

So far it’s been a pretty quiet and relaxed one. It’s beautifully cool and clear outside. My favorite sort of fall weather. October is by far my favorite month. I love the pumpkins and the colorful leaves. The weather is cool enough for light sweaters and cute dresses with boots. Halloween is by far my favorite holiday. You get to dress up in cool costumes and play pranks on people. There’s plenty of sweets. It’s the best. As a teenager I worked every October at a corn maze as a haunter which means I got paid to jump out of corn and scare people. It was fantastic and I have so many fond memories of standing out in the cold, damp, dark just waiting to jump out at people. One year I was I was this Vampire Leprechaun and it was around the time those Sparkly Vampire books got to be so popular. So I would have all these teenage girls coming up to me wanting hugs. You couldn’t tell anything about me when I was wearing that costume because it covered me from head to toe so people would ask me if I was a dude or a chick. I would just give them vague spooky answers and then give them directions so they would get more lost and then I could scare them again. I was really good at it. The pay was generally either at or below minimum wage but I didn’t care. I had so much fun and it was for a charity. The corn maze was the main funding for a what was essentially an orphanage. It was actually called a boy’s home because they exclusively took boys generally teenagers. It closed down recently due to an incident caused by the state sending them more and more unstable children. It wasn’t set for that. It was a place for lost boys to get their heads on straight and learn how to be functioning members of society. The corn maze just moved to a new location with a new name and it no longer benefits a charity since the owners are still paying off the new place. The old corn maze spot will always have a special place in my heart. The way the fog rolls across the valley from the creek late at night. The way the cold damp just settles against your skin. The stars and the moonlight above a field of corn. I think my experiences as a haunter at a corn maze are why I enjoy making horror games so much. There’s that rich atmosphere and I get to create this whole dark little world for people to enjoy. There is a certain joy in being scared or startled when you know you can’t get hurt. I like being able to share that with people and I am so excited that Frostbite is nearly done. I sincerely hope that when it comes out you will buy, play, and enjoy my scary little game. The post It’s my birthday! appeared first on Gilded Octopus.
View the full article
 

WebGL example for beginners in computer graphics

It is my example how to draw a triangle using WebGL and TypeScript: https://plnkr.co/edit/PkqSZGwhv9zKSnUNSiXo?p=preview Just fork my example, change it, save and send a new link to your friends. I use glMatrix library for math. You can find in the ShaderProgram.ts file hwo I set scale, rotation, and translation:         let modelMatrix = mat4.create();         mat4.translate(modelMatrix, modelMatrix, vec3.fromValues(0, 0.5, 0));         mat4.rotateZ(modelMatrix, modelMatrix, 20.0 * Math.PI / 180.0);         mat4.scale(modelMatrix, modelMatrix, vec3.fromValues(0.5, 0.5, 1));                  let u_ModelMatrix = gl.getUniformLocation(this.program, "u_ModelMatrix");         gl.uniformMatrix4fv(u_ModelMatrix, false, modelMatrix);
 

8Observer8

8Observer8

Introduction to the Conflict of Wisdom

Introduction to the Conflict of Wisdom Conflict of wisdom is a multiplayer turn-based strategy game. In Conflict of Wisdom players conquer parts of the world by answering quiz questions correctly. Start of the game Before the game starts, players join the matchmaking queue where they will be matched with other players of similar skill. When enough players joined the queue, the game will start. Each of the players will be given a capital region which is distant at least two regions from another player capital. This region will be the only region owned by a given player at the start and used as a starting point for all the following conquest. Game mechanics 1. Conquest of the regions: Players are able to conquer only one region per turn. The region being conquered has to be a neighbor of at least one of regions owned by the given player. After starting the conquest question with four possible answers will show on screen of all players, only attacking and defending players can pick the answer. When the tile is not owned by anybody only the attacking player can pick the answer. Whoever picks the right answer wins. When the defender picks the right answer region stays owned by defender when the attacker picks the right answer region ownership is transferred to the attacker. If the region is not owned by anybody before the conquest and the attacker will not pick correct answer region stays owned by nobody.   2. Tie resolution: When both sides pick the correct answer, winner is whoever pick the answer first.   3. Lifelines: Every player will have two lifelines which could be used once a game. First one will be 50:50, which will hide 2 incorrect answers, and other will show percentages of other players choosing particular answer to the question. End of the game Every game has two possible means of ending. First one happens when there is only one player who holds all regions. Second one happens after certain number of turns when the player with the highest score wins.   For more information please follow project on twitter: @WisdomConflict    

oskycek

oskycek

Dev Diary #040 - Further Examination Of Heightmap Upscaling

Hello and welcome to this weeks Dev Diary! Today I'll be continuing on how upscaling heightmaps affects the end result, when you wan't to create more detailed terrain with ease. After last weeks test with the heightmap upscales, I decided to try to upscale the heigthmap even further - from 3000 x 3000 pixels to 40 000 x 40 000 pixels, just to see if there would be any return on investment. Or in other words, if there would be any benefit from the extra detail, that the upscaling algorithm creates.   Initial Testing First, lets compare the first set of renders. Like last week, all the settings remain unchanged between renders and only the heightmap is changed between them. This is done in order to eliminate the changes that changing the the lighting or camera angle could cause by creating/showing shadows in different perspective, if moved between renders. Plane 8m x 8m in size. Subdivided several times, first by 100, second by 6 and third by 1 (or 100:6:1 subdivision) Diffuse Scale 1.0, midpoint 0.5 (defaults) Resolutions from top to bottom; 750 x 750, 3000 x 3000, 40 000 x 40 000. The above 750 x 750 pixel heightmap sample is from the original 3000 x 3000 heightmap.   The above 3000 x 3000 pixel heightmap sample is from the upscaled 12 000 x 12 000 pixel heightmap.   The above 10 000 x 10 000 pixel heightmap sample is from the upscaled 40 000 x 40 000 pixel heightmap.   Both upscales were made using the original 3000 x 3000 pixel heightmap and slicing a 1:16th piece (or 1 km2 piece) from the bottom left corner of each of them, in order to highlight the difference in details. As you can see, the differences are most notable between the Original and the smaller upscale, but from there, the added detail is a tad harder to notice - but it is there. After this, I also tried to ramp up the data points, or in other words subdivide the plane even further and see how much that changed the outcome. The settings are identical, but the subdivision is greater (100:10:1 instead of 100:6:1 subdivision) 750 x 750 pixel heightmap sample, with the 100:10:1 subdivision.   3000 x 3000 pixel heightmap sample, with the 100:10:1 subdivision.   10 000 x 10 000 pixel heightmap sample, with the 100:10:1 subdivision.   The added data points did increase the level of detail quite a bit. The difference between the two upscales are still hard to see, but still visible after closer inspection. The difference is more visible on 4K monitors, but can be seen on Full HD monitors also. Having these images on top of each other and toggling between them shows the differences much more clearly.   Going For More Detail Since it will look essentially the same on the rendered images, if I increase the land area of the plane in order to try to bring out even more detail out of the renders, I'm not conducting those tests. How ever, there is still one more way to up the ante - an even further zoom in to the minute detail differences of the upscales. To do this, I needed to take even smaller samples, dividing the heigthmaps in 8x8 grids (instead of 4x4 as shown above) and taking one piece out of each of them. For consistency, I'll use the bottom left corner as a sample. 375 x 375 pixel heightmap sample from the 3k heightmap, with the 100:10:1 subdivision.   1500 x 1500 pixel heightmap sample from the 12k heightmap, with the 100:10:1 subdivision.   5000 x 5000 pixel heightmap sample from the 40k heightmap, with the 100:10:1 subdivision. Edit; You can see the difference most clearly on the illuminated back portion of the landscape as more "grain" or roughness among the white. The Question Remains But is it really worth it? That depends if you want all the possible variation out of the heightmap, that could possibly get squeezed out of it, as it is not necessary. but it might just create enough minute differences in the terrain, that the end result will look more natural in the end. But on the down side, the more faces you have, the more the performance hit will be. Even as the added data points, or mesh resolution will affect the performance of the game, Skyrim also has high def mesh mods, which make the original rather low poly models into much more detailed meshes, especially the rocks, mountain faces and characters. In this light, it might be more than feasible to increase the detail level of your terrain meshes even further. The land area of the smaller samples of the above testing is roughly 500 square meters, that has been fitted on a 8 by 8 meter plane object. The second thing to consider is how many objects you would need to divide your terrain in to, in order to maximize the resolution you can get out of the heightmaps. As creating a single object that would be miles long would require some serious machine power and RAM from your computer, it's not feasible for all to make a large monolithic map area. Creating a large amount of smaller pieces on the other hand is more work intensive and requires more time and patience from the developer to insert them all in the game world and line them all up in the correct order.   The Conlusion Edit; The benefits of upscaling your heightmap only show, when you divide it to smaller samples > the smaller the pieces, that you divide your upscaled heightmap at, the more benefit the upscaling has. Alternatively, the same benefits of the upscaled heightmap can be seen when making a larger and closer to IRL size map, but to my knowledge, a huge monolithic map with lots of detail takes up more processing power. Though this might be an utterly out-dated notion these days - I need to do more research on that. What i know for sure, is that it limits the amount of subdivision that can be used while editing the landscape, as Blender is very likely to crash on my PC when I go with any larger subdivision than 100:10:1 and the amount of subdivision matters. Edit; When you are upscaling your heightmap, the algorithm you do it with matters the most, as the more the algorithm creates more gradual shades between white and black while trying to make sense of the original shapes, the more likely you get more added details to the landscape. Still, this method is not for purists, as it does not bring the absolute original shape of the land back to the image, just adds more variation. Edit; As an example, if you know that the heightmap represents a 4 km2 sized area and the accuracy of the satellite/airplane measurement was something between 2 - 30 meters. If your heightmap has an accuracy rating of 10 meters, then by upscaling the heightmap to 10 times the size of your source image, your get a simulated accuracy of 1 meters. If you want to have more granularity than that, you can go for as large as you want (or can), but at some point there will be no visual benefits. To determine that point, you need to experiment for your self on a case-by-case basis. Edit; As the GameDev forum does not show the images in full screen, some of the differences between the images is apparently lost, when trying to spot tiny differences. The original images in full screen show the differences much more clearly. You can download them from here 040.7z All in all, the more you are willing to work for your terrain mesh fidelity, the more you seem to be able to get out of upscaling your heightmaps. This seems to continue as far as you your self are willing to take it, or at least to much smaller (or larger, depending on how you look at it) scales than what my testing indicates here. It will be interesting to see how much of a performance hit it will have, when using a higher detail mesh for terrain. This will be revealed when I get to the first testing phase, with only a small land area and the 3D character model that I created earlier. But before that, next weeks Dev Diary will be about slicing big images seamlessly into smaller image files semi-automatically using GIMP, so stay tuned! Thank you for tuning in, and I'll see you on the next one! You can check out every possible mid week announcements about the project on these official channels; • YouTube • Facebook • Twitter • Discord • Reddit • Pinterest • SoundCloud • LinkedIn •

ProjectTaival

ProjectTaival

 

Devlog #6

Hi everyone,   This week I play tested and fixed up the final region, meaning I have play tested the majority of the game. I still have a few things in the extras menu to fix up, but I should have that done early on in the week. The rest of the time I am going to make a finalized build for all the platforms and try and advertise the game … wish me luck 😆   Have a great day Buttercreeper6

🎮 Graphics and Sound Effects - Indie Game Devlog #7 🎮

▼ Watch the Devlog on YouTube ▼ ▲ Watch the Devlog on YouTube ▲   Hey everyone! I recently started the development of N.E.S.T, an action-packed, looter-shooter mobile game, and have been logging the progress through videos on YouTube every week! You can view the full playlist here. I would greatly appreciate if you could support the development of this game by subscribing to me on YouTube here, or by following me on itch.io here. Thanks for your time, and hope to see you all there! 
 

Snake - Traps and Visual Enhancements - Cut-scenes Next!

Since my last update, I've added dangers / traps to story mode.  I've also added some minor visual enhancements, and have rough versions of the first three levels of the story mode campaign. I figured I'd release an early alpha version of story mode at this point, which you can find here:  https://github.com/ryantherileyman/riley-basic-games/blob/master/garden_of_eating_story_alpha_1_2_0.zip Currently, the levels are actually in reverse order.  I only did this because it made it easier to jump into the most recent level I was working on for play testing.  So for anyone who tries it out, just know that the levels get progressively easier, instead of harder. 😅 You can even try your hands at creating your own maps and levels.  The story mode wiki page explains how to do so -- all you need is a text editor, and basic knowledge of JSON. The screenshot below shows an example of a spike trap hurting the snake.  The snake's eyes now turn into "X"s momentarily when taking damage.   And this is a screenshot from level 3 of story mode.  Each level gets progressively harder in some way.  This can manifest a number of ways:  faster snake speed, more barriers, food spawning patterns that encourage the player to wrap the snake in on itself, or traps. I also added text that floats and fades away when the snake eats a food item, showing the scoring information.  Players get bonus points if their path to the food was as short as possible..   New Features Identified From my GitHub wiki page on story mode, I've identified a number of features I'd like to work into story mode.  Most of these came to me while designing the first three levels.  Lots of "it would be neat if..." moments! Additional triggers for spawning food or traps. Triggers for custom sounds to play. Triggers for dynamically changing the barriers on the map.  (Lower priority) Show a scoring summary after each level. (Lower priority)   Up Next - Cut-Scenes As I get further and further on level design, I was really feeling the importance of getting support for cut-scenes into the game.  I'm at that point now where I'll be tackling it head-on.  The new feature above "triggers for custom sounds to play" is intended to complement the story telling aspect of the game, and is something I plan on tackling alongside cut-scenes.  You'll be hearing a narration of sorts when certain things happen.  Fun things ahead!  (I hope not just for me, ha! 🤣 )

rileyman

rileyman

 

September Update

Recap For September I wanted to 1) hook up my UI to make actual state changes in the game and 2) add a UI for active projects. Results I'd say things went great! I actually got the UI hooked up relatively quickly and was able to take a lot of time for the projects. I even got a little further and was able to add a passage of time that allows for actually completing projects as well.   Here you can see the three new UI elements of my strategy layer game mode: The Shipyard button to the upper-ish left, the Time UI on the lower left and the Projects scroll bar to the lower right. The Marketplace still has all the instantaneous transactions that can be used to trade resources back and forth. The starting "Stardate" of 413469 doesn't really mean anything, it was just a random 6-digit number.   Here's the Projects UI after accessing the Shipyard and selecting to build a Battleship, Cruiser, Destroyer and Frigate. You'll notice that some of the resources have changed too indicating that resources were spent to queue up those construction projects. The first number after the project is the total days until completion (project time plus preceding queue time), the next is the individual project time. The next three grey boxes are the queue controls (from left to right) move up, move down and cancel. I wasn't motivated enough to find art for them right at the moment.   The Destroyer project used to be the third priority, now it's number two (using the 'move up' button). You can see that both the Destroyer's and Cruiser's total time to completion have been updated to reflect the new priority order.   The Destroyer project is now the number one priority (this time using the 'move down' button on the Battleship project). Again, the total time to completion for the re-ordered projects has been updated.   The Cruiser project was canceled and the total completion time for the later project (Construct Frigate) has had it's completion time updated.   This is after passing three days, Stardate 413472. The Destroyer project has been removed and the Battleship project only has 1 day removed from it's remaining time. At this point if you opened up the Launch Mission or Configure ships UI's, there would be a three Destroyer class ships (two starting ships and the one constructed by the project). Trust me   I hit a few technical debt things, but nothing from my backlog. Just things directly related to what I was doing with the UI for the projects work. I also did an interesting (to me) shift of some code from one class to another (related) class. This was a bit of an experiment to see what the code would look like with this change. My game state is stored in a pretty similar way to my project at work and wanted to see if moving this API would improve the use and reliability of the code. I think it does so I committed the change to my project and started a side project at work of a similar refactor. October Goals It's time to move onto something not transaction related, three months is a long time to be working on the same feature even if it is only part-time. It would be nice if I could keep it to two, one for gameplay and one for UI (at least when dealing with strategy systems). If I could get all the gameplay and UI done in a single month that'd be cool but I'm trying my best to set myself up for working on this project when I'm not feeling up to it. Don't want to burn out on development. My main goal is to work on a Strategy Map. My vision is basically a graph where the star systems are the nodes and the edges are the valid transits between them, something like: The real UI should obviously look a bit better, but it should give you an idea. I laid some groundwork for this last month, so I have state and definitions available for the Star Systems and Routes. I also stubbed in classes that will be used as the bases for my tactical and strategy map generators. Most of this sprint should be implementing a first (fairly trivial) strategy map generator and building a UI to display the state data I've already defined. Games I'm Playing Still playing Fate/Grand Order and Fire Emblem. My second playthrough has been interesting if a little boring.  The first half of the game appears to be more or less identical regardless of the house that you're playing so that's a little boring. Plus everyone is way over-leveled because I can do way more extra battles than I could in the first go-around. I just got past the time skip so I'm hoping the story diverges a bit more from here on out. Both my Blue Lions playthrough and this Golden Deer playthrough have been Normal/Casual. I'll probably jump right to Madding/Casual for the last two story lines when I play them.

MagForceSeven

MagForceSeven

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!