1. Past hour
2. ## How can i create a Fighting Game?

where can i find the link to that forum?
3. ## How can i create a Fighting Game?

I think you're asking "what engine should I use," which is not a Writing question. Moving to appropriate forum.
4. ## Blending textures question

Probably, but if I do the image becomes washed out and along with that the same symptom remains. Seems that it probably is a blend mode issue, but I can't seem to figure out, for the life of me, what parameters I need to put in to get a 'normal' (using Photoshop terminology) blend. I.e. The new image gets pasted over the original image.
5. ## 3D ASSET BUNDLE - VIASS SIMPLE CHARACTER PACK

❣️❣️HEY GUYS, WE ARE VIASS - VIETNAM ASSET DESIGN ❣️❣️ Today, we introduce to you, the best 3D asset ever for your game - VIASS SIMPLE CHARACTER PACK This is a low poly asset bundle containing characters, animals and equipments. With this package, game developers can create every kind of game with polygonal style based on their imagination. Character: White Boss, zombie, knight. Animal: Dragon, horse. Equipment: Arrow, axe, bow,etc. Characters and animals have replacement color and texture. List of animations for the characters and the Dragon: idle, walk, die, attack, get hit. ---------------------------------------------------- To get a better look at our 3D product, click the link below: Unity Asset Store - Click here Follow us to stay updated: https://www.facebook.com/ViassDesign https://viass.altplus.vn/ Thank you!
6. ## Create groups to write games for Android

Hi all, I am a programmer. I am starting to learn about game programming for the Android operating system. Some games I did: Bombi: https://play.google.com/store/apps/details?id=vn.nguoiviet.bomb GoSouth: https://play.google.com/store/apps/details?id=com.nguoiviet.gosouth My ability to design is limited and currently, I don't have much experience with game programming. But I really like game programming, I hope, anyone with the same interests as me or can design, cooperate with me to create good games for everyone. Thanks for your interest !!!
7. Today
8. ## c# console snake game

well I put your code in vs2017 and it works. I think I am going to use a list to move the snake. Do I need to use my for loops?
9. ## Can I make Websocket multiplayer games for any genre?

There are no hard and fast "rules" so you can't really be "breaking the rules" 🙂 However, there are hard-won "best practices" that, 99 times out of 100, end up giving the best experience to players. You don't have to follow the best practices -- it entirely depends on what your most important goals are. Turn based game on UDP? Fighting game on TCP? RPG on top of video streaming? Whatever works best for YOUR GAME should be what you use. Your game has gameplay, and simulation, and graphics, but also a target platform, operating cost, and community/player base, which are just as important. It does help to understand what the failure modes are for the different kinds of transport, so that you can define your simulation/gameplay to work well under the particular specifics of your chosen implementation. Tp me, that's what this thread is about: "If I want to do an FPS on TCP, what should I think about?" It's not about saying "all FPS-es on TCP are doomed from the start" 🙂
10. ## Can I make Websocket multiplayer games for any genre?

Another thought to add: There is a fairly serious FPS around at the moment that uses or was using TCP. It's called Ironsight. I haven't followed it, but I saw that people were complaining about the TCP and that the developers made an (unsuccessful?) effort to switch to UDP. It's probably be worth looking into if your interested in exploring the feasibility of TCP in shooter.
11. ## Looking for talented 2D/digital artist.

Hello, I'm an indie game developer that has been working on a number of projects. I'm launching a website within the next couple months which will link to a demo game and an open source multiplayer networking library I've authored. I expect to use the demo game to advertise the "netcode" underneath with the hope of commoditizing multiplayer game code for indie developers. The project will be backed by Patreon. It's a serious project nearing the end of about 8 months of labour. I am looking for a digital artist to produce three assets for me for the game demo. Assets are; a) A cloaked mage, b) a ranger, and c) a warrior. I have 3d assets which the 2d art will need to be based on, these 2d assets will be used in the character selection screen. I'm looking to create a serious brand and the game demo will be in existing for awhile, likely hosted on AWS. This is a portfolio opportunity, unpaid. If you are interested (even if licensing me some of your existing work) let me know. Thanks, Jarmo
12. Yesterday

14. ## System Requirements

Thank you, Steam says that I don't need it to complete the release and I did check Unity's site and typed what they said.

16. ## System Requirements

If you cannot benchmark yourself then you'll need to send copies to people for testing. You can either find fans willing to do it, or use paid services for this. Nothing gets around doing the actual testing. Depending on if you're using a pre-made engine or not, there might be already established minimum requirements set which means your game is either at that, or above. Finding out RAM and GPU usage should be fairly simple as well. You'll want to consider the engine's GPU card requirements if applicable. This is where closed or open BETAs come in handy.
17. ## c# console snake game

