Advertisement
NightFox

Spirits DS - Character controller. C/C++ vs ActionScript 3

Apr 2nd, 2013
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.31 KB | None | 0 0
  1. /*
  2. c/c++ Function
  3. */
  4.  
  5. // Funcion CharacterFall();
  6. void CharacterFall(void) {
  7.  
  8.     /*
  9.     -------------------------------------------------
  10.         Variables
  11.     -------------------------------------------------
  12.     */
  13.  
  14.     u16 t_down = T_AIR;
  15.     u16 t_inside = T_AIR;
  16.  
  17.  
  18.     /*
  19.     -------------------------------------------------
  20.         Analiza las posibilidades
  21.     -------------------------------------------------
  22.     */
  23.  
  24.     // Obten el tile inferior
  25.     t_down = CharacterCheckDown(1);
  26.  
  27.     // Calcula si te vas a caer
  28.     if (((t_down == T_AIR) && !CHARACTER.is_jump) || ((t_down == T_STEEP) && CHARACTER.force_down)) {
  29.         // Registra la coordenada de inicio de caida
  30.         if (!CHARACTER.fall) CHARACTER.fall_y = CHARACTER.pos_y;
  31.         // Se va a caer
  32.         CHARACTER.fall = true;
  33.         // Aceleracion inicial de la caida
  34.         if (CHARACTER.air_speed == 0) {
  35.             CHARACTER.air_speed = CHARACTER_AIR_MIN_SPEED;
  36.         }
  37.     } else {
  38.         CHARACTER.fall = false;
  39.     }
  40.  
  41.  
  42.     /*
  43.     -------------------------------------------------
  44.         Aplica las acciones
  45.     -------------------------------------------------
  46.     */
  47.  
  48.     // El personaje se cae
  49.     if (CHARACTER.fall) {
  50.         // Nueva posicion
  51.         CHARACTER.pos_fy += CHARACTER.air_speed;
  52.         // Calcula si te sales de los limites...
  53.         t_down = CharacterCheckDown(1);
  54.         if ((t_down == T_WALL) || (t_down == T_STEEP)) {
  55.             // Si encuentras un muro
  56.             if (t_down == T_WALL) {
  57.                 // Deten la caida
  58.                 CHARACTER.fall = false;
  59.                 CHARACTER.air_speed = 0;
  60.                 // Calcula si se pierde vida con la caida
  61.                 FallDamage();
  62.                 // Ajusta el personaje al nivel del suelo/escalon
  63.                 t_inside = CharacterCheckDown(0);
  64.                 while (t_inside == T_WALL) {
  65.                     // Ajusta la posicion
  66.                     CHARACTER.pos_fy -= 64;
  67.                     // Verifica de nuevo
  68.                     t_inside = CharacterCheckDown(0);
  69.                 }
  70.             }
  71.             // Si encuentras un escalon
  72.             if (t_down == T_STEEP) {
  73.                 // Si no estas en un forzado de caida, ajustalo
  74.                 if (!CHARACTER.force_down) {
  75.                     // Deten la caida
  76.                     CHARACTER.fall = false;
  77.                     CHARACTER.air_speed = 0;
  78.                     // Calcula si se pierde vida con la caida
  79.                     FallDamage();
  80.                     // Ajusta el personaje al nivel del suelo/escalon
  81.                     t_inside = CharacterCheckDown(0);
  82.                     while (t_inside == T_STEEP) {
  83.                         // Ajusta la posicion
  84.                         CHARACTER.pos_fy -= 64;
  85.                         // Verifica de nuevo
  86.                         t_inside = CharacterCheckDown(0);
  87.                     }
  88.                 } else {
  89.                     // Aceleracion de la caida
  90.                     if (CHARACTER.air_speed < CHARACTER_AIR_MAX_SPEED) {
  91.                         CHARACTER.air_speed += (CHARACTER.air_speed >> 4);
  92.                         if (CHARACTER.air_speed > CHARACTER_AIR_MAX_SPEED) CHARACTER.air_speed = CHARACTER_AIR_MAX_SPEED;
  93.                     }
  94.                 }
  95.             }
  96.         } else {
  97.             // Aceleracion de la caida
  98.             if (CHARACTER.air_speed < CHARACTER_AIR_MAX_SPEED) {
  99.                 CHARACTER.air_speed += (CHARACTER.air_speed >> 4);
  100.                 if (CHARACTER.air_speed > CHARACTER_AIR_MAX_SPEED) CHARACTER.air_speed = CHARACTER_AIR_MAX_SPEED;
  101.             }
  102.         }
  103.         // Debes cancelar el forzado de caida?
  104.         if (CHARACTER.force_down && (t_down != T_STEEP)) CHARACTER.force_down = false;
  105.     }
  106.  
  107. }
  108.  
  109.  
  110.  
  111.  
  112. /*
  113. ActionScript 3 Conversion
  114. */
  115.  
  116. // Analiza si el personaje puede o debe caerse
  117.         private function Fall():void {
  118.        
  119.             /*
  120.             -------------------------------------------------
  121.                 Variables
  122.             -------------------------------------------------
  123.             */
  124.        
  125.             var cDown:uint = cCollision.cVoid;
  126.             var cInside:uint = cCollision.cVoid;
  127.        
  128.        
  129.             /*
  130.             -------------------------------------------------
  131.                 Analiza las posibilidades
  132.             -------------------------------------------------
  133.             */
  134.        
  135.             // Obten la colision inferior
  136.             cDown = cCollision.CheckHor((posY + bottom + 1), (posX - left), (posX + right), 8);
  137.        
  138.             // Calcula si te vas a caer
  139.             if (((cDown == cCollision.cVoid) && !isJumping) || ((cDown == cCollision.cPlatform) && forceFall)) {
  140.                 // Registra la coordenada de inicio de caida
  141.                 if (!isFalling) fallY = posY;
  142.                 // Indica que se va a caer
  143.                 isFalling = true;
  144.                 // Aceleracion inicial de la caida
  145.                 if (airSpeed == 0) {
  146.                     airSpeed = minAirSpeed;
  147.                 }
  148.             } else {
  149.                 isFalling = false;
  150.             }
  151.        
  152.        
  153.             /*
  154.             -------------------------------------------------
  155.                 Aplica las acciones
  156.             -------------------------------------------------
  157.             */
  158.        
  159.             // El personaje se cae
  160.             if (isFalling) {
  161.                 // Nueva posicion
  162.                 posY += airSpeed;
  163.                 // Calcula si te sales de los limites...
  164.                 cDown = cCollision.CheckHor((posY + bottom + 1), (posX - left), (posX + right), 8);     // Vuelve a leer el mapa de colisiones
  165.                 if ((cDown == cCollision.cWall) || (cDown == cCollision.cPlatform)) {
  166.                     // Si encuentras un muro
  167.                     if (cDown == cCollision.cWall) {
  168.                         // Deten la caida
  169.                         isFalling = false;
  170.                         airSpeed = 0;
  171.                         // Calcula si se pierde vida con la caida
  172.                         /***** FallDamage(); *****/
  173.                         // Ajusta el personaje al nivel del suelo/escalon
  174.                         cInside = cCollision.CheckHor((posY + bottom), (posX - left), (posX + right), 8);
  175.                         while (cInside == cCollision.cWall) {
  176.                             // Ajusta la posicion
  177.                             posY --;
  178.                             // Verifica de nuevo
  179.                             cInside = cCollision.CheckHor((posY + bottom), (posX - left), (posX + right), 8);
  180.                         }
  181.                     }
  182.                     // Si encuentras una plataforma
  183.                     if (cDown == cCollision.cPlatform) {
  184.                         // Si no estas en un forzado de caida, ajustalo
  185.                         if (!forceFall) {
  186.                             // Deten la caida
  187.                             isFalling = false;
  188.                             airSpeed = 0;
  189.                             // Calcula si se pierde vida con la caida
  190.                             /***** FallDamage(); *****/
  191.                             // Ajusta el personaje al nivel del suelo/escalon
  192.                             cInside = cCollision.CheckHor((posY + bottom), (posX - left), (posX + right), 8);
  193.                             while (cInside == cCollision.cPlatform) {
  194.                                 // Ajusta la posicion
  195.                                 posY --;
  196.                                 // Verifica de nuevo
  197.                                 cInside = cCollision.CheckHor((posY + bottom), (posX - left), (posX + right), 8);
  198.                             }
  199.                         } else {
  200.                             // Aceleracion de la caida
  201.                             if (airSpeed < maxAirSpeed) {
  202.                                 airSpeed += (airSpeed / 16);
  203.                                 if (airSpeed > maxAirSpeed) airSpeed = airMaxSpeed;
  204.                             }
  205.                         }
  206.                     }
  207.                 } else {
  208.                     // Aceleracion de la caida
  209.                     if (airSpeed < maxAirSpeed) {
  210.                         airSpeed += (airSpeed / 16);
  211.                         if (airSpeed > maxAirSpeed) airSpeed = airMaxSpeed;
  212.                     }
  213.                 }
  214.                 // Debes cancelar el forzado de caida?
  215.                 if (forceFall && (cDown != cCollision.cPlatform)) forceFall = false;
  216.             }
  217.        
  218.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement