Well I have it closer, but still have an issue with the following characters being too far back and jumping forward. but at least their path is correct, I can fix the jumping forward but then their path is wrong, it is one way or the other for some reason.
Code: (Select All)
TYPE Character_data Xloc AS _BYTE Yloc AS _BYTE PixX AS SINGLE PixY AS SINGLE Dirc AS _BYTE END TYPE TYPE Player_data HP AS _UNSIGNED _BYTE MP AS _BYTE HP_Max AS _UNSIGNED _BYTE MP_Max AS _UNSIGNED _BYTE Wep AS _BYTE Arm AS _BYTE Shd AS _BYTE Xp AS _UNSIGNED INTEGER Lvl AS _BYTE PwrUP AS _BYTE Alive AS _BYTE AttPwr AS _UNSIGNED _BYTE DefPwr AS _UNSIGNED _BYTE CD AS Character_data END TYPE TYPE MapData ID AS INTEGER END TYPE TYPE GameData WorldXSize AS INTEGER WorldYSize AS INTEGER WaterFrame AS _BYTE ShoreFrame AS _BYTE ConveFrame AS _BYTE LavaFrame AS _BYTE Moving AS _BYTE Noah AS _BYTE Odin AS _BYTE Myau AS _BYTE END TYPE REM '$include:'controls.bi' TYPE ControllerKeys KBCon_Up AS LONG KBCon_Down AS LONG KBCon_Left AS LONG KBCon_Right AS LONG KBCon_Select AS LONG KBCon_Start AS LONG KBCon_A_Button AS LONG KBCon_B_Button AS LONG Control_Pad AS _BYTE 'which Gamepad\Joystick Device Is player Using? BAD_Pad AS _BYTE 'option for Buttons As Directions Joy_Up AS _BYTE 'axis for up Joy_Up_Val AS _BYTE 'axis value for up Joy_Down AS _BYTE 'axis for down Joy_Down_Val AS _BYTE 'axis value for down Joy_Left AS _BYTE 'axis for left Joy_Left_Val AS _BYTE 'axis value for left Joy_Right AS _BYTE 'axis for right Joy_Right_Val AS _BYTE 'axis value for right Joy_Select AS _BYTE Joy_Start AS _BYTE Joy_A_Button AS _BYTE Joy_B_Button AS _BYTE Joy_Button_Up AS _BYTE 'for people whos controllers give BUTTON states for direction keys Joy_Button_Down AS _BYTE 'or just want to use buttons for the direction keys. Joy_Button_Left AS _BYTE '"""" Joy_Button_Right AS _BYTE 'however this fails to work so may not be implemented. END TYPE ' DIM SHARED KeyCodes(134) AS KeyCodeData, DeviceData(16) AS DEVICE_Info DIM SHARED C AS ControllerKeys CONST Default_Key_Right = 19712, Default_Key_Left = 19200, Default_Key_Up = 18432, Default_Key_Down = 20480 CONST Default_A_Button = 32, Default_B_Button = 13, Default_Start_Button = 65, Default_Select_Button = 66 CONST ESC_Key = 27, ESC = 99 CONST TRUE = -1, FALSE = NOT TRUE CONST DOWN = 0, LEFT = 3, UP = 1, RIGHT = 2, SELECT_BUTTON = 4, START_BUTTON = 5, BUTTON_B = 6, BUTTON_A = 7 DIM SHARED F1 MFI_Loader "P_Star_I.MFI" 'OPEN "PalmaWorldBase.txt" FOR BINARY AS #1 'GET #1, , MapTileHeight 'GET #1, , MapTileWidth GET #F1, , MapTileHeight GET #F1, , MapTileWidth DIM SHARED Map(MapTileWidth, MapTileHeight) AS MapData GET #F1, , Map() CLOSE IF _FILEEXISTS("temp.dat") THEN KILL "temp.dat" DIM SHARED Layer(16) AS LONG, G AS GameData DIM SHARED P(4) AS Player_data DIM SHARED Animation(4, 6) AS _BYTE Animation(0, 0) = 0: Animation(0, 1) = 1: Animation(0, 2) = 2: Animation(0, 3) = 3 Animation(1, 0) = 0: Animation(1, 1) = 1: Animation(1, 2) = 2: Animation(1, 3) = 3: Animation(1, 4) = 4: Animation(1, 5) = 4: Animation(1, 6) = 1 Animation(2, 0) = 0: Animation(2, 1) = 1: Animation(2, 2) = 2: Animation(2, 3) = 1 Animation(3, 0) = 0: Animation(3, 1) = 1: Animation(3, 2) = 2: Animation(3, 3) = 0 SCREEN _NEWIMAGE(800, 600, 32) Layer(0) = _DISPLAY Layer(1) = _COPYIMAGE(_DISPLAY) Layer(2) = _NEWIMAGE(2048, 1532, 32) 'Layer(3) = _LOADIMAGE("pstartile_16x16_Game.bmp", 32) 'Layer(4) = _LOADIMAGE("TileMaster.bmp", 32) 'Layer(5) = _LOADIMAGE("CharacterSheet_Master.bmp", 32) _CLEARCOLOR _RGB32(0), Layer(2) _CLEARCOLOR _RGB32(62), Layer(5) '-----------------Palma Structures----------------- PalmaMaps: DATA 22 'Towns data DATA 81,45,3,3,0: 'Camineet DATA 69,56,3,3,0: 'Parolit DATA 68,44,4,4,1: 'Star Port DATA 13,15,0,0,2: 'Abion DATA 66,29,0,0,2: 'Loar DATA 23,49,0,0,3: 'Bortevo DATA 53,55,0,0,2: 'Gothic DATA 84,77,0,0,2: 'Eppi DATA 102,44,-1,0,0: 'Scion DATA 117,78,-2,0,0: 'Drasgow 'Cave Data DATA 97,10,0,0,4: 'Naula cave DATA 113,7,0,0,4: 'Baya Malay Cave B DATA 119,13,0,0,4: 'Baya Malay Cave A DATA 21,36,0,0,4: 'Bortevo Passage B DATA 24,46,0,0,4: 'Bortevo Passage A DATA 117,55,0,0,4: 'Scion Cave DATA 77,64,0,0,4: 'Medusa's Cave 'Tower data DATA 103,19,0,0,5: 'Baya Malay Tower DATA 103,33,0,0,5: 'Baya Malay Prison DATA 5,42,0,0,5: 'Forgotten tower 'DATA 31,77,0,0,5: 'Medusa's tower DATA 49,81,0,0,6: 'Prison '--------------------------------------------------- P(0).Alive = TRUE P(1).Alive = TRUE P(2).Alive = TRUE P(3).Alive = TRUE G.Myau = TRUE G.Odin = TRUE G.Noah = TRUE ShiftX% = 64 ShiftY% = 36 'draw map screen DO 'moving the characters IF _KEYDOWN(Default_Key_Up) AND (NOT G.Moving) THEN P(0).CD.Dirc = UP: G.Moving = TRUE IF _KEYDOWN(Default_Key_Left) AND (NOT G.Moving) THEN P(0).CD.Dirc = LEFT: G.Moving = TRUE IF _KEYDOWN(Default_Key_Right) AND (NOT G.Moving) THEN P(0).CD.Dirc = RIGHT: G.Moving = TRUE IF _KEYDOWN(Default_Key_Down) AND (NOT G.Moving) THEN P(0).CD.Dirc = DOWN: G.Moving = TRUE IF _KEYDOWN(27) THEN exitflag%% = -1 SELECT CASE P(0).CD.Dirc CASE UP 'IF Collision(P(0).Wx, P(0).Wy - 1) THEN G.Moving = FALSE CASE DOWN 'IF Collision(P(0).Wx, P(0).Wy + 1) THEN G.Moving = FALSE CASE LEFT 'IF Collision(P(0).Wx - 1, P(0).Wy) THEN G.Moving = FALSE CASE RIGHT 'IF Collision(P(0).Wx + 1, P(0).Wy) THEN G.Moving = FALSE END SELECT '-------------------------------------------- '----------------Movement-------------------- IF G.Moving THEN SELECT CASE P(0).CD.Dirc CASE DOWN P(0).CD.PixY = P(0).CD.PixY + 2 IF (ABS(P(0).CD.PixY) MOD 32) = 0 THEN G.Moving = FALSE: P(0).CD.PixY = 0: Move_Team IF NOT _KEYDOWN(Default_Key_Down) THEN Ft%% = 0: AFrame%% = 0 ELSE G.Moving = TRUE CASE UP P(0).CD.PixY = P(0).CD.PixY - 2 IF (ABS(P(0).CD.PixY) MOD 32) = 0 THEN G.Moving = FALSE: P(0).CD.PixY = 0: Move_Team IF NOT _KEYDOWN(Default_Key_Up) THEN Ft%% = 0: AFrame%% = 0 ELSE G.Moving = TRUE CASE LEFT P(0).CD.PixX = P(0).CD.PixX - 2 IF (ABS(P(0).CD.PixX) MOD 32) = 0 THEN G.Moving = FALSE: P(0).CD.PixX = 0: Move_Team IF NOT _KEYDOWN(Default_Key_Left) THEN Ft%% = 0: AFrame%% = 0 ELSE G.Moving = TRUE CASE RIGHT P(0).CD.PixX = P(0).CD.PixX + 2 IF (ABS(P(0).CD.PixX) MOD 32) = 0 THEN G.Moving = FALSE: P(0).CD.PixX = 0: Move_Team IF NOT _KEYDOWN(Default_Key_Right) THEN Ft%% = 0: AFrame%% = 0 ELSE G.Moving = TRUE END SELECT ' Walk_Team END IF IF G.Moving THEN Ft%% = Ft%% + 1 IF Ft%% = 8 THEN AFrame%% = AFrame%% + 1: Ft%% = 0 IF AFrame%% = 4 THEN AFrame%% = 0 IF P(0).CD.Xloc < 0 THEN: PRINT "ERROR LOCATION": END Draw_Map_Area P(0).CD.Xloc, P(0).CD.Yloc Place_Team AFrame%% Place_Alis AFrame%% _PUTIMAGE , Layer(1), Layer(0) _LIMIT 60 LOOP UNTIL INKEY$ = CHR$(27) SUB Draw_Map_Area (ShiftX%, ShiftY%) STATIC Fc% FOR Y%% = 0 TO 15 IF ShiftY% + Y%% > 92 THEN BlockY%% = ShiftY% + Y%% - 93 ELSE BlockY%% = ShiftY% + Y%% _PRINTSTRING (768, 32 * Y%%), STR$(BlockY%%) + " ", Layer(1) FOR X%% = 0 TO 23 'World Scroll Clamps IF ShiftX% + X%% > 127 THEN BlockX%% = ShiftX% + X%% - 128 ELSE BlockX%% = ShiftX% + X%% _PRINTSTRING (0 + 32 * X%%, 516), STR$(BlockX%%) + " ", Layer(1) ' _PRINTSTRING (0, 550), STR$(BlockX%%) + STR$(BlockY%%) SELECT CASE Map(BlockX%%, BlockY%%).ID CASE 1 TO 4 IF G.WaterFrame >= 4 OR G.WaterFrame < 0 THEN G.WaterFrame = 0 A%% = Animation(0, G.WaterFrame) CASE 5 TO 20 IF G.ShoreFrame >= 7 OR G.ShoreFrame < 0 THEN G.ShoreFrame = 0 A%% = Animation(1, G.ShoreFrame) CASE 45 TO 49 IF G.LavaFrame >= 4 OR G.LavaFrame < 0 THEN G.LavaFrame = 0 A%% = Animation(2, G.LavaFrame) CASE 139 TO 154 IF G.ConveFrame >= 4 OR G.ConveFrame < 0 THEN G.ConveFrame = 0 A%% = Animation(0, G.ConveFrame) CASE ELSE A%% = 0 END SELECT _PUTIMAGE (32 * X%% - P(0).CD.PixX, 32 * Y%% - P(0).CD.PixY)-STEP(31, 31), Layer(3), Layer(1), (17 * Map(BlockX%%, BlockY%%).ID, 17 * A%%)-STEP(15, 15) NEXT X%% NEXT Y%% Fc% = Fc% + 1 IF Fc% = 40 THEN Fc% = 0: G.WaterFrame = G.WaterFrame + 1: G.ShoreFrame = G.ShoreFrame + 1: G.LavaFrame = G.LavaFrame + 1 IF Fc% MOD 8 = 0 THEN G.ConveFrame = G.ConveFrame + 1 END SUB SUB Move_Team 'Move Followers, move all even if some are not present\dead FOR i%% = 3 TO 1 STEP -1 P(i%%).CD.Xloc = P(i%% - 1).CD.Xloc P(i%%).CD.Yloc = P(i%% - 1).CD.Yloc P(i%%).CD.Dirc = P(i%% - 1).CD.Dirc NEXT 'now move Alis SELECT CASE P(0).CD.Dirc CASE UP P(0).CD.Yloc = P(0).CD.Yloc - 1 CASE DOWN P(0).CD.Yloc = P(0).CD.Yloc + 1 CASE LEFT P(0).CD.Xloc = P(0).CD.Xloc - 1 CASE RIGHT P(0).CD.Xloc = P(0).CD.Xloc + 1 END SELECT 'Clamp Values for map scrolling IF P(0).CD.Yloc = 93 THEN P(0).CD.Yloc = 0 IF P(0).CD.Yloc = -1 THEN P(0).CD.Yloc = 92 IF P(0).CD.Xloc = -128 THEN P(0).CD.Xloc = 0 IF P(0).CD.Xloc = -1 THEN P(0).CD.Xloc = 127 END SUB SUB Walk_Team FOR i%% = 1 TO 3 SELECT CASE P(i%%).CD.Dirc CASE DOWN P(i%%).CD.PixY = P(i%%).CD.PixY + 2 IF (ABS(P(i%%).CD.PixY) MOD 32) = 0 THEN G.Moving = FALSE: P(i%%).CD.PixY = 0 CASE UP P(i%%).CD.PixY = P(i%%).CD.PixY - 2 IF (ABS(P(i%%).CD.PixY) MOD 32) = 0 THEN G.Moving = FALSE: P(i%%).CD.PixY = 0 CASE LEFT P(i%%).CD.PixX = P(i%%).CD.PixX - 2 IF (ABS(P(i%%).CD.PixX) MOD 32) = 0 THEN G.Moving = FALSE: P(i%%).CD.PixX = 0 CASE RIGHT P(i%%).CD.PixX = P(i%%).CD.PixX + 2 IF (ABS(P(i%%).CD.PixX) MOD 32) = 0 THEN G.Moving = FALSE: P(i%%).CD.PixX = 0 END SELECT NEXT END SUB SUB Place_Alis (Frame%%) IF NOT G.Moving THEN _PUTIMAGE (290, 210)-STEP(31, 45), Layer(5), Layer(1), (0 + 17 * P(0).CD.Dirc, 108)-STEP(15, 22) ELSE _PUTIMAGE (290, 210)-STEP(31, 45), Layer(5), Layer(1), (68 + 51 * P(0).CD.Dirc + Animation(2, Frame%%) * 17, 108)-STEP(15, 22) END IF END SUB SUB Place_Team (Frame%%) IF P(0).Alive THEN t%% = 0 ELSE t%% = -1 IF NOT G.Moving THEN IF G.Noah AND P(3).Alive THEN t%% = t%% + 1 _PUTIMAGE (290 - 32 * (P(0).CD.Xloc - P(3).CD.Xloc) + P(3).CD.PixX, 210 - 32 * (P(0).CD.Yloc - P(3).CD.Yloc) + P(3).CD.PixY)-STEP(31, 47), Layer(5), Layer(1), (0 + 17 * P(3).CD.Dirc, 181)-STEP(15, 23) END IF IF G.Odin AND P(2).Alive THEN t%% = t%% + 1 _PUTIMAGE (290 - 32 * (P(0).CD.Xloc - P(2).CD.Xloc) + P(2).CD.PixX, 210 - 32 * (P(0).CD.Yloc - P(2).CD.Yloc) + P(2).CD.PixY)-STEP(31, 47), Layer(5), Layer(1), (0 + 17 * P(2).CD.Dirc, 156)-STEP(15, 23) END IF IF G.Myau AND P(1).Alive THEN t%% = t%% + 1 _PUTIMAGE (290 - 32 * (P(0).CD.Xloc - P(1).CD.Xloc) - P(1).CD.PixX, 210 - 32 * (P(0).CD.Yloc - P(1).CD.Yloc) - P(1).CD.PixY)-STEP(31, 45), Layer(5), Layer(1), (0 + 17 * P(1).CD.Dirc, 132)-STEP(15, 22) END IF ELSE _PUTIMAGE (290 - 32 * (P(0).CD.Xloc - P(3).CD.Xloc) + P(3).CD.PixX - P(0).CD.PixX, 210 - 32 * (P(0).CD.Yloc - P(3).CD.Yloc) + P(3).CD.PixY - P(0).CD.PixY)-STEP(31, 45), Layer(5), Layer(1), (68 + 51 * P(3).CD.Dirc + Animation(2, Frame%%) * 17, 181)-STEP(15, 22) _PUTIMAGE (290 - 32 * (P(0).CD.Xloc - P(2).CD.Xloc) + P(2).CD.PixX - P(0).CD.PixX, 210 - 32 * (P(0).CD.Yloc - P(2).CD.Yloc) + P(2).CD.PixY - P(0).CD.PixY)-STEP(31, 45), Layer(5), Layer(1), (68 + 51 * P(2).CD.Dirc + Animation(2, Frame%%) * 17, 156)-STEP(15, 22) 'Just you Myau until things work right. _PUTIMAGE (290 - 32 * (P(0).CD.Xloc - P(1).CD.Xloc) + P(1).CD.PixX - P(0).CD.PixX, 210 - 32 * (P(0).CD.Yloc - P(1).CD.Yloc) + P(1).CD.PixY - P(0).CD.PixY)-STEP(31, 45), Layer(5), Layer(1), (68 + 51 * P(1).CD.Dirc + Animation(3, Frame%%) * 17, 132)-STEP(15, 22) '_PUTIMAGE (290 - 32 * (P(0).CD.Xloc - P(1).CD.Xloc) + P(1).CD.PixX, 210 - 32 * (P(0).CD.Yloc - P(1).CD.Yloc) + P(1).CD.PixY)-STEP(31, 45), Layer(5), Layer(1), (68 + 51 * P(1).CD.Dirc + Animation(3, Frame%%) * 17, 132)-STEP(15, 22) END IF END SUB SUB ClearLayer (L&) old& = _DEST _DEST L& CLS ' ,0 _DEST old& END SUB SUB ClearLayerTrans (L&) old& = _DEST _DEST L& CLS , 0 _DEST old& END SUB SUB MFI_Loader (FN$) DIM Size(128) AS LONG, FOffset(128) AS LONG OPEN FN$ FOR BINARY AS #1 GET #1, , c~%% 'retrieve number of files FOR I~%% = 1 TO c~%% GET #1, , FOffset(I~%%) GET #1, , Size(I~%%) FOffset&(I~%%) = FOffset&(I~%%) + 1 NEXT I~%% Layer(3) = LoadGFX(FOffset(2), Size(2)) ' Layer(4) = LoadGFX(FOffset(3), Size(3)) ' Layer(5) = LoadGFX(FOffset(4), Size(4)) ' ' Layer(3) = _LOADIMAGE("pstartile_16x16_Game.bmp", 32) ' Layer(4) = _LOADIMAGE("TileMaster.bmp", 32) ' Layer(5) = _LOADIMAGE("CharacterSheet_Master.bmp", 32) LoadData FOffset(1), Size(1) F1 = FREEFILE OPEN "temp.dat" FOR BINARY AS #F1 ' CLOSE #1 ' IF _FILEEXISTS("temp.dat") THEN KILL "temp.dat" END SUB SUB LoadData (Foff&, Size&) IF _FILEEXISTS("temp.dat") THEN KILL "temp.dat" OPEN "temp.dat" FOR BINARY AS #3 dat$ = SPACE$(Size&) GET #1, Foff&, dat$ PUT #3, , dat$ CLOSE #3 END SUB REM '$include:'MFI_Loader2.bi' FUNCTION LoadGFX& (Foff&, Size&) IF _FILEEXISTS("temp.dat") THEN KILL "temp.dat" OPEN "temp.dat" FOR BINARY AS #3 dat$ = SPACE$(Size&) GET #1, Foff&, dat$ PUT #3, , dat$ CLOSE #3 LoadGFX& = _LOADIMAGE("temp.dat", 32) END FUNCTION