Search the Community

Showing results for tags 'Custom'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Categories

  • Audio
    • Music and Sound FX
  • Business
    • Business and Law
    • Career Development
    • Production and Management
  • Game Design
    • Game Design and Theory
    • Writing for Games
    • UX for Games
  • Industry
    • Interviews
    • Event Coverage
  • Programming
    • Artificial Intelligence
    • General and Gameplay Programming
    • Graphics and GPU Programming
    • Engines and Middleware
    • Math and Physics
    • Networking and Multiplayer
  • Visual Arts
  • Archive

Categories

  • News

Categories

  • Audio
  • Visual Arts
  • Programming
  • Writing

Categories

  • Audio Jobs
  • Business Jobs
  • Game Design Jobs
  • Programming Jobs
  • Visual Arts Jobs

Categories

  • GameDev Unboxed

Forums

  • Audio
    • Music and Sound FX
  • Business
    • Games Career Development
    • Production and Management
    • Games Business and Law
  • Game Design
    • Game Design and Theory
    • Writing for Games
  • Programming
    • Artificial Intelligence
    • Engines and Middleware
    • General and Gameplay Programming
    • Graphics and GPU Programming
    • Math and Physics
    • Networking and Multiplayer
  • Visual Arts
    • 2D and 3D Art
    • Critique and Feedback
  • Topical
    • Virtual and Augmented Reality
    • News
  • Community
    • GameDev Challenges
    • For Beginners
    • GDNet+ Member Forum
    • GDNet Lounge
    • GDNet Comments, Suggestions, and Ideas
    • Coding Horrors
    • Your Announcements
    • Hobby Project Classifieds
    • Indie Showcase
    • Article Writing
  • Affiliates
    • NeHe Productions
    • AngelCode
  • Workshops
    • C# Workshop
    • CPP Workshop
    • Freehand Drawing Workshop
    • Hands-On Interactive Game Development
    • SICP Workshop
    • XNA 4.0 Workshop
  • Archive
    • Topical
    • Affiliates
    • Contests
    • Technical

Calendars

  • Community Calendar
  • Games Industry Events
  • Game Jams

Blogs

There are no results to display.

There are no results to display.

Marker Groups

  • Members

Developers


Group


About Me


Website


Industry Role


Twitter


Github


Twitch


Steam

