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

Blogs

 

Devlog #3

Hi everyone,   This week I finished play testing the Region 2 Boss, as well as the entire third region, including the boss. This was relatively easy because most of the coding for the new mechanics in Region 3 were not changed. The hardest part of the testing was the Region 3 boss, which had a unique glitch of going at high speed and firing at a speed of a mini gun when the boss got below 10 health. That was pretty funny, and also a bit of a pain to fix. Next week I plan on working on playtesting the entirety of Region 4. Also, I am going to be gone next weekend, so I shall make the devlog on either Thursday or Friday.   Have a great day, Buttercreeper6

Timeline Games

Timeline Games

Gameplay Fragment’s Moonrise | #22 The Lesser Dragon of Frost

Welcome to our twenty-second blog post!   In this post, we’ll go over our final Lesser Dragon. If you missed the posts about the Lesser Dragon of Flame or Lesser Dragon of Lightning, feel free to check those out via clicking their respective links. As the development of this project progressed, the difficulty, and desire to make more complicated, interesting bosses has increased. As a result, the Lesser Dragon of Frost proves to be the most powerful of the Lesser Dragon trio, alongside the hardest challenge thus far. While the fight itself is over in almost a minute, its a minute of incredible focus, where each second ticking by feels like an eon lapsing. This is due to the array of spells the Lesser Dragon of Frost has in its arsenal, and the importance of steering clear of them.   Ice Blast is its core, damage-dealing spell. It strikes in an area, emphasizing the Player should have their Units spread apart at all times. In addition to dealing damage, it also invokes Mana Drain. Dealing damage is desired, but disabling a Unit from even being able to cast spells will force the Player to retreat or die helplessly.   Lunar Freeze is the Dragon’s core crowd-control. It deals absolutely no damage, however, it stops all hit Units from being able to move and attack for a few moments. In this amount of time, it can easily strike with its Ice Blast. Lunar Freeze strikes in an area, is quick to cast, and has a short cooldown. Given the rate at which Ice Blast can be cast and the speed at which it can kill a Unit, steering clear of Lunar Freeze is a must before one’s army can do nothing but be helpless against their decimation.   Rain of Frost is its most intriguing spell- and the one that is the most important to dodge. Its a healing spell at its core, but also a summoning spell. It works quite simply- it casts it upon itself to heal itself. However, it strikes in an area, healing everything nearby. In doing so, given the game’s code, it invokes the spell’s summon. For every Unit healed by the spell, a Frost Arkoyle is also spawned at the Unit’s location. What this results in is shown above- dozens of Frost Arkoyles appear out of thin air, ready to defend their master.   With that in mind, dodging this spell now becomes incredibly important. Moving just out of range allows it to properly cast Rain of Frost while simultaneously having none of its effects take place. This does mean that the Dragon heals itself, doesn’t heal us, and summons a single Frost Arkoyle, but that is negligible. The amount of foes that would have been summoned is far more difficult to deal with. Lastly, its final spell to worry about is not a spell but an aura- the Aura of the Bitter Cold. It slows all our Warriors near, and begins to damage them over time. This means that low-health Units need to be healed quickly before they are slain via the Aura. ---   Thank you for viewing our post! Support and interest for the project has been rapidly growing ever since we began posting here, and we're incredibly grateful for all the wonderful feedback so far! We hope this project interests you as much as we love developing for it, and please look forward to more updates coming in the very near future! If you’re brand new, consider checking out our trailer and overall description of the game here.

Yyanthire Studio

Yyanthire Studio

 

DOOM: Skeletal Animations & Dynamic BVHs

