Jump to content
  • Advertisement
    1. Past hour
    2. void APPLICATION::fogEnable(DWORD Color, DWORD Mode) { float Start = 0.5f; // For linear mode float End = 0.8f; float Density = 0.66f; // For exponential modes // Enable fog blending. m_pDevice->SetRenderState(D3DRS_FOGENABLE, TRUE); // Set the fog color. m_pDevice->SetRenderState(D3DRS_FOGCOLOR, Color); // Set fog parameters. if (Mode == D3DFOG_LINEAR) { m_pDevice->SetRenderState(D3DRS_FOGTABLEMODE, Mode); m_pDevice->SetRenderState(D3DRS_FOGSTART, *(DWORD *)(&Start)); m_pDevice->SetRenderState(D3DRS_FOGEND, *(DWORD *)(&End)); } else { m_pDevice->SetRenderState(D3DRS_FOGTABLEMODE, Mode); m_pDevice->SetRenderState(D3DRS_FOGDENSITY, *(DWORD *)(&Density)); } } and applying the code fogEnable(0xffffff, D3DFOG_LINEAR);
    3. What's the length of the *HalfExtent vectors? 'Half extent' makes it sound like the length is half the box extent (which would be a quarter of the length along the respective axis), which doesn't sound right. Is the length of those vectors just the extent? Although it's probably not the source of the problem, it shouldn't be necessary to normalize the box axes as you're doing, I don't think (I'm looking at the first test here). Keep in mind that the cross-product axes can end up being arbitrarily short, which may cause numerical issues. This is accounted for in the second implementation, but not in the first. If you haven't gotten the first implementation working yet, I'd try the following. Call the function with the same box for both arguments, so that the two boxes are coincident. If you get the correct result (true), that will show that the test doesn't actually fail in all cases, in which case you can try to narrow down the cases that do fail. Irrespective of that, once you find a case that fails (returns false when it should return true), use the debugger or logging to determine which axis is triggering the failure and what the relevant values are at that point. That should get you closer to identifying the problem.
    4. What pathfinding technique is used for an enemy to find their way around when looking for the player, and also I'm curious... What pathfinding technique did Goldeneye 64 use when an enemy is alerted to the player's presence and begins to move through the level until they find the player?
    5. Excellent guide, very detailed with some good links included for further reading. The only thing I would probably add is that a developer may sometimes wish to include an embargo date rather than "FOR IMMEDIATE RELEASE" if they want the press you publish on a certain date such as a launch day or sale.
    6. Today
    7. Sanura Sandeep

      CS 1.6

      Download- http://fleshas.lt/csdownloads.php Counter Strike 1.6 is first person shooter genre game with multi-player and single-player features. Counter-Strike 1.6 game server's have a lot of modification's like Death-Run, CSDM, Knife, Zombie Plague and many other's. Counter-Strike (CS) game was developed by Minh Le and Jess Cliffe, Counter-Strike is a game of Half-Life game modification. The first Counter-Strike (CS) game has been distributed separately, and was presented with the Half-Life and other games. In 1999 year's engaged in development of this version of the Planet Half-Life community. Since then, was released a lot of Counter-Strike game beta versions. In 1999 year's June 18 day was released the first publicly accessible Counter-Strike game beta version. In 2000 year's August 12 day Valve has announced the merging with Counter-Strike developers and about during the 2000 Christmas was released Couter-Strike 1.0. The current, wildly popular, Counter-Strike game 1.6 version was released in 2003 year's September 15 day. Counter-Strike (CS) 1.6 game point is to beat down enemies team - Terrorist's (T) or Counter-Terrorist's (CT). When all members of enemie's team is eliminated, then survivor's team wins the match and if no one player was killed in winner's team, then winners team just get's flawless victory. Counter Strike 1.6 multi-player game is more interesting than single player game, because you can meet your friend's, do clan fights and many featured stuff. Counter Strike 1.6 game is full of adventure and action, CS 1.6 gameplay style depends on the map type, if you want to know the rules of the CS 1.6 game which depends on the type of playing map and standard tactics, then just read the next article. From the first CS 1.6 game's release date, CS 1.6 game developer's, publisher's and player's was started to think about this game tournaments. Tournament preparation of Counter-Strike version 1.6 game was made this game more popular and increased range of player's. CS 1.6 game tournament winnings amounted to thousands of dollars, hundreds of the best players in the game, fighting for the prize, Counter-Strike 1.6 game, team members from around the world gathered in the great hall where the fight for the prize. Unfortunately this honorable position currently occupied another game: Counter-Strike: Global Offensive. Counter Strike game has always been the most popular FPS type game, it has been regularly updated and improved - from a variety of bug fixes, slowhack problem's fix, modifications, and additional applications of the game development to the updated versions of the game's release. At this moment, Counter Strike game is very common throughout the world, millions of people playing it from a variety of countries. ----------------------------------------------------------------------
    8. Yesterday
    9. Tom Sloper

      Brilliant game Idea of a GTA Primal.

      Let's try to keep the conversation calm, please. Attack ideas, not people.
    10. A global update for the "Character Interaction" package has been released. For more information click here. https://www.unrealengine.com/marketplace/character-interaction
    11. Using include guards in declaration files (.h files) guarantees that multiple declarations of the same class will not appear in any translation units. Also, the definitions of A and B are in their own .cpp files and do not appear in the translation unit for main.cpp. I think in the quoted text you have miswrote definition for declaration.
    12. Locuskidd

      Brilliant game Idea of a GTA Primal.

      It could be a cop out on their end, but at the same time some devs just work better with 2d rendering as opposed to to 3d.. and from their prospective it might just look better too. To each it's own imo.
    13. There are a lot of blog posts online teaching indie developers “how to write proper press releases for their new games,” and they all provide different (and sometimes conflicting) information. It’s confusing. So, for the past week, I’ve spent my afternoons taking notes on all the useful information within each one, reaching out to established game developers to get their advice on how to write killer game press releases, and talking with PR pros in both game development and outside marketing environments to gather the absolute best information possible on the subject. This post combines all my findings. By the end, you’ll never have to read another “how to write a press release” post again. Sound good? Let’s start with the basics: What is a press release? A press release is a 1-to-2-page piece of writing that announces new and exciting projects you’ve been working on. The purpose of the release is to inform journalists and media sources about your news so they can (hopefully) publish stories about your work. They’re usually written in the third person — in other words, they’re written as if a journalist is writing about your game when in reality it’s just your writing. Press releases are usually distributed through distribution tools or PR firms — but as an indie developer, they’re mainly used to help journalists solidify a story about your news when you pitch them over email. We’ll talk more pitching writers later, but for now, understand this: Getting press is a great way to drive traffic to your new projects and can save you thousands of dollars in advertising costs if done right, so press releases are important! When should you publish press releases? Press releases are typically published when you announce: A new game Game-changing new features or technology Events Partnerships (or other business-related news, like investments or grants (thanks Unreal)) New research Awards Or a resolution to a crisis (which hopefully isn’t your case) …and that’s it for the basics. Now let’s cover the steps for writing your release. Step 1: Find your angle Here’s a brutal truth: No one pays attention to news that isn’t new or interesting. This is especially true for journalists. So without an interesting “story angle” you can take when announcing your news, no one’s going to pay attention to yours either. Gabby DaRienzo, creator of A Mortician’s Tale and co-founder of Laundry Bear, said it best: How do you find that “unique selling point,” you ask? Lewis Denby, creator of the indie dev PR firm Game If You Are (this firm is great for indie devs — check it out!), recommends observing your original motivations for creating your game: A great example of a USP (unique selling point) comes from Numinous Games, creator of Galaxies of Hope, who developed their game to help neuroendocrine tumor patients understand their diagnoses: Taken from an Apple App Store article written about Wahmann’s game. The combination of Numinous Game’s inspiration for creating the game (to help neuroendocrine tumor patients) along with their unique selling point (a game that teaches people about neuroendocrine tumors) makes for a killer story any games journalists would be happy to cover. THAT’s your goal. * * * After you’ve found your angle, it’s time to start the boring s**t. Step 2: Write your headline and subheadline. A good headline serves two purposes: It shows the reader what’s being announced immediately, clearly, and concisely… …and it entices the reader to read the subheadline or first paragraph. A simple formula to follow when writing headlines is “[x] does [y],” like in the following releases: SkyBox Labs Brings Bedrock Version of Minecraft to Nintendo Switch Slitherine is nominated as Economic Disruptor of the Year Keywords Studios acquires Snowed In Studios Bandai Namco Amusement Lab Inc. established for VR arcade development Aaron Marsden writes captivating article about indie game press releases (in his humble opinion) Don’t bury any information here, but don’t make it too boring either. No one wants to read a press release titled “Game Studio releases New Game.” Strike a balance between conciseness and charm and your headline will do just fine. Tip: Great headlines are always written under 18 words. Subheadline The purpose of your subheadline is to expand on the headline if it’s not enough to fully capture your reader’s attention. It serves as an extra “attention grabber” that boosts your readers into the heart of your release. In Numinous Games’ case, the headline and subheadline of their press release could look something like: Headline: “Numinous Games releases Galaxies of Hope for Neuroendocrine Cancer Sufferers” Subheadline: “Game aims to help NET patients understand and cope with their diagnoses” I’d read it. Step 3: Write the first paragraph The first paragraph is the most important part of your press release. Although the headline/subheadline captures your reader’s attention, the first paragraph is what locks them into the piece and keeps them there for the rest of the way. Your first paragraph should answer the all-important “5 W’s”: who, what, when, where, and why. Who’s the press release about? (This will be your company) What’s happening? (This will be your announcement) When will it happen? (The date of your announcement) Where is it happening? (ex. What platforms is your game releasing on, where is your event occurring, etc.) Why is it important? Coschedule, a marketing application, provides this useful template in their blog post for writing effective first paragraphs: [WHO: COMPANY] today announced it will [WHAT] at [WHERE] on [WHEN]. The [EVENT/ANNOUNCEMENT] will provide [BENEFIT] for [AUDIENCE]. Here’s a great example from E-Home Entertainment, the developer of a new game, Gene Rain: Ignore the grammatical errors in the second sentence for now. I’ll say it again: be sure you’re providing the most important information up-front. No burying. (also, stay away from cliches — everyone has “the best game” or “the most exciting gameplay.”) Step 4: The second paragraph The purpose of the second paragraph is to elaborate more on your game and why it’s important to you and to your players. A great way to do this is with a personal quote. As an indie dev, personal quotes allow you to dive deeper into your USP— what compelled you to create your game in the first place? What problem does it solve and how do you hope it helps your players? That’s the information your quote should contain. In the App Store article I referenced earlier, Amy Green of Numinous Games provides a great quote where she talks about the game’s purpose of sharing stories from other tumor patients: Notice how Amy’s quote fits perfectly into the context of her game’s story — this is exactly how you should format yours. Your goal is to make it as easy as possible for journalists to write stories about you, and allowing them to grab a relevant quote straight from your press release without an interview is a great way to do that. Note: In your actual press release, your quote should be a bit longer than Amy’s and should be written in third person. I don’t have the original press release for their game, but if I were to guess, the quote was written something like: “Our goal with Galaxies of Hope was not only to share Maryann’s personal story with NET, but also to help other patients,” said Amy Green of Numinous Games. “It meant so much to tell our own story through this medium that we started thinking about how we could share the stories of others.” Step 5: The third paragraph (Don’t worry, we’re almost done.) The third paragraph completes your story. This is usually where you’ll write about the nitty-gritty details of your game: When writing your third paragraph, ask yourself: “What’s interesting about my game from a player’s perspective? What makes it enjoyable? What could I say to get potential players excited?” That’s what you should describe here. I really love Magicka’s third (and fourth) paragraphs in their press release for their PvP mode. Notice how they’ve divulged just enough information to excite their players on the new mode: (Their tone is killer, too.) Step 6 (Optional): Key, bulleted features If your game has some interesting features that wouldn’t fit into your above paragraphs but still deserve a spot in the press, a common practice is to list them near the bottom of your release. Here’s another example from Magicka: Just be sure not to go overboard — only include things you think your players (or journalists) would find value from. Step 7 (Optional): Technical details. If your game is resource-heavy, it’s a good idea to throw your system requirements here. Step 8: Call to action By now, your potential players have read your release and are pumped to jump into your game. Now they just need to know where to play it. A CTA (call to action) is a short action statement at the bottom of your release that drives traffic to your Steam page or website. Think of it as the “final push” your readers need to take action on your announcement. The key here is to make your CTA actionable. A simple link to your page or a “click here to buy” isn’t enough — you must make it enticing. If you were releasing a VR war game, for instance, you could write something like: Tip: If your Steam store page is super long, consider using a bit.ly link to shorten it up. Step 9: Link to your press kit. If you aren’t already aware, a press kit is: Press kits make it super easy for journalists to grab videos and gifs of your game to use in their articles. I highly suggest checking out the Mortician’s Tale kit on Laundry Bear’s website if you’re making your kit for the first time. It has pretty much everything an effective kit needs, so feel free to copy its base elements. (Thanks again Gabby!) Step 10: Contact information. If a journalist were to reach out to you for more information, where would you send them? It’s usually formatted like so: Name Company Name Phone Number Email This information can go both at the top of the page, as well as near the bottom like on this release (we’ll format this in a second). Step 11: Add the final touches Almost done. Now you just need to add some extra information to make your press release an actual press release: A “FOR IMMEDIATE RELEASE” tag with the date of your release. This will go to the right of your contact information. City, state, and location information. This will go directly before your first paragraph. An image, video, or gif showing off your game. This can go directly above or after your headline and subheadline. And BOOM — you‘re done! At the end of the process, your release should look something like this: Although Magicka’s release is really good, there are a few things I’d change about it: There’s no “FOR IMMEDIATE RELEASE.” This may confuse journalists. There’s no quote from the developers. This makes it feel impersonal. Their CTA is pretty bad (“Find out more here”). …but other than that, it’s a great reference point you can use when writing your own release. Extras When should you post your release? Sometimes the timing of your release is as simple as “whenever your game is ready.” But other times, especially in Tim Ruswick’s case, putting thought into the timing of your release can be crucial to its success: Keep this in mind with context to your game. Where should you send your release? Most companies simply post their press releases on their website, announce it on social media, put it through a PR distributor like PRNewswire, and wait for journalists to pick it up. But that won’t work for indie devs. When you’re starting out you don’t have enough of a media presence to simply post your press release, and on a tight budget, paying big bucks for PR tools isn’t viable. That means you’ll have to manually send your release to journalists. So before you post your press release, go on some of the popular gaming news sites like Kotaku, Polygon, or PC Gamer and gather a list of journalists (and their emails) who’ve written about games similar to yours. Then, once you’re ready to release, send them an email with a pitch for your story. I just made that process sound way more simple than it actually is, so I recommend using this guide for reaching out to journalists. * * * That’s it! By now, you should have enough information to write effective press releases without having to read another “how to write a press release” post. But here’s the thing: Getting press is only one way to market your game, and by no means is it the end-all-be-all. Continuing your marketing efforts is crucial to your success. That’s why I put together a complete guide on how you can promote your game with Twitch influencers — it covers everything from finding the right influencers, to reaching out, to setting up deals, to verifying content, and much more. You can read that here. Note: This post was originally posted on the author's Medium blog, and is reproduced here with kind permission. Aaron recommends PowerSpike's Game Marketing Advice Newsletter, sent every Monday.
    14. IndieGuyy

      How can I move a hero along the floor mesh?

      Okay great! Actually I was assuming the raycast was starting from camera position (because I was thinking about Full Screen Quad Ray Marching). One silly question for you... In a nutshell I basically would be converting screen clicks into 3D Space, but exactly how do find the triangle i clicked, and most importantly the position i clicked within the triangle face?
    15. I could say something stupid like those amateurs have written their own 3D graphics and physics engines while you were toying with game maker, so probably they do not fear 3D. They also don't steal assets and can model and texturing too. They may have worked on games you do not need to search for in deep corners of the web, because everybody knows them already. So come on and be a bit polite i suggest. We did not attack you - you provoked the response yourself. I hope your games will be as entertaining as your appearance here... if so, there's potential...
    16. Hi all, I've been struggling to get my OBB - OBB intersection test working, using the Separating Axis theorem. After doing 2 different implementations, the 1st one always returns false, and the other implementation always returns true. Debugging shows valid OBB input passed to the functions (verified by debug drawing the OBB's by the renderer). Any input on what I might be doing wrong, is really appreciated. bool CBaseCollision::OBBOBBIntersect(const CR_OBB &pOBB1, const CR_OBB &pOBB2) { static CR_VECTOR3 rPos = pOBB2.Center - pOBB1.Center; CR_VECTOR3 xAxis1 = pOBB1.XHalfExtent; xAxis1.Normalize(); CR_VECTOR3 yAxis1 = pOBB1.YHalfExtent; yAxis1.Normalize(); CR_VECTOR3 zAxis1 = pOBB1.ZHalfExtent; zAxis1.Normalize(); CR_VECTOR3 xAxis2 = pOBB2.XHalfExtent; xAxis2.Normalize(); CR_VECTOR3 yAxis2 = pOBB2.YHalfExtent; yAxis2.Normalize(); CR_VECTOR3 zAxis2 = pOBB2.ZHalfExtent; zAxis2.Normalize(); if( SeparatingPlaneExists(rPos, xAxis1, pOBB1, pOBB2) || SeparatingPlaneExists(rPos, yAxis1, pOBB1, pOBB2) || SeparatingPlaneExists(rPos, zAxis1, pOBB1, pOBB2) || SeparatingPlaneExists(rPos, xAxis2, pOBB1, pOBB2) || SeparatingPlaneExists(rPos, yAxis2, pOBB1, pOBB2) || SeparatingPlaneExists(rPos, zAxis2, pOBB1, pOBB2) || SeparatingPlaneExists(rPos, CMathHelper::CrossVec3(xAxis1, xAxis2), pOBB1, pOBB2) || SeparatingPlaneExists(rPos, CMathHelper::CrossVec3(xAxis1, yAxis2), pOBB1, pOBB2) || SeparatingPlaneExists(rPos, CMathHelper::CrossVec3(xAxis1, zAxis2), pOBB1, pOBB2) || SeparatingPlaneExists(rPos, CMathHelper::CrossVec3(yAxis1, xAxis2), pOBB1, pOBB2) || SeparatingPlaneExists(rPos, CMathHelper::CrossVec3(yAxis1, yAxis2), pOBB1, pOBB2) || SeparatingPlaneExists(rPos, CMathHelper::CrossVec3(yAxis1, zAxis2), pOBB1, pOBB2) || SeparatingPlaneExists(rPos, CMathHelper::CrossVec3(zAxis1, xAxis2), pOBB1, pOBB2) || SeparatingPlaneExists(rPos, CMathHelper::CrossVec3(zAxis1, yAxis2), pOBB1, pOBB2) || SeparatingPlaneExists(rPos, CMathHelper::CrossVec3(zAxis1, zAxis2), pOBB1, pOBB2)) return false; return true; } bool CBaseCollision::SeparatingPlaneExists(const CR_VECTOR3 &pPos, const CR_VECTOR3 &pAxis, const CR_OBB &pObb1, const CR_OBB &pObb2) { float baseDist = fabs(CMathHelper::DotProductVec3(pPos, pAxis)); float compDist = fabs(CMathHelper::DotProductVec3(pObb1.XHalfExtent, pAxis)) + fabs(CMathHelper::DotProductVec3(pObb1.YHalfExtent, pAxis)) + fabs(CMathHelper::DotProductVec3(pObb1.ZHalfExtent, pAxis)) + fabs(CMathHelper::DotProductVec3(pObb2.XHalfExtent, pAxis)) + fabs(CMathHelper::DotProductVec3(pObb2.YHalfExtent, pAxis)) + fabs(CMathHelper::DotProductVec3(pObb2.ZHalfExtent, pAxis)); return(baseDist > compDist); } Implementation 2, based on the Realtime collision book implementation: bool CBaseCollision::OBBOBBIntersect(const CR_OBB &pOBB1, const CR_OBB &pOBB2) { float ra, rb; CR_VECTOR3 u_obb1[3]; CR_VECTOR3 u_obb2[3]; u_obb1[0] = pOBB1.XHalfExtent; u_obb1[0].Normalize(); u_obb1[1] = pOBB1.YHalfExtent; u_obb1[1].Normalize(); u_obb1[2] = pOBB1.ZHalfExtent; u_obb1[2].Normalize(); u_obb2[0] = pOBB2.XHalfExtent; u_obb2[0].Normalize(); u_obb2[1] = pOBB2.YHalfExtent; u_obb2[1].Normalize(); u_obb2[2] = pOBB2.ZHalfExtent; u_obb2[2].Normalize(); float e_obb1[3] = { pOBB1.Extents.x, pOBB1.Extents.y, pOBB1.Extents.z }; float e_obb2[3] = { pOBB2.Extents.x, pOBB2.Extents.y, pOBB2.Extents.z }; // compute rotation matrix expressing OBB2 in OBB1's coordinate frame float tR[3][3]; for(int i=0;i<3;++i) { for(int j=0;j<3;++j) { tR[i][j] = CMathHelper::DotProductVec3(u_obb1[i], u_obb2[j]); } } // compute translation vector t CR_VECTOR3 orgt = pOBB2.Center - pOBB1.Center; float t[3]; // bring translation into 1's coordinate space t[0] = CMathHelper::DotProductVec3(orgt, u_obb1[0]); t[1] = CMathHelper::DotProductVec3(orgt, u_obb1[2]); t[2] = CMathHelper::DotProductVec3(orgt, u_obb1[2]); // compute common subexpressions. Add epsilon, to prevent cross product being 0 for parallel vectors float tAbsR[3][3]; for(int i=0;i<3;++i) { for(int j=0;j<3;++j) { tAbsR[i][j] = abs(tR[i][j]) + 0.0002f; } } // test axes L = A0 / A1 / A2 for(int i=0;i<3;++i) { ra = e_obb1[i]; rb = e_obb2[0] * tAbsR[i][0] + e_obb2[1] * tAbsR[i][1] + e_obb2[2] * tAbsR[i][2]; if(fabs(t[i]) > ra + rb) return false; } // test axes L = B0 / B1 / B2 for(int i=0;i<3;++i) { ra = e_obb1[0] * tAbsR[0][i] + e_obb1[1] * tAbsR[1][i] + e_obb1[2] * tAbsR[2][i]; rb = e_obb2[i]; if(fabs(t[0] * tR[0][1] + t[1] * tR[1][i] + t[2] * tR[2][i]) > ra + rb) return false; } // Test axis L = A0 x B0 ra = e_obb1[1] * tAbsR[2][0] + e_obb1[2] * tAbsR[1][0]; rb = e_obb2[1] * tAbsR[0][2] + e_obb2[2] * tAbsR[0][1]; if(fabs(t[2] * tR[1][0] - t[1] * tR[2][0]) > ra + rb) return false; // Test axis L = A0 x B1 ra = e_obb1[1] * tAbsR[2][1] + e_obb1[2] * tAbsR[1][1]; rb = e_obb2[0] * tAbsR[0][2] + e_obb2[2] * tAbsR[0][0]; if(fabs(t[2] * tR[1][1] - t[1] * tR[2][1]) > ra + rb) return false; // Test axis L = A0 x B2 ra = e_obb1[1] * tAbsR[2][2] + e_obb1[2] * tAbsR[1][2]; rb = e_obb2[0] * tAbsR[0][1] + e_obb2[1] * tAbsR[0][0]; if(fabs(t[2] * tR[1][2] - t[1] * tR[2][2]) > ra + rb) return false; // Test axis L = A1 x B0 ra = e_obb1[0] * tAbsR[2][0] + e_obb1[2] * tAbsR[0][0]; rb = e_obb2[1] * tAbsR[1][2] + e_obb2[2] * tAbsR[1][1]; if(fabs(t[0] * tR[2][0] - t[2] * tR[0][0]) > ra + rb) return false; // Test axis L = A1 x B1 ra = e_obb1[0] * tAbsR[2][1] + e_obb1[2] * tAbsR[0][1]; rb = e_obb2[0] * tAbsR[1][2] + e_obb2[2] * tAbsR[1][0]; if(fabs(t[0] * tR[2][1] - t[2] * tR[0][1]) > ra + rb) return false; // Test axis L = A1 x B2 ra = e_obb1[0] * tAbsR[2][2] + e_obb1[2] * tAbsR[0][2]; rb = e_obb2[0] * tAbsR[1][1] + e_obb2[1] * tAbsR[1][0]; if(fabs(t[0] * tR[2][2] - t[2] * tR[0][2]) > ra + rb) return false; // Test axis L = A2 x B0 ra = e_obb1[0] * tAbsR[1][0] + e_obb1[1] * tAbsR[0][0]; rb = e_obb2[1] * tAbsR[2][2] + e_obb2[2] * tAbsR[2][1]; if(fabs(t[1] * tR[0][0] - t[0] * tR[1][0]) > ra + rb) return false; // Test axis L = A2 x B1 ra = e_obb1[0] * tAbsR[1][1] + e_obb1[1] * tAbsR[0][1]; rb = e_obb2[0] * tAbsR[2][2] + e_obb2[2] * tAbsR[2][0]; if(fabs(t[1] * tR[0][1] - t[0] * tR[1][1]) > ra + rb) return false; // Test axis L = A2 x B2 ra = e_obb1[0] * tAbsR[1][2] + e_obb1[1] * tAbsR[0][2]; rb = e_obb2[0] * tAbsR[2][1] + e_obb2[1] * tAbsR[2][0]; if(fabs(t[1] * tR[0][2] - t[0] * tR[1][2]) > ra + rb) return false; return true; }
    17. JTippetts

      How can I move a hero along the floor mesh?

      40 units is peanuts. I think you underestimate exactly how quickly modern CPUs can do math, especially simple math like a barycentric triangle interpolation. Trying to be too clever and doing something like replacing a simple calculation (fast) with something like a table lookup (likely slower due to cache miss or memory bottlenecking) is exactly why it is common to warn people against premature optimization.
    18. Introducing Jumpaï! A game made using LibGDX. It's been 21 months the game is in development and we just released version 0.3! It's an online game, there's a server running at http://jumpai.net/ and everyone can join! Registering is easy, username password and you are good.The point of the game is to make your own level! There's an easy to use, integrated editor allow you to make your levels and they same automatically on the cloud. You can then join them online to play with your friends. A lot of cool mechanics, portals, powerups, items... Check it out! Trailer: Also, you can join us on discord https://discord.gg/R4ZafEw Screenshots:
    19. Tape_Worm

      Gorgon v3 – Animation

      I got the rework of the animation system for v3 done and up on the git hubs. Naturally, I took this awesome video of it. It’s a music video. But not just any music video. A very bad, cheesy 80’s music video (the best kind). Of course, the music is metal \m/ (done, very poorly, by yours truly). Anyway, that’s all. View the full article
    20. IndieGuyy

      How can I move a hero along the floor mesh?

      Your right, I should profile it before making early judgments, but at the same time I have to watch out going down a path of refactors. I am only assuming because there could be 20-30-40 different units in the same scene all animated. I am trying to accomplish this type of system without actually doing a raycast, and trying to keep everything as 2D math. I was thinking I could precalculate a tilemap(based on some floor mesh) for the entire level and store height for a x,y lookup and interpolate between tiles. But this quickly runs into issues because the floor mesh that this tilemap is based on doesnt really guarantee the tilemap is proportional(same triangle face sizes), unless its built that way, which could be meticulous... Ill figure something out, thank you for the ideas and tips.
    21. Broken English. It is "than" not 'then' It is not being arrogant, but highly ambitious and of high standard. 'Veterans'? They sounded like clueless amateurs who fear 3D and stick to 2D. Saying this can't be made. Just search 'Lost soul aside" or "War storm" or "Bright memory" or "Banished" or "kiwi 64" and see what I mean.
    22. CrazyCdn

      Brilliant game Idea of a GTA Primal.

      Well what is the difference between asset flipping a model and asset flipping textures? Why is one okay in your books but not the other? In some cases making a texture is more difficult then a model. I'm honestly curious about this. Based on your previous post that got locked down by the mods, you're surprised by negative feedback? You were being very arrogant and rejecting advice/comments and experience from industry veterans with zero to show for your arrogance. It would be one thing if you had published several well received games in a very short period to back up your claims. Also as an aside, seeking vengeance is a complete and total waste of your time and the other person is likely to not give a darn. Especially on forums.
    23. JTippetts

      How can I move a hero along the floor mesh?

      Is it actually too slow (based on profiling data), or do you just think it will be too slow? What leads you to believe that a precalculated solution (likely adding another memory access in lieu of a calculation) would be faster? You would likely be better off implementing the interpolation, then optimizing if profiling indicates it is too slow.
    24. How about posting it. Posting a screen shot. Telling us what you've done to attempt to debug the issue? We're not here to write your code for you, but more of a teaching resource, we will point out bugs/errors and help with logic but you have to put in the effort.
    25. You are pretty close, actually! What makes this work is that the header just contains the declaration of the class, not it's actual implementation. All the compiler sees is the promise that there is a class named A with the following functions and it can include references to these functions. The actual implementation file, Alpha or Beta in your case, only contain references to the class and it's functions but not it's actual code. That would come from the .cpp file. It's up to the linker at the end to merge the compiled code for the class itself with the references from Alpha and Beta. It's different if the code is directly included in the header file for the classes. If they are not templated and not inlined, the linker will actually complain about multiple definitions of the same function existing in both Alpha and Beta. That's because each translation unit actually did emit code for the class. When inlining, there is no actual function generated and instead the code of the function is directly emitted in the callsite, so no duplicate functions here. Lastly, templates: The compiler has to see the full definition when instantiating a template, so if Alpha and Beta both include class A and instantiate it as A<int>, they will both generate the same code for A<int>. In this case however, the linker will not complain about duplicate implementations of A<int> and instead just squash both of them down into one so that both Alpha and Beta reference the one canonical implementation of A<int>.
    26. IndieGuyy

      How can I move a hero along the floor mesh?

      Using barycentric interpolation is great, but I think it is a bit slow if I had to do this test for each movable unit in the area, right? So what are alternatives that use precalculated data?
    27. Sure do! I'll get together a vlog about this very topic soon! Thanks!
    28. As I'm reading C++ Programming Language and some other tutorials I came on Translation Unit part. I got a bit confused how they work with classes. What is rally not clear to me is inclusion of class headers in different other files that need them. Somewhere in these tutorials I red that each time when we #include a class header, that the current translation unit has its own class. From that I understood that even if we use include guards, that different files, that include same classes, have their own definitions of classes. So for e.g. let's say that we have two classes A and B. Another two separate files Alpha and Beta, where they include both classes. A third file main.cpp that includes Alpha and Beta, but knows nothing of A and B. From what I understood is that in main.cpp we will have two definitions of A and two of B, even if A and B use include guards. Is this true or I confused something?
  • Advertisement
×

Important Information

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

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!