• Content count

  • Joined

  • Last visited

Community Reputation

331 Neutral

About JesseCF

  • Rank
  1. This doesn't apply at all. My dog isn't inanimate, and has an advanced degree from MIT. Or Yale. Actually she just told me to trust her on it, so I'm not sure where. 
  2. Hey, neat content. I have to make my own set of slides for a presentation on this topic I'm doing on the 16th for Boston Festival of Indie Games talks. Hopefully they turn out as good as yours. :)
  3. Kalo, the colored bar isn't indicating what lane the Action Item is in, rather the red bar is showing that because Attack Player is in the "Action" lane, it blocks Build Ladder, which is in the same lane, but does not block Move To Goal (hence the green bar) because only Move To Goal is in the Movement Lane.  A couple of people have mentioned that this graphic is a little confusing, so I'm going to think about how I can change it to be more clear in meaning. Thanks for letting me know. :)
  4. As humans, we like to implement solutions which are familiar to us. We get caught up doing things the way we know how to do them, rather than the "best" way to do them. It's easy to get caught up in thinking like this and as a result we end up using outdated technologies and implement features in ways that our modern contemporaries don't understand, or are simply less effective or efficient. My purpose with this and future papers will be to expose readers to a broad spectrum of solutions that will hopefully help them in their own coding. Today I'll be covering Action Lists! Action Lists are a simple yet powerful type of AI that all game developers should know about. While ultimately not scalable for large AI networks, they allow for relatively complex emergent behavior and are easy to implement. Whether you are just getting into AI programming or are an experienced industry veteran looking to expand your toolkit, this presentation will introduce you to Action Lists and provide concrete examples to help you implement your own solutions. Let's begin the story. Once Upon A Time... Several years ago I was starting the development of King Randall's Party, a game in which the player builds a castle and tries to defend it against the King who is trying to knock it down. I needed to create a reasonably smart AI that could look at the player's castle and figure out how to circumvent or destroy it in order to reach its objective - the gold pile the player is defending. This was a big challenge, almost too big to consider all at once. So like any good programmer I broke it down into a more manageable problem set. The first challenges: I needed to get the units to have a specific set of behaviors that they would act according to. A quick internet search caused my mind to implode, of course. Searching for "Game AI" brought up results on planners, finite state machines, steering behaviors, flocking, A*, pathfinding, etc. I had no clue where to start, so I did what any reasonable, rational person would do. I asked my dog. This isn't anything new, of course. Whenever I have a tech problem, I ask my dog. Now I know what you're thinking "Jesse, that's dumb, and you're crazy... What do dogs know about computers?" Well, let's just gloss over that. It may or may not have involved some illegal technology and or college class auditing. Anyway, I said "Ok Frankie - there is so much going on with AI, I really don't have a clue where to start. How should I go about creating an AI framework for my game units?" Frankie gave me this pretty withering look that basically informed me that I was an idiot and pretty dumb, despite what my high school teacher Mr. Francis may have told me about there never being any stupid questions. I'm pretty sure Frankie wouldn't have had nice thoughts about Mr. Francis either. "Jesse", she asked, "how do you typically start your day?" Well, I write everything that I need to do that day down in a list and then prioritize it according to how important the task is and how soon it needs to be done. I explained this to Frankie and she responded "And that, is an Action list." She told me that an Action List is a list of tasks or behaviors that your game units work their way through one at a time. It is a form of finite state system, and could be described as a simple behavior tree with a single branch level. Here is how they work. According to my dog. How Action Lists Work First you write down all the behaviors you want your AI to have. Then you order them according to priority. Lowest to highest. Now we iterate over the list checking each action to see if it can execute and if it can, executing it. We then check the actions Blocking property, and if the item is Blocking further actions we exit the list. We will get into why Blocking is important later. In our example here, our first action Attack Player will only execute if the AI is close to the player. Let's say it is not, so it checks if it can build a ladder at this location (and should it), and so on until it finds an action item it can execute such as Break Door. It then executes the Break Door code. Here is where Blocking comes into play. If Break Door occurs instantly, then it will not block any further actions and the rest of the list can execute. This is typically not the case - actions usually take up more than one frame. So in this case the Break Door Action Item calls unit.Attack(door), which will change the unit's CurrentState from Waiting to BreakDoor and will return true until the door is broken. A Simple Finite State Machine Well ok. That sounds workable. Frankie had made a good suggestion and Action Lists seem like a great fit for my project. But I'd never heard of them before so I had my doubts - most of what I hear floating around about AI has to do with transition-based finite state machines, similar to what Unity3D uses for animations in Mechanim. You define a bunch of states, and identify when and how they transition between each other. In exchange for some belly scratches, Frankie explained to me when you make a transition based finite state machine, you need to define all the states you want to have, and then also define all of the transitions to and from each of those individual states. This can get complicated really, really fast. If you have a Hurt state, you need to identify every other state that can transition to this state, and when. Walking to hurt; jumping to hurt, crouching to hurt, attacking to hurt. This can be useful, but can also get complicated really fast. If your AI requirements are fairly simple, that's a lot of potentially unnecessary overhead. Another difficulty with transition-based state machines is that it is difficult to debug. If you set a break point and look at what the AI's current state is, it is impossible without additional debug code to know how the AI got into its current state, what the previous states were and what transition was used to get to the current state. Drawbacks of Action Lists As I dug into action lists some more, I realized that they were perfect for my implementation, but I also realized they had some drawbacks. The biggest flaw is simply the result of its greatest strength - its simplicity. Because it is a single ordered list, I couldn't have any sort of complex hierarchy of priorities. So if I wanted Attack Player to be a higher priority than Break Door, but lower than Move To Objective, while also having Move To Objective being lower priority than Break Door... that's not a simple problem to solve with action lists, but trivial with finite state machines. In summary, action lists are really useful for reasonably simple AI systems, but the more complex the AI you want to model, the more difficult it will be to implement action lists. That being said, there are a few ways you can extend the concept of Action Lists to make them more powerful. Ways to Extend This Concept So some of my AI units are multitaskers - they can move and attack at the same time. I could create multiple action lists - one to handle movement and one to handle attacking, but that is can be problematic - what if some types of movement preclude attacking, and some attacks require the unit to stand still? This is where Action Lanes come in. Action Lanes are an extension to the concept of Blocking. With Action Lanes, Action Items can now identify specific types of Action Items that it blocks from executing while allowing others to execute without problem. Let's show this in action. An Action Lane is just an additional way to determine what action. Each Action Item belongs to one or more lanes, and when its Blocking property returns true, it will add the lanes it belongs to Each action has a lane or multiple lanes they are identified with, and they will only block other actions which belong to those lanes. As an example, Attack Player belongs in the Action Lane, Move to Goal belongs in the Movement lane, and Build Ladder belongs in both since the unit must stand still and cannot attack while building. Then we order these items, and if they execute they will block subsequent actions appropriately. Example Implementation Now that we've gone over the theory, it is useful to step through a practical implementation. First let's setup our Action List and Action Items. For Action Items I like to decouple implementation, so let's make an interface. Here is an example implementation of the IActionItem for the BreakDoor Action Item. For the Action List itself we can use a simple List. Then we load it up with the IActionItems. After that, we setup a method that iterates over the list every frame. Remember we also have to handle blocking. Things get a bit more complicated if you want to use action lanes. In that case we define Action Lanes as a bitfield and then modify the IActionItem interface. Then we modify the iterator to take these lanes into account. Action Items will be skipped over if their lane is blocked, but will otherwise check as normal. If all lanes are blocked then we break out of the loop. Conclusion So that's a lot to take in. While coding the other day Frankie asked me to summarize my learnings. Thinking about it, there were a few key takeaways for me. Action lists are easier to setup and maintain then small transition-based state systems. They model a recognizable priority system. There are a few ways they can be extended to handle expanded functionality. As with anything in coding, there is often no best solution. It is important to keep a large variety of coding tools in our toolbox so that we can pick the right one for the problem at hand. Action Lists turned out to be perfect for King Randall's Party. Perhaps they will be the right solution for your project? Originally posted on
  5. Self Defense of a Trademark

    Frob,    Thanks for the advice  - like Brian said, it was spectacular and spot on. I did end up speaking with a lawyer to get some general information. Contacting directly seems unlikely to have any legal fallout. Your suggestions about tone and content of the initial e-mail were very helpful - I appreciate it. 
  6. Self Defense of a Trademark

    Tom,    I understand what you are trying to get at, but it isn't helpful. I need to know if trying to talk with this individual on my own has immediate negative legal consequences. It does not help if I'm saving hypothetical dollars that I won't ever end up getting because I spent my budget on legal so I didn't have enough to finish my latest game. 
  7. Self Defense of a Trademark

    Servant,    From what I know of trademark law from self-research, your statement is not factually correct, at least in the US. Trademarks do not need to be registered in the US in order to receive common law protection. It is the person who uses the trademark first (through product or service sale, for marketing, etc.) that is considered the owner. Registered at the State and Federal level provides "proof" of ownership; though that too can be contested if someone has held the mark for longer but not registered it. 
  8. Self Defense of a Trademark

    Then there is certainly room for confusion there, and you do need to consult an attorney.     As the original post states, I do not have the funding to be throwing money into legal help right now. I am going to contact the individual myself, but I want to know if there are any obvious legal problems with doing so. 
  9. Self Defense of a Trademark

    It is an indie dev. intent on releasing applications to the mobile stores (Windows 8 store, etc. Which I am already published on). No indication if the developer is intent on releasing video games specifically.    Regards,  Jesse
  10. Hey all,    Has anyone dealt with another company or individual infringing on their trademark (specifically, company or product name) before? Someone has started directly infringing on the trademark I have for my company name. As an indie I don't really want to be spending my funds on legal action. I don't have any reason to believe this person is acting maliciously - has anyone had any luck just e-mailing a person and requesting that they stop using your trademark? Are there legal repercussions to doing this down the road? Any help would be appreciated. In your response please let me know if you are a lawyer, a dev who has dealt with this kind of issue before, or otherwise. That way I can understand the context of your answer.  -Jesse
  11. Legal concerns for indie team?

    I am not a lawyer and this is not legal advice, just my opinion based on my experience as both an employee in the games industry, and an indie dev with my own company.    If this is your first project, setting up an LLC and what not can be a very daunting task, as well as expensive. I'd honestly stay away from that for now - Your best bet is to have a simple written agreement, in plain English, spelling out how the profits will be split up, and also very importantly - what happens if someone decides to leave the group, or you need to kick someone out if that happens. This will be percieved as a partnership between the members of the group. Also, keep the scope of the game VERY VERY SMALL. That way you can get something done in a few months, and also the mistakes that you inevitably make will have a much smaller impact.    Regards,    Jesse Crafts-Finch
  12. Help with online contracts

    What kind of project is this? If this is a serious business venture, you really need to hire a lawyer. If you don't have enough money to hire a lawyer, my guess is that this isn't serious enough to be a business venture, and so is a hobby project, or a first time project.    If this is a hobby project or a first time project, I wouldn't really worry about this kinda stuff. You can just write up a plain language agreement outlining what you and the other people expect/want from the project, and how to split the earnings in the 1/100,000,000,000,000 chance you make more than $10.    This is not legal advice, and I am not a lawyer. 
  13. Getting team members and NDA

    RPiller,    Having read your post, my first suggestion would be to really ask yourself what your purpose in creating this project is. If it's to learn about game development, then I'd ditch most concerns about the legal stuff at the door as it will just get in the way of making games. If learning is not your goal, and if you haven't already developed several games for yourself, I'd suggest changing your goal. Even within the industry, the hit/flop ratio for active industry professionals with years of experience is rather low.    As a programmer, your job is to get good at what you do, so that you can produce great quality code on any project at the drop of a hat (more or less). So stop worrying and get to programming.      [quote name='rpiller' timestamp='1357151206' post='5016781'] what do I need to know about NDA's? [/quote]   There are multiple articles around the web about why getting people to sign a non-disclosure agreement isn't really necessary or even a good idea, outside of the traditional Publisher/Developer relationship. So I wouldn't worry about it.    [quote name='rpiller' timestamp='1357151206' post='5016781'] I'm a programmer looking for an artist but anything the artist would create for said game I want to remain property of said game and not have the artist be able to some day say to me if I use their art they would sue me or something.   [/quote]   What incentive does an artist have to provide you with artwork for free, without getting any say in its use? This is not legal advice, and I am not qualified to provide it, but unless you sign a contract with someone you are working with, you are entered into a Defacto partnership - meaning 50/50, or whatever any lawsuit comes out to. So basically, if by some fluke chance of luck, you end up making truckloads of money with your product, why WOULDN'T the artist want their artwork in your game? If you're not making money with it, does it really matter so much?   [quote name='rpiller' timestamp='1357151206' post='5016781'] I want to work as a team with someone that's interested in the project I'm doing, but I also don't want to lose potentially months of work if the artist one day up and quits and tells me I'm not allowed to use the art they created for the game. [/quote]   Since you would just be losing the artwork, you wouldn't be losing any time, just the artwork. You could always find another artist to produce the artwork for you if you wanted. Or you could program the game in such a way that does not require great artwork (and plenty of successful indies have done just that).        So in summary - stop worrying and get to coding!
  14. Authorship and Copyright Question

    Based on the suggestions here and my own research, I'm going to make it a work for hire agreement (as I'm wary of changing something so fundamental to the agreement my lawyer gave me) and allow for: [quote] Consultant retains the exclusive right to claim or disclaim authorship of artwork; prevent the use of his name in association with a that he did not create; and prevent the use of his name as the artist of a work that has been modified in such a manner that would be prejudicial to the Contractor's honor or reputation. [/quote] Seems reasonable to me.
  15. Authorship and Copyright Question

    It also sounds like "Work-For-Hire" is a term used which explicitly implies certain rights, and it would be more or less equivalent to: 1) Have a work for hire contract which protected certain rights for the artist, including the right of authorship. 2) Have a NON work for hire contract, which transferred all copyright and ownership to me. Both would allow the artist to claim authorship, and an additional clause to either would allow them to display the artwork on their portfolio.