Found 40 results

  1. Hey all, with the announcement of House Marque ditching their current game engine to use Unreal Engine , http://www.playstationlifestyle.net/2017/12/05/housemarques-next-game-will-use-unreal-engine-4/, I wanted to ask how everyone feels of the current state of commercial and custom game engines in the AAA and Indie Space. It seems like more and more studios are starting to switch to commercial engines, either Unity or UE4. Square Enix is creating Kingdom Hearts , Dragon Quest, and FF Remake in Unreal Engine, Rare is using UE4 for Sea of Thieves, Bend is using Unreal Engine for Days Gone, Insomniac Games used Unity for their smaller titles, and the list continues. As a graduate student that is about to graduate, I just wanted to see if the concept of fully creating a game from scratch is becoming a dying breed for engine developers, and I should focus more on creating my projects using these more popular engines, especially from a portfolio perspective. Thank you.
  2. I will be taking inspiration from WoW arenas and would like to make a proof of concept before I begin work. There must be some way I can use a WoW client to isolate Arenas and everything necessary to play them and then design a bit more to polish it. I have no idea how to accomplish this but would like to figure it out, any ideas?
  3. So here's the deal : many many years ago, I saw screenshots of Miegakure, that very famous 4D puzzle-platforming game you probably all know about by now. The thing is, it never came out, not even a playable demo, except at big gaming events that I have no way to get to. As such, I decided a while ago that I had waited long enough and I decided to start working on my own mathematically accurate 4D rendering engine. Without going too deep, the point of it is that 4D objects live in 4D space, and the so-called 4D camera just cuts a 3D slice of the 4D space and of every 4D object in it, which is then passed to your regular run-of-the-mill 3D engine to display. Doesn't sound like anything too hard then. The big problem however comes from optimisation. In 3D engines, you expect your geometry to never change ever, allowing for a lot of cool stuff like GPU caching and the like, and is usually pretty vital for performance. However in a 4D engine, the thing that never changes is your 4D geometry, not the 3D geometry that results from the cutting (that in fact changes every frame). The more mathematically inclined will also think about spatial complexity, since in 4 dimensions you have "a lot more space" to put objects in (purposefully keeping it vague). Moreover, I don't want to go through the trouble of building an actual 3D engine, because a lot of existing engines do that a lot better, and I would probably waste all of my time and motivation working on 3D instead of 4D. As a demonstration, my very first demo uses Three.js and is basically a 4D enigma : http://mattias.refeyton.fr/PAF/slicing . The goal is to get to the other side of the wall where the green cube is, knowing that the wall is too high to jump over and that you can't go around it. You can use ZQSD to move (French keyboard, sorry), and A and E to look "ana" and "kata", which are the 4D equivalent of left and right. You'll excuse the roughness of the whole thing, as it was done in 5 days for a school project (it was the perfect opportunity). This has only been tested on Firefox and Chrome. Hence my question : what do I use as a foundation to work on this ? I'd like to use either C, C++ (for performance) or Haxe (for the multiple targets), if that gives any leads. Of course, doing it from scratch is a totally valid answer, as I would be able to include many 4D-only things (such as 4D lighting and other cool shit) that I'm having trouble seeing how I could implement them in an existing engine. Another thing to take in consideration is that there's probably going to be a 4D physics engine to come with it, and that I'm not sure how hard or easy making that work with an existing 3D engine would be. Also I'm killing two birds with one stone by asking if anybody would be interested by a stream of this. I'm planning to eventually stream my work on this, which would include math on blank paper, and heavily mathematically-inclined discussion, not just coding (relatively little coding in fact).
  4. Character Solver

    So right now for my character solver I compute the time of impact of a character AABB and convex polygons using an algorithm based on "Robust Continuous Collision Detection Between Arbitrary Polyhedra Using Trajectory Parameterization of Polyhedral Features" by J.M.P van Waveren (link) Doom 3 uses this for all of it's collisions so it never has to deal with penetration. This seems undesireable for a couple of reasons so I've decided I'm going to switch to a position solver instead. After some googling I came across Erin Catto's 2014 GDC presention "Understanding Constraints" (link) where he briefly describes how his character solver works. I've written a simple C program (attached to this post) to play around with these concepts and I have some questions that hopefuly I will be able to get answered here. Keys for the test program: ESC - quit r - reset s - step 1-8 - switch to setup 1-8 Here's how I intepret the algorithm: Let's call the current position of the character the 'initial position'. This position never changes during the algorithm. Let's call the position we are trying to move the character to the 'target position'. This position also never changes during the algorithm. Scan the environment for overlap with the capsule at the initial position and construct a list of contact planes. Perform a plane solve on the target position to get the first solve position. Perform a shape cast from the initial position to the solve position. Move to the first hit point and collect new contact planes there. Add these new planes to the list. Perform a plane solve on the target position to get the next solve point. If the distance between the new solve point and the old one is within some epsilon, we are done. Otherwise go back to step 3. Plane solve code: vec3_t p = target_position; vec3_t a = p + local_capsule_a; vec3_t b = p + local_capsule_b; for(uint32_t i = 0; i < max_iter; i++) { vec3_t last_p = p; for(uint32_t j = 0; j < plane_count; j++) { const plane3_t &plane = planes[j]; float d1 = point_distance(plane, a); float d2 = point_distance(plane, b); float dist; if(d1 < d2) dist = d1; else dist = d2; dist -= capsule_radius; if(dist < 0.0f) { p -= dist * plane.n; a = p + local_capsule_a; b = p + local_capsule_b; } } vec3_t delta = p - last_p; if(dot(delta, delta) < epsilon) break; } solve_position = p; Couple of issues: 1. Is this interpretation correct? 2. In the test program I am only adding one new plane per shape cast, is there a reason to collect more (all touching planes)? 3. In the test program I am using the segment planes directly. In 3D I would directly use the polygon planes. If I use the direction from the closest point on the segment to the circle centre I get into situations like this, where the character ends up away from the collision geometry: 4. If I naively add all overlapping planes during step 1 I get into sitations like this: The green circle is at the source position. Step 1 will find both planes and the character will end up in the corner, not touching either segment. In the test program I solve this problem by clearing the plane list after step 2, but this is insufficient as I also need to select the proper planes after a shape cast. I can think of some approaches to solving this problem, but instead of experimenting right away, I'd like to know how other people have solved this. What is a good way to determine which planes to actually use? test.c
  5. With newer innovations coming to the fore every day, it is difficult to predict how many jobs will be taken by robots in the coming years and how many will be left out for humans. The disruptive technologies like Blockchain and Artificial Intelligence (AI) are the superpowers that will transform the traditional industries. Current Business scenario The present scenario of the business world shows that many enterprises are loaded with abundant data but are unaware the means to make it available to the world. On the other hand, many startups are equipped with the resources and technology to turn data into value using AI but have sparse data. Only very few companies (like Facebook, Google, etc.) have both datasets and the AI knowledge needed to turn this data into value. However, to make the best use of modern AI and computation, the access to this data needs to be equalized. The blockchain is a relatively new approach to manage/monitor financial and other transactions. It is a decentralized database that is different from the traditional big-data distributed databases. It helps in sharing datasets for higher-accuracy models and securing large-scale data management mechanisms for coordinating the information of several individuals. Thus, Blockchains provide a much greater scope of potential activity than its currently envisioned deployment opportunities in reinventing currency. It won’t be an exaggeration to say that AI is the greatest threat to the mankind now. However, retrieving its potential for the advancement and welfare of humanity also rests with mankind itself. AI with its subsets of machine learning and artificial general intelligence (AGI) is widely used to control systems. For example, how a simple thermostat adapts to a target temperature may be governed using AI. With the combination of hardware, software, infrastructure, and machine learning trained programs, AI can be used to facilitate planning, control, coordination, and decision making in an organized and iterative manner. Integration of Blockchains and AI Blockchain technology in itself is a transformation, and its integration with AI paves the road to a surfeit of unimagined opportunities that can be explored by the business stakeholders. Blockchains and AI together constitute the two closed components digital business. While Blockchain enables the exchange of value embedded data without any friction, AI facilitates the tapping of this data to create value without much (almost nil) human effort. With the advent of new technology solutions such as Blockchains, human errors have been replaced by a technical failure. So, while Blockchains help in verifying, executing, and recording, AI aids assessment, understanding, recognition, and decision-making. Similarly, while AI aids in finding new opportunities and improves decision making, Blockchains automate the verification of the transactional parts of the process. Blockchain-enabled thinking can be compared to an input-processing-output computational system. You may consider Blockchain as a product containing small blocks of a brain in the form of dust. However, the innovation efforts of many publicly traded asset managers and banks are involved in this brain block dust quest. Thus, the brain’s sensation, action, interaction, perception, and cognition abilities are simulated by the computers. So, in order to guard an innovative database in a smart set-up, an inbuilt component of artificial intelligence is needed for joining blocks by giving the reference to the previous block. Blockchains can transform AI Blockchain can act as a global or planetary database for AI that enables unlocking opportunities with a modular managed approach with memory by providing for data sharing and better data model. AI-based mobile applications can widely benefit from the potential Blockchain technology holds. Blockchain-enabled thinking allows random generation of as many copies of any instance of memory, as many copies there can be of any digital file. An example of one such promising feature is the biometric authentication feature associated with mobile wallets. Certain advantages of Blockchain can open up new opportunities for AI practitioners. A few major ones are: Data sharing due to decentralized/shared control: The decentralized or shared control structure of Blockchains allows data sharing from silos, which in turn helps in forming better data models due to the availability of more data. Sometimes when data from silos are merged, the new dataset obtained is not only quantitatively better but is also a qualitatively new data that helps generate qualitatively new models. These qualitatively new models can provide an opportunity to garner new insights and have new business applications. Moreover, data sharing allows shared control of AI training data and models. Immutability/audit trail: In order to be reputed, data needs to be immutable. AI can maintain immutability in a Blockchain network. This improves the trustworthiness of the data and models as it leads to provenance on their training/testing. This can be used to create the most secure ecosystem for transactions and data exchange in the world. Native assets/exchanges/shared global registry: Traditionally, datasets have been scattered across the web with many lists here and there, pointing at the main datasets. Of these many datasets that have value are proprietary. Blockchains help create a global database and application of AI to Blockchains leads to training/testing data and models as intellectual property (IP) assets. This decentralizes data and model exchanges. Conclusion There are surely more ways that blockchains help transform AI or vice-versa. This makes the Blockchain and AI combination explosive! Some long-standing dreams of AI and data analysis work can be realised, and several opportunities can be opened with this alliance of Blockchain and AI. Thus, the world’s most consistent technology-enabled decision-making systems that are virtually secure and provide solid insights and decisions can be created using a combination of AI and Blockchain.
  6. The last Alpha release of Lord of Dwarves was very playable. Most of the game features are in, however there is still a lot of work to be done balancing the game and making sure the pacing feels fun and challenging. For the last two months I’ve been working on some of these balance & pacing issues. Below I will talk about a few specific gameplay aspects that were not working and how I’m changing them to make the game feel just right. Skills Originally dwarves had 16 skills they could level up. This large number of skills encouraged the player specialize their dwarves in the wide variety of skills but then punished them when they wanted to focus many dwarves on a task that required only one of those skills. As a result I reduced the number of skills to 7: Hauling, Labor, Crafting, Cooking, Smithing, Needlesmithing, and Engineering. Now the player can have their dwarves focus on collecting wood one day, mining deep the next day, and building a castle on the third. These are all jobs that laborers excel at so they can switch between them while still benefiting from their labor skill value. As a bonus, 7 skills are much more approachable than 16. Health This is an issue I’m still wrestling with but I’ve come up with a system that I’m liking more and more. Previously I created a novel wound system where wounds would be applied to individual body parts in 3 severity levels: minor, severe, and grievous. There was nothing wrong with how this system worked it was just more detailed than it needed to be. From the players perspective they just needed to manage doctors and make sure they had enough bandages. The actual wounds were mostly irrelevant. The small benefit of flavor to know that Stouthammer got a leg wound from a goblin just didn’t fit the pacing of the rest of the game. So I decided to switch to a modified health points system. Now the player can focus on the supply chain for fixing wounds without having to worry about individual wounds. Although less novel a health points system is simple, immediately understandable, and frankly, fun. Additionally I also added “armor points” based on a dwarfs equipped armor. These armor points are lost first in combat and recover quickly after combat. This also has a rewarding side effect. Now when a player goes to all the effort of crafting a suit of armor they can immediately see the benefit of all the work as the dwarfs armor points increase. Renown Previously if the player wanted more dwarves to join their kingdom they needed to craft beds to accommodate the extra population. Low tier beds could only increase population so much before the player had to collect rare materials for higher tier beds. This system was novel and granted a good progression feeling. However it allowed for no diversion in gameplay as it forced the player into making a ton of beds every single game. I have since replaced the bed system with a Renown system. The dwarven kingdom has a renown value based on the value of various things in the kingdom. The player can actively increase their renown in a number of ways. Crafting items (chairs, armor, statues, etc), building structures, and domesticating animals all increase renown, which in turn increases the population. Now the population will increase no matter where the player focuses their attention. Focusing on combat and building arms & armor will increase renown. Likewise avoiding combat and focusing on building structures will also increase renown. As long is your kingdom is growing in some way your population will too. Now the player can try a different play style every game and still progress. Loot Monsters now drop loot! Well to be fair they dropped weapons & armor before, but now they also drop coins, meat, and the occasional rare item. Previously killing monsters didn’t have much of a benefit – except you know preventing civilians from being murdered. Now the coins gathered from monsters can be used to purchase items from markets. Or they can be kept in a vault underground for the boost to renown that they provide! Additionally the player may want to attract more monsters for a chance at rare loot. Scaffolding Building great structures is a very important part of the Lord of Dwarves feel. In addition to looking cool these structures are functional as they hinder and slow invaders from getting to the dwarves. But building them was always too slow. Some background. To build a tall wall dwarves need a boost to get up to the high blocks. This boost is provided by scaffolding that the dwarves can set up. But if the wall is 10 blocks tall by 10 blocks wide that’s 100 scaffolding that needs to be crafted and individually placed next to the wall. It took forever! I’ve recently improved scaffolding so that when a dwarf emplaces it, it creates scaffolding three blocks tall. Now only one third the scaffolding is needed. Additionally better quality scaffolding covers more blocks, up to 9 blocks tall. In this way the dwarves can quickly cover a wall in scaffolding allowing them to build a wall in a much more enjoyable time frame. Hauling In Lord of Dwarves the player harvests resources, collects them, and then uses them in their crafts. Collecting those resources could be very time consuming. If felling a forest generated 100 logs, each of those logs would need to be fetched by a dwarf and brought to a storage area. After about a year of gameplay the player would often have 2000 or more backlogged items waiting to be gathered. A elegant fix to this was to allow dwarves to carry multiple items at once. Now a single dwarf can go out to the forest, pick up three logs, and bring them back nearly tripling their efficiency. Additionally as dwarves get stronger they can carry more and more requiring fewer and fewer dwarves to do the same job. This change has greatly increased the players ability to maintain a clean kingdom and an efficient production chain. Those are some of the major systems I’ve been working the last few months. There are numerous minor systems I’ve also been improving like roads, storage priority, soldier uniform efficiency, and even multi threading the path-finding code. Lord of Dwarves is a big game and I’m trying to get the feel just right before I release it. Wish me luck!
  7. I've been working on creating my own version of Mario Maker or Lunar Magic with the exception that you can create your own graphics and program your own characters from scratch to create any kind of 2D game that one can think of... at least in my opinion! I created the project because I wanted to see if I could do it but, more importantly, to be able to create my own games if I happened to see a games did was not out on the market or simply to recreate a game that already exists and add my own twist to it. Francois DIY is a collection of editors and an engine for playing, creating maps, creating graphics, and programming sprites. The award-winning sprite inspector is personally my favorite. "award-winning" is a pun for "I think it is cool". Games can interface with a real gamepad but are meant for the PC. The experience has you both creating and playing your own games. You create to play and play to hack! Link to demo: Francois DIY Demo Fixed the link. The HTML document was not uploaded. Also on another note the game plays better with a gamepad than the keyboard which seems to be buggy.
  8. Hi I have been planning to start developing my own 2D engine in C++ with my friend. The plan is to have have engine handle user input, display 2D art, play simple audio and work on Android and Windows by next Summer. For starters I think that I'll need a way to handle input. I DON'T want to use libraries like SDL, so where should I start? IF I have to use libraries, they must be header-only. I don't want to have dependencies. I know how to read input with cin, but games require real-time input. So, what is good place to start handling input for both Windows and Android?
  9. Hello, I am in need for somebody to come in and create a new battle script for my browser game. The current one that is being used is 13 years old and needs to be re-written. Needs to use existing stats (strength / intellect, agility, endurance), as well as item (weapon / spell, armour / cloak, helm / scepter, shield / field) stats, bonus` received from various features in the game. My game is Land of Nevard (https://www.landofnevard.net) Contact me at dravenlon@gmail.com
  10. Hello, I am looking for a team to stop developing project alone and start doing bigger things. I would like a team that is organized and serious even of it is just a hobby. I don't want a project to be dropped every week and the team to disband after 2 months. Even though it is a hobby the quality and complexity of the game should be on par with a game that would be released on a major platform. I have experience with UE4, Unity and making my own engine with OpenGL. I prefer UE4 for 3D and Unity for 2D but I am willing to work with both. Every one of the games I worked on (personal project) involve multiplayer and netcode, I used what UE4 provided but for unity I used Forge Remastered which gave me a bigger control on how to optimize everything. I play several instruments, know about game design and am able to do small modeling task but I am before everything a programmer. I play mostly competitive fighting games these days (SFV, MvCi, GG, T7) but before I started getting serious into these types of games it was mostly FPS (CS1.6, UT2k4, Quake 3) and Dota-like. As you can see I love competitive multiplayer games but I play solo games too. I have a preference for darker theme games(F.E.A.R, HL, Shin Megami Tensei/Persona, Last of Us, SH2, RE7) even though I play everything offering me a challenge or some peace (Don't Starve, Stardew Valley, Darkest Dungeon, Zelda etc). I do have several ideas for games with a very clear direction gameplay, marketing and art but I am not looking for a team to work on my ideas, I just have them if needed. Feel free to ask questions here or PM me if you prefer. Best regards, rXp
  11. A soldier wakes up in darkness with a headache - Where is he, and how did he get here? Towards The Pantheon: Escaping Eternity is a prequel mystery minigame to the upcoming full length RPG Towards The Pantheon. Follow the journey of this soldier as he must solve puzzles and explore to escape from nowhere, discover how he came to be here, and face what lies ahead. Towards The Pantheon: Escaping Eternity offers a unique experience that provides lore and suggests at some themes that will be found in Towards The Pantheon. Purchase the album on Bandcamp to support development of Towards The Pantheon! https://connorortlinning.bandcamp.com/album/towards-the-pantheon-escaping-eternity-soundtrack Towards The Pantheon: Escaping Eternity is set to release October 12th, 2017. STEAM: http://store.steampowered.com/app/709450/Towards_The_Pantheon_Escaping_Eternity/ ITCH.IO: https://connorort.itch.io/towards-the-pantheon-escaping-eternity GAMEJOLT: https://gamejolt.com/games/ttpee/280482 Follow the development of Towards The Pantheon on social media! Facebook, Twitter, Tumblr, Soundcloud, Instagram, IndieDB, Twitch, Google+, Imgur, Pinterest Follow lead developer Connor O.R.T. Linning on social media! Facebook, Twitter, Tumblr, Youtube, Soundcloud, Twitch, Instagram, Bandcamp
  12. Hello, I just found out about https://github.com/shader-slang/slang. It's a shader language and accompanied by a library that is supposed to make it easier to work with modular shaders. What do you think about that? Here is the paper that describes the concept: http://graphics.cs.cmu.edu/projects/shadercomp/he17_shadercomp.pdf Thanks in advance
  13. Hi guys! I would really appreciate some feedback and advice from you guys on the game I'm developing The game I'm working on is a 2D ARPG single/multiplayer using my own custom engine which is a 2D OpenGL engine inC++. The game have two distinct areas: outdoor world environments and dungeons. Right now I have reached a point where I'm starting to feel quite satisfied with the outdoor environments but the dungeons feel very lacking right now. Whereas the outdoor environments have at-least somewhat of a depth feeling to them the dungeons just feel... flat... I am not sure how to improve the graphics in the dungeon areas to get a bit more depth and/or vivid feeling. Outdoor was easier as I could play a bit with sun-shadows and parallaxing but I cant quite use that in the dungeons which is causing problems. I have posted a few images below on both the outdoor world and the dungeons for comparison as well as a small update trailer if you want to just get a feeling for the current dynamics of the game. Any feedback or ideas on how to improve upon the dungeons would be greatly appreciated. This is the first real game I have developed so I'm sure you guys have a lot of ideas I haven't really though about yet Best Regards BG109 Trailer/Update Video: https://www.youtube.com/watch?v=aZthsgv1zPg
  14. Wheel of points gameplay

  15. Hello, I am a lone programmer looking for a pixel artist for a 2D action RPG (more like some RPG elements) inspired by games like Dark Souls (but still with original ideas and game mechanics). The game will revolve around an engaging combat-system, environmental story telling, a few characters who in turn has great depth and personality (they will have personal goals that are more important to them than their usefulness to the player). I haven't decided on the rest as I want us to design the game together. In this project, you will play as much a role in decision-making as I will and you will receive 50% of any potential profits. I was thinking of making a Kickstarter, but that depends on your opinion and financial situation. Now, I cannot stress this point enough, we will be partners. I'm not just looking for someone to do what I tell them, I want your opinion ideas and I want to have discussions about the game. All I have right now is the concept and my engine and skill set. The setting, story, and lore of the game are still to be decided as well as a ton more. I do have an idea for a game mechanic, which involves a handful of weapons to change between instantly much like in an FPS you change between weapons with the 0-9 digits on your keyboard. These weapons can be combined to defeat enemies and unlock different parts of the game. But that's just a possible idea, it depends on your opinion. I have made an engine for this game on top of the MonoGame framework using the programming language C# that I have a lot of experience with. I have also created a small example level of what we could make with the engine using art from the game "Chasm". We can easily place tiles and colliders using the tile map editor "Tiled" The Tiled files will be imported to Unity where you can place enemies as well as backgrounds, objects and generally sprites not limited to a tile size (I'm pretty sure Unity also allows import of photoshop files). When saving the scene it will produce a small .level file containing only the data we need from the Unity scene (I have complete control of the content of these files). These files can be placed in the MonoGame folder to allow the game to load them and use them. As for animations, I have made an animation editor for Unity that allows you to select a sprite, a delay until next frame, and colliders for each frame. When saving the scene all animations will be saved to a single .anim file that can be placed in the MonoGame folder to allow the game to read the animations. Don't worry if this all seems overwhelming, I will explain in further detail and guide you through it if you decide to partner up with me. If you want to focus mainly on the pixel art that's fine too. Generally, I understand that you need to eat and since you won't get paid at least until a potential Kickstarter I realize you probably have a job, or school to think of besides this just like me, so I don't expect you to work full time, or even as much as I do. Later on, I can even make tools for you if you have any requests. We will share the animation editor and level editor over Unity collaboration and communicate over Slack unless you have any other preference. Although I do prefer communication in text form since it allows me to express myself concisely, not have to think about my surroundings, think about what I will reply and read previous conversations. Now as promised from the title here is the demonstration of the engine and results of the tools as well as a demonstration of my capabilities. I do not own any of the art and nothing is final in terms of gameplay and the art will not appear in the final product of course. You only have one attack in the demo and I have disabled the stamina system since I'm not sure if we should have that in the game. The enemies are too aggressive since they have no attack cooldown they keep swiping at you (not really an example of the engaging combat-system I was talking about, would be nice with some more moves for both the player and enemies). The cave troll has an exploit where you can just stand inside of it and it can't hit you, this problem which is mainly for large enemies could be solved by extending the attack collider, or adding some kind of AOE attack when the player gets too close like a slam attack. Also, the cave troll has no walking animation. The UI is really barebone and really just placeholder, but it gets the job done. You can open up the menu with "Escape" or "Start" on the controller and set stuff like keybindings and even sound effect and music volume (even though there is no sound or music yet). We are going to need a sound designer in the near future. You can reload the level with the "R" key on the keyboard. You can fall through platforms by jumping while crouching. You can push the explosive crates around and drop them on enemies for massive damage. They also explode when hit with a weapon. The red lines are the colliders, the gray lines are the colliders bounding boxes. I have attached the demo to this post, but the demo can also be downloaded here: https://www.dropbox.com/sh/pweivx9fdo96wb7/AAA9XvuYOW3to1bBXHjOzNRfa?dl=0 The idea was to get this game through Steam Direct and sell it for something like 10$. I will, of course, pay the fee for entry. This isn't a get rich quick scheme, I just want to create a game that I can be proud of and would play myself and it will require the same kind of hard work that I have done to get here in the first place. I will not give up as long as there is hope for the project. If this peaked your interest and/or you have any questions you can contact me on my email: martinmaxdd@gmail.com Thank you for reading this Game.zip
  16. I think shouldn't be far from true to say that often beginners feel lost and don't know the best way to improve their skills, especially if they are self-thaught in wathever they are learning, being it 2D, 3D, Programming or wathever. There could be many obstacles and pitfall to learning, it could be that since one is begginner he/she doesn't realize that the scope of his project is just too big, or maybe one can't come up with a good story/gameplay for his life so lack the motivation to even attempt doing anyting on his own, and maybe one is stuck in a situation where would like to have the story/gameplay aspect figured out by someone better at it (by joining a team) but lack the technical skill to join said team and has an hard time gaining said skill because is not in a team to begin with. So I thought, something that can help beginners grow faster is something I saw in other communities around the web, which is friendly competitions. The ones I know of are mostly 2D-3D related, for instance polycount.com "Bi-Monthly CHARACTER ART Challenge" and "Monthly Environment Art Challenge", or conceptart.org "Character of the Week", "Creature of the Week", "Environment of the Week". Of course there are many more of this challenges I would like to see come into existence related to programming and game engines, for instance challenges in making certain games (see usual tetris/pong but also something more unique and specific, given some guidelines) and challenges like "Create a Water shader in Unreal Engine", or "Create a water ripple particle effect" and so on. The cool thing about this is that begginner could compare each other works (professional hopefully join in the challenge as well) and see how the best resoult where obtained, with everyone focusing/researching on the same task and learning from the best examples. This stuff is not far from something like school exercise from my point of view, therefore something invaluable for self-taught beginners who are at higher risk of getting lost by lack of direction. And here's gamedev.net twist on the subject, by joining and completing the current challenges one would get "achievments" or "medals" that are visible in his profile and under his avatar, as a cool way to improve his rep and keep the community active This is the kind of place I would like to see, where one join, check the current challenges list and decide to join in and learn something new or improve on the subject during that day/week. Also often I open the forum and there are no new topic that need to be replied, therefore this would keep us all busy in the free time Of course, maybe this sounds fun on digital paper but could end up not working, I have no idea if this stuff can work smoothly on sites that have less than a certain treshold of traffic, and it also require the time from someone actively creating this challenges content. Well anyway, I think it is worth thinking about it, let me know what do you think
  17. I am trying to implement status effects in my game but I have not quite been able to get the hang of it. Do you have to make a large number of classes for different kinds of status effects? Or is it possible to do it with just 1, or a small number of classes?
  18. Hi, I posted on here a while back about rendering architecture and came away with some great information. I am planning on implementing a render queue which collects the visible objects in the scene and sorts them based on different criteria to minimise state change etc.. The thing I am currently undecided about is: what is the best way to submit my draw calls? (I am wanting to support both OpenGL and Vulkan) At the moment I have two ideas for how I can handle it. The renderable handles the rendering (i.e. It calls renderContext->BindVertexBuffer(...) etc) and setup the renderer state Pro- Each renderable is full in control of how it renders Con - Have to manually manage state The renderable pushes RenderCommands (DrawMesh, DrawMeshIndexed etc) into a CommandBuffer that gets executed by the RenderBacked at the end of the frame Pro - Stateless Con - Seems more difficult to extend with new features Pro/Con - The front end only has a subset of rendering capabilities There are more pros / cons for each, but I have listed a couple to help show my thinking.. Any one have any comments on either of these two approaches or any other approaches that are typically used? Thanks
  19. Server and client for SnailLife Go

    Over the last couple of days I restructured SnailLife Go into a server and client. I’m still in the “rough draft” stage, but the top level project structure now looks like this: gosnaillife ├── client ├── cmd ├── common ├── LICENSE.md ├── README.md ├── server └── setup Intent Split application into server and client CLI apps. Create REST API for client-server communication Have a “common” package for structures which will be reused by both server and client Create some rudimentary deployment scripts for both server and client main.go I started by creating snaillifesrv/main.go alongside snaillifecli/main.go The cmd directory now looks like this: cmd ├── snaillifecli │ └── main.go └── snaillifesrv └── main.go snaillifecli/main.go The client main.go runs some simple configuration with viper (right now there is just a server.json config file with the server url to connect to depending on which environment you are running). After running the configuration it waits for user input. Once input is received, it tries to find and run a cobra command by that name. package main import "fmt" import ( "os" "bufio" "gitlab.com/drakonka/gosnaillife/client/lib/interfaces/cli" "gitlab.com/drakonka/gosnaillife/client/lib/interfaces/cli/commands" "runtime" "strings" "path/filepath" "io/ioutil" "github.com/spf13/viper" "gitlab.com/drakonka/gosnaillife/common/util" ) func main() { fmt.Println("Welcome to SnailLife! The world is your oyster.") configureClient() if err := commands.RootCmd.Execute(); err != nil { fmt.Println(err) os.Exit(1) } waitForInput() } func configureClient() { projectRoot := getProjectRootPath() confPath := projectRoot + "/config" envname, err := ioutil.ReadFile(confPath + "/env.conf") if err != nil { util.HandleErr(err, "") } envFile := string(envname) configPath := confPath + "/" + envFile viper.AddConfigPath(configPath) // Config client viper.SetConfigName("server") err = viper.ReadInConfig() if err != nil { util.HandleErr(err, "") } } func waitForInput() { buf := bufio.NewReader(os.Stdin) fmt.Print("> ") input, err := buf.ReadBytes('\n') if err != nil { fmt.Println(err) } else { cmd, err := cli.TryGetCmd(string(input)) if err != nil { fmt.Println(err) } else { err := cmd.Execute() if err != nil { fmt.Println("ERROR: " + err.Error()) } } } waitForInput() } func getProjectRootPath() string { _, b, _, _ := runtime.Caller(0) folders := strings.Split(b, "/") folders = folders[:len(folders)-2] path := strings.Join(folders, "/") basepath := filepath.Dir(path) + "/client" return basepath } snaillifesrv/main.go When launching snaillifesrv, a subcommand is expected immediately. Right now the only supported subcommand is serve, which will start the server. package main import "fmt" import ( "gitlab.com/drakonka/gosnaillife/server/lib/infrastructure/env" "os" "runtime" "path/filepath" "strings" "gitlab.com/drakonka/gosnaillife/server/lib/infrastructure" "gitlab.com/drakonka/gosnaillife/common" "gitlab.com/drakonka/gosnaillife/server/lib/interfaces/cli/commands" ) var App env.Application func main() { setProjectRootPath() confPath := env.ProjectRoot + "/config" App = infrastructure.Init(confPath, common.CLI) if err := commands.RootCmd.Execute(); err != nil { fmt.Println(err) os.Exit(1) } } func setProjectRootPath() { _, b, _, _ := runtime.Caller(0) folders := strings.Split(b, "/") folders = folders[:len(folders)-2] path := strings.Join(folders, "/") basepath := filepath.Dir(path) + "/server" env.ProjectRoot = basepath } Client So far an extremely barebones implementation, it looks like this: client ├── config │ ├── config.go │ ├── dev │ │ └── server.json │ └── env.conf └── lib └── interfaces └── cli ├── cli.go ├── cmd.go └── commands ├── register.go ├── root.go └── test.go Right now only the register command is implemented. Server The server is where the bulk of the existing packages ended up going: server ├── config │ ├── config.go │ ├── dev │ │ ├── auth.json │ │ └── database.json │ └── env.conf └── lib ├── domain │ ├── item │ └── snail │ ├── snail.go │ └── snailrepo.go ├── infrastructure │ ├── auth │ │ ├── authenticator.go │ │ ├── auth.go │ │ ├── cli │ │ │ ├── auth0 │ │ │ │ ├── auth0.go │ │ │ │ └── tests │ │ │ │ ├── auth0_test.go │ │ │ │ └── config_test.go │ │ │ ├── cli.go │ │ │ └── cli.so │ │ ├── provider.go │ │ └── web │ ├── databases │ │ ├── database.go │ │ ├── mysql │ │ │ ├── delete.go │ │ │ ├── insert.go │ │ │ ├── mysql.go │ │ │ ├── retrieve.go │ │ │ ├── tests │ │ │ │ └── mysql_test.go │ │ │ └── update.go │ │ ├── repo │ │ │ ├── repo.go │ │ │ ├── tests │ │ │ │ ├── repo_test.go │ │ │ │ ├── testmodel_test.go │ │ │ │ └── testrepo_test.go │ │ │ └── util.go │ │ └── tests │ │ └── testutil.go │ ├── env │ │ └── env.go │ ├── init.go │ └── init_test.go └── interfaces ├── cli │ └── commands │ ├── root.go │ └── serve.go └── restapi ├── err.go ├── handlers │ └── user.go ├── handlers.go ├── logger.go ├── restapi.go ├── router.go └── routes.go I followed a lot of the advice from this useful post about creating REST APIs in Go. When the user runs the register command on the client, here is what happens on the server. I have added comments to the copy below to help explain: package handlers import ( "encoding/json" "fmt" "errors" "io/ioutil" "io" "net/http" "gitlab.com/drakonka/gosnaillife/common/restapi" "gitlab.com/drakonka/gosnaillife/common/util" "strings" "gitlab.com/drakonka/gosnaillife/server/lib/infrastructure/auth" "gitlab.com/drakonka/gosnaillife/server/lib/infrastructure/env" http2 "gitlab.com/drakonka/gosnaillife/common/util/http" ) func CreateUser(w http.ResponseWriter, r *http.Request) { fmt.Println("Creating user") var user restapi.UserReq body, err := ioutil.ReadAll(io.LimitReader(r.Body, 1048576)) // The infamous Go error handling - I need a better way. if err != nil { util.HandleErr(err, "CreateUserErr") return } if err := r.Body.Close(); err != nil { util.HandleErr(err, "CreateUserErr") return } // Unmarshal the data we get from the client into UserReq if err := json.Unmarshal(body, &user); err != nil { // If we were unable to unmarshal, send an error response back to the client util.HandleErr(err, "CreateUserErr") w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(422) // unprocessable entity if err := json.NewEncoder(w).Encode(err); err != nil { util.HandleErr(err, "CreateUser") return } return } fmt.Println("Running registration") resBody, err := registerUser(user) if err != nil { util.HandleErr(err, "CreateUserErr") } // Start creating a userRes to send back to the client. userRes := buildUserResponse(resBody) status := http.StatusOK if err != nil { status = http.StatusInternalServerError } w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(status) if err := json.NewEncoder(w).Encode(userRes); err != nil { util.HandleErr(err, "CreateUserErr") return } } func registerUser(user restapi.UserReq) (resBody []byte, err error) { // Find an Auth0 provider (that is all we'll support for now) var auth0 auth.Provider auth0 = env.App.Authenticator.FindProvider("Auth0") if auth0 != nil { resBody, err = auth0.Register(user.Username, user.Password) } else { err = errors.New("Auth0 provider not found") } return resBody, err } func buildUserResponse(resBody []byte) (*restapi.UserRes) { res := restapi.UserRes{} // Find any keys we may find relevant from the Auth0 response body m, _ := util.FindInJson(resBody, []string {"_id", "statusCode", "name", "description", "error"}) httpErr := buildHttpErr(m) if id, ok := m["_id"]; ok { res.Id = fmt.Sprintf("%v", id) } res.HttpErr = httpErr return &res } func buildHttpErr(m map[string]interface{}) (httpErr http2.HttpErr) { // The Auth0 response body *sometimes* contains errors in statusCode/name/description format and *sometimes* just contains a single "error" json key if sc, ok := m["statusCode"]; ok { codeStr := fmt.Sprintf("%v", sc) if strings.HasPrefix(codeStr,"4") || strings.HasPrefix(codeStr, "5") { scf := sc.(float64) httpErr.StatusCode = int(scf) httpErr.Name = fmt.Sprintf("%v", m["name"]) httpErr.Desc = fmt.Sprintf("%v", m["description"]) } } else if error, ok := m["error"]; ok { httpErr.StatusCode = 500 httpErr.Name = "Error" httpErr.Desc = fmt.Sprintf("%v", error) } return httpErr } In the end the server sends a UserRes back to the client package restapi import ( "gitlab.com/drakonka/gosnaillife/common/util/http" ) type UserRes struct { HttpErr http.HttpErr `json:"httpErr"` Id string `json:"id"` Username string `json:"username"` } type UserReq struct { Username string `json:"username"` Password string `json:"password"` Connection string `json:"connection"` } Deployment I made a couple of quick scripts to deploy client and server. Note that go-bindata lets you compile your config files into the binary, making for easier distribution (and maybe slightlyimproved security for the secret keys stored in the server config since you don’t have loose configs with credentials sitting around) Client #!/bin/sh echo "Building and installing SnailLife" go-bindata -o ../../client/config/config.go ../../client/config/... cd ../../cmd/snaillifecli; go build GOBIN=$GOPATH/bin go install Server #!/bin/sh echo "Building and installing SnailLife server" go-bindata -o ../../server/config/config.go ../../server/config/... cd ../../server/lib/infrastructure/auth/cli echo "Building cli.so auth plugin" go build -buildmode=plugin -o cli.so echo "Building SnailLifeSrv" cd ../../../../../cmd/snaillifesrv; go build GOBIN=$GOPATH/bin go install Anyway, as you can see there is a long way to go. Up next I am going to write some tests for the REST API and the cobra commands (which I should really have been doing already).
  20. One of the biggest reasons why I haven't released my game is because of this annoying timestep issue I have. To be frank, this game was poorly planned, poorly coded, and was originally written as a small tech demo and a mini-game. Now it has evolved into a fully featured (and very messy code base of a) game. If you thought Lugaru was bad, Looptil is far worse! So what happens is that the delta is not really consistent. Sometimes enemies don't spawn fast enough because the delta isn't even consistent at 60fps, which is a big reason why the game is broken. static uint64_t last_time = 0; uint64_t current_time = time_get_time(); //( get_current_time() * 1000.0f ); int fps_limit = 60; float frame_time = float( current_time - last_time ); if( last_time != 0 ) This->m_delta_speed = frame_time / ( 1000.0f / 60.0f ); And this is my timing function: uint64_t time_get_time() { #ifdef _WINRT return GetTickCount64(); #endif #if __ANDROID__ /* TODO: Fix std::chrono for Android NDK */ uint64_t ms = 0; timeval tv; gettimeofday( &tv, NULL ); ms = tv.tv_sec * 1000; ms += tv.tv_usec / 1000; return ms; #else std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); std::chrono::system_clock::duration tp = now.time_since_epoch(); std::chrono::milliseconds ms = std::chrono::duration_cast<std::chrono::milliseconds>(tp); return (uint64_t) ms.count(); #endif } Now I know some of you will cringe when you see GetTickCount64(), but that's the only function that gives me reliable results on Windows 10 (UWP) ports, so that's staying. One more thing to note here, my game has a badly written game loop. It uses a switch statement, followed by draw_game_mode(), update_game_mode(), so I kinda screwed myself there. I tried changing it, but it broke the game completely, so I left it in it's messy state. Is it possible to simply just have a proper delta calculation function? Because it's adjusting itself based on the current frame time. This may not be the best of ideas, but it was something I whipped up because I needed to have this run okay when it goes down to 30fps without running half the speed. This works in general, but it's innacurate and causes problems. Any ideas? Thanks. Shogun EDIT: Feel free to ask anything in case I missed a vital detail. My lunch break is ending and it's time for me to go. Thanks.
  21. Go auth (and other) progress

    July 28 Made a bit more progress on the authentication basics today. Relevant commits are: Add http package; have auth0 test delete user it has just registered after test is done Create json util; add logout test July 29 Today I focused a bit on the building and installation of snaillifecli. I switched my custom app configuration code for Viper because it apparently integrates really well with Cobra, which is a library to help make CLI applications. It is really tempting to avoid plugging in existing libraries and write everything from scratch because I’m positive that it will teach me a lot about Go, but the existing solutions seem more than suitable and I want to get to working on actual snails at some point. I also checked in a couple of quick scripts to build and install the app. deployDebug deploys to a subdirectory under GOBIN and copies the config file the app will use alongside the executable. This is really dangerous because it means database credentials are exposed to whoever wants to look in the config file and is to be used for local debug purposes only. The deployProd script first runs go-bindata to generate a go file from the json config and have the configuration compiled into the binary during the build step. This way any sensitive database credentials and such are not directly exposed. Of course though, I don't plan on distributing any binary with secret key information in it to external users.
  22. Trying out Go

    A couple of weeks ago I had the genius idea to rewrite SnailLife in Go. I’ve already looked into doing this once before a couple of years ago, but wasn’t really feeling it and stuck with PHP (mostly for nostaligia reasons). Now though, SnailLife is this bloated PHP app. Most of the core functionality is in. After weeks of battling infrastructure issues, when everything was back up and running again, I took a step back and saw how big the app (or rather the 3 apps now) had become. At the same time I’d been reading in passing about Go and became curious, so I figured - why not look into learning Go by rewriting SnailLife? Not because I think Go itself will necessarily make anything better, but because a rewrite might. The features are mostly already designed, reimplementing them in another language would hopefully let me focus more on improving the overall project structure while learning the new language of choice. Of course, the “learning the new language of choice” part also increases the likelihood of my turning my messy PHP app into a messy Go app as I go, but…it’ll be fun, OK? Anyway, I’m not yet sure if I’ll stick with the Go port or if I’m just amusing myself for a while before going back to the already largely implemented PHP version. So far I haven’t coded anything snail-specific and have instead been focusing on setting up database-related packages. I’ve made the code public on GitLab for now, though not sure if that’ll change when I go into writing the more snail-specific functionality: https://gitlab.com/drakonka/gosnaillife When I started the PHP version of SnailLife, I started by building the website and the main functionality that lets users interact with their snails. As time went on this focus switched almost exclusively to the back-end, and to working on functionality that required no user interaction. I realized that this is what the core of the idea was - simulating the actual snails - the brain, organ function, etc - things that the user could eventually influence indirectly, but things that would tick away on their own even if no user was involved. So for the Go version I am not starting with a web front end but with a simple CLI, and focusing on implementing the core of the snail itself first. Eventually I can build whatever front-end I want, or even multiple front-ends if I feel like it. Heck, I could even expose some sort of API for others to make their own apps on top of the simulation (if anyone wanted to, in theory). Go notes to self Open and close DB connections as little as possible - the driver handles connection pooling for you, you should only really need to do it once. Best way of reusing constructors between tests might be to create some test utilities outside of _test files which are imported only by the tests. Example usage in my case is creating a test db and table to run my mysql and repo tests against, which are in different packages. Every directory is a package. There is no way to structure code in subdirectories without each subdirectory being a separate package. Make use of table driven tests. They allow you to run multiple test cases per test. interface{} is an empty interface and can hold values of any type…avoid passing this around too much, better to learn to structure the code so you don’t have to. Go code looks to be very easy to move around and restructure if needed, so it should be fine to experiment with different project structures as I go. Current tentative project structure drakonka/gosnaillife ├── cmd │ └── snaillifecli │ └── main.go ├── config │ ├── dev │ │ └── database.json │ └── env.conf ├── lib │ ├── domain │ │ ├── item │ │ └── snail │ │ ├── snail.go │ │ └── snailrepo.go │ ├── infrastructure │ │ ├── databases │ │ │ ├── database.go │ │ │ ├── mysql │ │ │ │ ├── delete.go │ │ │ │ ├── insert.go │ │ │ │ ├── mysql.go │ │ │ │ ├── retrieve.go │ │ │ │ ├── tests │ │ │ │ │ └── mysql_test.go │ │ │ │ └── update.go │ │ │ ├── repo │ │ │ │ ├── repo.go │ │ │ │ ├── repoutil.go │ │ │ │ └── tests │ │ │ │ ├── repo_test.go │ │ │ │ ├── testmodel_test.go │ │ │ │ └── testrepo_test.go │ │ │ └── tests │ │ │ └── testutil.go │ │ ├── env │ │ │ └── env.go │ │ ├── init.go │ │ ├── init_test.go │ │ └── util │ │ ├── collection.go │ │ └── err.go │ ├── interfaces │ └── usecases
  23. Jonathan Blow, designer for Braid and The Witness, has been live streaming his latest game engine development and posting the streams to Youtube. The latest streams cover the implementation of an improved animation system and animation control methods. Click here to view the full series or watch the embed below.
  24. Jonathan Blow, designer for Braid and The Witness, has been live streaming his latest game engine development and posting the streams to Youtube. The latest streams cover the implementation of an improved animation system and animation control methods. Click here to view the full series or watch the embed below. View full story
  25. Businesses are moving at a greater pace than they ever were. The consumer habits are changing in accordance with the constant evolution in technology which has moved from mainframes to our pockets and wrists. To keep up with the changing consumer habits and to be at the bleeding edge, enterprises are trying hard to catch up. They are increasingly moving to a mobile first strategy and are investing more money than ever on enterprise app development. Enterprise mobility solutions architects are researching innovative development techniques and empowering faster development cycles, minimum development cost, minimum coding; maximum security. App developers are adopting newer development techniques and following modern development practices to fulfil the requirements of their enterprise clients. Some of those technologies, methods, and practices I have listed here: Methods 1. Rapid Mobile App Development (RMAD) Enterprise apps owing to business value they carry consumes more development cycles than consumer apps do. is based on ‘zero’ coding philosophy to shrink development time and meet mission critical business tasks. Application developed with RMAD are good-enough to distribution inside an enterprise to address an adhoc problem that can’t be addressed with the existing applications in place. RMAD is basically Rapid Application Development (RAD) extended to a mobile environment. RMAD, with little coding or by implementing methods like early prototyping and reusing software components, can be used to develop customer facing apps in addition to internal apps. RMAD development environment is web based and supports object oriented programming. 2. Bimodal IT Bimodal IT is the recent trend in enterprise app delivery. As the name suggest, in Bimodal IT, there are two parallel modes involved. One mode of app development focusses on stability another on agility. Mode 1 is traditional and sequential, emphasizing safety and accuracy. Mode 2 is exploratory and nonlinear, emphasizing agility and speed. This is expected to bridge the gap between demand and capacity, which is expected to be between five to one currently. Best Enterprise app development Practices 1. Cross-platform apps are the future of enterprise mobile app development Enterprise apps are more of a need than luxury. An employee is unlikely to complain about an app’s UI or theme color distributed by his employer the way he complains about an app developed by Facebook or Microsoft (Google apps are perfect!). Absence of native UI/UX support remains the biggest problem with cross-platform frameworks, today. They try to generate a common UI on all platforms which alienates users, who are prone to hamburger menu on Android and bottom menu on iOS. Fortunately, enterprise apps remain immune from this problem. There are number of cross-platform frameworks available in the market. The most popular is PhoneGap (owned by Adobe). Xamarin, owned by Microsoft is catching fast though. Objective-C (for iOS) or Java (for Android) can be done in C# with Xamarin, which already offers complete access to 100% of the native APIs for iOS, Android and Windows in C#. Appcelerator, Apache Cordova, Ionic and QT are other viable cross-platform tools that support desktop, web development, and mobile application development. Cross-platform = Faster development + Less Coding + Lower Cost 2. OAuth 2.0 + two-factor authentication for users’ authentication A practical tactic is to use OAuth 2.0. Many vendors support OAuth 2.0 with two-factor authentication including Azure AD, Ping, and Okta. Two-factor authentication requests a user to enter user ID and password (something you know) and a second validation, such as an OTP generated on your mobile phone (something you have) or a fingerprint (something you are). Android, iOS, Windows, and the latest web browsers all support OAuth 2.0 services. No developer should count on any other method of authentication. 3. Context Driven Testing (CDT) Context driven testing is the new form of agile testing. This kind of testing is executed when the end-users have dissimilar preference and requirements. CDT works for the mobile app which serve the need of one end-user but not the other. Let us say Microsoft Paint. Paint is an ideal application for casual graphics work But for a professional graphic designer who wants to add high-res graphics and different font size and colors may rather prefer Adobe Creative Suite. So context driven testing is built on the fact that ‘no solution is the best solution. But in this case, benefit lies with the consumers, since the final product that is approved is a user-friendly product, nonetheless several users may not agree with that as context driven testing is not a universal testing methodology and works in applications where conditions seldom change and test setups are unidentified. Conclusion Enterprises are always dynamic as they continue to succeed in a modern ecosystem dominated by mobiles and wearables. The accessibility of apps as a way of taking on business competition with agility, rapidity, as well as contemplation and proper attention is the right way ahead.