Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- c/c++ Function
- */
- // Funcion CharacterFall();
- void CharacterFall(void) {
- /*
- -------------------------------------------------
- Variables
- -------------------------------------------------
- */
- u16 t_down = T_AIR;
- u16 t_inside = T_AIR;
- /*
- -------------------------------------------------
- Analiza las posibilidades
- -------------------------------------------------
- */
- // Obten el tile inferior
- t_down = CharacterCheckDown(1);
- // Calcula si te vas a caer
- if (((t_down == T_AIR) && !CHARACTER.is_jump) || ((t_down == T_STEEP) && CHARACTER.force_down)) {
- // Registra la coordenada de inicio de caida
- if (!CHARACTER.fall) CHARACTER.fall_y = CHARACTER.pos_y;
- // Se va a caer
- CHARACTER.fall = true;
- // Aceleracion inicial de la caida
- if (CHARACTER.air_speed == 0) {
- CHARACTER.air_speed = CHARACTER_AIR_MIN_SPEED;
- }
- } else {
- CHARACTER.fall = false;
- }
- /*
- -------------------------------------------------
- Aplica las acciones
- -------------------------------------------------
- */
- // El personaje se cae
- if (CHARACTER.fall) {
- // Nueva posicion
- CHARACTER.pos_fy += CHARACTER.air_speed;
- // Calcula si te sales de los limites...
- t_down = CharacterCheckDown(1);
- if ((t_down == T_WALL) || (t_down == T_STEEP)) {
- // Si encuentras un muro
- if (t_down == T_WALL) {
- // Deten la caida
- CHARACTER.fall = false;
- CHARACTER.air_speed = 0;
- // Calcula si se pierde vida con la caida
- FallDamage();
- // Ajusta el personaje al nivel del suelo/escalon
- t_inside = CharacterCheckDown(0);
- while (t_inside == T_WALL) {
- // Ajusta la posicion
- CHARACTER.pos_fy -= 64;
- // Verifica de nuevo
- t_inside = CharacterCheckDown(0);
- }
- }
- // Si encuentras un escalon
- if (t_down == T_STEEP) {
- // Si no estas en un forzado de caida, ajustalo
- if (!CHARACTER.force_down) {
- // Deten la caida
- CHARACTER.fall = false;
- CHARACTER.air_speed = 0;
- // Calcula si se pierde vida con la caida
- FallDamage();
- // Ajusta el personaje al nivel del suelo/escalon
- t_inside = CharacterCheckDown(0);
- while (t_inside == T_STEEP) {
- // Ajusta la posicion
- CHARACTER.pos_fy -= 64;
- // Verifica de nuevo
- t_inside = CharacterCheckDown(0);
- }
- } else {
- // Aceleracion de la caida
- if (CHARACTER.air_speed < CHARACTER_AIR_MAX_SPEED) {
- CHARACTER.air_speed += (CHARACTER.air_speed >> 4);
- if (CHARACTER.air_speed > CHARACTER_AIR_MAX_SPEED) CHARACTER.air_speed = CHARACTER_AIR_MAX_SPEED;
- }
- }
- }
- } else {
- // Aceleracion de la caida
- if (CHARACTER.air_speed < CHARACTER_AIR_MAX_SPEED) {
- CHARACTER.air_speed += (CHARACTER.air_speed >> 4);
- if (CHARACTER.air_speed > CHARACTER_AIR_MAX_SPEED) CHARACTER.air_speed = CHARACTER_AIR_MAX_SPEED;
- }
- }
- // Debes cancelar el forzado de caida?
- if (CHARACTER.force_down && (t_down != T_STEEP)) CHARACTER.force_down = false;
- }
- }
- /*
- ActionScript 3 Conversion
- */
- // Analiza si el personaje puede o debe caerse
- private function Fall():void {
- /*
- -------------------------------------------------
- Variables
- -------------------------------------------------
- */
- var cDown:uint = cCollision.cVoid;
- var cInside:uint = cCollision.cVoid;
- /*
- -------------------------------------------------
- Analiza las posibilidades
- -------------------------------------------------
- */
- // Obten la colision inferior
- cDown = cCollision.CheckHor((posY + bottom + 1), (posX - left), (posX + right), 8);
- // Calcula si te vas a caer
- if (((cDown == cCollision.cVoid) && !isJumping) || ((cDown == cCollision.cPlatform) && forceFall)) {
- // Registra la coordenada de inicio de caida
- if (!isFalling) fallY = posY;
- // Indica que se va a caer
- isFalling = true;
- // Aceleracion inicial de la caida
- if (airSpeed == 0) {
- airSpeed = minAirSpeed;
- }
- } else {
- isFalling = false;
- }
- /*
- -------------------------------------------------
- Aplica las acciones
- -------------------------------------------------
- */
- // El personaje se cae
- if (isFalling) {
- // Nueva posicion
- posY += airSpeed;
- // Calcula si te sales de los limites...
- cDown = cCollision.CheckHor((posY + bottom + 1), (posX - left), (posX + right), 8); // Vuelve a leer el mapa de colisiones
- if ((cDown == cCollision.cWall) || (cDown == cCollision.cPlatform)) {
- // Si encuentras un muro
- if (cDown == cCollision.cWall) {
- // Deten la caida
- isFalling = false;
- airSpeed = 0;
- // Calcula si se pierde vida con la caida
- /***** FallDamage(); *****/
- // Ajusta el personaje al nivel del suelo/escalon
- cInside = cCollision.CheckHor((posY + bottom), (posX - left), (posX + right), 8);
- while (cInside == cCollision.cWall) {
- // Ajusta la posicion
- posY --;
- // Verifica de nuevo
- cInside = cCollision.CheckHor((posY + bottom), (posX - left), (posX + right), 8);
- }
- }
- // Si encuentras una plataforma
- if (cDown == cCollision.cPlatform) {
- // Si no estas en un forzado de caida, ajustalo
- if (!forceFall) {
- // Deten la caida
- isFalling = false;
- airSpeed = 0;
- // Calcula si se pierde vida con la caida
- /***** FallDamage(); *****/
- // Ajusta el personaje al nivel del suelo/escalon
- cInside = cCollision.CheckHor((posY + bottom), (posX - left), (posX + right), 8);
- while (cInside == cCollision.cPlatform) {
- // Ajusta la posicion
- posY --;
- // Verifica de nuevo
- cInside = cCollision.CheckHor((posY + bottom), (posX - left), (posX + right), 8);
- }
- } else {
- // Aceleracion de la caida
- if (airSpeed < maxAirSpeed) {
- airSpeed += (airSpeed / 16);
- if (airSpeed > maxAirSpeed) airSpeed = airMaxSpeed;
- }
- }
- }
- } else {
- // Aceleracion de la caida
- if (airSpeed < maxAirSpeed) {
- airSpeed += (airSpeed / 16);
- if (airSpeed > maxAirSpeed) airSpeed = airMaxSpeed;
- }
- }
- // Debes cancelar el forzado de caida?
- if (forceFall && (cDown != cCollision.cPlatform)) forceFall = false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement