Advertisement Jump to content
  • Advertisement


  • Content Count

  • Joined

  • Last visited

  • Days Won


Septopus last won the day on January 18

Septopus had the most liked content!

Community Reputation

407 Neutral

About Septopus

  • Rank
    Advanced Member

Personal Information

  • Role
    3D Animator
    3D Artist
    Art Director
    Concept Artist
    Creative Director
    Environment Artist
    Game Designer
    Technical Director
  • Interests

Recent Profile Visitors

3413 profile views
  1. Here's a couple of things to look into that may lead you to an answer. 1) Your antivirus software may have generated a new virus definition based on the previously infected executable. Even though it's clean now, this exe still has the signature it associated with that virus. You may be able to mark this as a false positive somehow and move on. 2) there's still something that your AV didn't clean.. Try another AV software? If other AV softwares give you a clean bill of health, then it's probably a false positive.
  2. Septopus

    Tips for game programmer portfolio

    If it can be used to demonstrate your skill as a competent and efficient programmer, it doesn't really matter how old the code is.. So long as it's currently relevant to the position you seek. But as @Rutin stated having a working game demo is probably less important than following the expected application procedures, unless this demo is based on some bleeding edge research in graphics programming or something otherwise equally impressive... ;)
  3. DirectX 9 is extremely old(in tech terms) and no longer directly supported by modern hardware. This means that all modern systems that support it have to emulate the hardware, there is also really no financial motivation for them to fix bugs like this because DirectX9 is no longer a supported platform... This is how games eventually become completely obsoleted, even though the modern hardware is fully able to handle what it is trying to do, it just doesn't speak the same language anymore... It happens to even the best of them eventually.
  4. Septopus

    Tips for game programmer portfolio

    I've never "worked" in the gaming industry so I cannot say about this specifically, but generally speaking large email attachments(unless asked for) of any kind are rarely appreciated. A stripped down web demo with a visible link to download a more complete PC version might be a good idea. Through my IT industry experience; I found it's way easier to get people to actually look at something if it only takes one click, and it doesn't install anything.
  5. Septopus

    Catch the kids: Priest simulator game

    what the actual f....? Well, I'm sure you'll be getting some "feedback" on this one. Good luck out there...
  6. Okay some new/improved things: Mini-Map! Displays player location(direction arrow doesn't point in the "moving" direction yet though..), arena level locations(still just 1 atm) and turret locations. Turrets now pay out 20 rings on disable! The good kind of feedback. There are now 10 turret installations in the park(in a circle around the hill for now) to keep the jump rings company. These installations will be more "interactive" and "adaptable" in future builds. But it makes freestyle play a little more entertaining as is. I've also done some more player control tuning and have locked a few axes out of the physics simulation, this has eliminated the left/right drifting on straight thrust. It's also made the player even more accurate to steer and aim. You might still find yourself slightly airborne when you cross a terrain mesh seam(invisible) but they shouldn't cause you to spin out of control anymore, just a random vertical bump.. Still trying to figure out how this is happening.. haha. Can somebody let me know if the NPCs in the race courses are too easy to beat? I am not challenged by them in the least anymore... lol Some of that might have to do with improved control accuracy and easier flight too. Thanks again to all the folks who have given me feedback so far, it's beyond invaluable!! SlingBot Boarding v0.4.1:
  7. Yeah, you've got me curious on a number of things too. I noticed significant improvements when switching to this method, and not just in GC numbers. So now I'm going to have to compare it to single result and/or layermasked methods. And actually the more I think about it, I have currently over 100 ground objects(tiles), and maybe 2 others that "might" get in the way sometimes.. So it's actually backwards, I think layermasking would help(Me) most of I was looking for something other than the ground.. Hahaha!
  8. Like I stated at the top, some of these are unoptimized examples using local variables. I reuse non-local arrays to keep from generating excess garbage in production code. I started out using normal raycasts(w/o layermasks of course), it's also important to mention that there's really nothing to mask out in most of my use cases. As the ground object is the only thing that can be collided with. Profiling got me to my present methodologies. I shall now venture to test if layermasking reduces the GC as well. As it stands I don't have any GC of measure. I'm also curious if a single result raycast would guarantee the closest hit as my more resource intensive casts are not straight up and down and often return multiple ground hits that are never in a predictable order... More tests, perhaps the topic of my next blog.
  9. I got hung up by it for longer than I should have when I first started using multiple cameras, just didn't click right away that I was multiplying the rendering load...
  10. I bet if you posted this as a question in the math and physics forum, mentioned the language/engine, you would end up with all the answers you need in no time. These cats are smart. Plus I think it's a relatively easy effect to fake from my miscellaneous readings here and there.. You can begin to simulate buoyancy by simply adding an upwards force to the object to negate the effect of gravity, if you make the force proportional to the mass or "composition" of the object then you can make it more realistic. It might be helpful to lock or to selective lock the rotation of one or multiple axes if you aren't interested in doing a FULL physics simulation to control the object rotation and etc... But I assume those would be under player control somewhat anyhow. Another method might be to not use gravity at all and do it like a space simulation, only you would dampen the movement to represent the fluid friction and/or add forces to represent current flow. Good Luck!
  11. Keep in mind that using multiple cameras can quickly hinder performance if care isn't taken to make sure only one is rendering at full speed/resolution at a time. This is mostly important if you want to maintain some kind of view of the other character. Of course this is somewhat dependent on hardware and etc,etc,etc.. Sounds like a fun project!
  12. Septopus

    Tips for game programmer portfolio

    As far as web builds in Unity go. Turn ALL your graphics and quality and texture and LIGHTING and etc. And etc. Settings all the way down. Way below where you want them to be. Turn all your compression settings up. Build it, test it, slowly bring them back to where they need to be one at a time. 190mb seems pretty big for a demo, perhaps some of your meshes are too large/detailed? Also pay close attention to your number of draw calls and instancing issues. Use the frame debugger to help sort that out. Also web builds are single threaded, so some attempts to optimise with clever coding might backfire and result in slower code. Hope it helps. You could also create a project page(here, see menu above, or elsewhere) where you can write a bit about it, post some screen shots, and make a download available. Then you can just shoot a link to whomever you like.
  13. This would require you expanding the functionality of your parser to perform game-logic tasks not related directly to user-input. Like deciphering what an object is and determining how to describe it to the player, but that might be beneficial to your process, and the development of the parser itself. It could also make it easier to save and load(to/from file) objects using JSON or some other simple serialization method. Again, this is mostly a shot in the dark. Hope it helps somewhat.
  14. I'm no expert in formal methodologies but I like to think about the data itself before I try to think about things as individual objects(classes). So, as I understand it(hopefully correctly) it seems you are having trouble deciding how to organize the item data that you are needing to store and access. Let me throw a dart at the board across the room: You're writing a text/phrase parser are you not? Why not include a small array/list of item attributes in string form into your Item class? You could have one for descriptive info: "type:box", "color:blue" You could have another for actionable attributes: "opens:front","button:top","explodes:30" This would then be a blue box that has a button on top and opens in the front, which explodes 30 seconds after opening... Hope it helps!
  15. It's been a while since I posted any code.. Here are some handy methods that I've been using frequently in my SlingBots game. Keep in mind, some examples use local variables where it's better to reuse variables with more scope for memory/GC reasons in practical application. If you see something that I could really improve, please let me know. Many of these are "setup" routines so I've not bothered with optimization really at all since they run once, or very infrequently. All of these are designed to work with the standard Unity orientation, with normal terrain objects or terrain meshes. RayCast Position of Ground at any point on terrain: Vector3 GroundPosAt(Vector3 position) { Vector3 result = position; //some altitude above the highest possible ground position. float checkAltitude = 2000.0f; Ray rr = new Ray(new Vector3(position.x, checkAltitude, position.z), -Vector3.up); //I use a fixed allocation ray cast as a general practice to keep GC down. //It will need to be big enough to contain all the possible hits it could catch finding your ground object.. //YMMV with these *NonAlloc methods, but they work wonderfully for me. RaycastHit[] hits = new RaycastHit[20]; if (Physics.RaycastNonAlloc(rr, hits) > 0) { foreach(RaycastHit hit in hits) { //make sure this entry isn't null if (hit.collider != null) { //check for collision with object tagged ground if (hit.collider.CompareTag("ground")) { result = hit.point; } } } } return result; } Get A Vector3 position on a Circle at a specific angle and radius: Vector3 CirclePos(Vector3 center, float radius, float angle) { Vector3 pos; pos.x = center.x + radius * Mathf.Sin(angle * Mathf.Deg2Rad); pos.y = center.y; pos.z = center.z + radius * Mathf.Cos(angle * Mathf.Deg2Rad); return pos; } Object Placement using fixed arrays for object tracking and management: This example shows one of the ways I programmatically instantiate turrets into SlingBot Boarding. public GameObject worldTurretPrefab; GameObject[] worldTurrets = new GameObject[100]; SnowBallTurret[] _worldTurrets = new SnowBallTurret[100]; void PlaceWorldTurret(GameObject parentobject, Vector3 position, int firefrequency, float firepower, float sightdistance) { for (int i = 0; i < worldTurrets.Length; i++) { if (worldTurrets[i] == null) { if (parentobject == null) { worldTurrets[i] = Instantiate(worldTurretPrefab); } else { worldTurrets[i] = Instantiate(worldTurretPrefab, parentobject.transform, false); } _worldTurrets[i] = worldTurrets[i].GetComponentInChildren<SnowBallTurret>(); _worldTurrets[i].playerAvatar = GameController.GControl.Player; _worldTurrets[i].fireFrequency = firefrequency; _worldTurrets[i].id = (i + 1).ToString(); _worldTurrets[i].turretProjectileVelocity = firepower; _worldTurrets[i].turretSightingDistance = sightdistance; worldTurrets[i].transform.localPosition = position; break; } } } I use an array for both the object and a reference to the script it holds to save time on future getcomponent lookups. This will come in handy when I want to upgrade the settings on all of the already instantiated objects due to a player increase in level/etc. I use a fixed array so I can predict(reasonably) what the upper level of memory usage will be(after testing). I iterate through the existing collection and only add a new object if there is an empty slot in the array. This allows me to ensure there will be ZERO runtime exceptions related to object instantiation. It is better for my game to end up being a little easier than it should have been than it would be for an exception to be thrown right at an exciting moment. Note: the above method could be easily modified to return a bool on success/failure if you wanted to adjust the object arrays and try again on failure. Putting this all together, here's instantiating Turrets in a circle around a specific point(on uneven terrain): void PlaceTurretsCircle(Vector3 position, int turretcount, float turretradius) { //place turrets in circle for (int i = 0; i < turretcount; i++) { //Adjust settings based on players level float levelModifier = 1.0f; if (currentGameLevel > 1) { //add 20% to modifier for each level levelModifier += (0.2f * currentGameLevel); } //Calculate angle for object around circle float angl = (360 / turretcount) * i; PlaceWorldTurret(null, GroundPosAt(CirclePos(position, turretradius, (360 / turretcount) * i)), (int)(2000.0f / levelModifier), 50.0f * levelModifier, 500.0f); } } and a bonus, Here's placing turrets on a Grid: This one is presently written to require a parent object as it places the turrets in relative position to that object. void PlaceTurretsGrid(GameObject parentobject, float xstart, float zstart, float xrowdist, float zrowdist, float yoffset, int xrowcount, int count, int firefrequency, float firepower, float sightdistance) { float xoffset = xstart; float zoffset = zstart; if (count > 100) count = 100; int xmaxcount = xrowcount - 1; int xcount = 0; for (int i = 0; i < count; i++) { //Without ground position checking PlaceWorldTurret(parentObject, new Vector3(xoffset, yoffset, zoffset), turretFireFrequency, turretFirePower, turretSightDistance); //With ground position checking(untested) //PlaceWorldTurret(parentObject, GroundPosAt(parentObject.position + new Vector3(xoffset, yoffset, zoffset)), turretFireFrequency, turretFirePower, turretSightDistance); xcount++; xoffset += xrowdist; if (xcount > xmaxcount) { xcount = 0; xoffset = xstart; zoffset += zrowdist; } } } Not a lot of rocket science going on here, but it could be a time-saver or a mental-block fixer for somebody I'm sure. Check out the game if you get a chance: Happy coding out there!!
  • 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!