Advertisement Jump to content
  • Advertisement


  • Content Count

  • Joined

  • Last visited

Community Reputation

358 Neutral

About Stragen

Personal Information

  • Interests

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Stragen

    A wild thought appeared

    You're correct in some respects, and i'm playing a little devils advocate to tease out your thinking on it to see where you end up and build the discussion. But to deviate very slightly for a moment, the problem i have particularly with moralistic thinking is that its so subjective. Its a key, absolutely critical, aspect of thought when we start working on machine learning algorithms that have the ability to 'judge', which drives my comment that you need humans to make the final call - introducing the motivation element into the mix. A machine will consider only the historical evidence it has been used to build its models of reality, and if that 'evidence' is biased in any way you may as well not use it, this bias has been seen in insurance calculations, information heatmapping, and forecasting crime and incidents. Hell it took Microsoft's chat bot only 24 hours of interaction with the human race to become a racist xenophobe. To go back to your point from before, the problem with the current corporate and global environments, is not so much bragging about doing something like that, but more "We ask no questions." In an environment where you can choose between an organisation that will "snoop on your data", vs, an organisation that wont... the majority of people currently would go with the latter over the former, because personal and organisational privacy is more important than the 'unknowns'.
  2. Stragen

    A wild thought appeared

    A commercial entity's primary driver is making money rather than being morally or ideologically correct... While it is true to say companies are run by people, i think it is a little of a long bow to draw to say that companies of the size that would be required to the things we're discussing are driven by the 'norm' of what we accept as moral values. Remember, morals are based on your culture, and cultures differ across the world. Ideologically what is acceptable in the US may not be acceptable in the Middle East, and certainly vice versa. And now you're in an authoritarian regime, where true encryption is outlawed (cause you need assurance you can reverse it to review the content), privacy is an illusion, and the government can see everything you're thinking about.
  3. Stragen

    A wild thought appeared

    The legal mechanisms to do this at a cloud level still doesn't exist, and this is what i mean by going down that authoritative path... you stumble into a minefield of all sorts of proportions. Youtube is a really good example of where this policy is implemented by a provider, and has challenges, it's attempting to enforce DMCA and Copyright conditions on all its contents through the takedown system. Not all countries have the same level of copyright adherence, but in order to post content on the system you have to agree to be subject to those rules. Its not uncommon to see false positive violations, resulting in video or audio being removed from the medium... which is where you're looking to. This is all nicely wrapped up in the TOS, and so forth... However, when you try to extend that to CSPs (Cloud Service Providers) and unstructured data within those zones, you're broaching a topic of much more immense levels of concern. Do we only care about the image files that are stored in unstructured data buckets such as S3? or do we care about whats stored as data blobs within databases, what if its encrypted? Do we then go down the path of looking at transitive data in memory? S3 alone is likely to be over an exabyte of data, and potentially growing at a PB a day, likely more. Additionally to this, who's jurisdiction applies? US because its a US based company? Australian, because the customer is in Australia? European, because the region the server is hosted in is European? What happens if a false positive trigger then wipes an entire PB of data because there was a 80% confidence match on a couple of files, and conversely, what happens when they fail to remove a file that was deemed to be removed - what is the cost of these events commercially? Does it delete from the whole cloud, if so, what about those services that are 'quarantined' (cause this is a thing)? What if i want to maliciously remove someone else's presence on the internet? I think its a interesting idea, but in our current climate of 'privacy' and 'data sovereignty' its actually a two edged sword to offer a service that scans the content of a cloud and removes the data... because you have to, some how, inspect information and files that are considered protected to ensure that the content of interest is not present. This leads us down to the whole dystopian authority state condition that we get warned about, and such a powerful interface should not be released to the machines to control completely, and any people reviewing such triggers would have to be trusted implicitly and uncorruptable.
  4. While i know this is a week or so old now, but the updates they've made to the ToS now, with their changes to the ToS retrospective-ness, make the whole conversation much different. It seems that they've listened and the restructure and re-wording seems much clearer and less restrictive.
  5. Stragen

    A wild thought appeared

    Where I work i'm investigating video analytics, facial recognition, and algorithm assisted image recognition solutions that are available in the market. There are some really rudimentary approaches (pixel matching), more interesting approaches (key item extraction and comparison) and even more complicated object identification and extraction coupled with model development for future comparisions. The approach you talk about above, with the MD5 hash will allow you to compare image files to one another, however MD5 hash fingerprints will only work so far, and this goes for Pixel Matching... it relies on files being exactly the same, scale, rotation, etc. MD5's should be identical between files made at the same time, however if internal image metadata varies - not the image itself - the file may not be identical, thus fail a MD5 test while being visibly identical. Pixel matching falls apart when the image has been shrunk, and such challenges need to be captured. The other approaches extract aspects of similarity out of the image, and use those extracted elements (for example a face, face structure, etc) to compare elements in images or videos for similarity and then determine a confidence level. Its a big field and there are a lot of data scientists, AI developers, and 'big data' analysts out there building these capabilities. If you're looking for 'real world' solutions that are out there, i'd recommend looking up OpenCV, TensorFlow, CudaNN from an enabling perspective, and then products such as xJera, and Qognify. This is a bigger problem. Once something is out on the internet, how do you create any assurance that when you request a delete that anyone is going to respect that request? Until an authoritarian system exists for all content on the internet - and connected devices, which is incredibly unlikely to occur due to privacy, data ownership rights, and patent law (to name a few), there will be no true way to ensure that any form of delete request will be adhered to.
  6. There are qualifiers around what you can and cant do, for those who are considering it and to save people looking for it themselves, the appropriate section is below. "You are permitted to post snippets of Engine Code, up to 30 lines of code in length, online in public forums for the sole purpose of discussing the content of the snippet, or distribute such snippets in connection with supporting patches and plug-ins for the Licensed Technology, so long as it is not for the purpose of enabling non-Engine Licensees to use or modify any Engine Code, or to aggregate, recombine, or reconstruct any larger portion of the Engine Code." GDPR is a minefield of conditions, i'm not even mildly across all the rules and regs for that (i'm going to be doing a course on it soon enough no doubt), so i'll make no comment on anything to do with GDPR.
  7. Microsoft have their standard clauses of "thou shalt not modify the code in bad ways" and "thou shalt not use this code to commit malicious actions". I don't see any similar level of restriction being placed on the 'compiled executable as a result of using the libraries/tools' but they do have restriction on the distribution of modifications to the core without it being made clear. Having looked over the Epic's TOS/EULA they've written theirs in more of a permissive way than restriction, but a similar - if you stand on one leg and cock your head to the side - situation exists for distributing your game with 'uncooked engine code'. I strongly believe that this whole issue is most likely as a result of the seat licensing mechanism being broken by cloud based service providers, or being outright bypassed. The closer analogy being the licensing arrangement for Visual Studio mandates you have a license per seat to use it, even if you publish it as a virtual application, and the license needs to be tied to an actual person - granting you one use of the application. I struggle to believe that there is even a remote intent to prevent the use of cloud based service providers supplying compute space for developers to run their application on. It would align well with the beta cloud hosting services that they're investigating now, but I think it is counter the company's image to go down this path. <edit> Another thing occurs to me, elsewhere in the EULA/TOS there is mention that you agree to allow Unity to record details about the consumers of the application you've released, in some way to determine the number of people who have purchased your game... perhaps it is related to this and assuring that we're not just nvidia sheild streaming games from web platforms (all computation done on server, end user sees only video)? Maybe this style of streaming breaks their ability to track the number of consumers?
  8. The whole line at the start of 2.4 is probably the root of the problem: "You may not directly or indirectly distribute the Unity Software, including the runtime portion of the Unity Software (the “Unity Runtime”) " "Unity Software" is already a defined term, that from this point in the document we will also refer to as "the Unity Runtime" - because thats clearer, obviously. I think this was a goof by probably an intern or legal aide who isnt overly comfortable with the concept that "Runtime" actually means something to the industry... particularly as Unity Runtime is not defined at all in section 8. I'm still keen to see how Unity digs up from this one tho.
  9. They fail to define the term "Unity Runtime", "Managed Service" and "SDK Integration", though they call them out as 'defined terms' as they are capitalised where used. I'm going to assume that the undefined "Unity Runtime" means the Unity Editor and all its dependent executables, for example, unity.exe, unityhelper.exe, etc. This assumption is based on the defintion of "Unity Software" from the 8.13 (“Unity Software” means all versions and updates of all the downloadable Unity Pro, Unity Plus and Unity Personal software products identified on Unity’s website.) With this in mind, I read this all as being: A) You cant run the Unity Editor tool through a cloud service provider, or on a remote server via technologies such as citrix. (this would be to avoid licensing issues) B) You cant create inventive ways to make use of the Unity Editor through SDK/GDK or other Middleware that you supply to customers. (this would be to avoid people making use of a service they thought was not unity, but in the end was unity - without licensing) C) You cant supply an emulation of the Unity Editor to deliver via cloud services. (this would prevent what Amazon just did with MongoDB) I love legalese long run on sentences. "You may not directly or indirectly distribute the Unity Software, including the runtime portion of the Unity Software (the “Unity Runtime”), or your Project Content (if it incorporates the Unity Runtime) by means of streaming or broadcasting so that any portion of the Unity Software is primarily executed on or simulated by the cloud or a remote server and transmitted over the Internet or other network to end user devices without a separate license or authorization from Unity. " I'm guessing the intent of the above is to say you cant do a "Twitch plays" unity development. Basically you have to be local to the editor to be using it. "Without limiting the foregoing, you may not use a managed service running on cloud infrastructure[..] or a specific integration of a binary add-on (for example, a plugin or SDK) or source code to be integrated in the Unity Software or Your Project Content incorporating the Unity Runtime[..] to install or execute the Unity Runtime on the cloud or a remote server, unless such use of the Managed Service or SDK Integration has been specifically authorized by Unity. " I'm again guessing the intent of the above specifies you cant use a whole range of things to install or execute the unity runtime on the cloud... the use of the "Your project content" in this appears to limit that you cant code into your project a way to install to a cloud location, IE, no button press deployment of the unity editor to the cloud. The above bolded by me are the conditions, the italicised is the action. "This restriction does not prevent end users from remotely accessing your Project Content from an end user device that is running on another end user device. " Again, intent seems to be that you can have your "Project Content" (Defined as: “Your Project Content” means games, applications, software or other content that you develop with the Unity Software.) accessible from an end user device from a different end user device.
  10. Determining if something is in a bounding sphere is simple. You just need to check the distance between the center of the sphere to the point and compare it with the sphere’s radius. If this distance is less than the radius, then the point is inside the sphere. <edit> Hive mind above...
  11. I was just writing this... ninja'd. So i guess you're trying to do this to a static world object? I'll continue my googling then.
  12. Stragen

    Hello all

    By all means write your own engine, but as Pep suggests, it will take you a long time as it is a big task. You mention learning OpenGL and DirectX libraries as examples, but be mindful that graphics is only one aspect of the engine. You can easily go down deep rabbit holes with loading 3d models - this can be challenging based on the specific tools you use and their export functions (Blender vs Maya vs 3dsMax) and what formats you want to code for - i spent a solid month coding a Collada file format interpreter and animation process flow - and another 3 weeks building a voxel based terrain system (not minecraft styled, more like space engineers), loading raw textures (BMP? JPG? PNG? all file formats differ in particular ways), particularly if you're looking to support both OpenGL and DirectX - there are some truely fundamental differences that can trip you up (LHS vs RHS notations and matrix differences is one example). You'll probably spend more time on building a scripting language for your game, and building in the I/O aspects. Owing to you looking to build an MMO, you will need to have strong networking knowledge, coupled with strong multithreading understanding. Building an AI system will also be fun (my current project) and i would recommend starting with a state engine approach to keep things a little more simple. UX design knowledge (User Experience) is important for an MMO, which will bring this up from the 'coding layer' to the game design and user interface considerations. Without knowing what you have, i would recommend building a good library of books on the various topics. I have a former nintendo library Collada book, books on AI, a couple of books on Physics, vector mathematics, linear algebra, game based networking and multi-threading. You will also need to consider the narrative of your world that you're building, interactions between actors, item design and theme. Politics, etc.
  13. Stragen

    Learning to Accept your Limitations as a Lone Developer

    I agree, the lesser effort required to get to a 'minimum viable product' or a real outcome can be seen as a cheat, however we teach in programming that cheating in this way isn't necessarily a bad thing. We frequently promote the concept of re-use of code, templatising, making code modular so that it can be ported between projects, and when identified as being the 'more efficient' way of getting the job done that we use these shortcuts to do so. Work smarter - not harder... etc. There is a large divide between making use of Unity/Unreal/GameMaker/etc, and being an 'asset flipper' or 'C&P' game, but i absolutely see where you're coming from. Steam has been doing a moderate job (lets not be too generous) of removing obvious asset flip games off the store. Being a Unity hobbyist myself (i simply picked an engine and have kept with it for simplicity sake), i see the challenge with the perception of unity games is that because of the low barrier to entry, low skilled people are producing low value productions, and putting them on steam/itch indiscriminately, watering down the perception of unity being a quality development platform... Unreal has a somewhat higher barrier to entry, leading to somewhat fewer 'low value productions' being out there in the world. Further compounding this issue of 'asset flipping' is that these engines encourage development of "asset kits", for example the "uMMORPG" asset that is in essence an mmo in a box, and such allow for quick to market release of 'products' with no effort. I think people putting these 'games' for sale without producing original content within that asset kit should be called what they are, scammers, but people who use them as the foundation to make the game - tell a story, inspire learning, or produce a challenge for a player - should be exempt from the hate.
  14. Stragen

    Learning to Accept your Limitations as a Lone Developer

    There is a real schism for people in this community, particularly when it comes to 'development motivations'. These motivations can be anything for anyone. There are a large number of lets say - 'engine purists' or 'Monolithics' - who's motivation is not only making the 'game' aspect of the programming, but also being able to develop the whole system and its supporting systems. You will find this argument popping up all the time in the 'engine' and 'for beginners' forums. The justifications often range in the realm of 'i'm doing this to learn' (one I've used myself), 'i don't trust other people's work', 'i don't want to beholden to someone else's development cycle', and 'i want to be in control of the whole system so i can add and remove features at will'. These are all valid reasons, provided they align with your skills, capabilities, and objectives. It makes little sense as a 'solo game developer' to forsake tools to improve your productivity if your primary objective is to produce a game in a short to middle term. Part of the challenge with this site, and particularly with the blog section, is that there is a perception that this is authoritative. That is, you're giving hard and fast advice and personally i think this perception is undeserved, so some people will specifically challenge you on insights that you make in blogs and not always constructively. There are a few people who have been on this site for a very long time who i respect as content providers (L. Spiro, Hodgeman, to name a couple), all others i see as interesting alternatives to doing things, or opportunity for insight that i might not have considered. At the end of the day though, i find this community to be reasonable when it comes to making use of commercial engines, libraries, and other 'accelerators' - everyone has their opinion on which is best though. Throw away comments such as what has happened here are going to happen, but the community as a whole, in my opinion is much more open to the idea of making games vs. making engines - provided that's your objective. I'd be keen to see more about your game that you're working on, so i hope you stick around and continue to blog your progress.
  15. You need transitional tile-maps for every possible transition, that is correct, if you want to explicitly transition between each material type. There are only 14 possible transitions positions (excluding the "all wall"/"all floor" non-transition tiles) provided you're allowing only 90 degree angles. FWIW, the example i've given above misses 2 possibilities, the two diagonals (top right + bottom left, and Top left + bottom right). When making 2d tile-maps my approach in Photoshop is create a square texture, paste the background texture (that happens to be tiled so edges are not a problem) select the whole area, shrink the selection by 1/3rd of the space, paste the foreground (which again is tiled) texture, and then using border selection create an appropriately thick 'wall' between the two as a transition so it looks good. Then do the inverse for the reverse transition, noting that the N,E,S,W cells should be the same as the corresponding S,W,N,E cells (more or less) from the first image, finally, i take the two diagonals and overlay them to create the diagonal blocks. Typically for a prototype this might take ~20 mins per terrain type for basic transitions. In changing tiles; when you change one tile, you trigger each neighbor to recalculate their neighbors and adjust appropriately, the same generation approach applies. Note its important to only trigger the changes when you change something, as re-scanning your entire tile-map every frame is costly. Yes, this is a common way to do it, again you're talking about in 2d space only 16 options for a specific cell's shape. It can be achieved using flags, values, or calculations however for a 2d tile-map it happens to be only hexadecimal F options per terrain type, and easily visualized when converting to binary, if we let 1 represent a wall, and 0 represent a floor/or transparency. Note: i'm assuming we're working clockwise from the top left. 0000/1111 = ground or wall fully filled, 0001,0010,0100,1000 = are all outer corners (only the corner (1) is a wall) 0011,0110,1100,1001 = are all straight edges 1011,1101,0111,1110 = all inner corners (the corner (0) is a floor) 1010, 0101 = are the diagonals, which graphically would meet at the center A lookup table based on these values can easily be constructed, and IIRC can be faster than a calculated method of working it out.
  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!