Refer to first message in this post for all future updates!
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Show posts Menu
// ---------------------------------------------- //
// Project: Window Maximize Button\Window Scaling //
// File: Main.gbas //
// Start: Sunday, September 28, 2014 //
// IDE Version: 10.283 //
// ---------------------------------------------- //
StartUp()
Main:
CLEARSCREEN
Update()
SHOWSCREEN
GOTO Main
SUB GLB_ON_QUIT:
INIPUT "Window","X","("+Window.X+")"
INIPUT "Window","Y","("+Window.Y+")"
INIPUT "Window","Width",Window.Width
INIPUT "Window","Height",Window.Height
INIPUT "Window","Mode",Window.Mode
INIPUT "Window","Style$",Window.Style$
INIPUT "Gui","Width",Gui.Width
INIPUT "Gui","Height",Gui.Height
INIPUT "Gui","Mode",ISFULLSCREEN()
ENDSUB
// ---------------------------------------------- //
// Project: Window Maximize Button\Window Scaling //
// File: Inine.gbas //
// Start: Sunday, September 28, 2014 //
// IDE Version: 10.283 //
// ---------------------------------------------- //
GLOBAL DesktopWidth,DesktopHeight
TYPE WindowType
X
Y
Width
Height
Mode
Style$
ENDTYPE
GLOBAL Window AS WindowType
TYPE GuiType
X
Y
Width
Height
PrevX
PrevY
PrevWidth
PrevHeight
Mode
ENDTYPE
GLOBAL Gui AS GuiType
INLINE
}
struct RECT{int Left,Top,Right,Bottom;};
extern "C"
{
int __stdcall GetWindowLongA(void*, int);
int __stdcall SetWindowLongA(void*, int, int);
int __stdcall SetWindowPos(void*, int, int, int, int, int, int);
int __stdcall GetWindowRect(void*, void*);
const int Style=0;
}
#define WS_SIZEBOX 0x00040000L
#define WS_MAXIMIZEBOX 0x00010000L
#define WS_MAXIMIZE 0x01000000L
#define SWP_FRAMECHANGED 0x0020
#define SWP_SHOWWINDOW 0x0040
#define SWP_NOMOVE 0x0002
#define GWL_STYLE (-16)
RECT Rect;
namespace __GLBASIC__ {
ENDINLINE
FUNCTION StartUp:
GETDESKTOPSIZE DesktopWidth,DesktopHeight
LOCAL A=DOESFILEEXIST("Settings.ini")
IF A=0
INIOPEN "Settings.ini"
Window.Width=648
Window.Height=514
Window.X=((DesktopWidth-Window.Width)/2)
Window.Y=((DesktopHeight-Window.Height)/2)
Gui.Width=640
Gui.Height=480
Gui.Mode=0
Gui.PrevWidth=Gui.Width
Gui.PrevHeight=Gui.Height
SETSCREEN Gui.Width,Gui.Height,Gui.Mode
INLINE
Window.Style_Str=::GetWindowLongA(GLBASIC_HWND(),GWL_STYLE);
::SetWindowLongA(GLBASIC_HWND(),GWL_STYLE,Window.Style_Str|WS_SIZEBOX|WS_MAXIMIZEBOX);
::SetWindowPos(GLBASIC_HWND(),0,Window.X,Window.Y,Window.Width,Window.Height,SWP_FRAMECHANGED);
ENDINLINE
ELSEIF A=1
INIOPEN "Settings.ini"
Window.X=INIGET$("Window","X")
Window.Y=INIGET$("Window","Y")
Window.Width=INIGET$("Window","Width")
Window.Height=INIGET$("Window","Height")
Window.Mode=INIGET$("Window","Mode")
Window.Style$=INIGET$("Window","Style$")
Gui.Width=INIGET$("Gui","Width")
Gui.Height=INIGET$("Gui","Height")
Gui.PrevWidth=Gui.Width
Gui.PrevHeight=Gui.Height
Gui.Mode=INIGET$("Gui","Mode")
SETSCREEN Gui.PrevWidth,Gui.PrevHeight,Gui.Mode
INLINE
::SetWindowLongA(GLBASIC_HWND(),GWL_STYLE,Window.Style_Str);
::SetWindowPos(GLBASIC_HWND(),0,Window.X,Window.Y,Window.Width,Window.Height,SWP_FRAMECHANGED);
ENDINLINE
ENDIF
ENDFUNCTION
FUNCTION Update:
LOCAL Flag
IF Window.X=0 AND Window.Y=0 AND Window.Mode=0
Window.X=((DesktopWidth-Window.Width)/2)
Window.Y=((DesktopHeight-Window.Height)/2)
INLINE
::SetWindowPos(GLBASIC_HWND(),0,Window.X,Window.Y,Window.Width,Window.Height,SWP_SHOWWINDOW);
ENDINLINE
ENDIF
INLINE
::GetWindowRect(GLBASIC_HWND(),&Rect);
Window.Width=(Rect.Right-Rect.Left);
Window.Height=(Rect.Bottom-Rect.Top);
Window.X=Rect.Left;
Window.Y=Rect.Top;
Window.Style_Str=::GetWindowLongA(GLBASIC_HWND(),GWL_STYLE);
if(Window.Style_Str&WS_MAXIMIZE){
Window.Mode=1;}
else{
Window.Mode=0;}
ENDINLINE
Gui.Width=(Window.Width-8)
Gui.Height=(Window.Height-34)
IF Gui.Width>Gui.PrevWidth OR Gui.Width<Gui.PrevWidth THEN Flag=1
IF Gui.Height>Gui.PrevHeight OR Gui.Height<Gui.PrevHeight THEN Flag=1
IF Flag=1
VIEWPORT 0,(Gui.PrevHeight-Gui.Height),Gui.Width,Gui.Height
Flag=0
ENDIF
ENDFUNCTION
//Gui Startup
TYPE GuiType
Width
Height
Mode
FpsLimit
ENDTYPE
GLOBAL Gui AS GuiType
Gui.Width=320
Gui.Height=240
Gui.Mode=0
Gui.FpsLimit=60
SETSCREEN Gui.Width,Gui.Height,Gui.Mode
LIMITFPS Gui.FpsLimit
SYSTEMPOINTER TRUE
//Tilemap Startup
TYPE TilemapType
Image
ImageData[]
Name$
X
Y
XOffset
YOffset
Length
TileWidth
TileHeight
TileWidthMax
TileHeightMax
TilesetTileWidth
TilesetTileHeight
CurrentTile
FrameDelay
ExitFlag
DotFlag
ENDTYPE
GLOBAL Tilemap AS TilemapType
Tilemap.Image=1
Tilemap.Name$=""
Tilemap.X=0
Tilemap.Y=0
Tilemap.TileWidthMax=21
Tilemap.TileHeightMax=16
//Tile Startup
TYPE TileType
Frame
SelectionFlag
DotFlag
CollisionFlag
ExitFlagA
ExitFlagB
AnimatedFlag
AnimatedFrames
FrameOffset
FrameJump
FrameCounter
FrameCounterB
FrameXIncrement
FrameYIncrement
ENDTYPE
GLOBAL TilemapTile[] AS TileType
//Player Startup
TYPE PlayerType
Image
Frame
FrameMin
FrameMax
FrameDelay
FrameFlag
Guide
X
Y
Speed
UpFlagA
RightFlagA
DownFlagA
LeftFlagA
UpFlagB
RightFlagB
DownFlagB
LeftFlagB
ENDTYPE
GLOBAL Player AS PlayerType
Player.Image=20
LOADANIM "PlayerImage.bmp",Player.Image,32,32
Player.Guide=21
LOADANIM "PlayerGuide.bmp",Player.Guide,16,8
Player.X=152
Player.Y=116
Player.Speed=2
LoadMap("test",0,0)
Main:
CLEARSCREEN
Update()
SHOWSCREEN
GOTO Main
//Load Map
FUNCTION LoadMap:File$,X,Y
LOCAL A,B,C,D,E
Tilemap.Name$=File$
Tilemap.X=X
Tilemap.Y=Y
Tilemap.XOffset=0
Tilemap.YOffset=0
File$=File$+".tmd"
File$=REPLACE$(File$,".tmd.tmd",".tmd")
SETCURRENTDIR("Tilemap")
OPENFILE(1,File$,TRUE)
READSHORTIEEE 1,Tilemap.TileWidth
READSHORTIEEE 1,Tilemap.TileHeight
DIM TilemapTile[5][Tilemap.TileWidth][Tilemap.TileHeight]
FOR C=0 TO 4
FOR A=0 TO Tilemap.TileWidth-1
FOR B=0 TO Tilemap.TileHeight-1
READSHORTIEEE 1,TilemapTile[C][A][B].Frame
READSHORTIEEE 1,TilemapTile[C][A][B].DotFlag
READSHORTIEEE 1,TilemapTile[C][A][B].CollisionFlag
READSHORTIEEE 1,TilemapTile[C][A][B].ExitFlagA
READSHORTIEEE 1,TilemapTile[C][A][B].ExitFlagB
READSHORTIEEE 1,TilemapTile[C][A][B].AnimatedFlag
READSHORTIEEE 1,TilemapTile[C][A][B].AnimatedFrames
READSHORTIEEE 1,TilemapTile[C][A][B].FrameJump
READSHORTIEEE 1,TilemapTile[C][A][B].FrameXIncrement
READSHORTIEEE 1,TilemapTile[C][A][B].FrameYIncrement
NEXT
NEXT
NEXT
READSHORTIEEE 1,D
READSHORTIEEE 1,E
READSHORTIEEE 1,Tilemap.Length
REDIM Tilemap.ImageData[Tilemap.Length]
Tilemap.TilesetTileWidth=(D/16)
Tilemap.TilesetTileHeight=(E/16)
C=-1
FOR A=0 TO (D-1)
FOR B=0 TO (E-1)
C=C+1
READSHORTIEEE 1,Tilemap.ImageData[C]
NEXT
NEXT
CLOSEFILE 1
CLEARSCREEN
SETTRANSPARENCY RGB(0,255,0)
C=-1
FOR A=0 TO (D-1)
FOR B=0 TO (E-1)
C=C+1
SETPIXEL A,B,Tilemap.ImageData[C]
NEXT
NEXT
GRABSPRITE Tilemap.Image,0,0,D,E
SAVESPRITE "Temp.bmp",Tilemap.Image
SETTRANSPARENCY RGB(255,0,128)
CLEARSCREEN
LOADANIM "Temp.bmp",Tilemap.Image,16,16
KILLFILE "Temp.bmp"
File$=REPLACE$(File$,".tmd","")
SETCURRENTDIR("..")
ENDFUNCTION
//Exits
FUNCTION Exit:MapA$,MapB$,ExitFlag,PlayerFrame,X,Y
IF Tilemap.Name$=MapA$
IF Tilemap.ExitFlag=ExitFlag
LoadMap(MapB$,X,Y)
Player.Frame=PlayerFrame
Tilemap.ExitFlag=999
ENDIF
ENDIF
ENDFUNCTION
//Update
FUNCTION Update:
LOCAL A,B,C,D,E,F,G,H,TilemapYA,TilemapYB,TilemapXA,TilemapXB
Tilemap.FrameDelay=Tilemap.FrameDelay+1
Player.FrameDelay=Player.FrameDelay+1
//Player Frame Update
IF Player.FrameDelay>=10
Player.Frame=Player.Frame+1
ENDIF
//Player Movement
IF KEY(200)
IF Player.UpFlagA=1
Tilemap.Y=Tilemap.Y+Player.Speed
Player.UpFlagB=1
IF Player.FrameFlag=1
Player.FrameMin=0
Player.FrameMax=3
Player.FrameFlag=0
ENDIF
ENDIF
ELSE
Player.UpFlagB=0
ENDIF
IF KEY(208)
IF Player.DownFlagA=1
Tilemap.Y=Tilemap.Y-Player.Speed
Player.DownFlagB=1
IF Player.FrameFlag=1
Player.FrameMin=4
Player.FrameMax=7
Player.FrameFlag=0
ENDIF
ENDIF
ELSE
Player.DownFlagB=0
ENDIF
IF KEY(203)
IF Player.LeftFlagA=1
Tilemap.X=Tilemap.X+Player.Speed
Player.LeftFlagB=1
IF Player.FrameFlag=1
Player.FrameMin=8
Player.FrameMax=11
Player.FrameFlag=0
ENDIF
ENDIF
ELSE
Player.LeftFlagB=0
ENDIF
IF KEY(205)
IF Player.RightFlagA=1
Tilemap.X=Tilemap.X-Player.Speed
Player.RightFlagB=1
IF Player.FrameFlag=1
Player.FrameMin=12
Player.FrameMax=15
Player.FrameFlag=0
ENDIF
ENDIF
ELSE
Player.RightFlagB=0
ENDIF
IF Player.UpFlagB=0 AND Player.LeftFlagB=0 AND Player.RightFlagB=0 AND Player.DownFlagB=0
Player.Frame=Player.FrameMin
ENDIF
IF Player.FrameMin=0 AND Player.UpFlagB=0
Player.FrameFlag=1
ELSEIF Player.FrameMin=4 AND Player.DownFlagB=0
Player.FrameFlag=1
ELSEIF Player.FrameMin=8 AND Player.LeftFlagB=0
Player.FrameFlag=1
ELSEIF Player.FrameMin=12 AND Player.RightFlagB=0
Player.FrameFlag=1
ENDIF
//Player Frame Check
IF Player.Frame>Player.FrameMax
Player.Frame=Player.FrameMin
ELSEIF Player.Frame<Player.FrameMin
Player.Frame=Player.FrameMin
ENDIF
//Set Tiles To Be Drawn
IF Tilemap.X<=-32
IF Tilemap.XOffset<(Tilemap.TileWidth-Tilemap.TileWidthMax-1)
Tilemap.X=Tilemap.X+16
Tilemap.XOffset=Tilemap.XOffset+1
ENDIF
ENDIF
IF Tilemap.X>=0
IF Tilemap.XOffset>0
Tilemap.X=Tilemap.X-16
Tilemap.XOffset=Tilemap.XOffset-1
ENDIF
ENDIF
IF Tilemap.Y<=-32
IF Tilemap.YOffset<(Tilemap.TileHeight-Tilemap.TileHeightMax-1)
Tilemap.Y=Tilemap.Y+16
Tilemap.YOffset=Tilemap.YOffset+1
ENDIF
ENDIF
IF Tilemap.Y>=0
IF Tilemap.YOffset>0
Tilemap.Y=Tilemap.Y-16
Tilemap.YOffset=Tilemap.YOffset-1
ENDIF
ENDIF
//Fix Size
IF Tilemap.TileWidth<=Tilemap.TileWidthMax
D=(Tilemap.TileWidth-1)
ELSEIF Tilemap.TileWidth>Tilemap.TileWidthMax
D=Tilemap.TileWidthMax
ENDIF
IF Tilemap.TileHeight<=Tilemap.TileHeightMax
E=(Tilemap.TileHeight-1)
ELSEIF Tilemap.TileHeight>Tilemap.TileHeightMax
E=Tilemap.TileHeightMax
ENDIF
Tilemap.DotFlag=0
//Tilemap Collision/Draw/Frame Update
FOR A=0 TO 4
G=0
FOR B=Tilemap.XOffset TO (D+Tilemap.XOffset)
H=0
FOR C=Tilemap.YOffset TO (E+Tilemap.YOffset)
IF TilemapTile[A][B][C].CollisionFlag=1
FOR F=0 TO Player.Speed
IF ANIMCOLL(Player.Guide,0,Player.X,(Player.Y-F),Tilemap.Image,TilemapTile[A][B][C].Frame,(Tilemap.X+(G*16)),(Tilemap.Y+(H*16)))
TilemapYA=(F-Player.Speed)
Player.UpFlagA=0
BREAK
ELSE
Player.UpFlagA=1
ENDIF
NEXT
FOR F=0 TO Player.Speed
IF ANIMCOLL(Player.Guide,1,Player.X,(Player.Y+F),Tilemap.Image,TilemapTile[A][B][C].Frame,(Tilemap.X+(G*16)),(Tilemap.Y+(H*16)))
TilemapYB=(F-Player.Speed)
Player.DownFlagA=0
BREAK
ELSE
Player.DownFlagA=1
ENDIF
NEXT
FOR F=0 TO Player.Speed
IF ANIMCOLL(Player.Guide,2,(Player.X-F),Player.Y,Tilemap.Image,TilemapTile[A][B][C].Frame,(Tilemap.X+(G*16)),(Tilemap.Y+(H*16)))
TilemapXA=(F-Player.Speed)
Player.LeftFlagA=0
BREAK
ELSE
Player.LeftFlagA=1
ENDIF
NEXT
FOR F=0 TO Player.Speed
IF ANIMCOLL(Player.Guide,3,(Player.X+F),Player.Y,Tilemap.Image,TilemapTile[A][B][C].Frame,(Tilemap.X+(G*16)),(Tilemap.Y+(H*16)))
TilemapXB=(F-Player.Speed)
Player.RightFlagA=0
BREAK
ELSE
Player.RightFlagA=1
ENDIF
NEXT
ENDIF
IF TilemapTile[A][B][C].DotFlag=1
IF ANIMCOLL(Player.Guide,4,Player.X,Player.Y,Tilemap.Image,TilemapTile[A][B][C].Frame,(Tilemap.X+(G*16)),(Tilemap.Y+(H*16)))
Tilemap.DotFlag=1
ENDIF
ENDIF
IF TilemapTile[A][B][C].AnimatedFlag=1
DRAWANIM Tilemap.Image,(TilemapTile[A][B][C].Frame+TilemapTile[A][B][C].FrameCounter+TilemapTile[A][B][C].FrameOffset),(Tilemap.X+(G*16)),(Tilemap.Y+(H*16))
ELSEIF TilemapTile[A][B][C].AnimatedFlag=0
DRAWANIM Tilemap.Image,TilemapTile[A][B][C].Frame,(Tilemap.X+(G*16)),(Tilemap.Y+(H*16))
ENDIF
H=H+1
NEXT
G=G+1
NEXT
NEXT
DRAWANIM Player.Guide,0,Player.X,Player.Y
DRAWANIM Player.Guide,1,Player.X,Player.Y
DRAWANIM Player.Guide,2,Player.X,Player.Y
DRAWANIM Player.Guide,3,Player.X,Player.Y
DRAWANIM Player.Image,Player.Frame,(Player.X-8),(Player.Y-26)
FOR A=0 TO 4
G=0
FOR B=Tilemap.XOffset TO (D+Tilemap.XOffset)
H=0
FOR C=Tilemap.YOffset TO (E+Tilemap.YOffset)
IF Tilemap.DotFlag=1
IF TilemapTile[A][B][C].DotFlag=1
IF TilemapTile[A][B][C].AnimatedFlag=1
DRAWANIM Tilemap.Image,(TilemapTile[A][B][C].Frame+TilemapTile[A][B][C].FrameCounter+TilemapTile[A][B][C].FrameOffset),(Tilemap.X+(G*16)),(Tilemap.Y+(H*16))
ELSEIF TilemapTile[A][B][C].AnimatedFlag=0
DRAWANIM Tilemap.Image,TilemapTile[A][B][C].Frame,(Tilemap.X+(G*16)),(Tilemap.Y+(H*16))
ENDIF
ENDIF
ENDIF
IF Tilemap.FrameDelay>=10
TilemapTile[A][B][C].FrameCounter=TilemapTile[A][B][C].FrameCounter+TilemapTile[A][B][C].FrameXIncrement
IF TilemapTile[A][B][C].FrameCounter>(Tilemap.TilesetTileWidth-(TilemapTile[A][B][C].FrameJump+1))+((TilemapTile[A][B][C].FrameCounterB*Tilemap.TilesetTileWidth))
TilemapTile[A][B][C].FrameOffset=TilemapTile[A][B][C].FrameOffset+(Tilemap.TilesetTileWidth*(TilemapTile[A][B][C].FrameYIncrement-1))
TilemapTile[A][B][C].FrameCounterB=TilemapTile[A][B][C].FrameCounterB+1
ENDIF
IF TilemapTile[A][B][C].FrameCounter>=TilemapTile[A][B][C].AnimatedFrames*TilemapTile[A][B][C].FrameXIncrement
TilemapTile[A][B][C].FrameCounter=0
TilemapTile[A][B][C].FrameCounterB=0
TilemapTile[A][B][C].FrameOffset=0
ENDIF
ENDIF
H=H+1
NEXT
G=G+1
NEXT
NEXT
IF Player.FrameDelay>=10 THEN Player.FrameDelay=0
IF Tilemap.FrameDelay>=10 THEN Tilemap.FrameDelay=0
Tilemap.Y=(Tilemap.Y+TilemapYA)
Tilemap.Y=(Tilemap.Y-TilemapYB)
Tilemap.X=(Tilemap.X+TilemapXA)
Tilemap.X=(Tilemap.X-TilemapXB)
ENDFUNCTION