Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

How a longtime programmer develops in Unity... Me and my unorthodox way

Discussion in 'General Discussion' started by GarBenjamin, Jun 26, 2016.

  1. ippdev

    ippdev

    Joined:
    Feb 7, 2010
    Posts:
    3,850
    Heh. Like me. I learned to code in Flash AS1 -> then AS2 -> then AS3. I did some pretty fancy applications with it,,lots of large maps, catalogs of 20K+ architectural objects that could be color matched from any of the standard color wheel matching types, a few games like ricocheting pinball engines and a game where could you separate seeds from buds and roll them faster than your opponent could smoke them using a Rube Goldberg widget. I also built maze generators and pathfinders, genetic mating sims and lots of Rube Goldberg gadgets etc.. Congruently I was setting up procedural rigs in Cinema 4D and could "train" them to fight via input as well as more Rube Goldberg machines that could be set to running hundreds of parts by setting one RPM value on the initial component. All of that set me up so when I downloaded Unity 2.6 I had dozens of helper scripts and physics sims built the first night.

    I still keep to component based scripts on appropriate game objects and nest them with the parent holding the control component. I don't get too much into compsci coding paradigms though I have done tests for jobs and didn't know what such and such a pattern was to find out later I had been doing it for years. I find when working with people they want to write large sections of code and I am like..why not just use this method of 5 to 20 lines of code and set up such and such in this manner. Call it lazy but it gets stuff done quick, performs optimally and can usually be extended via drag and drop in the Inspector.
     
    Ryiah, Martin_H, Ony and 3 others like this.
  2. AndrewGrayGames

    AndrewGrayGames

    Joined:
    Nov 19, 2009
    Posts:
    3,821
    First - yeah, you'd need an entire file, or even files, to see the big picture and get that Eureka! moment.

    As far as abstracting stuff and hiding stuff, there's some misunderstanding there. The point is not to 'hide' anything - as noted, if you've written code so obtuse that the person who just wrote it can't understand it, you've written awful/offensive code/been a very, very bad programmer who is going to get coal in their stocking. No, the point is instead to make the code more like a set of Legos that piece together more easily.

    Scenario - the player character and an AI entity. It doesn't matter if the AI is friend or foe, or whatever. What's the difference between these two things? Well, one of them reads input from the control interface, while the other is constantly deciding what to do based on the world state around it. We can (and, have) accomplished this with first-example logic, static ifs/thens. There's nothing wrong with that, it will take some work to do, but hey. That's game development for you.

    Of course, the alternate way that the second example shows has some more interesting possibilities. Pretty much, you can have the guiding component for AIs and Players be the same general 'type' of thing...the difference being what they do. The player's conditions will all be something like:

    Code (csharp):
    1. public bool ShouldMoveLeft()
    2. {
    3.     return InputManager.GetAxis("Horizontal") < 0.0f;
    4. }
    ...while an AI's may be wildly different!

    Code (csharp):
    1. public bool IsDetectingPlayer()
    2. {
    3.     return this.DetectionTrigger.HasObservedPlayer;
    4. }
    ...and it culminates in that list.

    Code (csharp):
    1. List<ConditionCommand> commands = new List<ConditionCommand>
    2. {
    3.     new ConditionCommand(ShouldMoveLeft, MoveLeft),
    4.     new ConditionCommand(ShouldMoveRight, MoveRight),
    5.     new ConditionCommand(ShouldMoveNorth, MoveNorth),
    6.     new ConditionCommand(ShouldMoveSouth, MoveSouth)
    7. };
    Asvarduil, that's not impressive at all you big smelly n00b!

    ...It is when you want to change things on the fly. For instance, what about 'confusion' effects where you flip the player's controls?

    Code (csharp):
    1. public void ScrewWithPlayer()
    2. {
    3.     commands[0].Condition = ShouldMoveRight;
    4.     commands[1].Condition = ShouldMoveLeft;
    5.     // The other two, I'm lazy.
    6. }
    ...What about switching from WASD to XBox controller?

    Code (csharp):
    1. public void SwitchToXBoxController()
    2. {
    3.     commands[0].Condition = XBoxControllerManager.DetectAxis(XBoxControllerAxis.Left);
    4.     // ...
    5. }
    Because the behavior is no longer hardcoded (it's now only semi-hardcoded), you've made the game be able to accomodate additional user cases that exist in your overall plan/design.

    It bears cautioning - if you don't need this degree of flexibility, don't add it. If you do, this is a way to make it happen. The way of good software, is through pragmatism. Alternatively: if it ain't Baroque, don't fix it.
     
    Last edited: Jun 27, 2016
    Socrates and GarBenjamin like this.
  3. Dustin-Horne

    Dustin-Horne

    Joined:
    Apr 4, 2013
    Posts:
    4,568
    It's more of a 'different strokes for different folks' mantra. In this case, 'folks' refers to your development target. The extra abstraction and 'complexity' when building enterprise and/or LOB applications is extremely important. It solves multitudes of problems with traditional/historical development. It simplifies unit testing and it encourages highly modular, extensible and most importantly maintainable development practices.

    In the games industry, however, it's less likely that you need to be highly modular as much of the code is written for a specific purpose or game. The concentration instead shifts to squeezing every bit of performance out of your application and those abstractions and concepts such as dependency injection have a performance impact and run contrary to that primary goal.
     
    Socrates, Kiwasi, Ony and 2 others like this.
  4. Dustin-Horne

    Dustin-Horne

    Joined:
    Apr 4, 2013
    Posts:
    4,568
    Congrats @Asvarduil you just have me my 1,000th like. :)
     
    AndrewGrayGames likes this.
  5. GarBenjamin

    GarBenjamin

    Joined:
    Dec 26, 2013
    Posts:
    7,441
    I should have mentioned flexibility is a key design goal... the abstraction / hiding in this case is just a side effect. Other times the goal is truly to hide things. I've just noticed that in all of the modern best practices the result is to hide away exactly how something works whether that was the goal or not.

    Anyway yes ike you said the main point is if you actually need this degree of flexibility (as in need it right now this moment or think there is a 100% chance that you will need it soon) then it makes sense. I think about 99% of the code using such patterns doesn't need it. People just do it either because they think they should or more commonly because they might need that flexibility some day... maybe years from now. So everything becomes generically coded rather than specifically coded (or hardcoded as we generally say).

    Basically I am just saying we can make this stuff as simple or complex as we want to. And it seems like all too often folks are erring on the side of complexity. I've seen many devs that when presented with any task instead of just writing something simple and getting it done they engineer a complete generic system. Sure it is highly flexible and more easily extended in some ways... but it is a waste of effort and time when those other requirements never come into play.

    Although it should save development time down the road if other requirements come in... that is only a possibility. Meanwhile it has always from now on increased the cost of understanding and updating that code compared to a well-written simplistic code specific to the task.
     
    Last edited: Jun 27, 2016
    AndrewGrayGames likes this.
  6. darkhog

    darkhog

    Joined:
    Dec 4, 2012
    Posts:
    2,218
    Funny thing: "The Unity Way" wasn't my first exposure to programming (or game programming). Was making games and other software since I was 10 (y2k) in both structural (mainly Turbo Pascal 7, nothing noteworthy except that one time I've did a TSR which when ran in pure DOS mode, without Windoze running, would make pretty realistic, colored ASCII fire in the lowest 4 lines of the console that also animated. Thought about showing it off, but since it was 2k and most people were on windoze anyway, I've decided not to even though I love spreading fire) and OOP environments, but I still find the "Unity Way" the best since it's quite logical to put e.g. movement code on the player object.

    Both ways have their merits though, and if your way works for you, that's great. Your way is like a single musician playing a song using an instrument. Unity way is like whole orchestra playing a symphony together.
     
    GarBenjamin likes this.
  7. hippocoder

    hippocoder

    Digital Ape

    Joined:
    Apr 11, 2010
    Posts:
    29,723
    Right I see.

    In my case, the ai's and the player can all control the same things. So I created an engine for that ai and player, then drive that engine with a driver which is NPC or Player for instance.

    This lets me use the classic approach by treating the thing as a series of systems to be driven instead. It means that NPC has to feed it inputs exactly like a player would. This is actually a really fun way to do it as well. So when my AI wants to move left, it works it out, and sets its input as left, like a player would.

    So only the "brain" changes.
     
  8. sngdan

    sngdan

    Joined:
    Feb 7, 2014
    Posts:
    1,154
    I am completely with you and I am at the moment in the phase of finding "my way" of using Unity and it is great to have this dialogue here, much better than tutorials. Or, I have not found the right one yet...most are focused around things that are rather 'overhead' in our view (encapsulate, etc)

    I think, I have to find some peace and reassurance that how I do things in Unity is a sound approach. This will also help me write clearer code as I wont constantly question myself and change it all around. I think I can benefit a lot from your approach, I like it and you went through a learning / experience phase and came to it for a reason (I liked this when I read through your webpage)

    If you find a moment, I would be very interested if you had a look at the source code I sent you (not very complicated, promised) and let me know what you think...
     
  9. Ony

    Ony

    Joined:
    Apr 26, 2009
    Posts:
    1,977
    I've been programming games on and off since I was about 13, starting with Micro Color Basic on an MC-10. Since 2000 I've programmed and released roughly 15 PC games, plus a bunch of web scripting. I've made things using BASIC, VB, Perl, PHP, Java, Javascript, Actionscript, UnityScript, C, C#, etc. Basically choosing whatever tool was necessary for the job.

    My biggest problem with coding? I don't actually consider myself a programmer. I have no idea what abstraction is. I couldn't tell you what encapsulation is. What the f*ck is polymorphism?? Honestly, when people are talking about this stuff my eyes glaze over. I feel stupid about it, to be honest. I've looked some of it up and realize yeah, I do that already, but I have no idea what it's called. I just do it. My main goal is to get a project finished, to the level of quality I expect from myself, and get it out the door in a reasonable amount of time.

    Conversations like this one we're having are fascinating to me. It's like this whole world which I've been part of for decades, yet I'm in my own little bubble over here and wondering what the hell everyone's talking about. Then again, most things in my life are that way so maybe programming is just part of that.

    Anyway, I'm reading all of this as I get the next update for my latest game ready for release, and still wondering how I can polymorph an encapsulated abstract, and whether I even need to in the first place.
     
    ZJP, frosted, Socrates and 8 others like this.
  10. salgado18

    salgado18

    Joined:
    Jul 15, 2010
    Posts:
    84
    Best thing ever. :)

    I take it for my coding paradigm that, if someone can't open my code and understand what's going on without reading comments or asking, then it's too complicated. If you know there will be bugs, and that you will need to mess around until it is fixed, is it better if everything is easy to understand, or if the code looks like work from a mad scientist trying to conquer the world?
     
    AndrewGrayGames and GarBenjamin like this.
  11. GarBenjamin

    GarBenjamin

    Joined:
    Dec 26, 2013
    Posts:
    7,441
    @darkhog That's cool that you like working with Unity in the "standard" way. I'm not here to say that is not good. Just sharing how I am doing it now to make things more simplified and streamlined (well from my perspective at least). Which may be helpful to the folks coming from Assembler and C dev.

    As long as a person is able to get things done and enjoying it instead of feeling like they are wrestling with it... I'd say they are doing the right thing. That will just be different for different people. :)
     
    darkhog and Ony like this.
  12. Dave-Carlile

    Dave-Carlile

    Joined:
    Sep 16, 2012
    Posts:
    967
    So... is anyone else reading this and thinking they need to go refactor their current game project in its entirety because it's too complex?
     
    Ryiah, Ony and GarBenjamin like this.
  13. GarBenjamin

    GarBenjamin

    Joined:
    Dec 26, 2013
    Posts:
    7,441
    No need to do that. Like I was saying... it's best to embrace all of these patterns. If there is a modern pattern you are not using then refactor to use it. If everyone using Unity would do this I think the number of daily releases would drop significantly.

    So yeah definitely work as many of the modern patterns in as possible. If something can be done in a simple straightforward hardcoded way or a more complex more generic abstract way always choose the latter lol
     
  14. tiggus

    tiggus

    Joined:
    Sep 2, 2010
    Posts:
    1,240
    I already hit that point a week ago :p
     
    Ony likes this.
  15. Aiursrage2k

    Aiursrage2k

    Joined:
    Nov 1, 2009
    Posts:
    4,835
    Events and delegates. Lets say you want to add a timestop spell, where the player can stop all the enemies for a few seconds and have them move afterwards (except for "time cops"). And if you wanted to do otherthings like add a grayscale or stop the music youd just add more event listeners


    Code (CSharp):
    1.  
    2. public class TimeCops: BaseEnemy
    3. {
    4. public override void onStartTimeStop(){m_frozen=false;}
    5. }
    6. public class BaseEnemy: MonoBehaviour {
    7. public void OnEnable()
    8. {
    9. BaseGameManager.onStartTimeStop+=onStartTimeStop;
    10. BaseGameManager.onEndTimeStop+=onEndTimeStop;
    11. }
    12. public void OnEnable()
    13. {
    14. BaseGameManager.onStartTimeStop-=onStartTimeStop;
    15. BaseGameManager.onEndTimeStop-=onEndTimeStop;
    16. }
    17. public virtual void onEndTimeStop()
    18. {
    19. m_fronze=false;
    20. }
    21. public virtual void onStartTimeStop()
    22. {
    23. m_fronze=true;
    24. }
    25. public void Update()
    26. {
    27. if(m_frozen)
    28. {
    29. return;
    30. }
    31. }
    32. }
    33. public class Player: MonoBehaviour {
    34. public void Update()
    35. {
    36. if(Input.GetMouseButton(0))
    37. {
    38. StartCoroutine(timeStopIE());
    39. }
    40. }
    41. public IEnumerator timeStopIE()
    42. {
    43. BaseGameManager.startTimeStop();
    44. yield return new WaitForSeconds(4);
    45. BaseGameManager.endTimeStop();
    46. }
    47.  
    48. }
    49.  
    50. public class BaseGameManager : MonoBehaviour {
    51.    public delegate void OnEndTimeStop();
    52. public static event OnEndTimeStop onEndTimeStop;
    53. public static void endTimeStop()
    54. {
    55. if(onEndTimeStop!=null)
    56. {
    57. onEndTimeStop();
    58. }
    59. }
    60.    public delegate void OnStartTimeStop();
    61. public static event OnStartTimeStop onStartTimeStop;
    62. public static void startTimeStop()
    63. {
    64. if(onStartTimeStop!=null)
    65. {
    66. onStartTimeStop();
    67. }
    68. }
    69. }
    70.  
     
    Last edited: Jun 27, 2016
  16. aer0ace

    aer0ace

    Joined:
    May 11, 2012
    Posts:
    1,513
    Not me. Read below.

    I'm glad @GarBenjamin is clarifying this thread a bit. His message is not about simplifying. It's about removing unnecessary complexity. If your project needs a certain system/architecture/pattern, by all means, use it. GarBenjamin's (series of?) article(s) are explaining how he does things, because people were asking him. It definitely doesn't fit my development style, nor would it satisfy the requirements for the game that I'm building at the moment.

    But generally speaking, yes, the first pass at my games involve plenty of simple procedural programming with switch statements, etc. Once the code has gotten too big for its britches, it gets broken out into more easy-to-consume classes, and managers are developed only as necessary. This is what results when procedural code becomes so overwhelming, that debugging becomes a nightmare.

    One of the problems with communicating this message of "simplicity" is that many game developers who are reading this are on different parts of their development journey. Some don't have full knowledge or experience of all these design patterns and architectures, and how to refactor, etc. So saying to "keep it as simple as necessary" can mean different things to different developers.


    As an aside, one system that I find absolutely necessary for programming the "traditional" way, is Resources.Load(). Those against prefabs will find this as absolutely essential as I have, considering it means you're not pre-loading prefabs into precious memory. This way, you don't even have to lay out anything in your scene beforehand. Do it all procedurally.
     
    frosted, AndrewGrayGames and sngdan like this.
  17. GarBenjamin

    GarBenjamin

    Joined:
    Dec 26, 2013
    Posts:
    7,441
    Time stop spell (and any other thing that can impact enemy updating) and also global pausing of game
    Code (CSharp):
    1.  
    2. private void Update()
    3. {
    4.     if (NoUpdateAllowed())
    5.          return;
    6.  
    7.         // normal code doing enemy update
    8. }
    9.  
    10. private bool NoUpdateAllowed()
    11. {
    12.     if (fNoUpdateTimer > 0f)
    13.     {
    14.         fNoUpdateTimer -= 1f * Time.DeltaTime;
    15.         return true;
    16.     }
    17.  
    18.     if (Global.GameIsPaused)
    19.         return true;
    20.  
    21.     return false;
    22. }
     
    Ony, Ryiah, salgado18 and 2 others like this.
  18. Dave-Carlile

    Dave-Carlile

    Joined:
    Sep 16, 2012
    Posts:
    967
    Yeah, I was mostly trying to be humorous, but there is sometimes that nagging feeling that I did this "wrong" and it could be so much simpler. Building a multi-threaded, moddable, base-building game with a movable base, AI, (hopefully) multiplayer, etc., it's just going to get complex. Sometimes overwhelmingly so.

    But yes, my development journey is similar to yours, start of simple and refactor in more complex systems as needed. It's the interactions/communication between pieces that I usually struggle with.
     
    GarBenjamin and AndrewGrayGames like this.
  19. hippocoder

    hippocoder

    Digital Ape

    Joined:
    Apr 11, 2010
    Posts:
    29,723
    So far I'm not seeing any examples where events are less work, just another way to do the same job. It's not better thinking so far.

    In the examples above you would need a manager class regardless.
     
    Ony, Ryiah, GarBenjamin and 1 other person like this.
  20. jtsmith1287

    jtsmith1287

    Joined:
    Aug 3, 2014
    Posts:
    787
    These are some very interesting posts.

    However I have to say, it's like you've been handed a high quality multi-tool and just decided to only use the knife.

    There's a lot of really neat aspects to Unity that allow you to make really fluid and complex systems in a manageable way. Now, I saw a post further up somewhere that said something about losing prefab references to a scene crash. I've experienced that same thing and I now click apply whenever I think about it, and any reference that wouldn't be a child or parent object is done via code so that the reference can be stored in the prefab. This has solved all my issues, kept my code tidy.

    All that said, I definitely enjoy seeing how people are able to develop with Unity in ways that works for them. :D
     
    AndrewGrayGames and GarBenjamin like this.
  21. AndrewGrayGames

    AndrewGrayGames

    Joined:
    Nov 19, 2009
    Posts:
    3,821
    It made me want a pet T-Rex. Of course, their depictions of Velociraptors were completely wrong - Velociraptors were actually only the size of a chicken.
     
  22. salgado18

    salgado18

    Joined:
    Jul 15, 2010
    Posts:
    84
    That was me. I do it like that too, it's just the fear that hasn't left yet. :)

    About Resources.Load, yes it is a requirement for pure code games in Unity. But I'd advise against that anyway, because of all the other problems it brings (even Unity recommends against using it).
     
  23. neoshaman

    neoshaman

    Joined:
    Feb 11, 2011
    Posts:
    6,493
    If we want to be nitpicky, it's because they use filler genes to get a full dna, they used amphibian dna when dino "weren't all". No wonder they got unrealistic dinosaur rather than real one, if they use fantasy data for reconstruction. Technically the movie is accurate, the park reconstruction wasn't lol. And chicken ARE dinosaur :D
     
    Ony likes this.
  24. aer0ace

    aer0ace

    Joined:
    May 11, 2012
    Posts:
    1,513
    Yeah, the addendum I forgot to add is that asset bundles is the way to go, as it's also more supported, and it's essentially what Resources.Load is built on anyway.
     
  25. SteveJ

    SteveJ

    Joined:
    Mar 26, 2010
    Posts:
    3,085
    Just to add another perspective, my process thusfar always comes down to one of two approaches:

    1) If the game is largely procedural (Requiem Z), my main scene is simply a camera and base game object (called "Global" or "World" or whatever). Everything is created through code.

    2) If the game isn't procedural (The Deep Paths), I build all of the prefabs for all of the possible "things" in the game (walls, chests, etc), and then build an interpreter that takes level instructions from elsewhere and builds the scene for me - in the case of The Deep Paths, I build the levels in Excel, export as CSV, give the CSV to Unity, and have it build the level itself using the CSV and prefabs. That way, at any moment, I could lose a scene and it doesn't matter - I can rebuild it very quickly as I'm not manually placing and positioning objects in the Unity Editor. Mind you, this only really works very conveniently for me as the majority of the big games I've built have been grid-based - i.e. perfectly suited to the row/column style that a spreadsheet offers. Mind you, I've also built a prototype for a 2.5D platformer in this same way. I've been meaning to do a video on this process at some point as I think it's an interesting approach. I'll get around to that once The Deep Paths is done.

    Anyway... for what it's worth.
     
    ippdev, Socrates and Dave-Carlile like this.
  26. Ryiah

    Ryiah

    Joined:
    Oct 11, 2012
    Posts:
    20,965
    What do you feed your chickens down in Texas for them to be that big? :p

     
  27. GarBenjamin

    GarBenjamin

    Joined:
    Dec 26, 2013
    Posts:
    7,441
    Just a quick update here to say that I put some time on the game tonight.
    Finished the Wave Intro piece.
    Added player moving and shooting.
    Got started on the enemy movement.

    Tomorrow night I will finish up the enemy movement control.
    And the enemies shooting.
    Then I'll probably start on the collision checking.
    Not sure really because generally I don't spend more than an hour working on this stuff in a given night.
    Sometimes I spend 2 to 3 hours but that is broken up with a lot of surfing the web and visiting these forums.

    Anyway... it is coming.
     
    Last edited: Jun 28, 2016
    Ony likes this.
  28. Deleted User

    Deleted User

    Guest

    I could be completely wrong, but wasn't it Bill Gates that said (I'm paraphrasing here). "I'll choose a lazy person to do a hard job, because a lazy person will find the easiest way to do it". ?

    Code just needs to be performant, easy to read and as bug free as possible. There's obviously quite a few things related to the API you have to be aware of like with Unity the interaction between constructors and initlialisation derived from monobehaviours etc. although whatever get's the job done.
     
  29. johnnyt

    johnnyt

    Joined:
    Jun 20, 2013
    Posts:
    13
    Thanks! Now, please teach us how to do a massive scale 3D MMORPG with shiny graphics only in code.

    You know, most people can do 80's style arcade games in almost anything. Using an evoluated 3d game engine like Unity is overkill. You can use QBASIC, Turbo Pascal, DOS ASM, Python or BASH scripts and Notepad or VI.
     
    GarBenjamin likes this.
  30. neginfinity

    neginfinity

    Joined:
    Jan 27, 2013
    Posts:
    13,554
    Interestingly, rules change on mobile platform. Basically on mobile you will want behaviors without Start and Update methods, you'll want managers and you'll want objects to be pooled.

    In the end I'm getting impression that the "right" idea is to use unity logic (component-based design) BUT replace good portion of of the functionality with your own.
     
  31. Martin_H

    Martin_H

    Joined:
    Jul 11, 2015
    Posts:
    4,436
    Maybe lets move the dinosaur discussion to one of the Unity vs Unreal threads.

    Funny, about 10 minutes ago before I visited this thread, I was thinking about the same quote.

    You have no idea how reassuring it is to see accomplished devs without that kind of computer science background!

    I don't actively try to implement any patterns, I just strive to make my own coding life easier by implementing things in the least fancy and most straight forward way that I can think of. I shy away from language features that I don't feel I have a firm understanding of. Most of what I write consists of basic control structures, enums, functions and some OOP. It's easy to understand for me, performs well enough, and is less likely that I introduce hard to trace bugs because of me not understanding the ramifications of using more advanced techniques.
     
    ZJP, Deleted User, Ony and 2 others like this.
  32. Ryiah

    Ryiah

    Joined:
    Oct 11, 2012
    Posts:
    20,965
    Others have made similar observations and statements. Some of them before Bill Gates was born.

    http://quoteinvestigator.com/2014/02/26/lazy-job/
     
  33. hippocoder

    hippocoder

    Digital Ape

    Joined:
    Apr 11, 2010
    Posts:
    29,723
    Doesn't mean the lazy guy will a) finish it b) make a good job of it :D
     
    Ony and AndrewGrayGames like this.
  34. frosted

    frosted

    Joined:
    Jan 17, 2014
    Posts:
    4,044
    Don't underestimate the lazy. Sometimes, you work way, way... WAY harder at being lazy than just doing it.

    I just spent 3 weeks building a full on replacement to the unity terrain editor because I was too lazy to paint grass to match splats. The thing is pretty sick, but honestly - I would have spent way less time just painting the grass and splats.
     
  35. Martin_H

    Martin_H

    Joined:
    Jul 11, 2015
    Posts:
    4,436
    +1. The other day I was getting annoyed of often using such key sequences in blender: "r, x, 90, enter" or "r, z, z, 90, -, enter". I searched almost two hours for practical customizable hardware controllers that I could map such macros on, because I've already used so many keys on my keyboard for autohotkey shortcuts. In the end I settled for autohotkey anyway, because I didn't find anything practical and within reasonable price range. But I'm sure this won't save me even an hour of time over the next year. It's just way less annoying and I'd rather spend the hour on research to not have to do stupid repetitive things, if I can minimize them that way.
     
    Ony likes this.
  36. Aiursrage2k

    Aiursrage2k

    Joined:
    Nov 1, 2009
    Posts:
    4,835
    You could give the space invaders some good production values like they did in resogun
     
  37. hippocoder

    hippocoder

    Digital Ape

    Joined:
    Apr 11, 2010
    Posts:
    29,723
    I prefer the phrase Necessity is the mother of invention.

    I'm not lazy, I just have a bigger job than I'm capable of, so I've invented many new workflows and time saving enhancements to allow myself to punch well above my weight.
     
    GarBenjamin, aer0ace, Ryiah and 3 others like this.
  38. GarBenjamin

    GarBenjamin

    Joined:
    Dec 26, 2013
    Posts:
    7,441
    Same thing. More content. More managers. More time required. It's all the same just the scope changes.

    As a lone dev I doubt I'll ever tackle a MMORPG and certainly not massive. It'd be rather silly and a waste of time.
     
    aer0ace and AndrewGrayGames like this.
  39. AndrewGrayGames

    AndrewGrayGames

    Joined:
    Nov 19, 2009
    Posts:
    3,821
    What, not even a Sword Art Online MMORPG? Pssh. Not trying hard enough. :p

    Actually, it's been a while since I've seen an SAO MMORPG noob thread. It's quiet. Too quiet...
     
    GarBenjamin likes this.
  40. salgado18

    salgado18

    Joined:
    Jul 15, 2010
    Posts:
    84
    Well, he can, but it wouldn't run in new windowses, would it? XD

    He could use Allegro and C++, I used it to make a Tetris sort-of, but then again he could make this game multiplayer easily, or add particles, or change the sprites to 3D models, or add post-processing camera effects. All of that is possible in Unity, nothing is possible anywhere else without a lot of work (minus Unity fanboy exaggeration).

    Heck, I just made a commercial mobile app in Unity. The only single problem is the battery drain, because the entire screen is always redrawn, unlike native frameworks, who only refresh the parts that changed form frame to frame. But the productivity boost I got from using Unity let me rebuild this Android and iOS app from the ground up in one week, while it would take at least two for each platform in other sdks.

    We don't need to use Unity, but we do just because. :)
     
    GarBenjamin likes this.
  41. Ryiah

    Ryiah

    Joined:
    Oct 11, 2012
    Posts:
    20,965
    Sure, but how many of those languages support two dozen platforms with very little additional effort? ;)
     
  42. neginfinity

    neginfinity

    Joined:
    Jan 27, 2013
    Posts:
    13,554
    Google how to get "stonesense" working for dwarf fortress. That'll give you isometric map.

    Qbasic/Turbo Pascal/Dos asm:
    Any platform supported by DosBox.
    Python: any platform supported by Python or addons. Actually, older version of python can even run on ms-dos.
     
  43. Ryiah

    Ryiah

    Joined:
    Oct 11, 2012
    Posts:
    20,965
    I have thought about that in the past but emulation only goes so far and it's often sluggish. It might not matter too much if your game is lightweight but if you made a game that was demanding like Tyrian (that game needs 120,000 cycles) then you'd be better off with Unity.

    Armok Vision is another promising one. It's being developed in Unity too.
     
    AndrewGrayGames likes this.
  44. neginfinity

    neginfinity

    Joined:
    Jan 27, 2013
    Posts:
    13,554
    Then you could always switch to libsdl instead. Linux/MacOS/Windows/iOS/Android.
    Failing that there's game maker. It's not like tyrian would require extremely complicated logic.
     
  45. Ryiah

    Ryiah

    Joined:
    Oct 11, 2012
    Posts:
    20,965
    Yes, but you would still have fewer platforms and more effort to support them than simply using Unity.

    Game Maker would definitely be a good choice (and I just noticed it's on sale again). You're right that Tyrian isn't particularly complex but then most of the processing power it required was due to the limitations of the hardware at the time. Many of its effects can now be handled effortlessly through hardware.
     
    Last edited: Jun 28, 2016
  46. neginfinity

    neginfinity

    Joined:
    Jan 27, 2013
    Posts:
    13,554
    I do not think that "It claims to support more platforms" is a good argument in favor of using any particular engine.

    You need platforms you absolutely have to target, but anything above that is pretty much irrelevant - if you are not planning to write that tyrian clone for GearVR, then it doesn't matter whether the engine supports gearVR or not.

    Also see YAGNI.
     
    Martin_H likes this.
  47. Ryiah

    Ryiah

    Joined:
    Oct 11, 2012
    Posts:
    20,965
    Sure, I'll give you that you don't always need the tool that supports the most platforms or features, but if that tool allows you to get the job done faster and with less effort why would you choose the alternatives? Using libsdl, outside of developing for a SINGLE platform, is more effort period.
     
    Martin_H likes this.
  48. GarBenjamin

    GarBenjamin

    Joined:
    Dec 26, 2013
    Posts:
    7,441
    @Asvarduil I definitely might make an RPG at some point. It just won't be a 3D MMORPG. First because I don't even play such games. Second because it would be a massive project beyond what I want to do.

    Something along the lines of a Legend of Zelda, Bard's Tale, Secret of Mana or Phantasy Star would be more in the realm of reality.

    Although I think a Temple of Apshai or Gemstone Warrior would be the first one.

    I just don't have the interest in the massive games most folks around here do. And it makes more sense to me to focus on a (much) smaller game and do it right than to focus on something huge and have to do it half-assed to ever complete it in a reasonable amount of time (if ever).

    I've also thought for a long time now... if a person can't make a small game that is fun and interesting there is no sense in focusing on a big game. Making a giant game is not a "cure all". Sure it does allow you to hide some weaknesses in game design under a massive pile of content and so forth but brings with it another whole level of concerns as well.

    So for now my take on a Space Invaders. It's not a direct clone of Space Invaders.
     
    aer0ace, AndrewGrayGames and Ryiah like this.
  49. neginfinity

    neginfinity

    Joined:
    Jan 27, 2013
    Posts:
    13,554
    Because you may need something aside from "faster" and "less effort". libsdl gives you full and complete control over every aspect of the program (well, because it is a blank state). Unity doesn't.
     
  50. Ryiah

    Ryiah

    Joined:
    Oct 11, 2012
    Posts:
    20,965
    I've never heard of Gemstone Warrior but as a kid I played entirely too much Gateway to Apshai and Telengard. Some mix of these might make for a fun little project.
     
    GarBenjamin likes this.