Saturday, May 11, 2013

Attacking

Attacking

Now available in Cultura, punching other people. To the death.

And after punching the ogre into poop... WE DINE!

Actually, I will make it a cultural trait choice if you want to perform cannibalism or not. Otherwise the resource node that is created will contain the stuff the unit had equipped and/or carried.

The attack action itself is actually fairly simple. It's similar to the move action. It does a distance check to target, moves closer if necessary and when in range it then calls the combatResolver to do damage. In the future when events are implemented it will throw up an attack event rather than call the function directly.

Secondary Action List:

  • Unit Creator
  • Action Architecture
  • Faction redesign

In order to cope with the growing needs of Cultura there are a few items that I'm going to address before my mind melts at the bad code.

Unit Creator

The unit creator is a class with a lot of static functions used primarily to create game entity objects. You call its various functions like createUnit or createAnimal, pass in an integer for an id and it spits back out a pointer to the new object. This is useful for several reasons: it can have an internal counter to use as a unit id (or resource node id etc.) which will be useful for decoupling some classes from direct usage of units/structures. It will know what numbers to assign to what for basic versions of units (I may add in more parameters later to make the entityCreator do more stuff but we'll keep it simple for now). These numbers include hp, damage, mesh names (although this might be changed later, at least it'll be fixed in one place) and so on. One place to make everything, one place to change how anything is made.

There is a little bit of design decision with how the type identifier ids work. Basically, there are around 10-20 raw good categories (I still have to hash out the exact design later) and in each there are several different material types. It would be nice to map those different materials to the item type that they are. For example: oak, pine, silverwood, ironwood would all map to wood for item type. There are all sorts of crazy complex stuff you can think of but rather than do anything special there'll just be a min and max constant for each set of materials and any value that falls between them inclusively will be mapped to a particular item type.

Doing that is useful for a situation such as a deer carcass. You kill a deer it drops an item of type carcass, and the material of the carcass is like deer antler (bone), deer meat (meat), deer bone (bone) and deer skin (skin). When you process the carcass it would be an easy conversion to know that the carcass (deer antler) converts into bone (deer antler).

Action Architecture

As mentioned, I'm switching CUnit* references and other such direct references to objects in actions into knowledge only of integer-based ids. The reason is to decouple actions from those classes. Right now, the flow is GameState->Faction->Unit->Action. But then action has knowledge of the gameState and units. That's just poop. It also makes memory management a nightmare. For instance, say an action is referencing a resource node and then it is deleted. No way to know and you'll get an access violation error. If instead you only know of the node by its id, then you must call gameState->getResourceNodeById(int id) and then if it returns null, then you know it's been destroyed and thus you should stop trying to harvest it.

I can remove the gameState coupling when I introduce an event system but for now, we'll go with the id-based system. We are going to "decouple" through coupling only through the gameState object. When there is an event system we blow away those references make them into events instead.

Faction

Factions, which contain the units and structures, will now need to keep knowledge of units by id and structures by id. The cost of an id is an integer per unit/structure and also a pointer to each unit/structure within a hash set (probably going to use an std::unordered_map). I think that's a reasonable cost for O(1) access time from actions to units when they only know about the id.

