2008-09-01 21:52 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
- contrib/hbw32ddr
* contrib/Makefile
* contrib/make_b32_all.bat
* contrib/make_gcc_all.sh
* contrib/make_vc_all.bat
- Removed contrib hbw32ddr.
For those wanting to peek into this code, or
pick up development, the exact source can be
found in Harbour 1.0.0 release.
This commit is contained in:
@@ -8,6 +8,17 @@
|
||||
2008-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org)
|
||||
*/
|
||||
|
||||
2008-09-01 21:52 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
|
||||
- contrib/hbw32ddr
|
||||
* contrib/Makefile
|
||||
* contrib/make_b32_all.bat
|
||||
* contrib/make_gcc_all.sh
|
||||
* contrib/make_vc_all.bat
|
||||
- Removed contrib hbw32ddr.
|
||||
For those wanting to peek into this code, or
|
||||
pick up development, the exact source can be
|
||||
found in Harbour 1.0.0 release.
|
||||
|
||||
2008-09-01 21:33 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
|
||||
* contrib/hbziparch/hbziparc.c
|
||||
* contrib/hbziparch/hbzipnew.cpp
|
||||
|
||||
@@ -29,7 +29,6 @@ DIRS=\
|
||||
xhb \
|
||||
|
||||
# hbsqlit2 \
|
||||
# hbw32ddr \
|
||||
# hbwhat32 \
|
||||
# hbziparch \
|
||||
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
# Needs Windows official ddraw.h to be copied to this directory,
|
||||
# in order to compile under MingW. [vszakats]
|
||||
|
||||
ROOT = ../../
|
||||
|
||||
LIBNAME=hbw32ddr
|
||||
|
||||
ifeq ($(HB_ARCHITECTURE),w32)
|
||||
|
||||
CPP_SOURCES=\
|
||||
w32_ddrw.cpp \
|
||||
|
||||
PRG_SOURCES=\
|
||||
|
||||
include $(TOP)$(ROOT)config/lib.cf
|
||||
|
||||
C_USR += -I.
|
||||
|
||||
else
|
||||
include $(TOP)$(ROOT)config/none.cf
|
||||
endif
|
||||
@@ -1,13 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
LIBNAME = $(LIBPREF)hbw32ddr
|
||||
|
||||
LIB_PATH = $(LIB_DIR)$(LIBNAME)$(LIBEXT)
|
||||
|
||||
LIB_OBJS = \
|
||||
$(OBJ_DIR)w32_ddrw$(OBJEXT) \
|
||||
|
||||
all: \
|
||||
$(LIB_PATH) \
|
||||
@@ -1,54 +0,0 @@
|
||||
@echo off
|
||||
rem
|
||||
rem $Id$
|
||||
rem
|
||||
|
||||
rem ---------------------------------------------------------------
|
||||
rem IMPORTANT: You'll need MS SDK installed and this envvar to be
|
||||
rem set, to build this library:
|
||||
rem set INCLUDE="C:\Program Files\Microsoft SDKs\Windows\v6.0\include"
|
||||
rem ---------------------------------------------------------------
|
||||
|
||||
set HB_DLL_NAME=ddraw
|
||||
set HB_DLL_DIR=%SystemRoot%\system32
|
||||
|
||||
rem ---------------------------------------------------------------
|
||||
|
||||
call ..\mtpl_b32.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||
|
||||
rem ---------------------------------------------------------------
|
||||
|
||||
set _HB_INSTALL_PREFIX=%HB_INSTALL_PREFIX%
|
||||
if "%_HB_INSTALL_PREFIX%" == "" set _HB_INSTALL_PREFIX=..\..
|
||||
set _HB_LIB_INSTALL=%HB_LIB_INSTALL%
|
||||
if "%_HB_LIB_INSTALL%" == "" set _HB_LIB_INSTALL=%_HB_INSTALL_PREFIX%\lib
|
||||
|
||||
if "%1" == "clean" goto POST_CLEAN
|
||||
if "%1" == "Clean" goto POST_CLEAN
|
||||
if "%1" == "CLEAN" goto POST_CLEAN
|
||||
if "%1" == "install" goto POST_INSTALL
|
||||
if "%1" == "Install" goto POST_INSTALL
|
||||
if "%1" == "INSTALL" goto POST_INSTALL
|
||||
|
||||
:POST_BUILD
|
||||
|
||||
implib ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.lib "%HB_DLL_DIR%\%HB_DLL_NAME%.dll" >> %_HB_MAKELOG%
|
||||
goto POST_EXIT
|
||||
|
||||
:POST_CLEAN
|
||||
|
||||
if exist ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.lib del ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.lib > nul
|
||||
if exist ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.exp del ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.exp > nul
|
||||
if exist %_HB_LIB_INSTALL%\%HB_DLL_NAME%.lib del %_HB_LIB_INSTALL%\%HB_DLL_NAME%.lib > nul
|
||||
goto POST_EXIT
|
||||
|
||||
:POST_INSTALL
|
||||
|
||||
if exist %_HB_LIB_INSTALL%\%HB_DLL_NAME%.lib del %_HB_LIB_INSTALL%\%HB_DLL_NAME%.lib
|
||||
if exist ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.lib copy ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.lib %_HB_LIB_INSTALL%
|
||||
goto POST_EXIT
|
||||
|
||||
:POST_EXIT
|
||||
|
||||
set HB_DLL_NAME=
|
||||
set HB_DLL_DIR=
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
../mtpl_gcc.sh $1 $2 $3 $4 $5 $6 $7 $8 $9
|
||||
@@ -1,65 +0,0 @@
|
||||
@echo off
|
||||
rem
|
||||
rem $Id$
|
||||
rem
|
||||
|
||||
set HB_DLL_NAME=ddraw
|
||||
set HB_DLL_DIR=%SystemRoot%\system32
|
||||
|
||||
rem ---------------------------------------------------------------
|
||||
|
||||
call ..\mtpl_vc.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||
|
||||
rem ---------------------------------------------------------------
|
||||
|
||||
set _HB_INSTALL_PREFIX=%HB_INSTALL_PREFIX%
|
||||
if "%_HB_INSTALL_PREFIX%" == "" set _HB_INSTALL_PREFIX=..\..
|
||||
set _HB_LIB_INSTALL=%HB_LIB_INSTALL%
|
||||
if "%_HB_LIB_INSTALL%" == "" set _HB_LIB_INSTALL=%_HB_INSTALL_PREFIX%\lib
|
||||
|
||||
if "%1" == "clean" goto POST_CLEAN
|
||||
if "%1" == "Clean" goto POST_CLEAN
|
||||
if "%1" == "CLEAN" goto POST_CLEAN
|
||||
if "%1" == "install" goto POST_INSTALL
|
||||
if "%1" == "Install" goto POST_INSTALL
|
||||
if "%1" == "INSTALL" goto POST_INSTALL
|
||||
|
||||
:POST_BUILD
|
||||
|
||||
rem ---------------------------------------------------------------
|
||||
rem This .dll to .lib conversion needs GNU sed.exe in the path
|
||||
rem ---------------------------------------------------------------
|
||||
echo./[ \t]*ordinal hint/,/^^[ \t]*Summary/{> _temp.sed
|
||||
echo. /^^[ \t]\+[0-9]\+/{>> _temp.sed
|
||||
echo. s/^^[ \t]\+[0-9]\+[ \t]\+[0-9A-Fa-f]\+[ \t]\+[0-9A-Fa-f]\+[ \t]\+\(.*\)/\1/p>> _temp.sed
|
||||
echo. }>> _temp.sed
|
||||
echo.}>> _temp.sed
|
||||
DUMPBIN /EXPORTS "%HB_DLL_DIR%\%HB_DLL_NAME%.dll" > _dump.tmp
|
||||
echo.LIBRARY "%HB_DLL_DIR%\%HB_DLL_NAME%.dll" > _temp.def
|
||||
echo.EXPORTS >> _temp.def
|
||||
sed -nf _temp.sed < _dump.tmp >> _temp.def
|
||||
LIB /MACHINE:X86 /DEF:_temp.def /OUT:..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.lib >> %_HB_MAKELOG%
|
||||
del _dump.tmp
|
||||
del _temp.def
|
||||
del _temp.sed
|
||||
rem ---------------------------------------------------------------
|
||||
|
||||
goto POST_EXIT
|
||||
|
||||
:POST_CLEAN
|
||||
|
||||
if exist ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.lib del ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.lib > nul
|
||||
if exist ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.exp del ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.exp > nul
|
||||
if exist %_HB_LIB_INSTALL%\%HB_DLL_NAME%.lib del %_HB_LIB_INSTALL%\%HB_DLL_NAME%.lib > nul
|
||||
goto POST_EXIT
|
||||
|
||||
:POST_INSTALL
|
||||
|
||||
if exist %_HB_LIB_INSTALL%\%HB_DLL_NAME%.lib del %_HB_LIB_INSTALL%\%HB_DLL_NAME%.lib
|
||||
if exist ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.lib copy ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.lib %_HB_LIB_INSTALL%
|
||||
goto POST_EXIT
|
||||
|
||||
:POST_EXIT
|
||||
|
||||
set HB_DLL_NAME=
|
||||
set HB_DLL_DIR=
|
||||
@@ -1,126 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright(C) 1999 by Jesus Salas
|
||||
*
|
||||
* This library 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
|
||||
*
|
||||
* You can contact me at: jsalas@gruposp.com jsalas@sp-editores.es
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
Harbour - GAL Lib - DirectX 6.1 ( DDraw implementation for Windows )
|
||||
-------------------------------------------------------------------------------------------
|
||||
|
||||
Well, this is the first implementation of Graphics Animation Library
|
||||
for Windows/DirectX 6.1 and Harbour
|
||||
|
||||
INDEX
|
||||
-----------------------------------------------------------------------------------
|
||||
0)._ What are supported, what coming soon
|
||||
1)._ What do you need for make/run the samples.
|
||||
2)._ Files in this distribution. ( hdx01.zip )
|
||||
3)._ Building the sample
|
||||
4)._ Reminder
|
||||
-----------------------------------------------------------------------------------
|
||||
0)._ What are supported, what coming soon
|
||||
|
||||
Supported / translated to harbour:
|
||||
|
||||
- DirectDraw Startup
|
||||
- Masked Sprites Drawing
|
||||
- Solid Sprites Controls
|
||||
- Basic Animation Sequencer
|
||||
- Up to 90 active animations in 133-MMX ( 166 clocked-down ;) )
|
||||
- Basic Collision Detect / Hit Collision
|
||||
- Event handlers for sprites ( OnFirstFrame, OnOutOfBound, OnRenderSprite... )
|
||||
- Load animations
|
||||
- KeyDown/KeyUp Detection
|
||||
|
||||
(W) Waiting for implementation / (NT) not translated to Harbour:
|
||||
|
||||
(NT) - OpenGL Wrapper ( For those that no want DirectX )
|
||||
(W) - GDI Wrapper ( For those that no want DirectX / OpenGL )
|
||||
(NT) - Advanced Sequencer ( Automations )
|
||||
(NT) - Blocking Animations
|
||||
(NT) - Timers / Intervals Support
|
||||
(NT) - 2D Shadows & Light control
|
||||
(NT) - FX Particles support ( Plasma Explosions )
|
||||
(NT) - FX Star Fields Support ( 2D, 3D )
|
||||
(NT) - FX Fire Support
|
||||
(NT) - Font Support
|
||||
(NT) - Basic drawing functions support ( Circles, lines, putpixel, getpixel, bar )
|
||||
(W) - Support for 8 / 16 / 24 / 32 ( palettized, 5-6-5 RGB ,8-8-8 RGB, 8-8-8-8 RGBA bpps )
|
||||
(W) - Support for 800x600 video modes
|
||||
(W) - Wav player/Mixer ( DirectSound, MMSystem , 3D Sound )
|
||||
(W) - Midi Player/Mixer ( DirecMusic, MMSystem )
|
||||
(NT) - Direct 3D Inmediate Mode ( Startup )
|
||||
(W) - Suppor for JPG / GIF
|
||||
|
||||
1)._ What do you need for make/run the samples.
|
||||
|
||||
- A Windows 95/98 ( Nt don't support DirectX 6 )
|
||||
- MSVC 6.0 ( BC coming soon )
|
||||
- DirectX 6.1 Run-Time ( you can download it from
|
||||
http://www.microsoft.com/directx )
|
||||
|
||||
- Set your resolution to 640x480 before running the sample.
|
||||
|
||||
2)._ Files in this distribution.
|
||||
|
||||
|
||||
/hbw32ddr/hb_ddraw.h -> header file
|
||||
|
||||
/hbw32ddr/hb_ddraw.cpp -> Source file for DDraw
|
||||
|
||||
/hbw32ddr/directx.lib -> Lib for Harbour
|
||||
|
||||
/hbw32ddr/lib/ddraw.lib -> Lib from MS for VC ( DirectX SDK )
|
||||
|
||||
/hbw32ddr/buvcdx.bat -> Bat file for Build the sample for MSVC 6.0
|
||||
|
||||
/hbw32ddr/samples/testdx.prg -> a BreakOut like sample Game
|
||||
|
||||
/hbw32ddr/media -> Media files for the sample ( .bmp files )
|
||||
|
||||
3)._ Building the sample
|
||||
|
||||
copy testdx.prg to /harbour/tests/working/
|
||||
copy buvcdx.bat ro /harbour/tests/working/
|
||||
|
||||
1) harbour testdx
|
||||
2) buvcdx testdx
|
||||
3) copy .exe to a directory with media files
|
||||
|
||||
Run the .exe!
|
||||
|
||||
Keys for the sample:
|
||||
|
||||
Space -> Shot.
|
||||
Cursor Left -> Bunny go to left.
|
||||
Cursor Right -> Bunny go to right.
|
||||
Shift hold down -> Bunny Turbo mode on.
|
||||
|
||||
4)._ Reminder.
|
||||
|
||||
You need to have the media files into the same directory of final .exe file
|
||||
|
||||
|
||||
Please if you test/use it... send to me feedback for continue supporting it!
|
||||
|
||||
Enjoy it!
|
||||
|
||||
Regards
|
||||
Jesús Salas
|
||||
Spain
|
||||
jsalas@gruposp.com
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 38 KiB |
@@ -1,14 +0,0 @@
|
||||
@echo off
|
||||
rem
|
||||
rem $Id$
|
||||
rem
|
||||
|
||||
if "%HB_BIN_INSTALL%" == "" set HB_BIN_INSTALL=..\..\..\bin
|
||||
if "%HB_LIB_INSTALL%" == "" set HB_LIB_INSTALL=..\..\..\lib
|
||||
if "%HB_INC_INSTALL%" == "" set HB_INC_INSTALL=..\..\..\include
|
||||
|
||||
set HB_ARCHITECTURE=w32
|
||||
set HB_COMPILER=bcc32
|
||||
set HB_USER_LIBS=hbw32ddr.lib ddraw.lib
|
||||
|
||||
call %HB_BIN_INSTALL%\bld.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||
@@ -1,14 +0,0 @@
|
||||
@echo off
|
||||
rem
|
||||
rem $Id$
|
||||
rem
|
||||
|
||||
if "%HB_BIN_INSTALL%" == "" set HB_BIN_INSTALL=..\..\..\bin
|
||||
if "%HB_LIB_INSTALL%" == "" set HB_LIB_INSTALL=..\..\..\lib
|
||||
if "%HB_INC_INSTALL%" == "" set HB_INC_INSTALL=..\..\..\include
|
||||
|
||||
set HB_ARCHITECTURE=w32
|
||||
set HB_COMPILER=msvc
|
||||
set HB_USER_LIBS=hbw32ddr.lib ddraw.lib
|
||||
|
||||
call %HB_BIN_INSTALL%\bld.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 867 B |
Binary file not shown.
|
Before Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1013 B |
Binary file not shown.
|
Before Width: | Height: | Size: 65 B |
@@ -1,178 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
Static spBunny
|
||||
Static spShots
|
||||
Static nShotsActive
|
||||
Static spaBreaks
|
||||
Static spTorretShot
|
||||
Static spTorretShot2
|
||||
Static spTorretShot3
|
||||
Static spTorretShot4
|
||||
Static spTorretShot5
|
||||
Static spTorretSequencer
|
||||
Static spBunnyLife
|
||||
Static spOuch
|
||||
Static sppq
|
||||
Static spzan
|
||||
|
||||
Function Main()
|
||||
|
||||
m_hWnd := dd_CreateWindow()
|
||||
|
||||
// Background...........
|
||||
|
||||
sfBack := dd_CreateOffScreenBitmap(NIL,NIL)
|
||||
dd_LoadBmpIntoSurface( sfBack, "black.bmp", 0 , 0, 640, 480 )
|
||||
spBack := dd_CreateSprite( sfBack, "background", 640, 480, 1, 101, .t., 240 )
|
||||
dd_SPSetXY( spBack, 0,0)
|
||||
|
||||
|
||||
// Bricks......
|
||||
|
||||
sfBreak1 := dd_CreateOffScreenBitmap(NIL,NIL)
|
||||
dd_LoadBmpIntoSurface( sfBreak1, "brick1.bmp", 0 , 0, 640, 480 )
|
||||
|
||||
sfBreak2 := dd_CreateOffScreenBitmap(NIL,NIL)
|
||||
dd_LoadBmpIntoSurface( sfBreak2, "brick2.bmp", 0 , 0, 640, 480 )
|
||||
|
||||
sfBreak3 := dd_CreateOffScreenBitmap(NIL,NIL)
|
||||
dd_LoadBmpIntoSurface( sfBreak3, "brick3.bmp", 0 , 0, 640, 480 )
|
||||
|
||||
spaBreaks := Array(80)
|
||||
nCont := 1
|
||||
for t := 1 to 80
|
||||
if nCont == 3
|
||||
spaBreaks[t] := dd_CreateSprite( sfBreak3, "Break", 30, 15, 6, 100, .f., 240 )
|
||||
nCont := 1
|
||||
else
|
||||
if nCont == 2
|
||||
spaBreaks[t] := dd_CreateSprite( sfBreak2, "Break", 30, 15, 6, 100, .f., 240 )
|
||||
nCont := 3
|
||||
else
|
||||
if nCont == 1
|
||||
spaBreaks[t] := dd_CreateSprite( sfBreak1, "Break", 30, 15, 6, 100, .f., 240 )
|
||||
nCont := 2
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
dd_SPSetSolid( spaBreaks[t], .t. )
|
||||
dd_SPSetVisible( spaBreaks[t], .t. )
|
||||
dd_SPOnCollision( spaBreaks[t], "BRICK_ONCOLLISION" )
|
||||
next
|
||||
|
||||
for t := 1 to 20
|
||||
dd_SPSetXY( spaBreaks[t], t*30 + 5,10 )
|
||||
next
|
||||
for t := 21 to 40
|
||||
dd_SPSetXY( spaBreaks[t], ( t - 20 ) * 30 + 12,25 )
|
||||
next
|
||||
for t := 41 to 60
|
||||
dd_SPSetXY( spaBreaks[t], ( t - 40 ) * 30+ 5 ,40 )
|
||||
next
|
||||
for t := 61 to 80
|
||||
dd_SPSetXY( spaBreaks[t], ( t - 60 ) * 30 + 12,55 )
|
||||
next
|
||||
|
||||
// Shots......
|
||||
|
||||
sfShot := dd_CreateOffScreenBitmap(NIL,NIL)
|
||||
dd_LoadBmpIntoSurface( sfShot, "shot.bmp", 0 , 0, 640, 480 )
|
||||
spShots := Array( 10 )
|
||||
nShotsActive := 1
|
||||
|
||||
for t := 1 to 10
|
||||
spShots[t] := dd_CreateSprite( sfShot, "Shot", 10, 20, 3, 100, .f., 240 )
|
||||
dd_SPSetSolid( spShots[ t ], .t. )
|
||||
dd_SPSetMasked( spShots[ t ], .t. )
|
||||
dd_SPOnOutScreen( spShots[ t ], "SHOT_OUTOFBOUND" )
|
||||
next
|
||||
|
||||
|
||||
// Bunny..........
|
||||
|
||||
sfBunny := dd_CreateOffScreenBitmap(NIL,NIL)
|
||||
dd_LoadBmpIntoSurface( sfBunny, "anima2.bmp", 0 , 0, 640, 480 )
|
||||
spBunny := dd_CreateSprite( sfBunny, "bunny",70,52 , 6, 101, .t., 240 )
|
||||
|
||||
dd_SPSetMasked( spBunny, .t. )
|
||||
dd_SPSetXY( spBunny, 0, 420 )
|
||||
dd_SPOnFirstFrame( spBunny, "BUNNY_ONFIRSTFRAME" )
|
||||
dd_SPSetVisible( spBunny , .t. )
|
||||
|
||||
spBunnyLife := 4
|
||||
|
||||
dd_StartWindow( m_hWnd )
|
||||
|
||||
|
||||
return
|
||||
|
||||
|
||||
//-------------------------------------------------------------//
|
||||
|
||||
function Brick_OnCollision( nMe, nCollided )
|
||||
lOk := .f.
|
||||
for t := 1 to 10
|
||||
if nCollided == spShots[t]
|
||||
lOk := .t.
|
||||
endif
|
||||
next
|
||||
if lOk
|
||||
dd_SPSetVisible( nCollided, .f. )
|
||||
dd_SPSetVisible( nMe, .f. )
|
||||
endif
|
||||
return
|
||||
|
||||
//-------------------------------------------------------------//
|
||||
|
||||
function Shot_OutOfBound( nShot )
|
||||
dd_SPSetVisible( nShot, .f. )
|
||||
return
|
||||
|
||||
//-------------------------------------------------------------//
|
||||
|
||||
function Bunny_OnFirstFrame( )
|
||||
|
||||
if dd_isKeyPressed( 16 )
|
||||
plusVelo := 2
|
||||
else
|
||||
plusVelo := 1
|
||||
endif
|
||||
|
||||
dd_SPClearDirection( spBunny )
|
||||
|
||||
if dd_isKeyPressed( 39 )
|
||||
dd_SPSetDirection( spBunny, 6, 8 * plusVelo , 0 )
|
||||
endif
|
||||
|
||||
if dd_isKeyPressed( 37 )
|
||||
dd_SPSetDirection( spBunny, 4, -8 * plusVelo , 0 )
|
||||
endif
|
||||
|
||||
return
|
||||
|
||||
//-------------------------------------------------------------//
|
||||
|
||||
function ddOnRender()
|
||||
|
||||
if dd_isKeyPressed( 32 )
|
||||
if spBunnyLife > 0
|
||||
dd_SPClearDirection( spShots[ nShotsActive ] )
|
||||
dd_SPSetDirection( spShots[nShotsActive] , 6 , 0 , (-15) )
|
||||
|
||||
x := dd_SPGetX( spBunny )
|
||||
y := dd_SPGetY( spBunny )
|
||||
|
||||
dd_SPSetXY( spShots[nShotsActive], x, y - 20 )
|
||||
dd_SPSetVisible( spShots[nShotsActive], .t. )
|
||||
nShotsActive += 1
|
||||
if nShotsActive > 10
|
||||
nShotsActive := 1
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
return
|
||||
|
||||
//-------------------------------------------------------------//
|
||||
@@ -1,881 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright(C) 1999 by Jesus Salas
|
||||
*
|
||||
* 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; if not, write to:
|
||||
*
|
||||
* The Free Software Foundation, Inc.,
|
||||
* 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* You can contact me at: jsalas@gruposp.com jsalas@sp-editores.es
|
||||
*
|
||||
*/
|
||||
|
||||
#define INITGUID
|
||||
|
||||
#define HB_OS_WIN_32_USED
|
||||
|
||||
#include "hbapi.h"
|
||||
#include "hbvm.h"
|
||||
|
||||
/* DDraw initialize */
|
||||
|
||||
#include "ddraw.h"
|
||||
|
||||
#define HB_DD_TIMER_ID 1
|
||||
#define HB_DD_TIMER_RATE 100
|
||||
|
||||
// DDRAW MANAGEMENT
|
||||
// Global Data
|
||||
|
||||
BOOL hb_dd_g_handling_events = FALSE; // painting?
|
||||
LPDIRECTDRAW4 hb_dd_g_pDD = NULL; // DirectDraw object
|
||||
HWND hb_dd_g_DDHwnd; // Our hWnd
|
||||
long hb_dd_g_xWindow = 0;
|
||||
long hb_dd_g_yWindow = 0;
|
||||
|
||||
//------------------------------------------------------------------------------//
|
||||
// Management Structs for surfaces...
|
||||
|
||||
#define MAX_DDSURFACES 255
|
||||
|
||||
LPDIRECTDRAWSURFACE4 hb_dd_g_DDSFaces[ MAX_DDSURFACES + 1 ];
|
||||
|
||||
long hb_dd_g_DDSFaceCount = 0;
|
||||
|
||||
//------------------------------------------------------------------------------//
|
||||
// Sprites Management
|
||||
|
||||
#define MAX_SPRITES 256
|
||||
|
||||
struct st_Sprites
|
||||
{
|
||||
short int Type; // Type of Data
|
||||
long Surface; // Surface index for loaded Image(s)
|
||||
char * cName; // Sprite friendly Name
|
||||
// 2D Engine data
|
||||
long Width; // width of one frame
|
||||
long Height; // height of one frame
|
||||
long Images; // Number of frames in Surface
|
||||
BOOL Visible; // Render it and do Hit detect?
|
||||
long Frame; // Actual Frame to Render
|
||||
long zOrder; // For painting
|
||||
long x; // x in Virtual Screen
|
||||
long y; // y in Virtual Screen
|
||||
long VisibleX; // "real" y in Visible Screen
|
||||
long VisibleY; // "real" x in Visible Screen
|
||||
long FrameSpeed; // Render frame time ratio
|
||||
long DrawInverted; // Draw Inverted
|
||||
long Direction; // Clock wise code 1-2-3-4-5-6-7-8-9
|
||||
long xIncrement; // x Increment Increment;
|
||||
long yIncrement; // y Increment
|
||||
long Solid; // is Solid object ( collision on )
|
||||
long Masked; // is Masked?
|
||||
short int lCollision; // Collision Detect On/Off
|
||||
|
||||
// Sprite Event Handlers...
|
||||
|
||||
char * OnRender; // Render event Handler
|
||||
char * OnCollision; // Collision Event Handler
|
||||
char * OnFirstFrame; // First Frame handler
|
||||
char * OnOutScreen; // Out of Bounds...
|
||||
|
||||
} hb_dd_Sprites[ MAX_SPRITES ];
|
||||
|
||||
long hb_dd_g_SpritesCount = 0;
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
// Multi-Key control array.
|
||||
|
||||
short int hb_dd_g_KeyDown[ 256 ];
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
long hb_dd_checkError( HRESULT hr )
|
||||
{
|
||||
long p = 0;
|
||||
|
||||
switch( hr )
|
||||
{
|
||||
case DDERR_EXCEPTION : p++;break;
|
||||
case DDERR_GENERIC : p++;break;
|
||||
case DDERR_INVALIDOBJECT : p++;break;
|
||||
case DDERR_INVALIDPARAMS : p++;break;
|
||||
case DDERR_INVALIDRECT : p++;break;
|
||||
case DDERR_NOBLTHW : p++;break;
|
||||
case DDERR_SURFACEBUSY : p++;break;
|
||||
case DDERR_SURFACELOST : p++;break;
|
||||
case DDERR_UNSUPPORTED : p++;break;
|
||||
case DDERR_WASSTILLDRAWING : p++;break;
|
||||
case DDERR_NOOVERLAYHW : p++;break;
|
||||
case DDERR_NOTAOVERLAYSURFACE : p++;break;
|
||||
case DDERR_INVALIDSURFACETYPE : p++;break;
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
void hb_dd_g_Error( char *, long , char *)
|
||||
{
|
||||
}
|
||||
|
||||
void hb_dd_WinError( void )
|
||||
{
|
||||
LPVOID lpMsgBuf;FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
||||
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL,
|
||||
GetLastError(),
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
|
||||
(LPTSTR) &lpMsgBuf, 0, NULL );// Process any inserts in lpMsgBuf.
|
||||
// ...// Display the string.
|
||||
MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
|
||||
// Free the buffer.
|
||||
LocalFree( lpMsgBuf );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
void hb_dd_ReleaseAllObjects(void)
|
||||
{
|
||||
long t;
|
||||
if( hb_dd_g_pDD != NULL )
|
||||
{
|
||||
if( hb_dd_g_DDSFaces[ 0 ] != NULL )
|
||||
{
|
||||
hb_dd_g_DDSFaces[ 0 ]->Release();
|
||||
hb_dd_g_DDSFaces[ 0 ] = NULL;
|
||||
}
|
||||
|
||||
for( t = 2; t < MAX_DDSURFACES; t++ )
|
||||
{
|
||||
if( hb_dd_g_DDSFaces[ t ] != NULL )
|
||||
{
|
||||
hb_dd_g_DDSFaces[ t ]->Release();
|
||||
hb_dd_g_DDSFaces[ t ] = NULL;
|
||||
}
|
||||
}
|
||||
hb_dd_g_pDD->Release();
|
||||
hb_dd_g_pDD = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
DWORD hb_dd_DDColorMatch(IDirectDrawSurface4 * pdds, COLORREF rgb)
|
||||
{
|
||||
COLORREF rgbT;
|
||||
HDC hdc;
|
||||
DWORD dw = CLR_INVALID;
|
||||
DDSURFACEDESC2 ddsd;
|
||||
HRESULT hres;
|
||||
|
||||
//
|
||||
// Use GDI SetPixel to color match for us
|
||||
//
|
||||
if( rgb != CLR_INVALID && pdds->GetDC( &hdc ) == DD_OK )
|
||||
{
|
||||
rgbT = GetPixel( hdc, 0, 0 ); // Save current pixel value
|
||||
SetPixel( hdc, 0, 0, rgb ); // Set our value
|
||||
pdds->ReleaseDC( hdc );
|
||||
}
|
||||
//
|
||||
// Now lock the surface so we can read back the converted color
|
||||
//
|
||||
ddsd.dwSize = sizeof( ddsd );
|
||||
|
||||
while( ( hres = pdds->Lock( NULL, &ddsd, 0, NULL ) ) == DDERR_WASSTILLDRAWING );
|
||||
|
||||
if( hres == DD_OK )
|
||||
{
|
||||
dw = *( DWORD * ) ddsd.lpSurface; // Get DWORD
|
||||
if( ddsd.ddpfPixelFormat.dwRGBBitCount < 32 )
|
||||
dw &= ( 1 << ddsd.ddpfPixelFormat.dwRGBBitCount ) - 1; // Mask it to bpp
|
||||
pdds->Unlock(NULL);
|
||||
}
|
||||
//
|
||||
// Now put the color that was there back.
|
||||
//
|
||||
if( rgb != CLR_INVALID && pdds->GetDC( &hdc ) == DD_OK )
|
||||
{
|
||||
SetPixel( hdc, 0, 0, rgbT );
|
||||
pdds->ReleaseDC( hdc );
|
||||
}
|
||||
|
||||
return dw;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
void hb_dd_RenderSprites( long control )
|
||||
{
|
||||
HRESULT hRet;
|
||||
long cont,cont2;
|
||||
RECT rcRect;
|
||||
LPDIRECTDRAWSURFACE4 pdds;
|
||||
PHB_DYNS pDynSym;
|
||||
|
||||
pDynSym = hb_dynsymFindName( "DDONRENDER" );
|
||||
|
||||
if( pDynSym )
|
||||
{
|
||||
hb_vmPushSymbol( hb_dynsymSymbol( pDynSym ) );
|
||||
hb_vmPushNil();
|
||||
hb_vmDo( 0 );
|
||||
}
|
||||
|
||||
for( cont=0; cont<hb_dd_g_SpritesCount; cont++)
|
||||
{
|
||||
if( hb_dd_Sprites[ cont ].Visible && hb_dd_Sprites[ cont ].Surface != - 1)
|
||||
{
|
||||
if( hb_dd_Sprites[ cont ].Direction != -1 )
|
||||
{
|
||||
hb_dd_Sprites[ cont ].x += hb_dd_Sprites[ cont ].xIncrement ;
|
||||
hb_dd_Sprites[ cont ].y += hb_dd_Sprites[ cont ].yIncrement ;
|
||||
}
|
||||
|
||||
// Collision detect
|
||||
|
||||
if( hb_dd_Sprites[ cont ].Solid )
|
||||
{
|
||||
for( cont2=0;cont2 < hb_dd_g_SpritesCount; cont2++ )
|
||||
{
|
||||
if( cont != cont2 && hb_dd_Sprites[ cont2 ].Solid && hb_dd_Sprites[ cont2 ].Visible )
|
||||
{
|
||||
RECT r1,r2,res;
|
||||
r1.left = hb_dd_Sprites[ cont ].x;
|
||||
r1.right = hb_dd_Sprites[ cont ].x + hb_dd_Sprites[ cont ].Width;
|
||||
r1.top = hb_dd_Sprites[ cont ].y;
|
||||
r1.bottom = hb_dd_Sprites[ cont ].y + hb_dd_Sprites[ cont ].Height ;
|
||||
|
||||
r2.left = hb_dd_Sprites[ cont2 ].x;
|
||||
r2.right = hb_dd_Sprites[ cont2 ].x + hb_dd_Sprites[ cont2 ].Width;
|
||||
r2.top = hb_dd_Sprites[ cont2 ].y;
|
||||
r2.bottom = hb_dd_Sprites[ cont2 ].y + hb_dd_Sprites[ cont2 ].Height ;
|
||||
|
||||
if( IntersectRect( &res,&r1,&r2 ) )
|
||||
{
|
||||
if( hb_dd_Sprites[ cont ].lCollision )
|
||||
{
|
||||
if( hb_dd_Sprites[ cont ].OnCollision != NULL )
|
||||
{
|
||||
pDynSym = hb_dynsymFindName( hb_dd_Sprites[ cont ].OnCollision );
|
||||
|
||||
if( pDynSym )
|
||||
{
|
||||
hb_vmPushSymbol( hb_dynsymSymbol( pDynSym ) );
|
||||
hb_vmPushNil();
|
||||
hb_vmPushLong( cont );
|
||||
hb_vmPushLong( cont2 );
|
||||
hb_vmDo( 2 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Sequencer
|
||||
|
||||
if( hb_dd_Sprites[ cont ].Frame > hb_dd_Sprites[ cont ].Images )
|
||||
{
|
||||
if( hb_dd_Sprites[ cont ].OnFirstFrame != NULL )
|
||||
{
|
||||
pDynSym = hb_dynsymFindName( hb_dd_Sprites[ cont ].OnFirstFrame );
|
||||
|
||||
if( pDynSym )
|
||||
{
|
||||
hb_vmPushSymbol( hb_dynsymSymbol( pDynSym ) );
|
||||
hb_vmPushNil();
|
||||
hb_vmDo(0);
|
||||
}
|
||||
}
|
||||
hb_dd_Sprites[ cont ].Frame = 1;
|
||||
}
|
||||
|
||||
rcRect.left = ( hb_dd_Sprites[ cont ].Frame - 1 ) * hb_dd_Sprites[ cont ].Width;
|
||||
rcRect.top = 0;
|
||||
rcRect.right = ( hb_dd_Sprites[ cont ].Frame - 1 ) * hb_dd_Sprites[ cont ].Width + hb_dd_Sprites[ cont ].Width;
|
||||
rcRect.bottom = hb_dd_Sprites[ cont ].Height;
|
||||
|
||||
if( control == 1 )
|
||||
hb_dd_Sprites[ cont ].Frame++;
|
||||
|
||||
pdds = hb_dd_g_DDSFaces[ hb_dd_Sprites[ cont ].Surface ];
|
||||
|
||||
while( TRUE )
|
||||
{
|
||||
if( ! hb_dd_Sprites[ cont ].Masked )
|
||||
hRet = hb_dd_g_DDSFaces[1]->BltFast(hb_dd_Sprites[ cont ].x, hb_dd_Sprites[ cont ].y, pdds, &rcRect, FALSE );
|
||||
else
|
||||
{
|
||||
DDCOLORKEY ddck;
|
||||
|
||||
ddck.dwColorSpaceLowValue = hb_dd_DDColorMatch( pdds, CLR_INVALID );
|
||||
ddck.dwColorSpaceHighValue = ddck.dwColorSpaceLowValue;
|
||||
|
||||
pdds->SetColorKey( DDCKEY_SRCBLT ,&ddck );
|
||||
|
||||
hb_dd_g_DDSFaces[1]->SetColorKey( DDCKEY_DESTBLT ,&ddck );
|
||||
|
||||
hRet = hb_dd_g_DDSFaces[1]->BltFast(hb_dd_Sprites[ cont ].x, hb_dd_Sprites[ cont ].y, pdds, &rcRect, DDBLTFAST_SRCCOLORKEY );
|
||||
}
|
||||
hb_dd_checkError( hRet );
|
||||
if( hRet == DD_OK )
|
||||
break;
|
||||
if( hRet == DDERR_SURFACELOST )
|
||||
{
|
||||
hRet = hb_dd_g_DDSFaces[1]->Restore();
|
||||
if (hRet != DD_OK)
|
||||
break;
|
||||
}
|
||||
if( hRet != DDERR_WASSTILLDRAWING )
|
||||
break;
|
||||
}
|
||||
|
||||
if( hb_dd_Sprites[ cont ].OnOutScreen != NULL )
|
||||
{
|
||||
if( hb_dd_Sprites[ cont ].x < 0 || hb_dd_Sprites[ cont ].y < 0 || hb_dd_Sprites[ cont ].x > 640 || hb_dd_Sprites[ cont ].y > 480 )
|
||||
{
|
||||
if( hb_dd_Sprites[ cont ].OnOutScreen != NULL )
|
||||
{
|
||||
pDynSym = hb_dynsymFindName( hb_dd_Sprites[ cont ].OnOutScreen );
|
||||
|
||||
if( pDynSym )
|
||||
{
|
||||
hb_vmPushSymbol( hb_dynsymSymbol( pDynSym ) );
|
||||
hb_vmPushNil();
|
||||
hb_vmPushLong( cont );
|
||||
hb_vmDo( 1 );
|
||||
}
|
||||
}
|
||||
|
||||
//SetParam( ( void * ) &cont , TSI_DWORD );
|
||||
//VMCall( hb_dd_Sprites[ cont ].OnOutScreen );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
LRESULT _stdcall hb_dd_DDWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
HRESULT hRet;
|
||||
int nVirtKey;
|
||||
|
||||
switch( uMsg )
|
||||
{
|
||||
case WM_DESTROY:
|
||||
{
|
||||
hb_dd_ReleaseAllObjects();
|
||||
break;
|
||||
}
|
||||
case WM_KEYUP:
|
||||
{
|
||||
nVirtKey = (int) wParam; // virtual-key code
|
||||
hb_dd_g_KeyDown[ nVirtKey ] = 0;
|
||||
break;
|
||||
}
|
||||
case WM_KEYDOWN:
|
||||
{
|
||||
nVirtKey = (int) wParam; // virtual-key code
|
||||
hb_dd_g_KeyDown[ nVirtKey ] = 1;
|
||||
|
||||
if( ( int ) wParam == 27 )
|
||||
{
|
||||
PostMessage( hWnd, WM_CLOSE,0,0);
|
||||
PostMessage( hWnd, WM_DESTROY,0,0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WM_TIMER:
|
||||
{
|
||||
if( HB_DD_TIMER_ID == wParam )
|
||||
{
|
||||
if( ! hb_dd_g_handling_events )
|
||||
{
|
||||
hb_dd_g_handling_events = TRUE;
|
||||
hb_dd_RenderSprites( 1 );
|
||||
while( TRUE )
|
||||
{
|
||||
hRet = hb_dd_g_DDSFaces[0]->Flip(NULL, 0);
|
||||
if( hRet == DD_OK )
|
||||
break;
|
||||
if( hRet == DDERR_SURFACELOST )
|
||||
{
|
||||
hRet = hb_dd_g_DDSFaces[0]->Restore();
|
||||
if( hRet != DD_OK )
|
||||
break;
|
||||
}
|
||||
if( hRet != DDERR_WASSTILLDRAWING )
|
||||
break;
|
||||
}
|
||||
hb_dd_g_handling_events = FALSE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return DefWindowProc( hWnd, uMsg, wParam , lParam );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
int hb_dd_InitFail( HWND hWnd, HRESULT hRet, LPCTSTR szError, ... )
|
||||
{
|
||||
char szBuff[ 128 ];
|
||||
va_list vl;
|
||||
va_start( vl, szError );
|
||||
vsprintf( szBuff, szError, vl );
|
||||
MessageBox( hWnd, szBuff, "4dNow extend sys.", MB_OK );
|
||||
DestroyWindow( hWnd );
|
||||
va_end( vl );
|
||||
exit( 1 );
|
||||
return hRet;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
void hb_RestoreAll(void)
|
||||
{
|
||||
HRESULT hRet;
|
||||
long t;
|
||||
|
||||
hRet = hb_dd_g_DDSFaces[0]->Restore();
|
||||
if( hRet == DD_OK )
|
||||
{
|
||||
for( t = 2; t < MAX_DDSURFACES; t++ )
|
||||
{
|
||||
if( hb_dd_g_DDSFaces[ t ] != NULL )
|
||||
hb_dd_g_DDSFaces[ t ]->Restore();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
void hb_dd_DDrawStartup( HWND hWnd )
|
||||
{
|
||||
DDSURFACEDESC2 ddsd;
|
||||
DDSCAPS2 ddscaps;
|
||||
HRESULT hRet;
|
||||
LPDIRECTDRAW pDD;
|
||||
long t;
|
||||
|
||||
hb_dd_g_DDHwnd = hWnd;
|
||||
|
||||
hRet = DirectDrawCreate(NULL, &pDD, NULL);
|
||||
if( hRet != DD_OK )
|
||||
hb_dd_InitFail( hWnd, hRet, "DirectDrawCreate FAILED" );
|
||||
|
||||
hRet = pDD->QueryInterface(IID_IDirectDraw4, (LPVOID *) &hb_dd_g_pDD );
|
||||
|
||||
if( hRet != DD_OK )
|
||||
hb_dd_InitFail( hWnd, hRet, "QueryInterface FAILED" );
|
||||
|
||||
hRet = pDD->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT | DDSCL_ALLOWMODEX );
|
||||
|
||||
if( hRet != DD_OK )
|
||||
hb_dd_InitFail( hWnd, hRet, "SetCooperativeLevel FAILED" );
|
||||
|
||||
hRet = hb_dd_g_pDD->SetDisplayMode(hb_dd_g_xWindow , hb_dd_g_yWindow , 16, 0, 0);
|
||||
if( hRet != DD_OK )
|
||||
hb_dd_InitFail( hWnd, hRet, "SetDisplayMode FAILED" );
|
||||
|
||||
for( t=0;t<= MAX_DDSURFACES;t++ )
|
||||
hb_dd_g_DDSFaces[t] = NULL;
|
||||
for( t=0;t< MAX_SPRITES;t++)
|
||||
hb_dd_Sprites[t].Surface = -1;
|
||||
for( t=0;t<256;t++)
|
||||
hb_dd_g_KeyDown[t] = 0;
|
||||
ZeroMemory(&ddsd, sizeof(ddsd));
|
||||
|
||||
ddsd.dwSize = sizeof(ddsd);
|
||||
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT | DDSD_CKSRCBLT;
|
||||
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |
|
||||
DDSCAPS_FLIP |
|
||||
DDSCAPS_COMPLEX ;
|
||||
ddsd.dwBackBufferCount = 1;
|
||||
hRet = hb_dd_g_pDD->CreateSurface(&ddsd, &hb_dd_g_DDSFaces[0] , NULL);
|
||||
if( hRet != DD_OK )
|
||||
hb_dd_InitFail( hWnd, hRet, "CreateSurface FAILED" );
|
||||
|
||||
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
|
||||
|
||||
hRet = hb_dd_g_DDSFaces[0]->GetAttachedSurface(&ddscaps,&hb_dd_g_DDSFaces[1] );
|
||||
|
||||
if( hRet != DD_OK )
|
||||
hb_dd_InitFail( hWnd, hRet, "GetAttachedSurface FAILED" );
|
||||
|
||||
if( HB_DD_TIMER_ID != SetTimer( hWnd, HB_DD_TIMER_ID, HB_DD_TIMER_RATE, NULL ) )
|
||||
hb_dd_InitFail( hWnd, hRet, "SetTimer FAILED" );
|
||||
|
||||
hb_dd_g_DDSFaceCount = 2;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
HRESULT hb_dd_DDCopyBitmap(IDirectDrawSurface4 * pdds, HBITMAP hbm, int x, int y,
|
||||
int dx, int dy)
|
||||
{
|
||||
HDC hdcImage;
|
||||
HDC hdc;
|
||||
BITMAP bm;
|
||||
DDSURFACEDESC2 ddsd;
|
||||
HRESULT hr;
|
||||
|
||||
if( hbm == NULL || pdds == NULL )
|
||||
return E_FAIL;
|
||||
|
||||
pdds->Restore();
|
||||
|
||||
hdcImage = CreateCompatibleDC(NULL);
|
||||
if( !hdcImage )
|
||||
OutputDebugString("createcompatible dc failed\n");
|
||||
SelectObject(hdcImage, hbm);
|
||||
|
||||
GetObject(hbm, sizeof(bm), &bm);
|
||||
dx = dx == 0 ? bm.bmWidth : dx; // Use the passed size, unless zero
|
||||
dy = dy == 0 ? bm.bmHeight : dy;
|
||||
|
||||
ddsd.dwSize = sizeof(ddsd);
|
||||
ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;
|
||||
|
||||
pdds->GetSurfaceDesc(&ddsd);
|
||||
|
||||
if( ( hr = pdds->GetDC( &hdc ) ) == DD_OK )
|
||||
{
|
||||
StretchBlt(hdc, 0, 0, ddsd.dwWidth, ddsd.dwHeight, hdcImage, x, y,
|
||||
dx, dy, SRCCOPY);
|
||||
pdds->ReleaseDC(hdc);
|
||||
}
|
||||
DeleteDC(hdcImage);
|
||||
return hr;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_ISKEYPRESSED )
|
||||
{
|
||||
if( hb_dd_g_KeyDown[ hb_parnl( 1 ) ] )
|
||||
hb_retl( 1 );
|
||||
else
|
||||
hb_retl( 0 );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_SPGETXY )
|
||||
{
|
||||
// This function is Broken ( hb_stornl fail );
|
||||
|
||||
long n = hb_parnl( 1 );
|
||||
|
||||
hb_reta( 2 );
|
||||
|
||||
hb_stornl( hb_dd_Sprites[ n ].x, -1, 0 );
|
||||
hb_stornl( hb_dd_Sprites[ n ].y, -1, 1 );
|
||||
}
|
||||
|
||||
HB_FUNC( DD_SPGETX )
|
||||
{
|
||||
hb_retnl( hb_dd_Sprites[ hb_parnl( 1 ) ].x );
|
||||
}
|
||||
|
||||
HB_FUNC( DD_SPGETY )
|
||||
{
|
||||
hb_retnl( hb_dd_Sprites[ hb_parnl( 1 ) ].y );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_SPGETVISIBLE )
|
||||
{
|
||||
hb_retl( hb_dd_Sprites[ hb_parnl( 1 ) ].Visible );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_SPSETVISIBLE )
|
||||
{
|
||||
hb_dd_Sprites[ hb_parnl( 1 ) ].Visible = ( int ) hb_parl( 2 );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_SPONRENDER )
|
||||
{
|
||||
hb_dd_Sprites[ hb_parnl( 1 ) ].OnRender = hb_strdup( hb_parc(1) );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_SPCLEARDIRECTION )
|
||||
{
|
||||
long n = hb_parnl( 1 );
|
||||
hb_dd_Sprites[ n ].xIncrement = 0;
|
||||
hb_dd_Sprites[ n ].yIncrement = 0;
|
||||
hb_dd_Sprites[ n ].Direction = -1;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_SPSETSOLID )
|
||||
{
|
||||
hb_dd_Sprites[hb_parnl( 1 ) ].Solid = hb_parl( 2 );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_SPSETMASKED )
|
||||
{
|
||||
hb_dd_Sprites[hb_parnl( 1 ) ].Masked = hb_parl( 2 );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_SPSETDIRECTION )
|
||||
{
|
||||
long n = hb_parnl( 1 );
|
||||
|
||||
hb_dd_Sprites[ n ].Direction = hb_parnl( 2 );
|
||||
hb_dd_Sprites[ n ].xIncrement += hb_parnl( 3 );
|
||||
hb_dd_Sprites[ n ].yIncrement += hb_parnl( 4 );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_SPONFIRSTFRAME )
|
||||
{
|
||||
long n = hb_parnl( 1 );
|
||||
hb_dd_Sprites[ n ].OnFirstFrame = hb_strdup( hb_parc(2) );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_SPONOUTSCREEN )
|
||||
{
|
||||
long n = hb_parnl( 1 );
|
||||
hb_dd_Sprites[ n ].OnOutScreen = hb_strdup( hb_parc(2) );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_SPONCOLLISION )
|
||||
{
|
||||
long n = hb_parnl( 1 );
|
||||
hb_dd_Sprites[ n ].OnCollision = hb_strdup( hb_parc(2) );
|
||||
hb_dd_Sprites[ n ].lCollision = 1;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_CREATESPRITE )
|
||||
{
|
||||
long n = hb_dd_g_SpritesCount;
|
||||
|
||||
ZeroMemory( &hb_dd_Sprites[ n ], sizeof( struct st_Sprites ) );
|
||||
|
||||
hb_dd_Sprites[ n ].Surface = hb_parnl( 1 );
|
||||
hb_dd_Sprites[ n ].cName = hb_strdup( hb_parc( 2 ) );
|
||||
hb_dd_Sprites[ n ].Width = hb_parnl( 3 );
|
||||
hb_dd_Sprites[ n ].Height = hb_parnl( 4 );
|
||||
hb_dd_Sprites[ n ].Images = hb_parnl( 5 );
|
||||
hb_dd_Sprites[ n ].zOrder = hb_parnl( 6 );
|
||||
hb_dd_Sprites[ n ].Visible = hb_parl( 7 );
|
||||
hb_dd_Sprites[ n ].FrameSpeed = hb_parnl( 8 );
|
||||
|
||||
hb_dd_g_SpritesCount++;
|
||||
|
||||
hb_retnl( n );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_SPSETXY )
|
||||
{
|
||||
long n = hb_parnl( 1 );
|
||||
long x = hb_parnl( 2 );
|
||||
long y = hb_parnl( 3 );
|
||||
hb_dd_Sprites[ n ].x = x;
|
||||
hb_dd_Sprites[ n ].y = y;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_SPSETINVERTED )
|
||||
{
|
||||
LPDIRECTDRAWSURFACE4 pdds;
|
||||
long n = hb_parnl( 1 );
|
||||
RECT rt;
|
||||
DDBLTFX todo;
|
||||
|
||||
long dir = hb_parnl( 2 );
|
||||
if( dir != hb_dd_Sprites[ n ].DrawInverted )
|
||||
{
|
||||
rt.top = 0;
|
||||
rt.left = 0;
|
||||
rt.bottom= hb_dd_Sprites[ n ].Height;
|
||||
rt.right = hb_dd_Sprites[ n ].Width * hb_dd_Sprites[ n ].Images;
|
||||
ZeroMemory( &todo, sizeof( DDBLTFX ) );
|
||||
|
||||
hb_dd_Sprites[ n ].DrawInverted = dir;
|
||||
todo.dwSize = sizeof( DDBLTFX );
|
||||
todo.dwDDFX = DDBLTFX_MIRRORLEFTRIGHT;
|
||||
pdds = hb_dd_g_DDSFaces[ hb_dd_Sprites[ n ].Surface ];
|
||||
pdds->Blt(&rt, pdds, &rt, DDBLT_DDFX ,&todo );
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_MSGBOX )
|
||||
{
|
||||
char *m1;
|
||||
char *m2;
|
||||
char deftitle [100] = "";
|
||||
char defmsg [2] = "";
|
||||
|
||||
if( hb_pcount() > 0 )
|
||||
m1 = hb_parc( 1 );
|
||||
else
|
||||
m1 = defmsg;
|
||||
|
||||
if( hb_pcount() > 1 )
|
||||
m2 = hb_parc( 2 );
|
||||
else
|
||||
m2 = deftitle;
|
||||
|
||||
MessageBox( hb_dd_g_DDHwnd, m1, m2, 0 );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_CREATEWINDOW )
|
||||
{
|
||||
HWND m_hWnd;
|
||||
HINSTANCE m_hInstance = GetModuleHandle(NULL);
|
||||
long x,y;
|
||||
|
||||
x= hb_pcount() > 10 ?hb_parnl( 1 ) : GetSystemMetrics(SM_CXSCREEN);
|
||||
y= hb_pcount() > 11 ?hb_parnl( 2 ) : GetSystemMetrics(SM_CYSCREEN);
|
||||
|
||||
hb_dd_g_xWindow = x;
|
||||
hb_dd_g_yWindow = y;
|
||||
|
||||
WNDCLASS wndClass = { CS_HREDRAW | CS_VREDRAW, hb_dd_DDWndProc, 0, 0, m_hInstance,
|
||||
NULL,
|
||||
LoadCursor(NULL, IDC_ARROW),
|
||||
(HBRUSH)GetStockObject(BLACK_BRUSH),
|
||||
NULL,
|
||||
TEXT("4dNow") };
|
||||
|
||||
RegisterClass( &wndClass );
|
||||
|
||||
m_hWnd = CreateWindow( TEXT("4dNow"), TEXT("4dNow"),
|
||||
WS_POPUP, 0,
|
||||
0, x,y, NULL, NULL, m_hInstance, 0L );
|
||||
|
||||
if( !m_hWnd )
|
||||
hb_dd_WinError();
|
||||
|
||||
ShowWindow( m_hWnd,SW_SHOWMAXIMIZED );
|
||||
|
||||
hb_dd_DDrawStartup( m_hWnd );
|
||||
hb_retnl( ( long ) m_hWnd );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_LOADBMPINTOSURFACE )
|
||||
{
|
||||
long nSurface = hb_parnl( 1 );
|
||||
char * cBitmap = hb_parc ( 2 );
|
||||
long x = hb_parnl( 3 );
|
||||
long y = hb_parnl( 4 );
|
||||
long dx = hb_parnl( 5 );
|
||||
long dy = hb_parnl( 6 );
|
||||
|
||||
HBITMAP hbm;
|
||||
|
||||
// Load our bitmap resource.
|
||||
|
||||
hbm = (HBITMAP) LoadImage(GetModuleHandle(NULL), cBitmap, IMAGE_BITMAP, 0,
|
||||
0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
|
||||
|
||||
if( hbm == NULL )
|
||||
hb_dd_g_Error( "Can't load Bitmap.",100,cBitmap );
|
||||
|
||||
if( hb_dd_g_DDSFaces[ nSurface ] == NULL )
|
||||
hb_dd_g_Error( "Invalid Surface",nSurface,"LoadBmpIntoSurface");
|
||||
|
||||
if( DD_OK != hb_dd_DDCopyBitmap( hb_dd_g_DDSFaces[ nSurface ], hbm, x,y, dx, dy ) )
|
||||
hb_dd_g_Error( "DDCopyBitmap",nSurface,"LoadBmpIntoSurface");
|
||||
|
||||
DeleteObject( hbm );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_CREATEOFFSCREENBITMAP )
|
||||
{
|
||||
DDSURFACEDESC2 ddsd;
|
||||
HRESULT hRet;
|
||||
|
||||
if( ! hb_dd_g_pDD )
|
||||
hb_dd_g_Error("No DDraw Initialized",1000,"");
|
||||
|
||||
if( hb_dd_g_DDSFaceCount >= MAX_DDSURFACES )
|
||||
hb_dd_g_Error( "No more DDSurfaces -> Limit reached -> CreateDDSurface()",1000,"DDraw extend sys");
|
||||
else
|
||||
{
|
||||
ZeroMemory(&ddsd, sizeof(ddsd));
|
||||
ddsd.dwSize = sizeof(ddsd);
|
||||
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH ;
|
||||
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
|
||||
ddsd.dwHeight = hb_dd_g_yWindow;
|
||||
ddsd.dwWidth = hb_dd_g_xWindow;
|
||||
hRet = hb_dd_g_pDD->CreateSurface(&ddsd, &hb_dd_g_DDSFaces[ hb_dd_g_DDSFaceCount ], NULL);
|
||||
if( hRet != DD_OK )
|
||||
hb_dd_InitFail( hb_dd_g_DDHwnd, hRet, "CreateSurface FAILED" );
|
||||
}
|
||||
|
||||
hb_retnl( hb_dd_g_DDSFaceCount );
|
||||
hb_dd_g_DDSFaceCount++;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------//
|
||||
|
||||
HB_FUNC( DD_STARTWINDOW )
|
||||
{
|
||||
MSG msg;
|
||||
BOOL loop = TRUE;
|
||||
|
||||
while( loop )
|
||||
{
|
||||
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
|
||||
{
|
||||
TranslateMessage( &msg );
|
||||
DispatchMessage( &msg );
|
||||
}
|
||||
if( WM_CLOSE == msg.message )
|
||||
loop = FALSE;
|
||||
}
|
||||
}
|
||||
@@ -39,7 +39,7 @@ rem *******************************************************
|
||||
rem Compiling contrib dirs ...
|
||||
rem *******************************************************
|
||||
|
||||
rem hbsqlit2 hbw32ddr hbwhat32 hbziparch
|
||||
rem hbsqlit2 hbwhat32 hbziparch
|
||||
|
||||
set _HB_DIRS=gtwvg hbbmcdx hbbtree hbclipsm hbct hbgt hbmisc
|
||||
for %%n in ( %_HB_DIRS% ) do %COMSPEC% /c %_HB_BATWORKER% %%n %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||
|
||||
@@ -44,7 +44,7 @@ _HB_DIRS="hbbmcdx hbbtree hbclipsm hbct hbgt hbmisc hbmsql hbmzip hbnf hbtip hbs
|
||||
|
||||
case "$HB_ARCHITECTURE" in
|
||||
w32|cyg|os2)
|
||||
# hbw32ddr hbwhat32 hbziparch
|
||||
# hbwhat32 hbziparch
|
||||
_HB_DIRS_ADD="gtwvg hbole hbodbc hbw32 rddado"
|
||||
;;
|
||||
*)
|
||||
|
||||
@@ -39,7 +39,7 @@ rem *******************************************************
|
||||
rem Compiling contrib dirs ...
|
||||
rem *******************************************************
|
||||
|
||||
rem hbsqlit2 hbw32ddr hbwhat32 hbziparch
|
||||
rem hbsqlit2 hbwhat32 hbziparch
|
||||
|
||||
set _HB_DIRS=gtwvg hbbmcdx hbbtree hbclipsm hbct hbgt hbmisc
|
||||
for %%n in ( %_HB_DIRS% ) do %COMSPEC% /c %_HB_BATWORKER% %%n %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||
|
||||
Reference in New Issue
Block a user