A small update I was tackling today - and that is skeletal animation. Now, doing anything animated with ray tracers is quite a pain... Static scenes - you simply build acceleration structure once ... and then you can move camera around, and everything tends to be nice and easy Scenes with dynamic objects - multi-level BVHs can rescue you here, you build bottom level BVHs and then rebuild top level BVH, also this enables instancing as side product Scenes with dynamic geometry - you may go a bit nuts in here, as you NEED to rebuild BVH for given geometry So, current strategy for the DOOM project is somehow working, basically the scene allows you to add render nodes, which can be defined as either STATIC or DYNAMIC. The STATIC ones have BVH built once in the beginning, and never rebuilt again. On the other hand the DYNAMIC ones have BVH rebuilt every single frame. All of these bottom level BVHs are then leafs of top level BVH that is being rebuilt every single frame. My apologize for giving this in form of small post, and not a full featured article (once the Challenge is over, I already have quite a pile of topics I'd absolutely like to write about, most of those are related to ray tracing). In the meantime, I can at least feed you with simple sample...   

Vilem Otte

Vilem Otte

 

rgg platformer

well I have drawn animated sprite which can move back and  forth across the bottom of the screen just above some grass sprites. here is my code. #include <freeglut.h> #include <iostream> #include<SOIL.h> using namespace std; GLuint texture[8]; float screen = 0.0f; float move_sprite = 0.0f; void update(int value) { screen += 0.125f; if (screen >= 0.875f) { screen = 0.0f; } glutPostRedisplay(); glutTimerFunc(500, update, 0); } void drawSprite() { glEnable(GL_TEXTURE_2D); glPushMatrix(); glBindTexture(GL_TEXTURE_2D, texture[0]); glTranslatef(0.0f, -70.0f, 0.0f); glRotatef(90.0f, 0.0f, 0.0f, 1.0f); glBegin(GL_POLYGON); glTexCoord3f(0.0f + screen, 0.0f, 0.0f); glVertex3f(10.0f, -10.0f+ move_sprite, 0.0f); glTexCoord3f(0.125f + screen, 0.0f, 0.0f); glVertex3f(10.0f, 10.0f+ move_sprite, 0.0f); glTexCoord3f(0.125f + screen, 1.0f, 0.0f); glVertex3f(-10.0f, 10.0f+ move_sprite, 0.0f); glTexCoord3f(0.0f + screen, 1.0f, 0.0f); glVertex3f(-10.0f, -10.0f+ move_sprite, 0.0f); glEnd(); glPopMatrix(); glDisable(GL_TEXTURE_2D); } void drawBkgnd() { glEnable(GL_TEXTURE_2D); glPushMatrix(); glBindTexture(GL_TEXTURE_2D, texture[1]); glTranslatef(0.0f, -90.0f, 0.0f); glRotatef(90.0f, 0.0f, 0.0f, 1.0f); glBegin(GL_POLYGON); glTexCoord3f(0.0f, 0.0f, 0.0f); glVertex3f(10.0f, -50.0f, 0.0f); glTexCoord3f(1.0f, 0.0f, 0.0f); glVertex3f(10.0f, 50.0f, 0.0f); glTexCoord3f(1.0f, 1.0f, 0.0f); glVertex3f(-10.0f, 50.0f, 0.0f); glTexCoord3f(0.0f, 1.0f, 0.0f); glVertex3f(-10.0f, -50.0f, 0.0f); glEnd(); glPopMatrix(); glDisable(GL_TEXTURE_2D); } GLuint loadTex(const char* texname) { /* load an image file directly as a new OpenGL texture */ GLuint texture = SOIL_load_OGL_texture ( texname, SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_POWER_OF_TWO ); return texture; } void init() { texture[0] = loadTex("C:\\Users\\Owner\\Desktop\\sprite.png"); texture[1] = loadTex("C:\\Users\\Owner\\Desktop\\bkgnd.png"); } void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); drawBkgnd(); drawSprite(); glPopMatrix(); glutSwapBuffers(); } void ChangeSize(GLsizei w, GLsizei h) { GLfloat aspectRatio; if (h == 0) h = 1; glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); aspectRatio = (GLfloat)w / (GLfloat)h; if (w <= h) glOrtho(-100.0, 100.0, -100.0 / aspectRatio, 100.0 / aspectRatio, 1.0, -1.0); else glOrtho(-100.0*aspectRatio, 100.0*aspectRatio, -100.0, 100.0, 1.0, -1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void handleSpecialKeypress(int key, int, int y) { switch (key) { case GLUT_KEY_LEFT: move_sprite++; if (move_sprite >= 125.0f) { move_sprite = 125.0f; } break; case GLUT_KEY_RIGHT: move_sprite--; if (move_sprite <= -125.0f) { move_sprite = -125.0f; } break; } glutPostRedisplay(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(400, 300); glutInitWindowSize(800, 600); glutTimerFunc(500, update, 0); glutCreateWindow("Rpg"); glutDisplayFunc(renderScene); glutReshapeFunc(ChangeSize); glutSpecialFunc(handleSpecialKeypress); init(); glutMainLoop(); return 0; }  

phil67rpg

phil67rpg

 

Snake - Loading assets asynchronously

Since my last update, I've primarily been working on a way to load all the assets of a level in an asynchronous manner.  Having the assets get loaded into memory (or the GPU for textures) in a separate thread allows the game to display the loading status while the player waits.  This obviously isn't terribly important for a game like this, where there will only be a dozen or so assets being loaded.  But I wanted to work through it for my own curiosity and for future reference. When you start a "campaign" (ie. story mode) in The Garden of Eating, or when it loads assets for a new level, the loading screen above will appear for a moment. This is how I have it working at a high level: The game loop keeps track of the current status (or mode) as it pertains to loading the game assets for a level.  I use an enum class that progresses from "LOAD_CAMPAIGN" immediately into "LOAD_LEVEL", and then "WAIT_TO_START" where we start accepting user input. During the "LOAD_LEVEL" mode, the "update" phase of the game loop queries the asset loader for its status. If the asset loading status indicates it's still loading, the mode stays at "LOAD_LEVEL". During the "LOAD_LEVEL" mode, the "render" phase of the game loop also queries the asset loader for status information.  It receives back additional information about how far along it is, and which file is currently being loaded. When the main loop (which is running in the main thread) queries the status, it needs to briefly block access to the status variables using a mutex.  I used the SFML Thread and Mutex classes for this, but I guess I could've used the C++ STL classes that were introduced in C++ 11. I'm quite happy with the results at this stage, though I did have one interesting gotcha moment. I was keeping the list of floor textures and barrier textures each in their own std::unordered_map<int, sf::Texture> structure.  At first I had code that looked like so: void StoryLevelAssetBundle::loadFloorTextureMap(const StoryMapDefn& mapDefn) { for (auto const& currFloorDefnPair : mapDefn.floorDefnMap) { this->indicateLoadingFilename(currFloorDefnPair.second.filename); sf::Texture currFloorTexture; if (currFloorTexture.loadFromFile(r3::snake::StoryLoaderUtils::resolveImageFilePath(this->campaignFolderName, currFloorDefnPair.second.filename))) { currFloorTexture.setRepeated(true); this->floorTextureMap[currFloorDefnPair.first] = currFloorTexture; this->incrementLoadedAssetCount(); } else { this->failedFilenameList.push_back(currFloorDefnPair.second.filename); } } } The line that copies the texture from the "currFloorTexture" variable into the map was causing a peculiar warning message to show up in the console: An internal OpenGL call failed in Texture.cpp(98). Expression: glFlush() Error description: GL_INVALID_OPERATION The specified operation is not allowed in the current state. When I first encountered this message, I was just testing the "StoryLevelAssetBundle" class directly -- outside of the game running.  So I assumed it was because I didn't have a valid OpenGL context created.  But the message persisted once I'd hooked it into the game. Eliminating the local "currFloorTexture" variable, and instead loading directly into the map, prevented this: void StoryLevelAssetBundle::loadFloorTextureMap(const StoryMapDefn& mapDefn) { for (auto const& currFloorDefnPair : mapDefn.floorDefnMap) { this->indicateLoadingFilename(currFloorDefnPair.second.filename); this->floorTextureMap[currFloorDefnPair.first] = sf::Texture(); if (this->floorTextureMap[currFloorDefnPair.first].loadFromFile(r3::snake::StoryLoaderUtils::resolveImageFilePath(this->campaignFolderName, currFloorDefnPair.second.filename))) { this->floorTextureMap[currFloorDefnPair.first].setRepeated(true); this->incrementLoadedAssetCount(); } else { this->failedFilenameList.push_back(currFloorDefnPair.second.filename); } } }   When I looked around for information on this message, I kept coming across the acronym RAII, which stands for Resource Acquisition Is Initialization.  This is one of those things that I feel like I understand conceptually, but then when I read articles or people's opinions on how to use it properly in C++, I start to get confused.  I'll see people saying that there's no need to ever use "new" and "delete", for example.  I still use it, for example, to store a pointer to the current "StoryLevelAssetBundle" above in my game loop.  I feel like that class has enough state that I want it to get allocated on the heap, rather than the stack.  Am I just a dinosaur who remembers too much what it was like working with the 8086 memory segments and 64kb stack size?  Heh...

rileyman

rileyman

Unity Weekly Updates #61 - Unity is acting up again

Hello there. Welcome to this week's Weekly Updates. So I was at a standstill for most of the week codewise... I recently discovered that a critical bug has been introduced in the latest version of Unity. No more values are transmitted during UnityEvents. This means that all scripts using the UnityEvent class no longer work. So I had to leave Unity closed until the bugfix goes into production. This means not a whole lot of stuff going on... So I used this time to brainstorm. I created a list of headwear and decided to add various types of attacks.  We can then add various bonuses for particular types of weapons. For example, sword do slash damage while the racket does blunt damage.  And that's about what I can say right now. This is really a bummer that Unity broke. I guess that's what I get for being a bleeding-edge fanatic... So that's about it. I'm still planning to get back to work as soon as Unity get their bugfix up. I'm planning to, if Unity stops being broken, focus on enemies next. Now that the UI is fully refactored that the next step on my checklist.

jb-dev

jb-dev

Presenting Bunninja

Presenting Bunninja
Bunninja is set in a subterranean world where animals have built their society. One day, for a mysterious reason, everything starts to collapse and demons rise from the depths below. As one of the last ninjas, you must set out to explore this big kingdom to find the truth and save the world. But it won't be easy: not only will you have to face countless demons, but also some fellow animals that will cross your path aswell!  
The game is pretty much a roguelite (permanent death!, upgrades...), but there are no "levels": it's just a big open-world of interconnected zones. There are villages and houses that are hand-made, always at the same place, but the zones that connect them are procedurally generated. There will also be bosses, sidequests, and wide variety of interesting weapons and items, giving the game a high replay value in spite of its lack of progress.
There's also a multiplayer option I'm making. For now it's just more bunnies in a different colour but I'm thinking about having other animals unlockable by doing sidequests, which would be the only unlockable thing in the game. And maybe each character would have a special ability.
(I'm calling it "Bunninja" for now but I'm looking for a better name. Open to suggestions!)
Links
Join the discord server! discord.gg/WMvFamW
Follow me on Twitter  

PereDev

PereDev

#ScreenshotSaturday: Tribute

At this saturday, I (Tony) would like to share my tribute to a very special friend of mine: Norbert. There has never lived a more loyal little fella. I will not forget you, RIP. https://rubikon.dev/
https://www.reddit.com/r/Rubikon_Game/
https://twitter.com/GameRubikon
https://www.instagram.com/rubikongame/

Rubikon

Rubikon

Some new mechanics

Since last devlog I experimented with different styles of movement, at the end I figured that it would be a good idea to add jump limit for each level.
This should add a puzzle element to this game.
I still have to figure out some things but this is what I have for now. I added boxes to the game.
They are supposed to add more dynamic to gameplay. My idea is that players will be able to push boxes around and use them to make their way through levels.
If you want to follow my progress on this game you can do so here: https://twitter.com/alienplay_games
https://gamejolt.com/@Alienplay/games
https://alienplay.itch.io

AlienplayGames

AlienplayGames

Skybox implemented

Doom levels make good use of both indoor and outdoor spaces.  To support these outdoor spaces, I spent this evening adding support for skyboxes to my raycasting engine.  After all, they are really just the same old indoor spaces with a ceiling that looks magically like the sky. The obvious approach in 3D would be to use a cube map, however in 2.5D we can get away with something much more simple.  Since the player cant look up or down, we can create an wide image strip that wraps around the player for the entire 360 degrees.  As the player turns around we just have to figure out which part of the strip to show them. To begin with I found a simple cube map online and began making a few modifications.  For starters, I could dispense with the top and bottom segments leaving me just with the strip that can wrap around the player and secondly I tweaked the hue to give it a more hellish red colour.  Lastly I scaled it to a more software friendly 512x128 pixels to be more cache friendly and also give it a more grungy doom look.  I'm software rendering so my textures cant be too big. My idea was simple, if we ever try to render a ceiling tile with an invalid texture index, we will instead jump to the skybox rendering code for the pixels covered by the tile.  Since the skybox texture is drawn based only on the players direction, those invalid ceiling tiles will appear to be magic windows through to the sky, and it will look like they never even existed. To map a screen column to a column in the skybox, I generate a direction vector from the camera origin to our column on the camera plane and using the atan2 function on the components we can use the result to index the skybox (after some slightly magic scaling and wrapping code). Since the ray-casting engine renders to the screen in columns, it is more cache friendly to rotate the skybox by 90 degrees, so I can first find the row in the skybox texture for my column of pixels on the screen, and then simply march along the x axis in the texture as I walk along the y axis of the screen.  This replaces a multiply in the loop with an add and keeps the entire skybox row in the cache while we need it.  Simple. Have a look at the skybox in action:  

BitHack

BitHack

 

Functions and return statements in Corona

A question was raised on the various Corona support channels: “What is the return statement and when do I need to use it?” Before that question can be answered, you need to understand what functions are and how Lua uses them. Functions are blocks of code that can be reused. Consider changing a car tire: Take out jack, lug wrench and spare tire from trunk Put the lug wrench on nut #1 Rotate counter-clockwise until the nut comes off Put the lug nut in a safe place Put the lug wrench on nut #2 Rotate counter-clockwise until the nut comes off Put the lug nut in a safe place Put the lug wrench on nut #3 Rotate counter-clockwise until the nut comes off Put the lug nut in a safe place Put the lug wrench on nut #4 Rotate counter-clockwise until the nut comes off Put the lug nut in a safe place Put the lug wrench on nut #5 Rotate counter-clockwise until the nut comes off Put the lug nut in a safe place Jack up the car Remove the flat tire Put the spare tire on etc. Computer code executes in a linear fashion. If you were to write this out in computer code you end up repeating yourself multiple times. It makes more sense to take the lug nut removal code and put it in a function. Consider this pseudo-code: Function removeLugNut( lugNutNunber ) Put the lug wrench on nut # lugNutNumber Rotate counter-wise until the nut comes off. Put the lug nut in a safe place This reduces our algorithm to: Take out jack, lug wrench and spare tire from trunk For each lugNutNumber removeLugNut( lugNutNumber) Jack up the car Remove the flat tire Put the spare tire on The code is much more compact. It follows a main developer principle called DRY – Don’t Repeat Yourself. Functions can be used in a variety of ways in Corona apps. Let’s look at a basic example: local function movePlayer() player.x = player.x + 1 end This function does not need any information. It uses an existing defined object: player and increments its .x position by one. It takes no parameters and doesn’t pass any data back to the calling code. You might use this inside another function that runs every clock tick: local function enterFrameListener() movePlayer() end Since you don’t put anything inside the parentheses, you are sending nothing to the function. But you could easily pass information to the function. You may want to make this function a little more generic. Instead of movePlayer, you could say moveObject. You could also provide the speed: local function moveObject( object, speed ) object.x = object.x + speed end local function enterFrameListener() moveObject( player, 1) end Now that you know how to pass information to a function what about getting it back? First, not all functions need to send data back, but when you do, you can do so using Lua’s return statement. At the machine code level, all of the above functions have an implied return statement. As a convenience to Lua developers, you don’t need to specify one if you don’t need it, thus: local function moveObject( object, speed ) object.x = object.x + speed end and local function moveObject( object, speed ) object.x = object.x + speed return nil end are identical. The return statement has two main purposes. First, it can be used to force a function to end early. Let’s look at that example: local function moveObject( object, speed ) If object == nil or object.x == nil then -- This isn't a display object, so exit the function without doing any more work return end object.x = object.x + speed end Since the code didn’t have a valid object to change the value of x on, you can exit the function and avoid a potential error. The second use of a return statement is to pass information back to the code that called the function, That information could be a simple success or failure indicator, or it could pass back values that are more useful. Let’s look at the simple success/failure situation modifying above function. local function moveObject( object, speed ) if object == nil or object.x == nil then -- This isn't a display object, so exit the function without doing any more work return false -- let the calling code know it failed end object.x = object.x + speed return true -- the function successful, so let the caller know. end To receive the data, the code calling the function can either store the return value in a variable or test it in a conditional test. local function enterFrameListener() if not moveObject( player, 1) then print("The object failed to move since object isn't a display object") end end Sometimes you need to capture the values. Let’s look at this simple function that adds two numbers together: local function addTwoNumbers( num1, num2 ) local sum = num1 + num2 return sum end local sum = addTwoNumbers(10, 20) print("The sum is", sum) Now you can pass data to the function as well as receive information back using the return statement. Most programming languages can only return one value (though it could be a table, dictionary, or list with multiple values). Lua, however lets you return multiple values. Lets go back to the moveObject function. local function moveObject( object, speed ) if object == nil or object.x == nil then -- This isn't a display object, so exit the function without doing any more work return false, "This does not appear to be a display object" -- let the calling code know it failed end object.x = object.x + speed return true, "Success" -- the function successful, so let the caller know. end local function enterFrameListener() local success, message = moveObject( player, 1) if not success then print( message ) end end You can see from this tutorial how the return statement can be useful in your Corona adventures.
View the full article

CoronaRob

CoronaRob

Utilizer Deluxe 0.6.3 is available!

Cloud save, greater stability and more improvements  ༼ つ ◕_◕ ༽つ Utilizer Deluxe is a mobile arcade space shooter mixed with a match 3 genre! Utilize fancy space monsters, fight with dangerous bosses, make color blocks combinations, upgrade your spaceship, complete all sectors and test your skills in the survival mode! >>> Android Link: https://play.google.com/store/apps/details?id=com.anegmetex.utilizer >>> IOS Link: https://testflight.apple.com/join/luaNLiOE I bring to your court an beta-version of the game, I would really like to hear your opinion about the project, how much gameplay is complex and interesting, how responsive the controls is, how smooth is the difficulty line, and of course are there any bugs. With your advices, I hope to improve this project. Any feedback are welcome!

OlegAntipov

OlegAntipov

 

The "Learn Pixi.js" book. TypeScript Port

This is an official link to original book examples: https://github.com/kittykatattack/learningPixi I will public examples on: Playground. You will be able to see a code and a result. I use complication to  AMD modules (Asynchronous Module Definition) and the RequireJS library to load AMD modules GitHub Pages. I use compilation to CommonJS modules. I bundle JS files to bundle.min.js using Browserify and minify it to bundle.min.js using UglifyJS Source code on GitHub: will be later I will NOT use Webpack, Gulp, Grunt and so on. I will find an instruction how to build examples. I will public the instruction on GitHub in the README.md file. Note. Release version is loaded more quickly, but on playground you can see a code, you can make a fork, change the code and save it with new link. Hello World: playground, release Displaying the canvas: playground, release

8Observer8

8Observer8

Zibbs - Alien Survival. Devlog #6: Building Resources and Dynamic Weather.

Hello everyone,  Scanning of the environment has been completely reworked and now looks completely different. Now there is a trace that our alien must follow to collect builders for the nutrition chest. This makes searching of nutrients more fun and unpredictable because the builders trace can take you far from the start of scanning. Also, now the alien needs special building resources. To find them the player needs to watch the environment and catch the resources with an energy pole. The whole building system will be described in next devlogs. Another feature that has been already added to the game is a simple dynamic weather system. Now we can watch wind speed changes, clouds and rain. The rain can cool the alien's body and may dangerous or useful in different situations.
Here is a video with demonstration of the new features:  

JohnyBGooD

JohnyBGooD

 

New Unity3D UI and just general musing.

Hey, I'm back for the time being, as I haven't found a social network where I can talk about stuff like this and get decent engagement/comments/discussion/etc.

And I said to myself, what if I just collected my thoughts in writing and then just post them into the void? I mean, I'll likely get the same engagement, but I don't have the whole social network drama to deal with.

That said, I installed the Unity 2019.3 beta, and I like the new look. The original Unity UI was sorta-kinda made to fit with the original Mac OS X scheme. This new "flat" look is much more akin to the new Blender. I don't see much functionally different in the UI apart from the ability to change the default UI font (nice looking cross-platform font or more standard OS-centric font like "Veranda").
View the full article

johnhattan

johnhattan

 

Adidas Takes ARCommerce to Finish Line

If you happen to be at a Finish Line store this week, you might notice a display in the center of the shop advertising Adidas’ latest line of kicks. But with this in-store centerpiece there’s more than meets the eye. It’s actually a WebAR installation containing hidden 3D content, all part of its latest campaign: Forever the Future. Agencies HappyLucky and 14Four are behind the activation, which launched exclusively in four Finish Line store locations last week: Del Amo Fashion Center in LA, Park Meadows Mall in Denver, Water Tower Mall in Chicago, and Roosevelt Mall in Garden City, NY. Check it out: https://medium.com/media/8a24dc542cb7565839e9c7458cd022c2/hrefShoppers can use their phone to either scan the QR code or type in a URL to enter the web-based experience, then scan signage to activate layers of interactive content. The introduction to the experience reads: “Inspired by the past and excited for what’s next, this interactive space is designed for experiencing Adidas originals in a new way. Tap to enter below and use your phone’s camera to explore our AR-activated space.” This WebAR experience utilizes image targets and was built using 8th Wall and a three.js integration. We love this example of ARCommerce, which is part of a growing trend of in-store activations enhancing the brick-and-mortar shopping experience with digital content. Check out some of the latest ARCommerce activations including LEGO and General Mills’ Fillows Cereal which both leveraged WebAR technology to bring immersive experiences to shoppers. Do you think AR will enhance the in-store shopping experience? Give us a shout on Twitter @the8thwall. Adidas Takes ARCommerce to Finish Line 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

Player weapon

I spent a few minutes today on my lunch break doing some weapon mock-ups for my DOOM Challenge entry. For some authentic visuals, I chose to video myself wielding a toy gun, before digitizing it and adjusting it to suit my needs.  From what I gather this is fairly similar to how id did the weapons for DOOM. I bought a really cheap little Nerf gun from a local supermarket to use as the basis for the games pistol, and below you can see a screen grab from one of the video frames. Three frames were taken overall, to give a nice range of motion for the weapon recoil when firing.  Bringing the grabs into Gimp, the background was removed and the gun desaturated, to remove the toy blue and orange colours.  The bitmaps were then down-sampled and palletized using the original DOOM palette. Finally, this was thrown over a screen-shot to check it for visual fit.  It looks pretty cool to me, so I'll add some muzzle flash, and try to integrate it into the game.  Of course i'll need to throw on a good measure of weapon bob when your walking for that full doomy goodness.      

BitHack

BitHack

 

Asset Screen #1: Where's the icon?

I've recently started rebuilding the asset screen for Rank: Warmaster. This screen will allow you to control your personnel, your AIs, your installations, and your ships; your assets, in other words. It'll be a busy screen!

But everything starts somewhere, and here I decided to bring in some new icons while I thought about how to approach the rest of the task. Only, the icon didn't cooperate; it should have been colored bright white like the text, but instead it was gray and washed out, as you can might be able to see above. Here's a closeup: Still, very difficult to see! All troubleshooting boils down to somehow removing possible options until we're left with a small enough pool of possible answers that we can reasonable test them. After talking to Arthur, it seemed there were two major ways something like this could happen: either something could be wrong with the icon, or something could be wrong with the lighting. (Remember that in 3d modeling, we get to define light sources and where those light sources are pointing.) The question that we boiled this problem down to was this: "Is this image still washed out and gray in other contexts?"

As it turns out, the image displayed correctly in our screen building software. It also displayed correctly when used as a backdrop instead of an icon. In addition, when we turned up the ambient light, the image got brighter and more distinct. This meant that the image was almost certainly NOT to blame. The leftover option was the light source.

The light source did indeed turn out to be the problem. When I added a bit of code to make the light shine directly forward, toward the screen, the icon showed up as brightly as we wanted in the first place. Lesson learned: if you can't see something in your game, but it's visible elsewhere, check your lighting. Just remember where you moved it from so the next person to use it doesn't have my problem!

Original post blogged on Rank: Warmaster Dev Blog.
View the full article

LordArt

LordArt

Fresh Start - Physics based game with challenging controls

Hi everyone! Finally, after 3 months long pause, I decided to start my new game project. The idea for this new game is that you control a ball and you have to reach the goal (very unique, I know). The twist is that you can only move with your 
mouse (when you left-click the ball jumps in certain direction). I like physics-based games and puzzle platformers so this idea should combine the best of both worlds. When it's done this game should have around 30 levels + Endless mode. If you want to follow my progress on this game you can do so here on GameDev.Net and also on: https://twitter.com/alienplay_games
https://gamejolt.com/@Alienplay/games
https://alienplay.itch.io Thanks for reading this devlog! 😉

AlienplayGames

AlienplayGames

🎮 Indie Game Devlog #2 🎮 | Inventory System

Hey everyone, and welcome to this week's devlog! If you're new here, I post weekly devlogs logging the progress of the new game I'm developing, so consider following me to be updated on the progress of my game!   On Monday, I kicked things off by finishing up rolling and dashing before moving on to new things. Dashing now segments the circle instead of being a tangent. Distances rolled or dashed now increase when walking or running Players cannot roll while aiming or crouching, and can only roll in the direction of movement or when stationary. and finally, swiping down while running causes the player to roll or dash in that direction. I then went on to fix some bugs with my Unity3D assets simple scroll-snap and simple side-menu, and after I submitted the updated versions of my assets, I got back to working on my game. (https://bit.ly/simple-scroll-snap) The first thing I decided I would tackle this week was thinking of how the player would aim and shoot. I decided on using two joysticks. One would be for aiming, and the other for shooting and controlling recoil. I considered making my own joystick component, but then I realized I was trying to reinvent the wheel... so I just downloaded this free joystick asset on the asset store and tweaked the source code slightly, as it didn't quite fit my needs off the bat. Next, I started work on the looter aspect of the game. The idea for the players inventory was to implement my own wedge selector system where the player presses down, holds, and then releases to select their wedge. This must be as streamlined and intuitive as possible, because it's a mobile game. 
Both the weapons and consumables had to be selected, used, canceled and swapped this way, so I had a lot of work cut out for me…   On Tuesday, after finalizing the base of the component, I moved on to actually adding the items that could be selected. Before I could do that though, I needed to create the class structure and system for adding new items to the game. An example of an item would be a gun which, has a predefined magazine capacity, recoil spread, muzzle velocity, etc... which can all be modified to create new items that can now be used in the game. I then made it so that the wedge selectors populated the different items in the player’s inventory, and showed the quantity of the throwables or consumables, and the number of bullets for guns.   On Wednesday, I started with the progress system, which would show the progress when swapping to a different weapon, reloading a gun or using a consumable.  Once I was happy with that, I started working on a system to be able to cancel the progress made by clicking on the wedge selector while it is in progress.   On Thursday, I downloaded a couple of placeholder animations from mixamo.com, and began working on a system that would allow for the swapping of weapons and using of consumables. In order for a successful weapon swap to happen, the player must put away their current weapon in their selected weapon slot, and then take out the weapon in their targeted weapon slot. For consumables, this is a bit trickier, as they have to put away their selected weapon, use the consumable, and then finally take out the selected weapon again. I achieved this by creating a system where you could queue up actions, and then dequeue each action until none are left in the queue. That was the easy part… The problems poured in when I needed to figure out a system of how to cancel actions. You see... when actions are canceled, you can't just drop the item you're holding, you need to reverse the animation, and then check the action history stack to see what your previously selected was.   On Friday, I finally managed to implement this, however it was definitely easier said than done… Players could now cancel actions midway, and revert back to their original state. Next up I got to work on matching the players actions to the wedge selector, so that it could show the current progress, and allow the players to accurately cancel the actions. Another thing easier said than done, but I eventually got it right, and I was happy with how it all turned out!   So that's what I managed to achieve this week if you're new, I'd encourage you to follow, and give feedback in the comment section below! Tell me what you like, what you don't like, and what you want to see for the future of this game! Anyway, thanks so much for reading, and I'll see you in the next one!

Daniel Lochner

Daniel Lochner

 

UI/UX Artist: We Have a Logo!

Hi all! This is Paul, your UI/UX designer. It is with great pride that I announce that we at Laser Beams & Particle Streams Inc officially have ourselves a logo for our indie game dev start up! We finally have a face to put to the name! All done by hand by yours truly (minus some font at the end.) The start of any artistic endeavor consists of "scribble random stuff until you accidentally make something that looks good." I make my initial concept art sketches in pencil & paper. Not having an "undo" command available helps keep me moving forward. At first a "cat theme" was explored, owing to several dev team member's fondness for them, and the suggestion by one that the company might do with a mascot. Hence, a particle cat playing with a laser beam was among the first ideas treaded upon. This direction was ultimately not pursued in favor of a more energetic and literal visualizations.
Still in pencil & paper, more literal renditions of lasers and particles were experimented with, as well as an interplay with typography. Ultimately type from square #1 was chosen.   At this point vectorization took over. The hand-drawn lettering for "Laser Beams & Particle Streams" was redone digitally. It was decided that a laser beam would shoot between the two lines of typography, being transformed into a particle stream halfway through by the ampersand that would go at the very center.
The laser beam was either going to be red or yellow. It had to look either aggressive or energetic. Yellow was selected for its brightness. The beam was made out of progressively brighter vector lines encasing one another, transitioning from pure white to yellow from the center out.
The particle effect was accomplished by drawing dashed lines that were then blended and given a glow effect. A cool blue was chosen to contrast the "heat" of the laser. Having multiple lines in varying shades of blue help give the impression of depth and dimension to the particles. The vectorized typography was given its full graphical enhancement: a bold outline, a metallic gradient, and a carefully drawn "&" symbol to both figuratively and literally tie it all together. The laser and particle elements were brought in behind. A lense flare was added for extra "pop." The font used to spell out "— Software Inc — " is Acherus Grotesque Regular, used under the The Fontspring Desktop Font EULA.  And thus, we have the finished product! Original post blogged on Rank: Warmaster Dev Blog.
View the full article

LordArt

LordArt

Sprite Lighting

Entities now sample the world light map to decide their brightness when rendering.  I coded up a simple chase behavior for the IMP here so I can drag it through some different light levels.    

BitHack

BitHack

  • 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!