• Advertisement

Search the Community

Showing results for tags 'Open Source'.



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

  • GameDev Unboxed

Categories

  • Game Dev Loadout

Categories

  • Game Developers Conference
    • GDC 2017
    • GDC 2018
  • Power-Up Digital Games Conference
    • PDGC I: Words of Wisdom
    • PDGC II: The Devs Strike Back
    • PDGC III: Syntax Error

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
    • For Beginners
    • GameDev Challenges
    • 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
  • GameDev Challenges's Topics

Calendars

  • Community Calendar
  • Games Industry Events
  • Game Jams
  • GameDev Challenges's Schedule

Blogs

There are no results to display.

There are no results to display.

Developers

Developers


Group


About Me


Website


Industry Role


Twitter


Github


Twitch


Steam

Found 42 results

  1. Recently a long-awaited event has happen - Unity Technologies uploaded the C# source code of the game engine, available for free download on Github. The code of the engine and the editor is available. Of course, we couldn't pass up, especially since lately we've not written so many articles about checking projects on C#. Unity allows to use the provided sources only for information purposes. We'll use them exactly in these ways. Let's try out the latest version PVS-Studio 6.23 on the Unity code. Introduction Previously we've written an article about checking Unity. At that time so much C#-code was not available for the analysis: some components, libraries and examples of usage. However, the author of the article managed to find quite interesting bugs. How did Unity please us this time? I'm saying "please" and hope not to offend the authors of the project. Especially since the amount of the source Unity C#-code, presented on GitHub, is about 400 thousand lines (excluding empty) in 2058 files with the extension "cs". It's a lot, and the analyzer had a quite considerable scope. Now about the results. Before the analysis, I've slightly simplified the work, having enabled the mode of the code display according to the CWE classification for the found bugs. I've also activated the warnings suppression mechanism of the third level of certainty (Low). These settings are available in the drop-down menu of PVS-Studio in Visual Studio development environment, and in the parameters of the analyzer. Getting rid of the warnings with low certainty, I made the analysis of the Unity source code. As a result, I got 181 warnings of the first level of certainty (High) and 506 warnings of the second level of certainty (Medium). I have not studied absolutely all the warnings, because there were quite a lot of them. Developers or enthusiasts can easily conduct an in-depth analysis by testing Unity themselves. To do this, PVS-Studio provides free trial and free modes of using. Companies can also buy our product and get quick and detailed support along with the license. Judging by the fact that I immediately managed to find couple of real bugs practically in every group of warnings with one or two attempts, there are a lot of them in Unity. And yes, they are diverse. Let's review the most interesting errors. Results of the check Something's wrong with the flags PVS-Studio warning: V3001 There are identical sub-expressions 'MethodAttributes.Public' to the left and to the right of the '|' operator. SyncListStructProcessor.cs 240 MethodReference GenerateSerialization() { .... MethodDefinition serializeFunc = new MethodDefinition("SerializeItem", MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Public | // <= MethodAttributes.HideBySig, Weaver.voidType); .... } When combining enumeration flags MethodAttributes, an error was made: the Public value was used twice. Perhaps, the reason for this is the wrong code formatting. A similar bug is also made in code of the method GenerateDeserialization: V3001 There are identical sub-expressions 'MethodAttributes.Public' to the left and to the right of the '|' operator. SyncListStructProcessor.cs 309 Copy-Paste PVS-Studio warning: V3001 There are identical sub-expressions 'format == RenderTextureFormat.ARGBFloat' to the left and to the right of the '||' operator. RenderTextureEditor.cs 87 public static bool IsHDRFormat(RenderTextureFormat format) { Return (format == RenderTextureFormat.ARGBHalf || format == RenderTextureFormat.RGB111110Float || format == RenderTextureFormat.RGFloat || format == RenderTextureFormat.ARGBFloat || format == RenderTextureFormat.ARGBFloat || format == RenderTextureFormat.RFloat || format == RenderTextureFormat.RGHalf || format == RenderTextureFormat.RHalf); } I gave a piece of code, preliminary having formatted it, so the error is easily detected visually: the comparison with RenderTextureFormat.ARGBFloat is performed twice. In the original code, it looks differently: Probably, another value of enumeration RenderTextureFormat has to be used in one of two identical comparisons. Double work PVS-Studio warning: V3008 CWE-563 The 'fail' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 1633, 1632. UNetWeaver.cs 1633 class Weaver { .... public static bool fail; .... static public bool IsValidTypeToGenerate(....) { .... if (....) { .... Weaver.fail = true; fail = true; return false; } return true; } .... } The true value is assigned twice to the value, as Weaver.fail and fail is one and the same static field of the Weaver class. Perhaps, there is no crucial error, but the code definitely needs attention. No options PVS-Studio warning: V3009 CWE-393 It's odd that this method always returns one and the same value of 'false'. ProjectBrowser.cs 1417 // Returns true if we should early out of OnGUI bool HandleCommandEventsForTreeView() { .... if (....) { .... if (....) return false; .... } return false; } The method always returns false. Pay attention to the comment in the beginning. A developer forgot about the result PVS-Studio warning: V3010 CWE-252 The return value of function 'Concat' is required to be utilized. AnimationRecording.cs 455 static public UndoPropertyModification[] Process(....) { .... discardedModifications.Concat(discardedRotationModifications); return discardedModifications.ToArray(); } When concatenating two arrays discardedModifications and discardedRotationModifications the author forgot to save the result. Probably a programmer assumed that the result would be expressed immediately in the array discardedModifications. But it is not so. As a result, the original array discardedModifications is returned from the method. The code needs to be corrected as follows: static public UndoPropertyModification[] Process(....) { .... return discardedModifications.Concat(discardedRotationModifications) .ToArray(); } Wrong variable was checked PVS-Studio warning: V3019 CWE-697 Possibly an incorrect variable is compared to null after type conversion using 'as' keyword. Check variables 'obj', 'newResolution'. GameViewSizesMenuItemProvider.cs 104 private static GameViewSize CastToGameViewSize(object obj) { GameViewSize newResolution = obj as GameViewSize; if (obj == null) { Debug.LogError("Incorrect input"); return null; } return newResolution; } In this method, the developers forgot to consider a situation where the variable objis not equal to null, but it will not be able to cast to the GameViewSize type. Then the variable newResolution will be set to null, and the debug output will not be made. A correct variant of code will be like this: private static GameViewSize CastToGameViewSize(object obj) { GameViewSize newResolution = obj as GameViewSize; if (newResolution == null) { Debug.LogError("Incorrect input"); } return newResolution; } Deficiency PVS-Studio warning: V3020 CWE-670 An unconditional 'return' within a loop. PolygonCollider2DEditor.cs 96 private void HandleDragAndDrop(Rect targetRect) { .... foreach (....) { .... if (....) { .... } return; } .... } The loop will execute only one iteration, after that the method terminates its work. Various scenarios are probable. For example, return must be inside the unit if, or somewhere before return, a directive continue is missing. It may well be that there is no error here, but then one should make the code more understandable. Unreachable code PVS-Studio warning: V3021 CWE-561 There are two 'if' statements with identical conditional expressions. The first 'if' statement contains method return. This means that the second 'if' statement is senseless CustomScriptAssembly.cs 179 public bool IsCompatibleWith(....) { .... if (buildingForEditor) return IsCompatibleWithEditor(); if (buildingForEditor) buildTarget = BuildTarget.NoTarget; // Editor .... } Two identical checks, following one after another. It is clear that in case of buildingForEditor equality to the true value, the second check is meaningless, because the first method terminates its work. If the value buildingForEditor is false, neither then-brunch nor if operator will be executed. There is an erroneous construction that requires correction. Unconditional condition PVS-Studio warning: V3022 CWE-570 Expression 'index < 0 && index >= parameters.Length' is always false. AnimatorControllerPlayable.bindings.cs 287 public AnimatorControllerParameter GetParameter(int index) { AnimatorControllerParameter[] param = parameters; if (index < 0 && index >= parameters.Length) throw new IndexOutOfRangeException( "Index must be between 0 and " + parameters.Length); return param[index]; } The condition of the index check is incorrect - the result will always be false. However, in case of passing the incorrect index to the GetParameter method, the exception IndexOutOfRangeException will still be thrown when attempting to access an array element in the return block. Although, the error message will be slightly different. One has to use || in a condition instead of the operator && so that the code worked the way a developer expected: public AnimatorControllerParameter GetParameter(int index) { AnimatorControllerParameter[] param = parameters; if (index < 0 || index >= parameters.Length) throw new IndexOutOfRangeException( "Index must be between 0 and " + parameters.Length); return param[index]; } Perhaps, due to the use of the Copy-Paste method, there is another the same error in the Unity code: PVS-Studio warning: V3022 CWE-570 Expression 'index < 0 && index >= parameters.Length' is always false. Animator.bindings.cs 711 And another similar error associated with the incorrect condition of the check of the array index: PVS-Studio warning: V3022 CWE-570 Expression 'handle.valueIndex < 0 && handle.valueIndex >= list.Length' is always false. StyleSheet.cs 81 static T CheckAccess<T>(T[] list, StyleValueType type, StyleValueHandle handle) { T value = default(T); if (handle.valueType != type) { Debug.LogErrorFormat(.... ); } else if (handle.valueIndex < 0 && handle.valueIndex >= list.Length) { Debug.LogError("Accessing invalid property"); } else { value = list[handle.valueIndex]; } return value; } And in this case, a release of the IndexOutOfRangeException exception is possible.As in the previous code fragments, one has to use the operator || instead of && to fix an error. Simply strange code Two warnings are issued for the code fragment below. PVS-Studio warning: V3022 CWE-571 Expression 'bRegisterAllDefinitions || (AudioSettings.GetSpatializerPluginName() == "GVR Audio Spatializer")' is always true. AudioExtensions.cs 463 PVS-Studio warning: V3022 CWE-571 Expression 'bRegisterAllDefinitions || (AudioSettings.GetAmbisonicDecoderPluginName() == "GVR Audio Spatializer")' is always true. AudioExtensions.cs 467 // This is where we register our built-in spatializer extensions. static private void RegisterBuiltinDefinitions() { bool bRegisterAllDefinitions = true; if (!m_BuiltinDefinitionsRegistered) { if (bRegisterAllDefinitions || (AudioSettings.GetSpatializerPluginName() == "GVR Audio Spatializer")) { } if (bRegisterAllDefinitions || (AudioSettings.GetAmbisonicDecoderPluginName() == "GVR Audio Spatializer")) { } m_BuiltinDefinitionsRegistered = true; } } It looks like an incomplete method. It is unclear why it has been left as such and why developers haven't commented the useless code blocks. All, that the method does at the moment: if (!m_BuiltinDefinitionsRegistered) { m_BuiltinDefinitionsRegistered = true; } Useless method PVS-Studio warning: V3022 CWE-570 Expression 'PerceptionRemotingPlugin.GetConnectionState() != HolographicStreamerConnectionState.Disconnected' is always false. HolographicEmulationWindow.cs 171 private void Disconnect() { if (PerceptionRemotingPlugin.GetConnectionState() != HolographicStreamerConnectionState.Disconnected) PerceptionRemotingPlugin.Disconnect(); } To clarify the situation, it is necessary to look at the declaration of the methodPerceptionRemotingPlugin.GetConnectionState(): internal static HolographicStreamerConnectionState GetConnectionState() { return HolographicStreamerConnectionState.Disconnected; } Thus, calling the Disconnect() method leads to nothing. One more error relates to the same method PerceptionRemotingPlugin.GetConnectionState(): PVS-Studio warning: V3022 CWE-570 Expression 'PerceptionRemotingPlugin.GetConnectionState() == HolographicStreamerConnectionState.Connected' is always false. HolographicEmulationWindow.cs 177 private bool IsConnectedToRemoteDevice() { return PerceptionRemotingPlugin.GetConnectionState() == HolographicStreamerConnectionState.Connected; } The result of the method is equivalent to the following: private bool IsConnectedToRemoteDevice() { return false; } As we can see, among the warnings V3022 many interesting ones were found. Probably, if one spends much time, he can increase the list. But let's move on. Not on the format PVS-Studio warning: V3025 CWE-685 Incorrect format. A different number of format items is expected while calling 'Format' function. Arguments not used: index. Physics2D.bindings.cs 2823 public void SetPath(....) { if (index < 0) throw new ArgumentOutOfRangeException( String.Format("Negative path index is invalid.", index)); .... } There is no error in code, but as the saying goes, the code "smells". Probably, an earlier message was more informative, like this: "Negative path index {0} is invalid.". Then it was simplified, but developers forgot to remove the parameter index for the method Format. Of course, this is not the same as a forgotten parameter for the indicated output string specifier, i.e. the construction of the type String.Format("Negative path index {0} is invalid."). In such a case, an exception would be thrown. But in our case we also need neatness when refactoring. The code has to be fixed as follows: public void SetPath(....) { if (index < 0) throw new ArgumentOutOfRangeException( "Negative path index is invalid."); .... } Substring of the substring PVS-Studio warning: V3053 An excessive expression. Examine the substrings 'UnityEngine.' and 'UnityEngine.SetupCoroutine'. StackTrace.cs 43 static bool IsSystemStacktraceType(object name) { string casted = (string)name; return casted.StartsWith("UnityEditor.") || casted.StartsWith("UnityEngine.") || casted.StartsWith("System.") || casted.StartsWith("UnityScript.Lang.") || casted.StartsWith("Boo.Lang.") || casted.StartsWith("UnityEngine.SetupCoroutine"); } Search of the substring "UnityEngine.SetupCoroutine" in the condition is meaningless, because before that the search for "UnityEngine." is performed. Therefore, the last check should be removed or one has to clarify the correctness of substrings. Another similar error: PVS-Studio warning: V3053 An excessive expression. Examine the substrings 'Windows.dll' and 'Windows.'. AssemblyHelper.cs 84 static private bool CouldBelongToDotNetOrWindowsRuntime(string assemblyPath) { return assemblyPath.IndexOf("mscorlib.dll") != -1 || assemblyPath.IndexOf("System.") != -1 || assemblyPath.IndexOf("Windows.dll") != -1 || // <= assemblyPath.IndexOf("Microsoft.") != -1 || assemblyPath.IndexOf("Windows.") != -1 || // <= assemblyPath.IndexOf("WinRTLegacy.dll") != -1 || assemblyPath.IndexOf("platform.dll") != -1; } Size does matter PVS-Studio warning: V3063 CWE-571 A part of conditional expression is always true if it is evaluated: pageSize <= 1000. UNETInterface.cs 584 public override bool IsValid() { .... return base.IsValid() && (pageSize >= 1 || pageSize <= 1000) && totalFilters <= 10; } Condition for a check of a valid page size is erroneous. Instead of the operator ||, one has to use &&. The corrected code: public override bool IsValid() { .... return base.IsValid() && (pageSize >= 1 && pageSize <= 1000) && totalFilters <= 10; } Possible division by zero PVS-Studio warning: V3064 CWE-369 Potential division by zero. Consider inspecting denominator '(float)(width - 1)'. ClothInspector.cs 249 Texture2D GenerateColorTexture(int width) { .... for (int i = 0; i < width; i++) colors[i] = GetGradientColor(i / (float)(width - 1)); .... } The problem may occur when passing the value width = 1 into the method. In the method, it is not checked anyway. The method GenerateColorTexture is called in the code just once with the parameter 100: void OnEnable() { if (s_ColorTexture == null) s_ColorTexture = GenerateColorTexture(100); .... } So, there is no error here so far. But, just in case, in the method GenerateColorTexture the possibility of transferring incorrect width value should be provided. Paradoxical check PVS-Studio warning: V3080 CWE-476 Possible null dereference. Consider inspecting 'm_Parent'. EditorWindow.cs 449 public void ShowPopup() { if (m_Parent == null) { .... Rect r = m_Parent.borderSize.Add(....); .... } } Probably, due to a typo, the execution of such code guarantees the use of the null reference m_Parent. The corrected code: public void ShowPopup() { if (m_Parent != null) { .... Rect r = m_Parent.borderSize.Add(....); .... } } The same error occurs later in the code: PVS-Studio warning: V3080 CWE-476 Possible null dereference. Consider inspecting 'm_Parent'. EditorWindow.cs 470 internal void ShowWithMode(ShowMode mode) { if (m_Parent == null) { .... Rect r = m_Parent.borderSize.Add(....); .... } And here's another interesting bug that can lead to access by a null reference due to incorrect check: PVS-Studio warning: V3080 CWE-476 Possible null dereference. Consider inspecting 'objects'. TypeSelectionList.cs 48 public TypeSelection(string typeName, Object[] objects) { System.Diagnostics.Debug.Assert(objects != null || objects.Length >= 1); .... } It seems to me that Unity developers quite often make errors related to misuse of operators || and && in conditions. In this case, if objects has a null value, then this will lead to a check of second part of the condition (objects != null || objects.Length >= 1), which will entail the unexpected throw of an exception. The error should be corrected as follows: public TypeSelection(string typeName, Object[] objects) { System.Diagnostics.Debug.Assert(objects != null && objects.Length >= 1); .... } Early nullifying PVS-Studio warning: V3080 CWE-476 Possible null dereference. Consider inspecting 'm_RowRects'. TreeViewControlGUI.cs 272 public override void GetFirstAndLastRowVisible(....) { .... if (rowCount != m_RowRects.Count) { m_RowRects = null; throw new InvalidOperationException(string.Format("....", rowCount, m_RowRects.Count)); } .... } In this case, the exception throw (access by the null reference m_RowRects) will happen when generating the message string for another exception. Code might be fixed, for example, as follows: public override void GetFirstAndLastRowVisible(....) { .... if (rowCount != m_RowRects.Count) { var m_RowRectsCount = m_RowRects.Count; m_RowRects = null; throw new InvalidOperationException(string.Format("....", rowCount, m_RowRectsCount)); } .... } One more error when checking PVS-Studio warning: V3080 CWE-476 Possible null dereference. Consider inspecting 'additionalOptions'. MonoCrossCompile.cs 279 static void CrossCompileAOT(....) { .... if (additionalOptions != null & additionalOptions.Trim().Length > 0) arguments += additionalOptions.Trim() + ","; .... } Due to the fact that the & operator is used in a condition, the second part of the condition will always be checked, regardless of the result of the check of the first part. In case if the variable additionalOptions has the null value, the exception throw is inevitable. The error has to be corrected, by using the operator && instead of &. As we can see, among the warnings with the number V3080 there are rather insidious errors. Late check PVS-Studio warning: V3095 CWE-476 The 'element' object was used before it was verified against null. Check lines: 101, 107. StyleContext.cs 101 public override void OnBeginElementTest(VisualElement element, ....) { if (element.IsDirty(ChangeType.Styles)) { .... } if (element != null && element.styleSheets != null) { .... } .... } The variable element is used without preliminary check for null. While later in the code this check is performed. The code probably needs to be corrected as follows: public override void OnBeginElementTest(VisualElement element, ....) { if (element != null) { if (element.IsDirty(ChangeType.Styles)) { .... } if (element.styleSheets != null) { .... } } .... } In code there are 18 more errors. Let me give you a list of the first 10: V3095 CWE-476 The 'property' object was used before it was verified against null. Check lines: 5137, 5154. EditorGUI.cs 5137 V3095 CWE-476 The 'exposedPropertyTable' object was used before it was verified against null. Check lines: 152, 154. ExposedReferenceDrawer.cs 152 V3095 CWE-476 The 'rectObjs' object was used before it was verified against null. Check lines: 97, 99. RectSelection.cs 97 V3095 CWE-476 The 'm_EditorCache' object was used before it was verified against null. Check lines: 134, 140. EditorCache.cs 134 V3095 CWE-476 The 'setup' object was used before it was verified against null. Check lines: 43, 47. TreeViewExpandAnimator.cs 43 V3095 CWE-476 The 'response.job' object was used before it was verified against null. Check lines: 88, 99. AssetStoreClient.cs 88 V3095 CWE-476 The 'compilationTask' object was used before it was verified against null. Check lines: 1010, 1011. EditorCompilation.cs 1010 V3095 CWE-476 The 'm_GenericPresetLibraryInspector' object was used before it was verified against null. Check lines: 35, 36. CurvePresetLibraryInspector.cs 35 V3095 CWE-476 The 'Event.current' object was used before it was verified against null. Check lines: 574, 620. AvatarMaskInspector.cs 574 V3095 CWE-476 The 'm_GenericPresetLibraryInspector' object was used before it was verified against null. Check lines: 31, 32. ColorPresetLibraryInspector.cs 31 Wrong Equals method PVS-Studio warning: V3115 CWE-684 Passing 'null' to 'Equals' method should not result in 'NullReferenceException'. CurveEditorSelection.cs 74 public override bool Equals(object _other) { CurveSelection other = (CurveSelection)_other; return other.curveID == curveID && other.key == key && other.type == type; } Overload of the Equals method was implemented carelessly. One has to take into account the possibility of obtaining null as a parameter, as this can lead to a throw of an exception, which hasn't been considered in the calling code. In addition, the situation, when _other can't be cast to the type CurveSelection, will lead to a throw of an exception. The code has to be fixed. A good example of the implementation of Object.equals overload is given in the documentation. In the code, there are other similar errors: V3115 CWE-684 Passing 'null' to 'Equals' method should not result in 'NullReferenceException'. SpritePackerWindow.cs 40 V3115 CWE-684 Passing 'null' to 'Equals' method should not result in 'NullReferenceException'. PlatformIconField.cs 28 V3115 CWE-684 Passing 'null' to 'Equals' method should not result in 'NullReferenceException'. ShapeEditor.cs 161 V3115 CWE-684 Passing 'null' to 'Equals' method should not result in 'NullReferenceException'. ActiveEditorTrackerBindings.gen.cs 33 V3115 CWE-684 Passing 'null' to 'Equals' method should not result in 'NullReferenceException'. ProfilerFrameDataView.bindings.cs 60 Once again about the check for null inequality PVS-Studio warning: V3125 CWE-476 The 'camera' object was used after it was verified against null. Check lines: 184, 180. ARBackgroundRenderer.cs 184 protected void DisableARBackgroundRendering() { .... if (camera != null) camera.clearFlags = m_CameraClearFlags; // Command buffer camera.RemoveCommandBuffer(CameraEvent.BeforeForwardOpaque, m_CommandBuffer); camera.RemoveCommandBuffer(CameraEvent.BeforeGBuffer, m_CommandBuffer); } When the camera variable is used the first time, it is checked for null inequality. But further along the code the developers forget to do it. The correct variant could be like this: protected void DisableARBackgroundRendering() { .... if (camera != null) { camera.clearFlags = m_CameraClearFlags; // Command buffer camera.RemoveCommandBuffer(CameraEvent.BeforeForwardOpaque, m_CommandBuffer); camera.RemoveCommandBuffer(CameraEvent.BeforeGBuffer, m_CommandBuffer); } } Another similar error: PVS-Studio warning: V3125 CWE-476 The 'item' object was used after it was verified against null. Check lines: 88, 85. TreeViewForAudioMixerGroups.cs 88 protected override Texture GetIconForItem(TreeViewItem item) { if (item != null && item.icon != null) return item.icon; if (item.id == kNoneItemID) // <= return k_AudioListenerIcon; return k_AudioGroupIcon; } An error, that in some cases leads to an access by a null link. The execution of the condition in the first block if enables the exit from the method. However, if this does not happen, then there is no guarantee that the reference item is non-zero. Here is the corrected version of the code: protected override Texture GetIconForItem(TreeViewItem item) { if (item != null) { if (item.icon != null) return item.icon; if (item.id == kNoneItemID) return k_AudioListenerIcon; } return k_AudioGroupIcon; } In the code there are 12 similar errors. Let me give you a list of the first 10: V3125 CWE-476 The 'element' object was used after it was verified against null. Check lines: 132, 107. StyleContext.cs 132 V3125 CWE-476 The 'mi.DeclaringType' object was used after it was verified against null. Check lines: 68, 49. AttributeHelper.cs 68 V3125 CWE-476 The 'label' object was used after it was verified against null. Check lines: 5016, 4999. EditorGUI.cs 5016 V3125 CWE-476 The 'Event.current' object was used after it was verified against null. Check lines: 277, 268. HostView.cs 277 V3125 CWE-476 The 'bpst' object was used after it was verified against null. Check lines: 96, 92. BuildPlayerSceneTreeView.cs 96 V3125 CWE-476 The 'state' object was used after it was verified against null. Check lines: 417, 404. EditorGUIExt.cs 417 V3125 CWE-476 The 'dock' object was used after it was verified against null. Check lines: 370, 365. WindowLayout.cs 370 V3125 CWE-476 The 'info' object was used after it was verified against null. Check lines: 234, 226. AssetStoreAssetInspector.cs 234 V3125 CWE-476 The 'platformProvider' object was used after it was verified against null. Check lines: 262, 222. CodeStrippingUtils.cs 262 V3125 CWE-476 The 'm_ControlPoints' object was used after it was verified against null. Check lines: 373, 361. EdgeControl.cs 373 The choice turned out to be small PVS-Studio warning: V3136 CWE-691 Constant expression in switch statement. HolographicEmulationWindow.cs 261 void ConnectionStateGUI() { .... HolographicStreamerConnectionState connectionState = PerceptionRemotingPlugin.GetConnectionState(); switch (connectionState) { .... } .... } The method PerceptionRemotingPlugin.GetConnectionState() is to blame here. We have already come across it when we were analyzing the warnings V3022: internal static HolographicStreamerConnectionState GetConnectionState() { return HolographicStreamerConnectionState.Disconnected; } The method will return a constant. This code is very strange. It needs to be paid attention. Conclusions I think we can stop at this point, otherwise the article will become boring and overextended. Again, I listed the errors that I just couldn't miss. Sure, the Unity code contains a big number of the erroneous and incorrect constructions, that need to be fixed. The difficulty is that many of the issued warnings are very controversial and only the author of the code is able to make the exact "diagnosis" in each case. Generally speaking about the Unity project, we can say that it is rich for errors, but taking into account the size of its code base (400 thousand lines), it's not so bad. Nevertheless, I hope that the authors will not neglect the code analysis tools to improve the quality of their product. Use PVS-Studio and I wish you bugless code!
  2. I have recently created my own Sound Effects plateform: http://www.ogsoundfx.com Have a look ! There are basically 2 options that you can chose from: Packs or Single tracks. 1/ Sound effect packs/Full albums: Their price range from a few dollars up to $29 for huge collections of hundreds of sounds. If you have the budget, these packs are really worth the money. You can also wait for discounts if you are not in a hurry. 2/ Single tracks. The prices start at $0,99. The aim is to offer game developers or film makers the possibility to acquire specific sound effects for the lowest budget possible. At the moment I am offering a 50% discount for purchases of a minimum value of $10 on single tracks. So if you have $5 to spare on super high quality and professional sound effects, you get $10 worth of a selection of your choice ! I am planning on creating a permanent volume discount scheme on those single tracks. The more you buy, the bigger the discount. For now, I am only selling my own sounds, but I want to expand by allowing other sound designers to sell their sounds on www.ogsoundfx.com. What do you think ? Any opinion or advice you want to give on the presentation, the content, navigation and so on, are most welcome. And I would be happy to compensate any feedback with a nice coupon code. Oh and by the way, if you subscribe to the newsletter, you will not only be the first ones informed of great deals, but you will also receive 120 MB of free high quality sounds ! I hope to see you at http://www.ogsoundfx.com Olivier Girardot Music Composer & Sound Designer PS. Let me share latest youtube video too:
  3. Hi everyone, I'm a very proficient C++ programmer looking to build my portfolio by contributing to projects for free. I have been programming for about 4 years now. I have experience working with OpenGL and I'm willing to adapt to a wide variety of technologies as I learn really fast. I can also give 20 - 25 hrs weekly on the project. Contact me if you have something for me to work on. Thanks.
  4. I publishing for manufacturing our ray tracing engines and products on graphics API (C++, Vulkan API, GLSL460, SPIR-V): https://github.com/world8th/satellite-oem For end users I have no more products or test products. Also, have one simple gltf viewer example (only source code). In 2016 year had idea for replacement of screen space reflections, but in 2018 we resolved to finally re-profile project as "basis of render engine". In Q3 of 2017 year finally merged to Vulkan API.
  5. Get the code HERE. This project is a nod to those 1990 pocket games that were all the rage in the day. The eTamagotchi features P2P networking showcasing how you can have a single application be both the client and the server at runtime. It features a random digimon (digital monster) that keeps track of all battles it has. The code is meant for demonstration and learning purposes only. The README lists each point that can be improved upon including gameplay mechanics.
  6. I found this demo a long time ago and I love it. I was wondering if it could be improved/expanded somehow. I plugged it into CodeBlocks to try to get a bigger resolution and x64 but it hollered GLU errors. I do not program but put some years in on a chess GUI dev team. Coder is cool with the use of the code. Best Regards SubAtomic2.zip
  7. GlPortal is a free and open source first person 3D teleportation puzzle-platformer written in C++ using modern OpenGL and SDL2 and its own engine. We have already integrated a physics engine and are planning to add some physics based puzzles. - Tasks from beginner to expert level - Focus on 2D, 3D, gameplay, sound, physics or logic - Contributing is as easy as fork, compile and push **Stuck? We help you develop your skills. Contact us on reddit, gitter or irc!** ## Benefits - Pressure-free environment - Space for creativity - Learn with and from your peers ## More Information Get more information about GlPortal at http://glportal.de and http://www.lgdb.org/game/glportal See a video at https://vimeo.com/163973907 or go to youtube and search for glportal. ## Contact - **IRC** #glportal on freenode or webchat on http://kiwiirc.com/client/irc.freenode.com/#glportal. - **Reddit** https://www.reddit.com/r/RadixEngine/ - **Gitter** https://gitter.im/GlPortal/glPortal This ad stinks? Help us improve it: https://github.com/GlPortal/ads/edit/master/developer.md
  8. BenchmarkNet is a console application for testing the reliable UDP networking solutions. Features: Asynchronous simulation of a large number of clients Stable under high loads Simple and flexible simulation setup Detailed session information Supported networking libraries: ENet (C# Wrapper) UNet LiteNetLib Lidgren MiniUDP Hazel Photon Neutrino DarkRift More information and source code on GitHub. You can find the latest benchmark results on the wiki page.
  9. Hi, We are about finished with our new word spelling game: "LettersFall 110%™". We need help testing the Android version of the game now. You can get everything at below GitHub web page: https://github.com/JeZ-l-Lee/LettersFall_110Percent (Android version link on Google Play, HTML5 version link, & full source code) Game source code is 100% M.I.T. open-source! Game was made using current AppGameKit 2. Let us know about any issues or suggestions for improvement. Many thanks! JeZxLee
  10. Hello, I am Argen and I have tried to make a game for some time. However, I recently found out that for my idea, an open source would be best. However, the modeler we have right now does not animate or make his 3d models low-poly, and he needs somebody that can do that. So what we ask for is a junior artist that will join in with this volunteer position. If you are able to animate and/or help finish up his models, then that would be great. The game itself is a rogue like dungeon where you play as a Roman fighting off the hordes of mythology. It is an open source game, so just about anybody can join in with my permission. If you are interested, email me at tfranknorth@gmail.com. You need to be open to using discord to communicate, for that is where most of our team is. Attached is a piece of our modeler's art. Be sure you are fit to work on it! Thanks! Argen.
  11. tldr: This is a community project to help aspiring solo game developers and designers, through small assignment projects, gain the knowledge and skills required to make a video game. If you are interested in contributing to the discussion, head to https://github.com/Neoflash1979/learn-gamedev/issues. The problem with tutorials With the number of great courses, tutorials and other learning resources found online, more and more people teach themselves programming. Many will do so with the intent of making video games. But there is much more to designing and making video games than mere programming. Animation, anthropology, architecture, brainstorming, business, cinematography, communication, creative writing, economics, engineering, games, history, management, mathematics, music, psychology, public speaking, sound design, technical writing, visual arts AND programming; knowledge and skills in these areas can be invaluable to a game designer/developer. Thankfully, there is an abundance of resources available online that can help one acquire knowledge and skills in each of these areas individually. But for the aspiring solo dev, it’s not just a matter of acquiring knowledge in these areas, it’s also important to understand how to use all of that together, for the express purpose of making a video game. There is a plethora of tutorials available online that will guide you from A to Z on how to make such or such a game. In the process you will acquire a certain amount of technical knowledge, and that’s great. But you won’t really learn about the process of designing and developing a video game. The same can be said about the numerous lists that tells you the type of games you should be making, and in what order, in order to learn gaming making; first you make a Breakout clone, then you make a Tetris clone, then you make a Mario clone, then you make Wolfenstein 3D clone, etc. Again, this kind of advice will help you progress in certain technical skills, but you won’t have learned all that much about the process of designing and developing a video game. Making a video game is about making decisions. When you follow tutorials, or clone an existing game, the decisions are largely already made for you. To really learn to design and develop video games, you have to build them, from scratch, on your own (or with a friend or two). All aspiring game dev/designer realizes this at some point and so sets out to build their first game. Their REAL first game. One where THEY have to decide, design and build EVERYTHING. And that’s where everything goes to sh*t. Making video games is hard You see, making a video game is hard. I mean, REALLY making a game, from scratch. It is a daunting task and it can be overwhelming. So naturally, you turn to Google, and you learn expressions like “scope”, “minimum viable product”, “rapid prototyping”, “find the fun” and “start small”. All those two minutes videos and articles are very enlightening but in the end, it’s still very hard to understand how to keep a small scope when you have never REALLY made a game and you are invariably imbued with grand game-making aspirations. How small is small? What aspects of game making should I focus on? How many hours should I invest in making that first game? Those are just a few of the questions that an aspiring game dev/designer might have. Despite all the great resources out there for learning all the bits and pieces involved in designing and making a game, there is a complete void in terms of helping aspiring dev learning to put it all together in a progressive, manageable, way. What we, aspiring self-taught devs, are missing is a guide. Something that will guide us, progressively, on our game making path. Something that will help us focus on the right things, at the right time, while we progress on our learning journey – “yeah, maybe you should leave researching the use of Octrees in collision avoidance AI for later and first focus on figuring out how to make that white ball go from point A to point B, Phil”. What we really need are assignments, with deadlines and requirements. Oddly enough, if your Google “game making assignments” you will find a few examples of exactly what we need, but only for board games, or children Phys Ed games. Here is an example: http://www.cobblearning.net/kentblog/files/2015/11/Project-27w5me1.pdf This is exactly what we need. Exercises that help us focus our creativity and give us a set of guidelines, requirements and constraints. Allowing us to make MOST or at least MANY of the creative and technical decisions that go into making a game, while at the same time ensuring that we keep the scope small and that we focus on a few new concepts/skills. Every assignment would, gradually, expose the learner to new and more advanced concepts/skills, expanding the scope a little, culminating in a final, 2 to 6-month-long assignment where the learner is really making a game he can be proud of and call his own. Alas, this resource does not exist. At least I have found it. So, let’s do something about it. I propose that we create an open-source project on Github and create a “Game development and design self-education” curriculum. Basically, a list of game making assignments that would guide an aspiring game dev through the process of learning the required skills, methods and processes required to put a game together. The onus would be on the aspiring game dev to find the resources needed to learn the creative and technical skills required to meet each assignment’s requirements. If you are interested in contributing to the discussion, head to https://github.com/Neoflash1979/learn-gamedev/issues.
  12. I took a look at Real-Time Character Dismemberment (Game Engine Gems 1 - Chapter 19), I guess I see this technique has been used in GTA III when the player can shoot the NPC's arm off. I'm truly interested in this gore thing. Has anyone made a demo of this technique in Ogre3D? (Or Unity/CryEngine/Unreal... But I think the demo for Ogre3D is best because it's a solid open-source graphic engine, accessible for everyone)
  13. Ever feel like your inventory could use a couple of extra localization tools? We asked the studios we work with, skimmed forums and analyzed product reviews to gather some of the most popular pieces of software, Unity assets and resources in the game development community. This localization toolbox is expected to grow and become a handy guide to the best game localization tools available for developers, so feel free to suggest new additions! Unity assets TextMesh - A must-have text rendering solution The reviews from the Asset Store say it all: TextMesh is a must-have if you're developing your game with Unity. Advanced text rendering, great flexibility and FREE. What are you waiting for? Lean Localization - Simple but powerful Another great free asset, probably more suitable for smaller projects that don’t have a lot of UI text. Lean Localization has a practical feature which allows you to change language while your game is running. I2 Localization - All inclusive Despite being paid, I2 Localization is a favorite in the gamedev community, which really says something. The fact that localizable strings are stored in a Google Spreadsheet that can be reloaded while your game is running is probable no stranger to that. Oh, and it’s also compatible with TextMesh Pro! Bad Word Filter - Keep it friendly, keep it safe! This asset’s name is self-explanatory. Keep your game suitable for younger audiences, or filter haters’ bad language in 24 languages. You can even let your creativity flow and add words to the list! How ******* great is that? SmartLocalization - Fallen, but not forgotten Even though development was discontinued earlier this year, SmartLocalization remains a pretty practical and popular asset. It allows you to create your folder structure for different languages, as well as import and export your files. The machine translation feature powered by Bing Translator can also serve as a way to test your UI and spot problems with the length of text (say “Hi” to your German-speaking friends). Fonts Font Creator - Pimp my font Recommended by many developers, including our friends at Jumb-O-Fun. Afraid to take the leap with custom fonts? Fear not and follow the guide: Google Noto Fonts - Google is your friend for fonts too Google has been developing a font family called Noto, which aims to support all languages with a harmonious look and feel. Noto has multiple styles and weights, and is FREE. Localized strings Polyglot - Free localized strings There are several free game localization projects out there, but very few can actually be trusted. Although it doesn’t match professional localization quality, Polyglot is definitely your best option for free localized strings, as our professional game translators attested to. A good way to save a couple of bucks if your game has a lot of generic strings or minimal content! Translation tools SmartCAT - A solid & free translation tool for your localization team SmartCAT is probably the best free CAT tool at the moment if you manage localization yourself for confidentiality reasons, or you have your own localization team. It has all the main features you would expect from a translation tool (translation memory, glossary, workflow, ability to restrict access to source files) without all the cumbersome settings and functions nobody really uses for game localization. It’s cloud-based, which means your team can access your localization project from anywhere. All you need to do is assign everyone a role (translator, proofreader, project manager), invite them and they’re good to go. Crowdin - Easily crowdsource your game’s localization It’s easy to understand why Crowdin is so popular with studios that decide to crowdsource their game’s localization. With this platform, you can easily set up and automate the whole process.To crowdsource translations upload your files, invite fans to translate and allow them to vote for the best translations. You can order professional translations from the vendors cooperating with Crowdin, assign tasks to your in-house translators or your localization service provider. Set up integration with GitHub, GitLab, Bitbucket, Android Studio, Google Play, and more to automate the synchronization of source and localized files. Last but not least, easily ensure quality and consistency of translations with features like glossaries, translation memory, screenshots, quality assurance checks, and other features Crowdin has to offer. These could also come in handy... TinyTake - for contextualization If a picture’s worth a thousand words, a 60 fps video is priceless for your translators! They can finally make sense of that super weird creature’s attack no one can really describe then translate it accordingly. Just upload your videos to the cloud directly from TinyTake and share the link with your localization team! They’ll love you for that *hearts*. Free up to 2GB, which is more than enough for a localization project. Fastlane - for ASO Automate taking localized screenshots of your iOS app on every device. ChatMapper - for branching dialogues ChatMapper makes it easy to test conversations, control their flow and visualize nonlinear branching dialogues – it can even generate scripts for your voice actors. All this in one tool, yep! Professional game translators - for context-rich and error-proof translations Well, no matter how good all these tools are, there will always translators at the end of the line and the quality of their work does make a difference. Those guys better be good too if you don’t want to see all your efforts ruined by either hilarious or offensive translations. So if you truly want to take over the world and make the most of your hard work developing your game, drop us a line and get kickass localization by our game translators What are your favorite localization assets? Got some awesome tool every game developer should know about? As usual, let us know in the comments. This post is YOURS, so let's make it a reference for the whole gamedev community!
  14. Hi, You can get everything at below URL link: http://16bitsoft.com/2017/12/07/new-project-digital-crack-started/ Enjoy! JeZxLee
  15. Atum Engine

    Atum engine is a newcomer in a row of game engines. Most game engines focus on render techniques in features list. The main task of Atum is to deliver the best toolset; that’s why, as I hope, Atum will be a good light weighted alternative to Unity for indie games. Atum already has fully workable editor that has an ability to play test edited scene. All system code has simple ideas behind them and focuses on easy to use functionality. That’s why code is minimized as much as possible. Currently the engine consists from: - Scene Editor with ability to play test edited scene; - Powerful system for binding properties into the editor; - Render system based on DX11 but created as multi API; so, adding support of another GAPI is planned; - Controls system based on aliases; - Font system based on stb_truetype.h; - Support of PhysX 3.0, there are samples in repo that use physics; - Network code which allows to create server/clinet; there is some code in repo which allows to create a simple network game I plan to use this engine in multiplayer game - so, I definitely will evolve the engine. Also I plan to add support for mobile devices. And of course, the main focus is to create a toolset that will ease games creation. Link to repo on source code is - https://github.com/ENgineE777/Atum Video of work process in track based editor can be at follow link:
  16. Java Java Network Library

    Hello everyone! I have a GitHub repository on which I'm developing a Open Network Library for Java Developers and I'd like to share it so more people come in and contribute. Till now the repo is being developed only by me so the library is not 100% bug free. I'd really like this repo to be famous and got people working on it! [You will find more information in the repo] Here's the link for the repo: https://github.com/giannismarinakis/java-open-nl Thanks!
  17. Isosurface extraction library in Rust

    Pictured are outputs of the Marching Cubes algorithm (left), and surface reconstruction via 'Deferred Rasterisation' (right). These are examples from a little library I wrote for Rust, that provides various implementations of isosurface extraction from volume data. You can find the Apache-2.0 licensed source code on github, or the Rust package on crates.io.
  18. For our team, developing Creature Quest, the mobile strategy RPG, has been a thrilling adventure all its own. It’s been a journey where our heroic development team needed to slay the fearsome monsters of scaling, client-versus-server data handling, and other tricky impediments – all so that the peace of a seamless player experience may reign throughout the game’s world. Completing our quest required gathering artifacts of power, from a trustworthy game engine to a database capable of delivering us to our destiny. Our team of experienced PC game development professionals set out as a new company looking to explore the rapidly growing realm of mobile gaming. At its head was Jon Van Caneghem, the creator of the Might and Magic and Heroes of Might and Magic game series. In looking to provide the same enchantment of those games via a mobile experience, our team began learning the lore of the smaller-screen landscape, investigating technology options and the standard stacks while strategizing over how to overcome certain technical obstacles. We had experience using Node.js and knew that we wanted a document database. That led us to vetting open source NoSQL options, and we found MongoDB to be a strong fit for the task at hand. However, as a startup with a small team that didn’t happen to include a dedicated MongoDB expert, the work of implementing and managing this database soon proved daunting. Our limited resources also meant efficiency and a tight focus on actual game development were essential to getting Creature Quest off the ground, making the prospect of adding an expensive MongoDB expert to the internal team even less likely. Still, the situation called for putting expert database management into place. Given that the potential user base for a mobile game includes nearly everyone who owns a smartphone, overnight success could mean profound database scalability stresses requiring true expertise to navigate. Ultimately, we decided on a hosted MongoDB strategy that could deliver this proficiency, and affordably achieve the required scalability and reliability while also keeping database management off of the internal engineering team’s plate. The MongoDB database provider mLab had worked well throughout a free trial and assessment period, and allowed us to begin on a small service plan and then easily scale as needed. In searching for the best framework for building Creature Quest’s client-side app, we sought a solution that could deploy the app to the iOS, Android, and Android for Amazon platforms. For this we chose the Marmalade SDK and game engine, which enabled us to create C++ code and deploy native apps for each of the mobile platforms we targeted. As for the rest of our stack, the Lua programming language saw the most use by our team, with Marmalade offering the integrations required between Lua and the C++ core engine. The libcurl library was also selected to communicate with a backend NodeJS REST API server, while the Mongoose NodeJS library for MongoDB served as a middleware layer. Data flows through this system with the client app first sending requests to the NodeJS server, which in turn sends calls to store or retrieve data in the database. NodeJS supports greater scalability by operating asynchronously, as concurrent handling of requests vastly increases the scale of data the system can process. Throughout this game development journey, one of the most challenging strategic issues we’ve faced is in striking the balance between handling data on the client or the server. To safeguard the integrity of game data, our early test versions of the game required the client to verify all data with the server. This succeeded in making sure that players couldn’t use hacked versions of the client to cheat – unfortunately it also reduced the game’s performance to a stuttering mess. In mobile gaming, a velvety smooth play experience is a requisite: players will quickly abandon apps with performance issues. So we adapted, allowing for unverified data to accumulate on the client and be saved to the server only at key transitional moments within the gameplay. For crucial data transactions such as in-game purchases, we focused on getting the architecture around those sequences just right, while at the same time concentrating QA efforts to be certain that the app wouldn’t crash when critical player data could be lost. As the adventure of developing Creature Quest continues, the journey is already riddled with milestones, including a successful worldwide launch and a loyal and growing audience. But the game’s promising outlook is really helped by the fact that we have trustworthy technology and an effective data strategy in place going forward.
  19. Effekseer Project develops "Effekseer," which is visual software for creating open source games; on November 1, I released "Effekseer 1.3," which is the latest major version release. With Effekseer, you can easily create various visual effects simply by specifying different parameters. Effekseer is a tool to create various visual effects used in games and others. You can create various visual effects such as explosion, light emission, and particles. Effekseer's effect creation tool works only on Windows. However, the created visual effects can be viewed on Mac OS X, Linux, iOS, Android, and other environments using plugins runtime / plugins such as DirectX, OpenGL, and Unity. Effekseer 1.3 is an updated version of Effekseer 1.2 released in June 2016. This update contains the following changes: -Addition of a file viewer that makes it easy to manage effect files; -Improvements in UI such as adding icons for easy understanding of editing status; -Addition of a function to read FBX as a 3D model file; -Addition of parameters for easier control of the effects. In addition to Unity, I have added plugins / libraries to UnrealEngine 4 and Cocos2d-x. This makes it possible to play effects in most major development environments.Besides that, more than 70 new sample effects have been added and many bugs have been fixed. Effekseer 1.3 is available on the project website. The license for the software is the MIT license. Effekseer http://effekseer.github.io/ Github https://github.com/effekseer/Effekseer
  20. Effekseer Project develops "Effekseer," which is visual software for creating open source games; on November 1, I released "Effekseer 1.3," which is the latest major version release. With Effekseer, you can easily create various visual effects simply by specifying different parameters. Effekseer is a tool to create various visual effects used in games and others. You can create various visual effects such as explosion, light emission, and particles. Effekseer's effect creation tool works only on Windows. However, the created visual effects can be viewed on Mac OS X, Linux, iOS, Android, and other environments using plugins runtime / plugins such as DirectX, OpenGL, and Unity. Effekseer 1.3 is an updated version of Effekseer 1.2 released in June 2016. This update contains the following changes: -Addition of a file viewer that makes it easy to manage effect files; -Improvements in UI such as adding icons for easy understanding of editing status; -Addition of a function to read FBX as a 3D model file; -Addition of parameters for easier control of the effects. In addition to Unity, I have added plugins / libraries to UnrealEngine 4 and Cocos2d-x. This makes it possible to play effects in most major development environments.Besides that, more than 70 new sample effects have been added and many bugs have been fixed. Effekseer 1.3 is available on the project website. The license for the software is the MIT license. Effekseer http://effekseer.github.io/ Github https://github.com/effekseer/Effekseer View full story
  21. Free software 1. Lumberyard (Game engine) open-source and free tool Amazon Lumberyard is a free cross-platform triple-A game engine developed by Amazon and based on the architecture of Cry Engine, which was licensed from Crytek in 2015. 2. Sculptris (sculpture tool) open-source and free tool Sculptris is a virtual sculpting software program, with a primary focus on the concept of modeling clay. It entered active development in early December 2009, and the most recent release was in 2011. 3. Make human (game model creator) open-source and free tool Make human is an open-source 3D computer graphics software middleware designed for the prototyping of photorealistic humanoids. It is developed by a community of programmers, artists, and academics interested in 3D modeling of characters. 4. Ipi soft (motion capture software) not free tool iPi Motion Capture is a scalable markerless motion capture software tool that supports 1 or 2 Kinect cameras or 3 to 6 Sony PlayStation Eye cameras to track a human action and convert it into a motion capture file 5. Blender (Complete tool) for modeling, texturing and so on (open-source and free tool) Blender is a professional, free and open-source 3D computer graphics software toolset used for creating animated films, visual effects, art, 3D printed models, interactive 3D applications and video games. 6. Audacity (music editor) open-source and free tool Audacity is a free open source digital audio editor and recording computer software application, available for Windows, OS X, Linux and other operating systems. 7. Awesome bump (bump map editor) open-source and free tool (optional) Awesome Bump is a free program written using Qt library designed to generate normal, height, specular or ambient occlusion textures from a single image. 8. Faceware (facial animation) not free tool Faceware Technologies is an American company that designs facial animation and motion capture technology. The company was established under Image Metrics and became its own company at the beginning of 2012. 9. GIMP (image editing) open-source and free tool GIMP is a free and open-source raster graphics editor used for image retouching and editing, free-form drawing, converting between different image formats, and more specialized tasks. Through this you can also create bump maps 10. Meshlab (mesh repair) open-source and free tool (Optional) MeshLab is an advanced 3D mesh processing software system that is oriented to the management and processing of unstructured large meshes and provides a set of tools for editing, cleaning, healing. 11. LibreOffice (create documents) open-source and free tool LibreOffice is a free and open source office suite, a project of The Document Foundation. It was forked from OpenOffice.org in 2010, which was an open-sourced version of the earlier StarOffice. 12. Atom (coding software) open-source and free tool Atom is a free and open-source text and source code editor for macOS, Linux, and Microsoft Windows with support for plug-ins written in Node.js, and embedded Git Control, developed by GitHub. Useful websites free image Reference images will be found on Pinterest Free Sounds 1. Freesound.org 2. 99Sounds.org 3. NoiseForFun.com 4. Incompetech.com 5. OpenGameArt.org 6. RaisedBeaches.com 7. Musopen.org 8. PlayonLoop.com 9. Bensound.com 10. SoundJay.com 11. Dig.ccmixter.org 12. Soundgator.com 13. Pacdv.com 14. Freesfx.co.uk 15. Soundtrack.imphenzia.com 16. Bxfr.net Download the free music tracks from these websites 1. http://incompetech.com/music/ 2. http://dig.ccmixter.org/ 3. http://www.joshwoodward.com 4. http://www.youtube.com/audiolibrary I hope this information will help full to you. I am got so stress to collect this data so don't waste it 🤗🤗🤗🤗🤗🤗🤗🤗🤗🤗🤗🤗🤗🤗🤗🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔🤔
  22. I just recently start using OpenAL soft (actually not really use, I'm still struggle with setting this up). Setup OpenAL soft - Passed First, I grab the source of OpenAL soft, I just run CMake for this and build, here the CMake result. Using DirectX SDK directory: C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)/ Could NOT find ALSA (missing: ALSA_LIBRARY ALSA_INCLUDE_DIR) Could NOT find OSS (missing: OSS_INCLUDE_DIR) Could NOT find AudioIO (missing: AUDIOIO_INCLUDE_DIR) Could NOT find SoundIO (missing: SOUNDIO_LIBRARY SOUNDIO_INCLUDE_DIR) Could NOT find QSA (missing: QSA_LIBRARY QSA_INCLUDE_DIR) Could NOT find PortAudio (missing: PORTAUDIO_LIBRARY PORTAUDIO_INCLUDE_DIR) Could NOT find PulseAudio (missing: PULSEAUDIO_LIBRARY PULSEAUDIO_INCLUDE_DIR) Could NOT find JACK (missing: JACK_LIBRARY JACK_INCLUDE_DIR) CMake Warning at utils/alsoft-config/CMakeLists.txt:13 (find_package): By not providing "FindQt5Widgets.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Qt5Widgets", but CMake did not find one. Could not find a package configuration file provided by "Qt5Widgets" with any of the following names: Qt5WidgetsConfig.cmake qt5widgets-config.cmake Add the installation prefix of "Qt5Widgets" to CMAKE_PREFIX_PATH or set "Qt5Widgets_DIR" to a directory containing one of the above files. If "Qt5Widgets" provides a separate development package or SDK, be sure it has been installed. Found unsuitable Qt version "" from NOTFOUND Could NOT find SDL2 (missing: SDL2_LIBRARY SDL2_INCLUDE_DIR) Building OpenAL with support for the following backends: WinMM, DirectSound, MMDevApi, WaveFile, Null Building with support for CPU extensions: Default, SSE, SSE2, SSE3, SSE4.1 Installing sample configuration Installing HRTF definitions Installing AmbDec presets Building utility programs Building test programs Building example programs Configuring done Generating done So I see that I have no Qt & SDL2 for my OpenAL-soft, hope that ok (I don't even know what it for, as long as the I can build OpenAL-soft, I don't really care) So setup OpenAL-soft seem easy. Setup alure - failed I got trouble when I setup alure, I setup CMake like this: OPENAL_INCLUDE_DIR = E:/Source/openal-soft/include/AL OPENAL_LIBRARY = E:/Source/_build/openal-soft/Release And I get the CMake result like this: Found OpenAL: E:/Source/_build/openal-soft/Release Could NOT find OGG (missing: OGG_LIBRARY OGG_INCLUDE_DIR) Could NOT find SndFile (missing: SNDFILE_LIBRARY SNDFILE_INCLUDE_DIR) Could NOT find MPG123 (missing: MPG123_LIBRARY MPG123_INCLUDE_DIR) Could NOT find PhysFS (missing: PHYSFS_LIBRARY PHYSFS_INCLUDE_DIR) Could NOT find DUMB (missing: DUMB_LIBRARY DUMB_INCLUDE_DIR) Configuring done WARNING: Target "alure2" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure2" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure2" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure2" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure2_s" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure2_s" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure2_s" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure2_s" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-play" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-play" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-play" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-play" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-enum" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-enum" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-enum" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-enum" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-hrtf" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-hrtf" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-hrtf" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-hrtf" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-reverb" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-reverb" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-reverb" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-reverb" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-stream" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-stream" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-stream" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. WARNING: Target "alure-stream" requests linking to directory "E:/Source/_build/openal-soft/Release". Targets may link only to libraries. CMake is dropping the item. Generating done So there are a lot of warnings. I lookup this warning and seem that this is just about the CMake programming inside the file CMakeLists.txt, for the meantime, I'll ignore it. Then I open the alure solution (alure.sln) with Visual Studio and build. Unfortunately, I got compile error Severity Code Description Project File Line Suppression State Error C3861 'strcasecmp': identifier not found alure-hrtf E:\Source\alure\examples\alure-hrtf.cpp 49 Error C3861 'strcasecmp': identifier not found alure-hrtf E:\Source\alure\examples\alure-hrtf.cpp 69 Error C3861 'strcasecmp': identifier not found alure-reverb E:\Source\alure\examples\alure-reverb.cpp 178 Error C3861 'strcasecmp': identifier not found alure-reverb E:\Source\alure\examples\alure-reverb.cpp 185 Error C4576 a parenthesized type followed by an initializer list is a non-standard explicit type conversion syntax alure2 e:\source\alure\src\auxeffectslot.h 31 Error C4576 a parenthesized type followed by an initializer list is a non-standard explicit type conversion syntax alure2_s e:\source\alure\src\auxeffectslot.h 31 Error C4576 a parenthesized type followed by an initializer list is a non-standard explicit type conversion syntax alure2 e:\source\alure\src\auxeffectslot.h 31 Error C4576 a parenthesized type followed by an initializer list is a non-standard explicit type conversion syntax alure2_s e:\source\alure\src\auxeffectslot.h 31 Error C4576 a parenthesized type followed by an initializer list is a non-standard explicit type conversion syntax alure2 e:\source\alure\src\auxeffectslot.h 31 Error C4576 a parenthesized type followed by an initializer list is a non-standard explicit type conversion syntax alure2_s e:\source\alure\src\auxeffectslot.h 31 Error LNK1104 cannot open file 'Debug\alure2.lib' alure-enum E:\Source\_build\alure\LINK 1 Error LNK1104 cannot open file 'Debug\alure2.lib' alure-stream E:\Source\_build\alure\LINK 1 Error LNK1104 cannot open file 'Debug\alure2.lib' alure-play E:\Source\_build\alure\LINK 1 I try to lookup the error: //Error: a parenthesized type followed by an initializer list is a non-standard explicit type conversion syntax //Cause by code: void addSourceSend(Source source, ALuint send) { mSourceSends.emplace_back((SourceSend){source, send}); } But I can't find any clue, and the syntax of this code is really weird. So how can I build alure from source? Please help me A minor confuse about OpenAL soft This is a little off topic, but I can't help asking. there is the text inside the ReadMe.txt of the package: openal-soft-1.18.2-bin.zip that I find confusing: I thought OpenAL soft is stand-alone package, but here is the note about OpenAL redistributable. So if I build OpenAL-soft from source, should I concern about this? And if I need, what I should do with this? My guess is: require the users to install OpenAL redistributable from Creative Labs. Thanks for reading
  23. 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
  24. Hello! I'm making the CadEditor utility. This is a universal level map editor for NES / SMD games, used to inplace change ROM files. The program has been done for a long time to edit a couple of old console games, now I have to do a little bit of updating it, perhaps turning it into a block editor, like Tiled. Would anyone be interested in such a tool, or is there enough of the existing map editors functionality? And other question. It's possible to do export blocks from all the games already supported by the editor to tileset, and the map itself to the TMX format supported by Tiled editor, as well by many engines - so you can immediately get blocks and a game map from some old games for experiments with them into modern engines. Will anyone need this feature, if I implement it?
  25. 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?
  • Advertisement