As an aside, I had some offline feedback about the fact that the cavemen in the game were carrying about balls of water and punching gazelles. Thus here is potential cover art for Cultura to reflect just that:

                                   `                                                                                       
                                                                                                                           
                                                                                                                           
                                                                                                                           
                                                                                                                           
                                                                           ,       `                    `                  
                                           @                                           `                   `.              
                                           @@              ,@@@@@@`              #.    :@@@@@              @@@ @@+         
        ,@'+##+#@@@@@@:           @@@;    @@@       `   @@@@@@@@@@+       @@@'   @@    @@@@@@#   @@@@@@@  @@@@:@@@@        
         @@@@@@@@@@@@@:          @@@@+    @@@   #@# @@@,@@@@@@@@@@+     ,@@@@@  '@@`   @@@@@@#   @@@@@@@: .@@@@@@@         
        `@@@@@@@@@@@@@:         @@@@@,   +@@@@  @@@:@@@  @#  @@@@@'     @@@@@#  @@@@   @@@@@@    @@@@@@@:   @@@@@.         
        .@@@@@@@@@@@@@.        @@@@@     @@@@@  @@@@@@@  @@  @@@        @@@ #   @@@@   @@@@@@    @@@@@@@     @@@@          
         +@@@@@@@@@@@#         @@@@      @@@@#  @@@@@@@      @@@       ,@@      @@@@`  #@@@@     @@@@@@`     @@@           
         ;+ .+@@@@@            @@@      @@@@@@+ @@@@@@@      @@@       :@@     #@@@@@  @@@@@#    @@@@@       @@@           
              @@@@@            @@@      @@@@@@@ @@@@@@@     #@@@       ;@@@@@  @@@@@@  @@@@@@@  .@@@@@       @@@           
              @@@@@           ;@@@+  @  @#@@@@@ @@@@@@@     @@@@        @@@@@# @@@.+@  @@@@@@@; ;@@@@@`     #@@@           
           @@@@@@@@@@         :@@@@@;@ @@'@@#@@ @@@@@@@     @@@@        @@@@@+:@@@ @@@ @@@,@@@@  ;  @'@     @@@@           
          @@@@@@@@@@@@        .@@@@#@@ @@@@+@@@`@@@# :.   ;              @@@   @@      :@   ,                ':            
           @@@@@@@@@@          @@@@@@` '@,                      ;@:           :                :#                          
           @@@@@@@@@@           :;'                `        @@@@@@@                         @@,;#''@@                      
           @@@@@@+  :.           ,             `           `@@@@@@@                     +.@#       @'#@                    
                :                                           '@@@@                     :  @+ :,  ` :` #'@;                  
             @  `            +      #    '     ;:    @@@@@' `@@@@@                  ` +@@ `         '  #,@                 
            @@@       `  .@ @@@  : ;@@:@#@:  .@@@@,  @@@@ @  @@@#@                 ;@'@@          ;     :#.                
           @@@@  +@@@+@ @@@@@@#  ;@@@@@@#@   @@@@@@  @#@@ @  @@@@#                 @@@    `      :@@      @                
           @@@@  @@@@@@  @@@@@   :@@@@@@#@`  @@@@@@@ +@@#@   @@@@                '@@@@@@        .@  #@ .   @               
           @@@@` #@@@@@  #@@@@    @@@@#@#@: :@@@.@@@ :+#@@   @@@@@@@            #@@@#.#          @@@.'@`   @               
           @@@@@  @@@@@,  @@@@  # @@@@@@#@'  @@@:@@@  @@#@   @@@@@#@`           @@@:@@@#          @@@@+@' . @              
           @@@@@  @@@@@@  @@@@    @@@@@@#@@  @@@ @@@  @@@@@  @@@@@@@@          :@@@@.' ;@            `@@@ + @              
           @@@@@  @@@@@@  +@@     @@@ @ @+@  @@@@@@   @@@#@  +@@++             ;@@,@#@#.,@@            @@ ' @              
          ,@@#@@' @@:@@@  '@@     @@@   @@@  @@@@@#   @@#@                     ,@@@@',#@: .            '. ' @              
          @@@@@@@@@@ @@@  @@@+   .@@@   @@@  @@+@@                             :@@@@@',,#@                ' @              
          @@@@@@@#@  .'    @`      :`         #::              ##@             @@@@:###..#                :+@              
         ,@@ ;                                       @@#@@@@@@@@@@@@           #@@#@@# ##                ' @@              
                                                +#@  '@+`;+'@@@#@@#@@          #@@.;@@',@@ @           @ @:@.              
                                                 :@@@@; @`##@#@@##+:@@         #@@@@'.@;`'.. :,   +  +,@#@@@               
                                               .+ @#@##+@@#@@@@;@++@@@'@,      :@+#@@;.@@ # @'   @  @ @ ;+@'               
                                                 ;@@## #@.#+'@@`@@@@@@#@@       @@@ .@ ;, ':.@ @;@ ##,@@@#@                
                                                @@`#@#.@@+#@#+#@@@;#@,##@@      ;#@@##@@.@ @+:#'+ ;+ ::'@@@                
                                               @@@@;@@:@#@@@@@#@#@#@#,@@@@       @@@@ :# ;,'@+@@@: @#@@ @@                 
                                               @+@':@+#@,#.+## ++@@@@@@@@@        #@@@@@@#@.;@@@@@@@@@@@,@                 
                                               +.@@#@.+@'###:@#`+#@@@@@@@@:`      '@@@@@@ @@+@@@@@@@@@@@@@                 
                                              @@@@@#@;#:@#@`@#@ @@@@@@@@@ #        @#@@@@@###@@@@@@@@@@@,@                 
                                                . @#+#@ @@@@.@#@#@@#@@'+@#        @@ `@@@@@@@@@@@@@@@@@# @.                
                                                 @@@. @@@@@  @@@@@@` @@@+         @  .,.@@@@@@@@@@@@##@: @                 
                                                ;@@+#@ @@    @ .@@ ` @@@@         @``@ :.     ;@@@@@@:@  @'                
                       @                        #@@#+@;@       @#  `  ' .         @@@. . '     ;  :@@,'  @+                
                     :@@@+                    +@@:@@'#@@      ;@   `  ' @         `@@        `:.,     `  @                 
                     @@  #@@ @+               @@@@#@@ #;'#  ` @      @@#+         ,;@@                   @                 
                     @     @@@@@@.   ., :     #@@@@@@#` @@@@@@;@@ ` @@#             @@                  @:                 
                    @#       `@@@#;   .@     ;@@@@@#@#       .+@: '@@@.             :@           #@;';@@@@  ,              
                    @            @@@@@       @ @@@@@ `   @@@@@@@  @@@#:             `@@          @@@@@@+@   @  `           
                   +@              @@@@@@@' # #@@@@@ ``,@,@@@@.`  @@@.         #  ; '@@    @.   @,          @@             
                   @                @@, @@@@@+@@@@@@@ :+  ;@#+'@ # .:@        @@    '@@   :@@' #@           @@+            
                  @@                ,@@;    @@ `@@@@@,@  @@@@@@@: `@@         @@    @`@        @            @@@            
                 @@.                  @@@    @@#@@@@@#@#@@@@@'@@@@;@@'       +@@    #;@.      #@            @ @'           
                '@@ .                  @@` ;  @#@@#@:#@@@@;@@@@,#@@@@@       @@@     ,@        @           ,@;#:           
                .@                      @@  , @@@@#@#@@@@@@@@@@@@@' @@       @@@     `@        @            @@'            
                @@;                     @@  . @@@'@@@@@@@@@: @@@@@@@;@;      @@@     +@        @:                          
                @@@                      @`    +@@#@@@@+@@:.;@ ,  @+#@       @#@@    '@   .    @@                          
                @+                       @@     #@@@@#@##@  .@ @ `@'@         @@     #@   :    @@                          
                @+                  `    @@    #'@@ @@@@#@  `@ #@@`@@@@#      @'     @#        @@                          
                @+                      '@@    @ @@# @@#@@'# @@@, @@#@@@@#           @;        #@                          
                @#                      `+@    @+@@  @@'@@@#@@@:@@+@    @@@          @         @@                          
                @@                     ` @@     @@    @+@@@@@@@@@@ @      @@         @         @@                          
                @@                      .@@@          @@@@@@@@@##@@@   :.  @,        @         '@+                         
                @@                       @@#@         @@@@@@@@@,@@@    @@+ @@        @          @@                         
               .@@                       #@'          @@@@@@;#@@@        @ @@:       @         .@@                         
                @@                       :@'   `      ,##@@@##@       ;@ +  @#       @          @@   #.                    
                .@@                       @@#: @@     ##@@@@@@       @@     @+      :@          @@   '@                    
                 @@@                      @@+#  @@    #'@@@@@@:   ` @@      @#      @@          @@   #@@                   
                 +@@@                     '@+,   @@' , `#@@@,@`   @@@    `  +@, `   @#          @@   @ @                   
                 :@@@#                     @@     +@@,,' @@@     #@@    .    '@:    @:          @@  .@ @+                  
                  ,@@@#                    @@+      ,@@` @@.   .@@           #@@   ,@           @@  #@ #@                  
                   @@@@                `   @@      '     ;@     :       ,    `@@@  :@           @@, +;@@                   
                    ##@@                   @@#   .@@@#   #@           @.       @@: +@           #@# #.                     
                    ;@@@@                  ,@@`@@@   @@: :@           #@;.      @@ @@           #@@.@'                     
                     ##@@;                  +@@@ `    #@ @;            #@:       @@@@           #@# .                      
                     `@:@@         .@#    ;@@@.        +#@              @@       `@@+           ;@@                        
                      +@#.@       @@'`@@@@ @@ `         @`     ;         @`      . @@       , . `@@                        
                       #'#@@    ;@  `   @@+@.``         ,@`    @         @+        @@     ` `  `;@@,      `                
                        #+@@,  @@ `   `@@@@+ ;     ';   @@. `  @@        @@   ,   ,@`          .;@@`                       
                         @'@# +@#    ;@@@@@@+           ;@'+.  +@        #@       @@             @@+                       
                         `@,@@@     '@@#@@@@@          #:@#@@# :@     .  :@.      @, .           @@                        
                            `@+      @@+@@@@@#        ' '@@@@#,,@         @+    ` @#  ,         +@@;                       
                        `,@@@@ ,     @ +@@@@@#`        ..@@:@@@ @        :@.     # @`          ';@   .                     
                      @@@@@. @  ,    @ #@@@@@@#     `  .`@@   @@@        @@    '   #          ; @   #                      
                      @@    '@`     @@ @@@@@@@,        . @@ .  @@   `  . @@@  .  . .,        .#@@  #@'                     
                      @     '@'  ;  @@ '@@@@@@#`       ` @@    #@     ,`##@@@  ;  `.    @@@+  @#@  @@'                     
                     @@      #@   . @@ #@@@@@@@'         #@     @,    ,'#@@#@@';               @@; @@                      
                     @. ,    #@ . `#@: +@@@@@@@@         #@     #@   `; +@@ @@@  `          `  @@@#@@                      
                     @;.      @, . @@  :@@@@@@@@         #@      @'` .,@`@  '@@@+           +#@@@;                         
                    @@        ;@  `#@   @@@@@@@@# .`     .@ ,     @..@  @;.   @@@@@+ ;#`@#'@';@ ,`                         
                    @@        `@`  @@   @@@@@@@@@ `..  `,@        @@.  @@      @@@@@@@@ .@. @;  :+                         
                    @###       +@ :@@ : @@@,@@@@@ ,..   +@        @@  @@        @@@@ +@@  @@@  #:#  `                      
                    `@@,       .@`#@@   +@@@@@@@@  .`,   @         @;@@        #@#; @@  .@.@   +@@ `                       
                     @@ #@      `@#@@@  ,#@@@`@@@  .,`   @        @@@+#     +#. :@@   `@@: @   ;@@                         
                    .;@  @@`@.   @@;@@@  @@@@'@@@@ :  ,  @  ` `   @@+@ `,@#  ;@@:`   @@ @@@    @#@                         
                     :@@ @@@@@# ` +,#@@@  #@@@'@ ;@: ` .@@ ::    ,@@,@:+;'@@+ '#   @@          @@@.                        
                     ` @. @  '@@++@@@#@@ ., #@@@@. @` ..@@      ,@@@@@@@#   :'   @@,          #@;@                         
                    .  .@ @'    @@@@@#+@   ` @'. :::@@@#@@@ `;+@@@@.,    `'    @@;            :@+@                         
                        @@+@  '@@@@;@',     .   #    #@@+@#  ,@#,@     ,+    +@:             , @@@                         
                        ,@@@ ,@@@@`  :+;    :        ,:@@@;'@#+@@#    +@@  .@#               ; @ @                         
                      :#`@#@@ @@@   .  @@##;          . +@@@@@@@@#:   #@ :@#                 ,;@ @                         
             #@@@@@@@@@::++  ,@@     , '`  :@       `    .@#; ,'`. , @,+@'           ,'.:;  :#@@@@,                        
              @@  `'+ ,;+@ ` @@      ::                   #@  `,.  , '@@;.'.:. ,;';,    `@@@#@@  @                         
                @@#. #   ;.  @@         +           `,+    @@+   ` `  ###@@@@#+.    :@@'  '@@ @ #;                         
              + @@@#     ,, :@@                     '     +:@ '#       @@@@@@@@@'@@'    #@@+  @ @                          
             @@@@,  `    #` @@@                       `   +@@@@@@+      @@@'`@@@.     @@; :;@@  ,@             `           
            @@@ .`       ; .@@.                           +@@@@@@@#    #            @@    ;@ @@.,@                         
          @@@,      ,+@@@# :@@                    '        @@@@@@@@#        .    #@'      @`@, @@#                         
       +@@@+     #@@@@#@@@@@.@   .,                         @@@@@@@',   '@`   .@@:        @,@   @@                         
      +@@@@@#+, @@@@   @#,@@@@                              @@@@@@@@'    @.;@@#           @ @   @@                         
          @@@@@@@#  `    #@@@@@`                  .          @@@@@@@@:    + +,@           @@@   +,                         
           +@@@@@@@@; :,   +@@@@@        `                   ,#@@@@@@    ,  @@@;          @@`   @:                         
          @@@@@@@@@@@@@@@@@@@@@@@@ `                            @@@@@       ,@:::         @@,   @                          
         :' @@@@; @        :@@@     `  .            .    `          @@.       #@ `, `    @@  '  @                          
        @.# @@@@@@+@@       # +@+     `              ,                @;   '  +#@        @   #  @                          
          #+.@@@@@@@@@@ @   @  ,     :                `               :@#        `.    ,@   @#  @                          
           @`@@@@@@#@@:@@.@;@@  +                          `           @@@         '  @@`   @  @                 `         
            @#@@@@@@+@@,@@@@@@@  ,.                   .                 @@@   .`     @@    :@  @                           
             #@@@@@@@@@@@@@@@@@;                          `              @@@,,      @@ :   @@ .@                `          
              '@@@@@@@@@+@@@@@@@                .:                   .     @@+  ; @@;   +;#@  @                            
               #@@@@@@@@@.@@@@@@@.            `@@@@@@                       @@#:@@`      +@  .@                            
               @ @@@@@@@@@@@@@@@@            @@@@@@@@@                       @@  ;`      @ `@@.                            
              `+  @#@@@@@@@@@@#. +          #@@ @@@@@@@               .        @# ..   +@   @@ @                           
              @     '@@@@@@  #             `@;@@@@@:@@@@           +           @@`.`,,#@   @@ +,  +                        
              `    +     .@+                #@@@@@@@@@@@                 .  .  @@   : @   '@#  #,,                         
             @     #      @@       .        .@@@@@@@@@@@                ;  ':'+@@@#  #    @@                               
            @   , #       @@    ;',          .@@@@@@@@@   :, ..:          ###+@@@@@; ` @#@@                                
           ;# '   '      + @+     .            .@@@@@@       ` :      @@@@@@@@.@@ @@@@ .@@`                                
          +@'#+@ @      @` @@                     ``   .:           : `@,#@#@@ ;   #@@#@@                           `      
         ;@+;@ @@@     ,@  :@                                          .@@@@@@.;  `'@@@@:@                                 
       #+#@ @  @@      @@   @+                                  '#@@.  `:'#  .;'  ;#@@@                                    
      ''@@''  '#@     @ #   @@     @                      @# #@@@@@@#,  ''.    @, @@@:                                     
      ,`      : @    @ @    #@    #@@                    @@@@@@@@@@@@@@#.+ `    @@@@                                       
                @'  @  @:   `@:    @@@                   :@@@   @@@@@@@@@@#:.:'@@@:`'                                      
               , ` @  ,@@   @@@    '@@@                   @@#  :  `    .#@@@@@@@@+@+                       `               
               @+ #;  @@@  @ ;@.    @@@@@@            ,' .+@@#'+#,.       .'@@@,@@@,   ;                                   
               @`:@     + @  @@@     @;@@@#@@@@@@@@@.`+#@@@#@@@@@@@@@@@@@'  ,`.@@@#                                        
               # @     # :.,##@@      #;++#@@@#@@+ @#    #@@@@@@@@@@@@@@@@@@@@@;'@'                                        
              @ @      @ @ .@@@`       `@@#@@@@@@@:    ,    +@@@@@@@@@` @@@@@#'+@,                                         
              @,+      @@  #@@@          #`   #               @@@@@@@@@@@@#`.@@@@#`                                        
             # @      '.' :#@@                               @@,@ ;;#@@@@@@@@@@@;                                          
            .@@       @@ `+@@#                              @@+#     # '+@@@'@                                             
            +@@       @; .@@@                             :@@.#       # `                                                  
           `;@          ;@@@`                             @@, ,        @  ;   :`                                           
           `@`         ;,@@@                             +@;            @    '          `                                  
           #@         . @@@                             @@#@     +    @@ ;   @                                             
          :@.          +@@@                            .@# @     @'   ' @@@:+@                                             
          @@          :@@@                            .@#  `@    @@`   + @ @@'@                                            
                      @@@@            '               @@    @    @,@   @    @`@.                                           
`                    #@@@                            @@     ',   @ ,@  @     @@                                            
`                   `#@@'                           @@.      @   @  @@;      :@                                            
                    '@@@                           @@'       @@: @   @#       +                                            
                    #@@:                         `@@#        :@@ @    @:                                                   
                   ` @@                          #@@          @@ @     ,                                                   
                    @@                         ':@@             @@                                                         
                    @@                        :,@@              @'                                                         
                   @@                       .` @@.              @;                                                         
                   @'                    .    @@                 @,                                                        
                   @                          @.                 @+                                                        
`                 @:                         @@                  @'                                                        
                  @           `             @@                   +@                                                        
                               `           @@'                    @                                                        
                                           @ ;                    @                                                        
                                                        `         @                                                        

No comments:

Post a Comment