/* * XEvil(TM) Copyright (C) 1994,2000 Steve Hardt and Michael Judge * http://www.xevil.com * satan@xevil.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program, the file "gpl.txt"; if not, write to the Free * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA, or visit http://www.gnu.org. */ // transform.bitmaps // Specific transformations used to auto-generate bitmaps. // E.g. the bitmaps for a Creature walking to the left are // the same as those walking right, just reflected around // the X axis. // TODO: For Ninja, CO_r_DN should be like for CO_r_UP and // CO_l_DN should be CO_l_UP. // Map from base directions to all other directions. // {0} means the direction is a base direction. // {TR_NONE} means the identity transform. OneTransform Transform2D::transforms[CO_DIR_MAX] = { {0}, // CO_center_R {1,CO_center_R,{TR_RF_X}}, // CO_center_L {0}, // CO_air_R {1,CO_air_R,{TR_RF_X}}, // CO_air_L {0}, // CO_air {0}, // CO_center {1,CO_dn,{TR_RT_3}}, // CO_r {2,CO_dn_R,{TR_RF_X,TR_RT_3}}, // CO_r_DN {1,CO_dn_R,{TR_RT_3}}, // CO_r_UP {0}, // CO_dn {0}, // CO_dn_R {1,CO_dn_R,{TR_RF_X}}, // CO_dn_L {1,CO_dn,{TR_RT_1}}, // CO_l {1,CO_dn_R,{TR_RT_1}}, // CO_l_DN {2,CO_dn_R,{TR_RF_X,TR_RT_1}}, // CO_l_UP {2,CO_dn,{TR_RF_X,TR_RT_2}}, // CO_up {2,CO_dn_R,{TR_RF_X,TR_RT_2}}, // CO_up_R {1,CO_dn_R,{TR_RT_2}}, // CO_up_L {0}, // CO_climb {1,CO_climb_UP,{TR_NONE}}, // CO_climb_DN {0}, // CO_climb_UP {1,CO_air,{TR_NONE}}, // CO_air_UP {1,CO_air,{TR_NONE}}, // CO_air_DN {0}, // CO_climb_R {1,CO_climb_R,{TR_RF_X}}, // CO_climb_L {0}, // CO_R {2,CO_UP_R_R,{TR_RF_X,TR_RT_2}}, // CO_DN_R_R {1,CO_UP_R,{TR_RT_1}}, // CO_DN_R {1,CO_UP_R_R,{TR_RT_1}}, // CO_DN_DN_R {1,CO_R,{TR_RT_1}}, // CO_DN {2,CO_UP_R_R,{TR_RF_X,TR_RT_3}}, // CO_DN_DN_L {2,CO_UP_R,{TR_RF_X,TR_RT_3}}, // CO_DN_L {1,CO_UP_R_R,{TR_RT_2}}, // CO_DN_L_L {1,CO_R,{TR_RF_X}}, // CO_L {1,CO_UP_R_R,{TR_RF_X}}, // CO_UP_L_L {1,CO_UP_R,{TR_RF_X}}, // CO_UP_L {1,CO_UP_R_R,{TR_RT_3}}, // CO_UP_UP_L {2,CO_R,{TR_RF_X,TR_RT_1}}, // CO_UP {2,CO_UP_R_R,{TR_RF_X,TR_RT_1}}, // CO_UP_UP_R {0}, // CO_UP_R {0}, // CO_UP_R_R }; OneTransform Creature::uprightTransformOverride[CO_DIR_MAX] = { {TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT}, {TR_USE_DEFAULT}, {1,CO_center,{TR_RT_3}}, // CO_r {2,CO_center_R,{TR_RF_X,TR_RT_3}}, // CO_r_DN {1,CO_center_R,{TR_RT_3}}, // CO_r_UP {TR_USE_DEFAULT}, // CO_dn {TR_USE_DEFAULT}, // CO_dn_R {TR_USE_DEFAULT}, // CO_dn_L {1,CO_center,{TR_RT_1}}, // CO_l {1,CO_center_R,{TR_RT_1}}, // CO_l_DN {2,CO_center_R,{TR_RF_X,TR_RT_1}}, // CO_l_UP {2,CO_center,{TR_RF_X,TR_RT_2}}, // CO_up {2,CO_center_R,{TR_RF_X,TR_RT_2}}, // CO_up_R {1,CO_center_R,{TR_RT_2}}, // CO_up_L {TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT}, {TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT}, {TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT}, {TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT}, {TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT}, }; // CAREFUL!!! // If you change any of the values between CO_DN_R_R and CO_UP_R in either of // Fighter::transformOverride or Fighter::uprightTransformOverride, you may have to change // it in the other as well. Would be better to have some way of composing transformOverrides, // so they could share the common functionality. // // This is the transformOverride that Fighter provides to adjust for // the way that it uses the CO_DN_R_R...CO_UP_R slots in MovingContext. // // Maybe this should be some sort of .bitmaps file like transform.bitmaps. OneTransform Fighter::transformOverride[CO_DIR_MAX] = { {TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT}, {TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT}, {TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT}, {TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT}, {TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT}, {TR_USE_DEFAULT}, {0}, // CO_DN_R_R -> center_R {1,CO_DN_R_R,{TR_RF_X}}, // CO_DN_R -> center_L {0}, // CO_DN_DN_R -> air_R {1,CO_DN_DN_R,{TR_RF_X}}, // CO_DN -> air_L {2,CO_DN_L_L,{TR_RF_X,TR_RT_3}}, // CO_DN_DN_L -> r_DN {1,CO_DN_L_L,{TR_RT_3}}, // CO_DN_L -> r_UP {0}, // CO_DN_L_L -> dn_R {1,CO_DN_L_L,{TR_RF_X}}, // CO_L -> dn_L {1,CO_DN_L_L,{TR_RT_1}}, // CO_UP_L_L -> l_DN {2,CO_DN_L_L,{TR_RF_X,TR_RT_1}}, // CO_UP_L -> l_UP {2,CO_DN_L_L,{TR_RF_X,TR_RT_2}}, // CO_UP_UP_L -> up_R {1,CO_DN_L_L,{TR_RT_2}}, // CO_UP -> up_L {0}, // CO_UP_UP_R -> air_UP {0}, // CO_UP_R -> air_DN {TR_USE_DEFAULT}, }; // This does everything in Fighter::transformOverride plus it adjust so that // when the Fighter is walking on the walls/ceiling it uses the upright // bitmaps instead of the crawling bitmaps. E.g. Ninja uses // Fighter::transformOverride while Hero uses // Fighter::uprightTransformOverride. OneTransform Fighter::uprightTransformOverride[CO_DIR_MAX] = { {TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT}, {TR_USE_DEFAULT},{TR_USE_DEFAULT}, {1,CO_center,{TR_RT_3}}, // CO_r {2,CO_center_R,{TR_RF_X,TR_RT_3}}, // CO_r_DN {1,CO_center_R,{TR_RT_3}}, // CO_r_UP {TR_USE_DEFAULT}, // CO_dn {TR_USE_DEFAULT}, // CO_dn_R {TR_USE_DEFAULT}, // CO_dn_L {1,CO_center,{TR_RT_1}}, // CO_l {1,CO_center_R,{TR_RT_1}}, // CO_l_DN {2,CO_center_R,{TR_RF_X,TR_RT_1}}, // CO_l_UP {2,CO_center,{TR_RF_X,TR_RT_2}}, // CO_up {2,CO_center_R,{TR_RF_X,TR_RT_2}}, // CO_up_R {1,CO_center_R,{TR_RT_2}}, // CO_up_L {TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT}, {TR_USE_DEFAULT},{TR_USE_DEFAULT},{TR_USE_DEFAULT}, {0}, // CO_DN_R_R -> center_R {1,CO_DN_R_R,{TR_RF_X}}, // CO_DN_R -> center_L {0}, // CO_DN_DN_R -> air_R {1,CO_DN_DN_R,{TR_RF_X}}, // CO_DN -> air_L {2,CO_DN_R_R,{TR_RF_X,TR_RT_3}}, // CO_DN_DN_L -> r_DN {1,CO_DN_R_R,{TR_RT_3}}, // CO_DN_L -> r_UP {0}, // CO_DN_L_L -> dn_R {1,CO_DN_L_L,{TR_RF_X}}, // CO_L -> dn_L {1,CO_DN_R_R,{TR_RT_1}}, // CO_UP_L_L -> l_DN {2,CO_DN_R_R,{TR_RF_X,TR_RT_1}}, // CO_UP_L -> l_UP {2,CO_DN_R_R,{TR_RF_X,TR_RT_2}}, // CO_UP_UP_L -> up_R {1,CO_DN_R_R,{TR_RT_2}}, // CO_UP -> up_L {0}, // CO_UP_UP_R -> air_UP {0}, // CO_UP_R -> air_DN {TR_USE_DEFAULT}, };