It is a popular solution how a snake can grow: using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace SnakeByPhil_WinFormsGDI { public partial class Form1 : Form { public Form1() { InitializeComponent(); CenterToScreen(); timer1.Interval = 200; timer1.Start(); } Random rnd = new Random(); Point foodPos = new Point(0, 0); const int snakeSize = 10; Point dir = new Point(snakeSize, 0); List<Point> snake = new List<Point>() { new Point(50, 50) }; private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = this.CreateGraphics(); foreach (var cell in snake) { DrawRectangle(g, cell.X, cell.Y, Color.Green); } DrawRectangle(g, foodPos.X, foodPos.Y, Color.Red); g.Dispose(); } private void DrawRectangle(Graphics g, int x, int y, Color color) { SolidBrush brush = new SolidBrush(color); Rectangle rect = new Rectangle(x, y, snakeSize, snakeSize); g.FillRectangle(brush, rect); brush.Dispo﻿se(); } private void Form1_KeyPress(object sender, KeyPressEventArgs e) { switch(e.KeyChar) { case 'd': dir.X = snakeSize; dir.Y = 0; break; case 'a': dir.X = -snakeSize; dir.Y = 0; break; case 'w': dir.X = 0; dir.Y = -snakeSize; break; case 's': dir.X = 0; dir.Y = snakeSize; break; } Invalidate(); } private void timer1_Tick(object sender, EventArgs e) { int newHeadXPos = snake[0].X + dir.X; int newHeadYPos = snake[0].Y + dir.Y; snake.Insert(0, new Point(newHeadXPos, newHeadYPos)); snake.RemoveAt(snake.Count - 1); if (snake[0].X == foodPos.X && snake[0].Y == foodPos.Y) { snake.Add(new Point(foodPos.X, foodPos.Y)); //foodPos.X = rnd.Next(0, Width - snakeSize); //foodPos.Y = rnd.Next(0, Height - snakeSize); } Invalidate(); } } }

19. ## Humanitarian Gamification: Designing a game to save the world?

We are looking at Edutainment, as you said. When you refer to "saving the world" my first thought is keeping the environment we exist in survivable/livable. To me it's an environmental concern. Financial and other concerns disappear when the air doesn't even have enough oxygen to sustain our species.. Generally speaking the education part is the most important. The idea of making a game out of environmental concerns causes some hesitation in my mind. Since we are looking at educating the player, why not have it function as a simulation initially. The simulation teaching the player what their real world environment looks like and how it is eroding. Then the education comes in, how to, where to, why to etc do a specific thing and how it helps or harms. The game allows MMO style interactions and coordination to continue progress, but is not a requirement, players can make much slower but definable progress alone. Then the applicable local organization that works with that particular aspect of the environment is where the real world interaction starts. Players then donate time or help raise awareness via said organization and earn achievements and in-game progress. Lock significant rewards behind this interaction, causing a drive to participate real world, but participation is not a requirement for game progress. As the player progresses the real world interactions become more frequent and the in-game rewards become greater. Then, near the top end of the game, the real world interactions are about 50% of the game, rewards are accordingly difficult or rare. You can design class structure around specific environmental concerns (Metal/plastic/Electronic Recyclist, Water/Air Conservist, etc). As each player progresses in their class they are educated on the entire process of each class. For Example: how recycling plastic works and why we can recycle certain plastics but not all of them. This information is stored in each classes instructional database.... You know, i never read your blog about this, this could have all been addressed. I'll post and edit if necessary - gotta read your blog Edit: Read the blog post. Continuing on. Simulation first, education within the simulation. in game results from in game decisions. in-game results from real world decisions, and eventually in-game and real world results from real world decisions. I think you're best bet is to make this a slow transitional game. The simulation part I believe will be the most difficult. Probably have some basic idea of how it scales based on individual and group efforts. For example if a player is playing alone and doing all these environmentally improving things their progress is slower than a person who is collaborating 10 people to make changes, but there's a cap also, no more than XX people. The simulation is a microcosm of the players immediate environment uninfluenced by the world at large. The changes the player and their "guildmates" make affect their microcosm, and progress to that microcosm is greater when more guildies participate. Greater progress to the Microcosm is achieved when multiple people participate. Huge rewards and Mile-stones for Real world action - failure to participate means those who didn't show up lose out until that activity is undertaken again. I could go on for a long time with some structural ideas, Feel free to message me for more discussion if you're interested.

22. ## c# console snake game

hey guys thanks for all the input, is there anyway I can improve the snake movements? do I need to use the for loops I am using?
23. ## Checking a Height Value Repeatedly

Thank you both so much, I'll have faith. Josheir
24. ## System Requirements

Hi there, I'm new to gamedev.net, but I have a question. If I don't have all OS types, but I know that I can build to all of them. How do I know what are the min and recommended specs to tell Steam? My game Super Kittens is a game developed in Unity engine and it will be released on 28th Feb 2019. It is a family friendly first person game. Thanks Sam
25. ## [OdiusFly Studio] Vortex (HTML5 Game)

Hello everyone, I want to present you my new game, "Vortex". Play the game online now: odiusfly.com/portfolio/vortex More games available on my website: odiusfly.com This game is available for licensing.. If you are interested, please don’t hesitate to contact me via email: odiusfly [at] hotmail [dot] com Best regards, Kyriakos
26. ## Gyro + Accel values into useful values.

I think you need to break this down a bit before trying to jump into detecting certain motion paths. Use the gyro and accel data together to form a reliable estimator of orientation and orientation rate of change. Unfortunately this is non-trivial, because it involves things like Kalman or complementary filtering to combine the data, so I'd have to second Nagle's suggestion of investigating a ready made solution from the drone community. You might want to look into using an IMU board designed for drones that also give you magnetometer data for 9 DOF. This can make your orientation estimate better. Some of the drone algorithms will likely have position estimation as well, since they typical do things like "return to take-off point" and enforce "no fly zones" (via GPS, though). Possibly you could plot position estimates over time (essentially the "path") and then check if those points are within some geometry to determine if you are doing "the sweep" motion. Maybe keep a rolling log of the last 100 positions (or however many) and compare that path to a known path that represents the sweep you want to trigger on. Sorry if this is kind of "hand wavy" and general.

Have you run with the D3D debug/validation layer enabled to see if it's producing any warnings or errors? As a guess, UAVs have some weird rules around non-32bit loads... It sounds dumb, but try replacing your two Load4s with eight Loads.

V3 build pictured, but the V4 upgrades are all internal to the pad.If you’re unfamiliar with my DanceForce work or the previous versions, please read the introduction of my V3 build post for the rationale and advantages of this particular approach to a hard pad and what I’m going for. In short, the DF is a slimmer, lighter hardpad that can be more reliable and consistent than conventional designs due to its use of pressure sensitive sensors that are separated from the “click action” of the actual steps. I’m now building the DanceForce V4 prototype. V4 is simpler, easier to build, requires less parts, and is cheaper. Traditionally I build and design these pads, make a bunch of tweaks, and play on them for a good while. Then I begin working on the draft of the instructional write-up, and eventually publish the full how-to guide. If I followed that timeline again, this V4 guide would appear in *checks notes* summer 2020. Let’s not do that. I began work this past weekend, so I’m just going to post a stream of photos and exactly what I’m doing as I go. Excluding pad graphics and a few incidentals, this pad costs about $160 to put together. Current Status: Core pad is done but top hasn’t been installed and control board hasn’t been assembled. These are not changed from V3. Building the Base Basic layout sketch of the initial cut pad.Note: the dimensions in this photo are slightly wrong and I had to go back and fix it. Always triple check your measurements before cutting and gluing!The base layer is 1/2″ plywood cut to 34″ x 33″. The extra inch on top will be useful for wiring. I’ve marked off the steps in pencil, and then begun adding the spacer layer. I’m using 1/8″ hardboard this time around, for shallower steps than in the past. My hope is this will reduce ankle stress and overall impact while playing barefoot. The bottom panels are 10.25″ square, the top are 10.25″ x 5.25″. The upper panels are sized to leave space for Start/Select buttons. Next step is beginning to lay out the contacts. I’m using 3″ copper tape today, but 4″ is probably even better because it’s less work and barely costs any more. I’ve added the hardboard spacers around the Start and Select buttons. Note that these go on AFTER the copper tape, which runs underneath it. Here’s a detail shot of what you’ll end up with: Finally, all of the contacts get connected together with a plus to serve as the common contact for the step sensors. That concludes the base layer. Sensor Construction Start by building the top contact. Cut four 10.5″ squares of Lexan, and cover one side in copper tape. Add a little strip around to the top side to serve as our connection point for later. It’s important here to place the contact strip off center. You don’t want it touching the extension strip on the common contact. I also clip the corners to leave space between steps.Place an 11″ square of Velostat over the bottom of the contact. It does not need to cover it completely. Then the top contact goes over it. The top contact MUST be insulated by Velostat on every edge or the step will not work. That’s why we cut it a little small. I’ve moved to 6 mil Velostat in the V4 design due to the higher sensitivity of pure copper contacts. Finally, duct tape secures the sensor in place. I’ve done a couple experiments now and it appears that too much duct tape is a bad idea. This is a pressure sensor and excessive tape applies so much pressure that there isn’t enough range left to reliably detect steps. The clipped corners leave space for hardboard strips that will fill the space between diagonal steps.Four assembled sensors. It’s a good idea to test them with a multimeter at this point, while the duct tape still isn’t that strongly bonded. You’re looking for 70+ ohms at rest, and sub-10 with foot pressure.I also add some corner boundaries at this stage. These are hardboard strips of 1.75″ x 0.5″ and they are important to have good corner separation of the steps. The gap is important, wiring is going to run through there. Electrical Get ready to break out the soldering iron – but we have some prep work to do first. Take a look at the edges where your top contacts are – is copper peeking out past the Velostat? We don’t want this. It will short if we try to take the contact over this section. A little strip of electrical or duct tape will insulate the boundary. That’s better. Now I’m going to build a solder pad from two layers of copper tape. This solder pad I’ve laid down does not connect to the top contact of the step yet. This way if the step needs to come out, the soldered wire can stay where it is.Now to solder some wires. It’s important to leave lots of extra length when cutting the wire, I’ve been screwed multiple times by not having enough spare lead. Be judicious with the heat. The copper tape solders decently enough but it’s not going to tolerate the iron for an extended period.Finally, one more layer of copper tape will link the top contact to the solder pad and shield it all in one go. And now all four arrows wired up: I’ll finish up Start and Select later. For now, we really need to neaten up those wires. Find a hot glue gun, route the wires nicely up through the top of the pad, and glue them in place. And with that, the internal construction of the pad is complete. View the full article 29. ## Need some ideas I'd definitely build on the quest you already have in place. It'll give the game more purpose, and will give each monster the player battles more meaning. Part of any role playing game is a good story to get the player interacting and feeling like they're a part of your game world 30. ## DX11 ComputeShader read/write to the same binded RWByteAddressBuffer fails Hi, again i am at a point, were my incompetence makes me frustrated. I really try hard to solve my problems by myself before posting here. I have to mention that i have already worked with compute shader but until now i always read from one buffer and write to another. My kernel question: Is it possible in Directx11 SL 5.0 to bind a RWByteAddressBuffer to a computeshader as a UnorderdAccessView an then read a value from the buffer an write it back in the same dispatch ? This i exactly what i am doing. As a test i have also bound a StructuredBuffer to my computeShader as SRV with the same content as the RWByteAddressBuffer. When i read values from StructuredBuffer and write to RWByteAddressBuffer all works fine. => I conclude that the value is correctly read from StructuredBuffer and correctly written to the RWByteAddressBuffer Now comes the rediculous situation: If just read back the value from the same adress from the RWByteAddressBuffer and write it back the unchanged value to the same address in the RWByteAddressBuffer nothing is in the output and the model disappears. Many thanks in advance for everyone who can give me a hint. P.S. I know that i could work with two buffers, but because of the particle system (5 million) the buffers a very big and i would like to avoid this. The principle in most stages of the simulation will be, that the "old output buffer" is feeded as "input as input" buffer like a control loop. static const uint out_struc_stride = 32; // Size of RWByteBuffer_layout static const uint nThreads = 1000; // only as info, not used struct RWByteBuffer_layout { float4 Position ; float4 Color ; }; // structure buffer definition struct position_color_struc { float4 Position : POSITION; float4 Color : NORMAL; }; cbuffer CB_shared : register(b0) { uint nStructs; float time; } RWByteAddressBuffer out_data : register(u1); StructuredBuffer<position_color_struc> in_data : register(t25); [numthreads(nThreads, 1, 1)] void MoveParticles_ComputeShader(uint3 id : SV_DispatchThreadID) { uint range = nStructs / nThreads; position_color_struc input; for (uint i = id.x * range; i < (id.x + 1) * range; i++) { uint t = out_struc_stride * i; float4 in_position; float4 in_color ; bool do_read_from_byte_buffer = false; bool do_read_back = true; if (do_read_from_byte_buffer) { // read position, color from RWByteAddressBuffer ( does not work !!) in_position = out_data.Load4(t); in_color = out_data.Load4(t + 16); } else { // read position, color from StructuredBuffer ( does work ) input = in_data[i]; in_position = input.Position; in_color = input.Color; } out_data.Store4 (t, asuint(in_position)); out_data.Store4 (t + 16, asuint(in_color)); if (do_read_back) { // does NOT work even when reading first from structured Buffer // so we are shure that the value we read back from the structured buffer is OK // so reading from buffer and write back is IMPOSSIBLE ?? // read again from byte buffer in_position = out_data.Load4(t); // store bytebuffer out_data.Store4(t, asuint(in_position)); } } } 31. ## Need some ideas You could still have obstacles couldn't you (downed pillars, rocks, holes, etc.)? You did say you would see enemies wondering around the map as well correct? 32. ## Humanitarian Gamification: Designing a game to save the world? A name for the game has actually come up along those lines, but I'm supposed to keep it a secret. And I HAAAATE keeping secrets!!! 33. ## Quick lane-changing movement of player object So this is like a racing game on rails? I like irreversible's approach, slight possible tweaking: You could label each lane numbered, -1, 0, 1, 2 etc. Store the current lane position of the player as a float. Have a target lane number (as an integer) you are moving towards (could be the same as you are already in). Each iteration lerp the current lane towards the target lane (by a fixed amount if using fixed tick rate, or dT if using frame timing) On corners, preserve the lane information but because you are joining different 'segments' of track, do an additional lerp from one segment to another as you cross the corners. This way lane changing on corners 'just works'. If the difference between 2 players is less than some value (e.g. 0.5) they crash This might mean you can only turn e.g. left into a single side road from the left lane, which you may or may not want. You would also have to handle crashing on corners involving turning vehicles. 34. ## Project BlockchainZ [Available on itch.io] [BzPatch 2]: Updates and improvements! Hey everybody! New Patch is here! Say hello to Patch 1.0.2b (Patch notes below) A new update with nice improvements for a better game experience. Firstly we have reworked so hard the AI, so now they will react much better to the different situations, more work will be added, like advanced behaviors, different animations and there will be more in futures patches! Also we've done optimizations in the shooting feedback, first we add some shake to the camera. Also we have been working a lot in the IK stuff so when you shoot the gun move the character's arms and shoulders. And we have changed nearly all the SFXs for a more interesting version. Give it a try, you will notice with the first shoot. What is IK? IK is the acronym for Inverse Kinematics. IK is an animation technique that allows much more responsive animations in games. Unfortunatelly, this improvement forces us to turn off the option to disable the Right/Left Angle shooting until the next patch 😢 You'll see that now the difficulty level is a little bit more harder (We also took out rookie level), because we want the video game to be a really interesting challenge for every zombie killer. Nobody said that killing zombies was easy. The real challenge is to survive until your reinforcements arrive. Finally, and not less important, we have corrected some nasty bugs! Are you capable to save the bunker? Prove it and save the world: https://projectblockchainz.itch.io/projectbcz PSD.: we are still working on the story. And now we are so happy to show you some of the concept arts we have prepared. Check it! When we started developing the video game, we had the idea to create a huge city completely ruined by thousands of years of struggling. It would be a desolated scenario... More on the Devlog What do you think? Let us know on our Discord Server. Patch Notes: General improve on AI, now the bandits reacts much better. Big optimization in shooting feedback. Camera improvements. SFX improvements. IK optimizations. New SFX for each every weapon. Now the foots adjust to the terrain. The character reacts when is hitted. Fixed zombie speed bug. Not the zombies let some space after attacks. Rookie challenge level removed. Now the challenge level includes the difficulty. Challenge level adjustment in order to create a more interesting challenge for the player. Fixed some related bugs on AI. Aiming by the left is temporarily disabled while improving the character's IK. Now you can't train the last civilian in the bunker. Fixed the bug related to the updates, now it works fine. Some adjustment to max units at the same time, to avoid performance hitccups Minor Bugs Additionally, we are working on the auto-resolve feature that let the easy battles be done without wasting time Eg. when you have 20 soldiers and fight against 3 raiders. These kind of battles have no sense at this point, so we believe player doesn't need to waste time them. Just focus in the good ones. Once we have this feature totally balanced and tested, we'll update it in the next update! We really hope you enjoy these new improvements. If you find any bug, please tell us right here or through our Discord Server. Thanks a lot for all the support you are bringing to us. It's great to know how do you feel about Project BlockChainZ. 35. ## [Bz Patch 2]: How to kill a bug [BzPatch 2]: Updates and improvements! Hey everybody! New Patch is here! Say hello to Patch 1.0.2b (Patch notes below) A new update with nice improvements for a better game experience. Firstly we have reworked so hard the AI, so now they will react much better to the different situations, more work will be added, like advanced behaviors, different animations and there will be more in futures patches! Also we've done optimizations in the shooting feedback, first we add some shake to the camera. Also we have been working a lot in the IK stuff so when you shoot the gun move the character's arms and shoulders. And we have changed nearly all the SFXs for a more interesting version. Give it a try, you will notice with the first shoot. What is IK? IK is the acronym for Inverse Kinematics. IK is an animation technique that allows much more responsive animations in games. Unfortunatelly, this improvement forces us to turn off the option to disable the Right/Left Angle shooting until the next patch 😢 You'll see that now the difficulty level is a little bit more harder (We also took out rookie level), because we want the video game to be a really interesting challenge for every zombie killer. Nobody said that killing zombies was easy. The real challenge is to survive until your reinforcements arrive. Finally, and not less important, we have corrected some nasty bugs! Are you capable to save the bunker? Prove it and save the world: https://projectblockchainz.itch.io/projectbcz PSD.: we are still working on the story. And now we are so happy to show you some of the concept arts we have prepared. Check it! When we started developing the video game, we had the idea to create a huge city completely ruined by thousands of years of struggling. It would be a desolated scenario... More on the Devlog What do you think? Let us know on our Discord Server. Patch Notes: General improve on AI, now the bandits reacts much better. Big optimization in shooting feedback. Camera improvements. SFX improvements. IK optimizations. New SFX for each every weapon. Now the foots adjust to the terrain. The character reacts when is hitted. Fixed zombie speed bug. Not the zombies let some space after attacks. Rookie challenge level removed. Now the challenge level includes the difficulty. Challenge level adjustment in order to create a more interesting challenge for the player. Fixed some related bugs on AI. Aiming by the left is temporarily disabled while improving the character's IK. Now you can't train the last civilian in the bunker. Fixed the bug related to the updates, now it works fine. Some adjustment to max units at the same time, to avoid performance hitccups Minor Bugs Additionally, we are working on the auto-resolve feature that let the easy battles be done without wasting time Eg. when you have 20 soldiers and fight against 3 raiders. These kind of battles have no sense at this point, so we believe player doesn't need to waste time them. Just focus in the good ones. Once we have this feature totally balanced and tested, we'll update it in the next update! We really hope you enjoy these new improvements. If you find any bug, please tell us right here or through our Discord Server. Thanks a lot for all the support you are bringing to us. It's great to know how do you feel about Project BlockChainZ. 36. ## Game audio production milestones Sure! 37. ## Quick lane-changing movement of player object Technically, if you change lane, you're moving (somewhat) diagonally, so your forward movement speed decreases. Likely you don't want to model that 38. ## Orchestral Composer looking for Game Projects Hi everyone, I'm an orchestral music composer with 5 years experience. Now I would like to get experience in making music for games. I'm specialized in epic music and traditional big orchestrations, you can listen to some of my work on soundcloud/youtube at the bottom. Please contact me if you are interested, would love to hear from you. Best regards, Jonathan Soundtrack Portfolio: Rescored Trailers I did for practice: 39. ## Diligent Engine - A Modern Cross-Platform Low-Level Graphics Library I started work on DiligentFX, a high-level renderer. As the first step, I reworked epipolar light scattering effect and made it ready-to-use component with a clear interface. Check it out on GitHub. 40. ## Islands and Land Yes, that is the ideal situation but it's not currently supported. There are some issue requests open for it, so hopefully it gets implemented eventually. My latest CPU numbers were just under 50% all-in, including the rest of the physics, rendering, etc. I'm not sure what I'm at for just my code. In that scene, 2 of the 3 boats were unoptimized, there are probably around 2000 potentially-buoyant faces in total, so a simpler hull should make a significant difference. I'm releasing what I have this week, and one of my goals for a future version will be to offer some options to trade accuracy for speed. I'll be sure to give it a go on mobile to see how things hold up. As you noted, this would prevent the inside of the boat from rendering. You need to sandwich the depth rendering of the closed hull between the rendering of the boat and the water. If you do find a better workaround, I'd love to know! 41. ## Islands and Land Ahha! I have a solution, possibly. Draw the hulls first using colour without blending. This draws the colour and depth, no blending and is cheap. Draw a skybox over this, without using depth testing or depth write. This will draw the colour over the previous result. Now draw the boats. Now draw the ocean. I think this might work and would be super cheap. 🙂 /edit Ah darn this may interfere with the boat rendering. However you could use it to draw masked areas maybe, or get it to work with a cunning shader. I'm sure there must be a cheap solution! 🙂 42. ## A lack of Raypunk / Pulp Sci Fi games? (note: there is ambiguity about where the line is drawn between raypunk - or raygun gothic - and atompunk as used in games like Fallout. I have attached a couple of images to illustrate the style I am talking about) Lately I have started browsing artwork and pictures of old science fiction movies from the 50's/60's again and started wondering - why isn't that aesthetic explored in videogames more frequently? It's a fresh and most of the times vibrant look at a future that never was, far away from the sleek designs of Mass Effect and the bleak colour palette of your average first person shooter. Let's face it, how many games can you name where the skies are a nice and warm yellow colour? Illustrators and film makers alike didn't care about realism and explored the realms of their imagination while throwing the laws of physics out of the window of their saucer shaped spaceships, and they gave us movies like This Island Earth or Forbidden Planet and the classic Star Trek series in return. So I have been trying to come up with a genre or game mechanic and I think a more campy and over-the-top version of something like Age Of Wonders would work great (yes, Planetfall might be set in a sci-fi setting but it's going in the complete opposite direction). Who wouldn't want to engage in diplomatic conversation with this friendly fellow while your fellow band of spacemen and -women fight off strange creatures with their trusty rayguns? What do you all think - is this a theme/idea worth exploring? What would make you want to play the 4X version of a 50's science fiction movie? Or would this lend itself better for a different genre instead? 43. ## Islands and Land It might work but usually stuff like that is a big red flag to take care in case of pipeline stalls etc I think. It is all a roundabout way of trying to write to the depth buffer without writing out colour as I understand it? There may be a way of using alpha blending with transparent pixels, and getting the sorting / render order correct, maybe this will be faster. I think there is some support for changing the render order in Godot (I did it for my skybox) but I don't know if you can force this even with blending where things are often sorted back to front. Speaking for myself I'm also keen to have stuff that will work fast on mobile, so you have to be careful as things like that can kill the framerate for little visual gain. Also this is why my emphasis on shortcuts in the calculations, I saw from your latest version it was using 30-50% CPU. To give comparison, I think mine uses very low, figures around 0.1% CPU for 30 or so boats. However I think your approach could be optimized by using simplified hull (maybe a box or something) and lookup tables if you are feeling brave. I may get round to having a go at this when I eventually get home and can program again! :-) 44. ## New Hero Added 02-19-2019 New hero added: Haunted Nikes Click here to play Hero Land for free in your browser 45. ## Humanitarian Gamification: Designing a game to save the world? OK. That's a good focus. To get some ideas flowing, think of sayings or phrases other than the paper cuts thing. Like daily good deeds, or "paying it forward," or mountains from molehills. 46. ## Islands and Land Good point. I looked into it a little more and found it in the official documentation: http://docs.godotengine.org/en/3.0/tutorials/shading/screen-reading_shaders.html I think it should perform the same as any other screen-space post-processing shader (although I wonder if that means it would interfere with those as well), and it will only capture the screen texture once so having several boats using this at the same time won't decrease performance. 47. ## C#GUI WPF + OpenGL 3.1 We will see how to place OpenTK.GLControl on WPF window to make GUI application with 2D/3D graphics using modern OpenGL 3. This is the result VS project: EditedTriangle_WPFOpenGL31CSharp.zip How to create the project from scratch Note 1: RMB - Right Mouse Button click Note 2: Good Color calculator for normalized values: http://doc.instantreality.org/tools/color_calculator/ Create WPF application, with the name "EditedTriangle". See the screenshot: Download OpenTK.GLControl.zip and OpenTK.zip Create the empty "Libs" folder in the solution folder (where the ".sln" is placed) Unzip "OpenTK" and "OpenTK.GLControl" folder in the "Libs" folder Add references to "OpenTK.dll" and "OpenTK.GLControl.dll". For this: RMB on "References" -> select "Add Reference..." -> select "Browse" -> click the "Browse..." button -> select DLL's. See the screenshot with the result: Add "Assemblies". For this: select "Assemblies" -> "Framework" -> check: System.Drawing System.Windows.Forms WindowsFormsIntegration , see the screenshot with the result: Click "OK" button Open the file "MainWindow.xaml" in VS. Add this line as an attribute of the "Window" element: xmlns:opentk="clr-namespace:OpenTK;assembly=OpenTK.GLControl" Place this code inside of <Window></Window> element: <Grid> <DockPanel LastChildFill="True"> <StackPanel DockPanel.Dock="Right"> <Button x:Name="buttonSetBGColor" Content="Set BG Color" Margin="5" Click="buttonSetBGColor_Click"></Button> <Button x:Name="buttonSetTRColor" Content="Set TR Color" Margin="5" Click="buttonSetTRColor_Click"></Button> </StackPanel> <WindowsFormsHost Margin="5" Initialized="WindowsFormsHost_Initialized"> <opentk:GLControl x:Name="glControl" Load="glControl_Load" Paint="glControl_Paint" /> </WindowsFormsHost> </DockPanel> </Grid> Copy the code below to "MainWindow.xaml.cs" and run the project MainWindow.xaml.cs using System; using System.Windows; using OpenTK.Graphics.OpenGL; using OpenTK.Graphics; namespace EditedTriangle { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { private int _numOfVertices = 0; private int _uColorLocation; public MainWindow() { InitializeComponent(); } private void glControl_Load(object sender, EventArgs e) { glControl.MakeCurrent(); // Get a shader program ID int shaderProgram = InitShadersAndGetProgram(); _numOfVertices = InitVertexBuffers(); _uColorLocation = GL.GetUniformLocation(shaderProgram, "uColor"); if (_uColorLocation < 0) { MessageBox.Show("Failed to get uColorLocation variable"); return; } // Set a triangle color GL.Uniform3(_uColorLocation, 0.945f, 0.745f, 0.356f); // Set a color for clearing the glCotrol GL.ClearColor(new Color4(0.286f, 0.576f, 0.243f, 1f)); } private void glControl_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { GL.Viewport(0, 0, glControl.Width, glControl.Height); // Clear the glControl with set color GL.Clear(ClearBufferMask.ColorBufferBit); if (_numOfVertices != 0) { GL.DrawArrays(PrimitiveType.Triangles, 0, _numOfVertices); } // Swap the front and back buffers glControl.SwapBuffers(); } private int InitVertexBuffers() { float[] vertices = new float[] { 0.0f, 0.5f, -0.5f, -0.5f, 0.5f, -0.5f }; int n = 3; int vbo; GL.GenBuffers(1, out vbo); // Get an array size in bytes GL.BindBuffer(BufferTarget.ArrayBuffer, vbo); int sizeInBytes = vertices.Length * sizeof(float); // Send the vertex array to a video card memory GL.BufferData(BufferTarget.ArrayBuffer, sizeInBytes, vertices, BufferUsageHint.StaticDraw); // Config the aPosition variable GL.VertexAttribPointer(0, 2, VertexAttribPointerType.Float, false, 0, 0); GL.EnableVertexAttribArray(0); return n; } private int InitShadersAndGetProgram() { string vertexShaderSource = "#version 140\n" + "in vec2 aPosition;" + "void main()" + "{" + " gl_Position = vec4(aPosition, 1.0, 1.0);" + "}"; string fragmentShaderSource = "#version 140\n" + "out vec4 fragColor;" + "uniform vec3 uColor;" + "void main()" + "{" + " fragColor = vec4(uColor, 1.0);" + "}"; // Vertex Shader int vShader = GL.CreateShader(ShaderType.VertexShader); GL.ShaderSource(vShader, vertexShaderSource); GL.CompileShader(vShader); // Check compilation string vShaderInfo = GL.GetShaderInfoLog(vShader); if (!vShaderInfo.StartsWith("No errors")) { MessageBox.Show(vShaderInfo); return -1; } // Fragment Shader int fShader = GL.CreateShader(ShaderType.FragmentShader); GL.ShaderSource(fShader, fragmentShaderSource); GL.CompileShader(fShader); string fShaderInfo = GL.GetShaderInfoLog(fShader); if (!fShaderInfo.StartsWith("No errors")) { MessageBox.Show(fShaderInfo); return -1; } int program = GL.CreateProgram(); GL.AttachShader(program, vShader); GL.AttachShader(program, fShader); GL.LinkProgram(program); GL.UseProgram(program); return program; } private void buttonSetBGColor_Click(object sender, RoutedEventArgs e) { var dialog = new System.Windows.Forms.ColorDialog(); if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { GL.ClearColor(dialog.Color); glControl.Invalidate(); } } private void buttonSetTRColor_Click(object sender, RoutedEventArgs e) { var dialog = new System.Windows.Forms.ColorDialog(); if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { float r = dialog.Color.R / 255f; float g = dialog.Color.G / 255f; float b = dialog.Color.B / 255f; GL.Uniform3(_uColorLocation, r, g, b); glControl.Invalidate(); } } } } MainWindow.xaml <Window x:Class="EditedTriangle.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:EditedTriangle" xmlns:opentk="clr-namespace:OpenTK;assembly=OpenTK.GLControl" mc:Ignorable="d" Title="Triangle" Height="256" Width="290"> <Grid> <DockPanel LastChildFill="True"> <StackPanel DockPanel.Dock="Right"> <Button x:Name="buttonSetBGColor" Content="Set BG Color" Margin="5" Click="buttonSetBGColor_Click"></Button> <Button x:Name="buttonSetTRColor" Content="Set TR Color" Margin="5" Click="buttonSetTRColor_Click"></Button> </StackPanel> <WindowsFormsHost Margin="5"> <opentk:GLControl x:Name="glControl" Load="glControl_Load" Paint="glControl_Paint" /> </WindowsFormsHost> </DockPanel> </Grid> </Window> 48. ## Assets used for free game? It would likely be a win in court regardless. Trademarks don't prevent all use, just certain specific uses. Trouble is, nobody wants to be the one to set precedence in court, including Turbosquid, who settled out of court recently with BMW for selling car models with the logo. (I think it was BMW) Anyway, it's a touchy subject because people think trademarks are all powerful because of the status quo and can't reason about it objectively with legal jargon. It's like telling someone that cholesterol isn't bad for you after all the years of being told that cholesterol = bad! 49. ## MobileV0.1.6 Update ENG: This update introduces many changes: Added new user interface changes; Added game menu; Added store for starting bonuses; Added store at the end of levels; Added save system; Improved and fixed camera behavior; Added some little changes. In the store of starting bonuses purchase is due to the accumulated score points. Improving your level with score points, you will open new additional bonuses for improvement. Maximum game level is 10 now. In the store at the end of the levels, you can replenish your stocks of ammo and health. RUS: Это обновление вносит много изменений: Дополнен интерфейс пользователя; Добавлено меню игры; Добавлен магазин для стартовых бонусов; Добавлен магазин в конце уровней; Добавлена система сохранений; Улучшено и исправлено поведение камеры; Добавлены мелкие исправления. В магазине стартовых бонусов покупка осуществляется за счет накопленных очков мощи. Улучшая свой уровень за очки мощи , Вам будут открываться дополнительные бонусы для улучшения. Всего в игре 10 уровне на данный момент. В магазине в конце уровней можно пополнить свои запасы патронов и здоровья. You can download apk file here: https://drive.google.com/file/d/16pae6KTY9XHbB8cSws600jLnH31eVxxH/view?usp=sharing 50. ## Any tips for Better Writing? really thanks guys! 51. ## Bit of a cleanup using System; using System.Drawing; using System.Linq; using System.Windows.Forms; namespace GdiSnake { public sealed partial class Form1 : Form { // our unchanging values: // playfield height & width const int PlayfieldWidth = 80; const int PlayfieldHeight = 40; const int CellSize = 9; const int PlayfieldYOffset = 50; const int PlayfieldXOffset = 20; Color[] CellColors = { Color.White, Color.Blue, Color.CornflowerBlue, Color.Coral, Color.Black }; // timeout to adjust speed of snake const int MillisecondsTimeout = 40; // our playfield; stores FieldVals instead of ints so we don't have to remember them readonly FieldVals[,] PlayField = new FieldVals[PlayfieldWidth, PlayfieldHeight]; // not yet used until we increase length of snake int _snakeBodyLen; // not including head // which direction (SnakdDirs enum) the snake is currently moving SnakeDirs _snakeDir; // position of the one-and-only piece of food; use our own coordinate class, Pos readonly Pos FoodPos = new Pos(0, 0); // defines the snake; each element tells us which coordinates each snake piece is at static int _maxSnakeLen = 31; readonly Pos[] _snakeCells = new Pos[_maxSnakeLen]; // guess int _score = 0; // for randomizing things like food placement Random _rnd; // how many body pieces the snake will increase by when it eats food int SnakeSizeIncrease = 2; // could've used something existing, but made a simple screen coordinate class public class Pos { public int X { get; set; } public int Y { get; set; } public Pos(int x, int y) { X = x; Y = y; } } // these make it easy (for the human) to know what each cell contains public enum FieldVals { Empty, SnakeHead, SnakeBody, SnakeFood, Border } // these make it easy (for the human) to read snake the direction public enum SnakeDirs { Up, Right, Down, Left } public Form1() { DoubleBuffered = true; InitializeComponent(); RunGame(); } public void Timer1_Tick(object sender, EventArgs e) { CheckForKeyboardCommand(); CheckForSnakeOutOfBounds(); CheckForSnakeCollisionWithSelf(); UpdateSnakeBodyPosition(); CheckSnakeHasEatenFood(); Invalidate(); } public void CheckForSnakeCollisionWithSelf() { if (_snakeCells.Skip(1).Any(pos => pos.X == _snakeCells.First().X && pos.Y == _snakeCells.First().Y)) { EndGame(false); } } /// <summary> /// Work out the initial coordinates of the snake's body parts /// </summary> public void SetUpSnake() { _snakeBodyLen = 4; // create the empty snake array cells for (var i = 0; i < _snakeCells.Length; i++) { _snakeCells[i] = new Pos(0, 0); } // randomly choose snake's initial direction _snakeDir = (SnakeDirs)_rnd.Next((int)SnakeDirs.Up, (int)SnakeDirs.Left + 1); // First set the position of the snake's head. // We'll work out the rest of the snake body coords based on which // direction it's initially facing. _snakeCells.First().X = PlayfieldWidth / 2; _snakeCells.First().Y = PlayfieldHeight / 2; switch (_snakeDir) { case SnakeDirs.Up: // make the snake's body go below the head, as it's moving up for (int i = 1; i < _snakeBodyLen; i++) { _snakeCells[i].X = _snakeCells.First().X; _snakeCells[i].Y = _snakeCells[i - 1].Y + 1; } break; case SnakeDirs.Right: // make the snake's body go left of the head, as it's moving right for (int i = 1; i < _snakeBodyLen; i++) { _snakeCells[i].X = _snakeCells.First().X - 1; _snakeCells[i].Y = _snakeCells.First().Y; } break; case SnakeDirs.Down: // make the snake's body go above of the head, as it's moving down for (int i = 1; i < _snakeBodyLen; i++) { _snakeCells[i].X = _snakeCells.First().X; _snakeCells[i].Y = _snakeCells[i - 1].Y - 1; } break; case SnakeDirs.Left: // make the snake's body go right of the head, as it's moving left for (int i = 1; i < _snakeBodyLen; i++) { _snakeCells[i].X = _snakeCells.First().X + 1; _snakeCells[i].Y = _snakeCells.First().Y; } break; } } /// <summary> /// Check the keyboard for arrow keys /// I got the code off the net (see bottom of code); no point re-creating this /// </summary> public void CheckForKeyboardCommand() { if (NativeKeyboard.IsKeyDown(KeyCode.Down)) // player hit Down arrow { // can't hit down while going up; game over if (_snakeDir == SnakeDirs.Up) EndGame(false); // change snake direction to down _snakeDir = SnakeDirs.Down; } else if (NativeKeyboard.IsKeyDown(KeyCode.Up)) { // can't hit up while going down; game over if (_snakeDir == SnakeDirs.Down) EndGame(false); // change snake direction to up _snakeDir = SnakeDirs.Up; } else if (NativeKeyboard.IsKeyDown(KeyCode.Left)) { // can't hit left while going right; game over if (_snakeDir == SnakeDirs.Right) EndGame(false); // change snake direction to left _snakeDir = SnakeDirs.Left; } else if (NativeKeyboard.IsKeyDown(KeyCode.Right)) { // can't hit right while going left; game over if (_snakeDir == SnakeDirs.Left) EndGame(false); // change snake direction to right _snakeDir = SnakeDirs.Right; } } /// <summary> /// See if snake has eaten the food /// </summary> public void CheckSnakeHasEatenFood() { // if snake head is in the same x,y position as the food // NB: First() is a Linq function; it gives me the first element in the array if (_snakeCells.First().X == FoodPos.X && _snakeCells.First().Y == FoodPos.Y) { IncrementScore(); MakeNewFood(); IncreaseSnakeSize(); } } public void IncreaseSnakeSize() { if (_snakeBodyLen + SnakeSizeIncrease < _maxSnakeLen) { _snakeBodyLen += SnakeSizeIncrease; } } public void DrawScore(Graphics g) { WriteAt(g,$"Score: {_score} Snake Size: {_snakeBodyLen}", 0, 0); } public void IncrementScore() { ++_score; } /// <summary> /// Put food item at random location /// </summary> public void MakeNewFood() { int x, y; do { // this ensures we're not putting the food on top of the snake, or the border x = _rnd.Next(1, PlayfieldWidth - 1); y = _rnd.Next(1, PlayfieldHeight - 1); } while (_snakeCells.Any(pos => pos.X == x || pos.Y == y)); // set the food coords FoodPos.X = x; FoodPos.Y = y; // update the playfield position with the food value PlayField[FoodPos.X, FoodPos.Y] = FieldVals.SnakeFood; } void CheckForSnakeOutOfBounds() { // snake mustn't be on any border cell, or game over if (_snakeCells.First().Y < 1 || _snakeCells.First().X > PlayfieldWidth - 2 || _snakeCells.First().Y > PlayfieldHeight - 2 || _snakeCells.First().X < 1) { EndGame(false); } } /// <summary> /// Move the snake pieces appropriately. I just did the simplest thing that I thought of. /// </summary> void UpdateSnakeBodyPosition() { // Last piece of snake's tail will always become empty as the snake moves // NB: Last() is a Linq function; it gives me the last element in the array (end of snake tail) PlayField[_snakeCells[_snakeBodyLen].X, _snakeCells[_snakeBodyLen].Y] = FieldVals.Empty; // move the 'middle' section of the snake one cell along for (int i = _snakeCells.Length - 1; i > 0; i--) { _snakeCells[i].X = _snakeCells[i - 1].X; _snakeCells[i].Y = _snakeCells[i - 1].Y; } // move the snake's head, depending on direction moving // the body was already moved above switch (_snakeDir) { case SnakeDirs.Up: // moved the snake head up 1 (-ve Y direction) --_snakeCells.First().Y; break; case SnakeDirs.Right: // moved the snake head right 1 (+ve X direction) ++_snakeCells.First().X; break; case SnakeDirs.Down: // moved the snake head up 1 (+ve Y direction) ++_snakeCells.First().Y; break; case SnakeDirs.Left: // moved the snake head left 1 (-ve X direction) --_snakeCells.First().X; break; } // Set the playfield position at the head of the snake, to be... the snake head! PlayField[_snakeCells.First().X, _snakeCells.First().Y] = FieldVals.SnakeHead; // Set the positions on the playfield for the snake body cells // so we know to draw them // NB: Skip(1).Take(4) is Linq; it gives me the array left after // skipping the first item, then grabbing the next 4 (so in this // case misses the first and last). foreach (var cell in _snakeCells.Skip(1).Take(4)) { PlayField[cell.X, cell.Y] = FieldVals.SnakeBody; } } /// <summary> /// Just show a message and exit (can only lose right now) /// </summary> /// <param name="win"></param> void EndGame(bool win) { //var g = CreateGraphics(); //WriteAt(g, \$"YOU DIED. Score: {_score} Snake Length: {_snakeBodyLen}", 0, 20); RunGame(); } public void RunGame() { _rnd = new Random(); _score = 0; for (var i = 0; i < PlayfieldWidth; i++) { for (var j = 0; j < PlayfieldHeight; j++) { PlayField[i, j] = FieldVals.Empty; } } // create the initial snake cell coords (place it on playfield) SetUpSnake(); // start with an initial piece of food MakeNewFood(); timer1.Interval = MillisecondsTimeout; timer1.Start(); } /// <summary> /// Set the console size appropriately & draw the border, leaving room for the score /// </summary> void DrawBorder( Graphics g) { for (var i = 0; i < PlayfieldWidth; i++) { DrawCell(g, FieldVals.Border, i, 0); DrawCell(g, FieldVals.Border, i, PlayfieldHeight); } for (var i = 0; i < PlayfieldHeight; i++) { DrawCell(g, FieldVals.Border, 0, i); DrawCell(g, FieldVals.Border, PlayfieldWidth - 1, i); } } /// <summary> /// Go through every element of the 2d array, only drawing a cell /// if it has a value (other than 0). This way we only draw the /// cells that need to be updated. A bit like Invalidate() in GDO. /// Pretty self-explanatory; if a cell has a value, draw the character /// appropriate for it. The space is only used to overwrite the last /// piece of the snake's tail. /// </summary> void UpdatePlayfield( Graphics g) { DrawBorder( g); for (var i = 1; i < PlayfieldWidth - 1; i++) { for (var j = 1; j < PlayfieldHeight - 1; j++) { switch (PlayField[i, j]) { case FieldVals.SnakeHead: DrawCell( g, FieldVals.SnakeHead, i, j + 1); break; case FieldVals.SnakeBody: DrawCell(g, FieldVals.SnakeBody, i, j + 1); break; case FieldVals.SnakeFood: DrawCell(g, FieldVals.SnakeFood, i, j + 1); break; } } } } public void DrawCell( Graphics g ,FieldVals cellType, int x, int y) { if (cellType != FieldVals.Empty) { Color color = CellColors[(int)cellType]; g.FillRectangle(new SolidBrush(color), x * CellSize + PlayfieldXOffset, y * CellSize + PlayfieldYOffset, CellSize, CellSize); } } private void WriteAt( Graphics g, string s, int x, int y) { using (var drawFont = new Font("Arial", 16)) using (var drawBrush = new SolidBrush(System.Drawing.Color.Black)) { g.DrawString(s, drawFont, drawBrush, x, y); } } private void Form1_Paint(object sender, PaintEventArgs e) { UpdatePlayfield( e.Graphics); DrawScore( e.Graphics); } } /// <summary> /// Codes representing keyboard keys. /// </summary> /// <remarks> /// Key code documentation: /// http://msdn.microsoft.com/en-us/library/dd375731%28v=VS.85%29.aspx /// </remarks> internal enum KeyCode { Left = 0x25, Up, Right, Down } /// <summary> /// Provides keyboard access. /// </summary> internal static class NativeKeyboard { /// <summary> /// A positional bit flag indicating the part of a key state denoting /// key pressed. /// </summary> const int KeyPressed = 0x8000; /// <summary> /// Returns a value indicating if a given key is pressed. /// </summary> /// <param name="key">The key to check.</param> /// <returns> /// <c>true</c> if the key is pressed, otherwise <c>false</c>. /// </returns> public static bool IsKeyDown(KeyCode key) { return (GetKeyState((int)key) & KeyPressed) != 0; } /// <summary> /// Gets the key state of a key. /// </summary> /// <param name="key">Virtual-key code for key.</param> /// <returns>The state of the key.</returns> [System.Runtime.InteropServices.DllImport("user32.dll")] static extern short GetKeyState(int key); } }

If in doubt, use a large site like turbosquid, and pay something for the models. They have some very expensive models on there, but also some very good ones for pocket change. Most of my 3D models in my game come from there and/or are kitbashes of stuff on there. Because you've paid them, and they've certified and guaranteed that the license is correct, so long as you abide by the reasonable terms (e.g. don't go using a porsche in your racing game or an AK-47 in your first person shooter!) if someone did try to sue you, you have reasonable defence that you bought it from turbosquid, and paid for it, and turbosquid have done their due diligence, which pins the fault clearly on the asset's seller. It's not completely watertight and I am no lawyer, but this is how i see it, and it's common sense to me. I'm sure if someone was vindictive enough, they could go after you, turbosquid, and the seller of the asset together. If in doubt, take legal advice, if still in doubt don't do it!
53. ## Mr Boom's Firework Factory

Mr Boom's Firework Factory is a fast paced puzzle game written in Unreal Engine 4 with a combination of Blueprints and C++. Through many levels of mayhem, you'll discover the secret behind the firework factory. This game is approaching the point where a complete vertical slice can be submitted to various distributors such as steam. I welcome contributors, please note that this is a hobby project and there is at yet no agreement as to profit sharing etc.

• 0
• 0
• 0

• ### For Beginners

Public Group  ·  1 member

• ### GameDev Challenges

Open Group  ·  86 members

• ### Unreal Engine Users

Open Group  ·  4 members

• ### Optimization Strategy

Open Group  ·  1 member

• ### Publishing and Monetization

Open Group  ·  1 member

1. 1
2. 2
Rutin
27
3. 3
4. 4
5. 5

• ### Member Statistics

• Total Members
254013
• Most Online
6110