marisa laser revamped

also added fullscreen config option
This commit is contained in:
laochailan 2011-06-29 17:01:03 +02:00
parent 561a7faf4b
commit a2a6fb9343
23 changed files with 561 additions and 143 deletions

View file

@ -14,6 +14,7 @@ key_shot = z
# key_shot = y # if you are qwertz-fag
key_bomb = x
fullscreen = 0
# activate this for the intel-graphics crapbox at your workplace
# won't look as good as you expect it to do, but should run.

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 B

View file

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="12.260488"
height="17.095419"
id="svg3920"
version="1.1"
inkscape:version="0.48.1 r9760"
inkscape:export-filename="/home/laochailan/src/taisei/gfx/part/marilaser_part0.png"
inkscape:export-xdpi="104.20562"
inkscape:export-ydpi="104.20562"
sodipodi:docname="marilaser_part0.svg">
<defs
id="defs3922">
<filter
inkscape:collect="always"
id="filter4463"
color-interpolation-filters="sRGB">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.11800381"
id="feGaussianBlur4465" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#000000"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="47.137155"
inkscape:cx="2.3116009"
inkscape:cy="8.5101465"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1039"
inkscape:window-x="0"
inkscape:window-y="-2"
inkscape:window-maximized="1" />
<metadata
id="metadata3925">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0.41595824,-363.81447)">
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#ffffff;stroke-width:1.4252522;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 5.714286,364.9846 5.080582,5.08055 -5.080582,5.08055 -5.08058216,-5.08055 z"
id="path3811" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#ffffff;stroke-width:1.4252522;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 5.714286,369.57857 5.080582,5.08064 -5.080582,5.08055 -5.08058216,-5.08055 z"
id="path4004" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
gfx/proj/marilaser.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 B

280
gfx/proj/marilaser.svg Normal file
View file

@ -0,0 +1,280 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="11.194386"
height="80"
id="svg2"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="marilaser.svg"
inkscape:export-filename="/home/laochailan/src/taisei/gfx/proj/marilaser.png"
inkscape:export-xdpi="92.25"
inkscape:export-ydpi="92.25">
<defs
id="defs4">
<linearGradient
id="linearGradient3797">
<stop
style="stop-color:#ff6067;stop-opacity:1;"
offset="0"
id="stop3799" />
<stop
id="stop3805"
offset="0.43264624"
style="stop-color:#3f6cf4;stop-opacity:1;" />
<stop
style="stop-color:#ff6067;stop-opacity:1;"
offset="1"
id="stop3801" />
</linearGradient>
<linearGradient
id="linearGradient3776">
<stop
style="stop-color:#ff7171;stop-opacity:1;"
offset="0"
id="stop3778" />
<stop
id="stop3786"
offset="0.5"
style="stop-color:#7e87ff;stop-opacity:1;" />
<stop
style="stop-color:#86f396;stop-opacity:1;"
offset="0.75"
id="stop3790" />
<stop
style="stop-color:#f8ff51;stop-opacity:1;"
offset="1"
id="stop3780" />
</linearGradient>
<linearGradient
id="linearGradient3765">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3767" />
<stop
style="stop-color:#ff0000;stop-opacity:1;"
offset="1"
id="stop3769" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3765"
id="linearGradient3771"
x1="7.9816217"
y1="1021.7631"
x2="8.1289949"
y2="1050.1503"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3765"
id="linearGradient3798"
gradientUnits="userSpaceOnUse"
x1="7.9816217"
y1="1021.7631"
x2="8.1289949"
y2="1065.6782" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3776"
id="linearGradient3801"
gradientUnits="userSpaceOnUse"
x1="727.62115"
y1="716.18787"
x2="757.54218"
y2="746.35284" />
<filter
inkscape:collect="always"
id="filter4668"
x="-0.61853755"
width="2.2370751"
y="-0.02166328"
height="1.0433266"
color-interpolation-filters="sRGB">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.63926099"
id="feGaussianBlur4670" />
</filter>
<filter
inkscape:collect="always"
id="filter4680"
x="-0.1773141"
width="1.3546282"
y="-0.0062101404"
height="1.0124203"
color-interpolation-filters="sRGB">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.18325482"
id="feGaussianBlur4682" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3776"
id="linearGradient4008"
gradientUnits="userSpaceOnUse"
x1="727.62115"
y1="716.18787"
x2="757.54218"
y2="746.35284" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3765"
id="linearGradient4010"
gradientUnits="userSpaceOnUse"
x1="7.9816217"
y1="1021.7631"
x2="8.1289949"
y2="1065.6782" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3776"
id="linearGradient4017"
gradientUnits="userSpaceOnUse"
x1="727.62115"
y1="716.18787"
x2="757.54218"
y2="746.35284" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3776"
id="linearGradient4023"
gradientUnits="userSpaceOnUse"
x1="727.62115"
y1="716.18787"
x2="757.54218"
y2="746.35284" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3765"
id="linearGradient4025"
gradientUnits="userSpaceOnUse"
x1="7.9816217"
y1="1021.7631"
x2="8.1289949"
y2="1065.6782" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3776"
id="linearGradient4037"
gradientUnits="userSpaceOnUse"
x1="727.62115"
y1="716.18787"
x2="757.54218"
y2="746.35284" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3765"
id="linearGradient4039"
gradientUnits="userSpaceOnUse"
x1="7.9816217"
y1="1021.7631"
x2="8.1289949"
y2="1065.6782" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3776"
id="linearGradient4042"
gradientUnits="userSpaceOnUse"
x1="727.62115"
y1="716.18787"
x2="757.54218"
y2="746.35284"
gradientTransform="matrix(0.85470782,0.85470782,-0.85470782,0.85470782,-1.6699256,-241.42496)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3776"
id="linearGradient4044"
gradientUnits="userSpaceOnUse"
x1="727.62115"
y1="716.18787"
x2="757.54218"
y2="746.35284" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3765"
id="linearGradient4046"
gradientUnits="userSpaceOnUse"
x1="7.9816217"
y1="1021.7631"
x2="8.1289949"
y2="1065.6782" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3776"
id="linearGradient4049"
gradientUnits="userSpaceOnUse"
x1="727.62115"
y1="716.18787"
x2="757.54218"
y2="746.35284"
gradientTransform="matrix(0.85470782,0.85470782,-0.85470782,0.85470782,-1.6699256,-311.42496)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#5a5a5a"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="4.384062"
inkscape:cx="-35.45984"
inkscape:cy="47.514747"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1039"
inkscape:window-x="0"
inkscape:window-y="-2"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-2.4028067,-976.44242)">
<g
id="g3761"
transform="translate(-8.6162061e-6,-0.71894668)"
style="stroke:url(#linearGradient3771)" />
<path
id="rect4006"
style="opacity:0.37007877;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter4680)"
d="m 6.7597957,948.75771 2.4804093,0 0,70.82149 -2.4804093,0 z m 0,69.99999 2.4804093,0 0,70.8215 -2.4804093,0 z"
inkscape:connector-curvature="0"
transform="matrix(1,0,0,0.62629422,0,380.86915)" />
<path
id="rect4000"
style="opacity:0.37007877;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter4668)"
d="m 6.7597957,914.08667 2.4804093,0 0,70.82151 -2.4804093,0 z m 0,70 2.4804093,0 0,70.82153 -2.4804093,0 z"
inkscape:connector-curvature="0"
transform="matrix(2.0174202,0,0,0.62629422,-8.1393623,402.58343)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -10,121 +10,80 @@
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="11.29844"
height="70.821518"
width="11.308966"
height="37.608253"
id="svg2"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="marisa.svg"
inkscape:export-filename="/home/laochailan/src/taisei/gfx/proj/marisa.png"
inkscape:export-xdpi="104.20562"
inkscape:export-ydpi="104.20562">
inkscape:export-xdpi="119.96432"
inkscape:export-ydpi="119.96432">
<defs
id="defs4">
<linearGradient
id="linearGradient3776">
id="linearGradient3780">
<stop
style="stop-color:#ff7171;stop-opacity:1;"
style="stop-color:#b1ffbd;stop-opacity:1;"
offset="0"
id="stop3778" />
id="stop3782" />
<stop
id="stop3786"
offset="0.5"
style="stop-color:#7e87ff;stop-opacity:1;" />
<stop
style="stop-color:#86f396;stop-opacity:1;"
offset="0.75"
id="stop3790" />
<stop
style="stop-color:#f8ff51;stop-opacity:1;"
style="stop-color:#76ff8a;stop-opacity:1;"
offset="1"
id="stop3780" />
id="stop3784" />
</linearGradient>
<linearGradient
id="linearGradient3765">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3767" />
<stop
style="stop-color:#ff0000;stop-opacity:1;"
offset="1"
id="stop3769" />
</linearGradient>
<linearGradient
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3765"
id="linearGradient3771"
x1="7.9816217"
y1="1021.7631"
x2="8.1289949"
y2="1050.1503"
xlink:href="#linearGradient3780"
id="radialGradient3786"
cx="8.0484552"
cy="1037.1095"
fx="8.0484552"
fy="1037.1095"
r="5.2515612"
gradientTransform="matrix(1,0,0,2.196842,0,-1245.389)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3765"
id="linearGradient3798"
gradientUnits="userSpaceOnUse"
x1="7.9816217"
y1="1021.7631"
x2="8.1289949"
y2="1065.6782" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3776"
id="linearGradient3801"
gradientUnits="userSpaceOnUse"
x1="727.62115"
y1="716.18787"
x2="757.54218"
y2="746.35284" />
<filter
inkscape:collect="always"
id="filter4668"
x="-0.61853757"
width="2.2370751"
y="-0.02166328"
height="1.0433266">
id="filter3831"
color-interpolation-filters="sRGB">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.63926099"
id="feGaussianBlur4670" />
stdDeviation="0.16788411"
id="feGaussianBlur3833" />
</filter>
<filter
inkscape:collect="always"
id="filter4680"
x="-0.1773141"
width="1.3546282"
y="-0.0062101403"
height="1.0124203">
id="filter3835"
color-interpolation-filters="sRGB">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.18325482"
id="feGaussianBlur4682" />
stdDeviation="0.16788411"
id="feGaussianBlur3837" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#5a5a5a"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="9.5901357"
inkscape:cx="-49.076544"
inkscape:cy="38.193551"
inkscape:zoom="9.0416667"
inkscape:cx="-1.4324543"
inkscape:cy="23.683345"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1039"
inkscape:window-x="0"
inkscape:window-y="-2"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
@ -141,38 +100,22 @@
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-2.3507795,-981.57758)">
<g
id="g3761"
transform="translate(-8.6162061e-6,-0.71894668)"
style="stroke:url(#linearGradient3771)" />
<rect
style="opacity:0.37007874;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter4668)"
id="rect2985"
width="2.4804094"
height="70.821518"
x="6.7597957"
y="981.57758"
ry="0" />
<g
style="opacity:0.99212598;stroke:url(#linearGradient3798);stroke-width:0.50000000000000000;stroke-miterlimit:4;stroke-dasharray:none"
transform="matrix(1.2087394,0,0,1.2087394,-1.6699256,-241.42496)"
id="g3792">
<path
id="path3794"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
style="fill:none;stroke:url(#linearGradient3801);stroke-width:0.50000000000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 729.09119,717.77747 6.25598,0 0,6.25598 -6.25598,0 z m 15.7057,15.7057 6.25598,0 0,6.25598 -6.25598,0 z m -12.87727,-12.87727 6.25598,0 0,6.25598 -6.25598,0 z m 15.7057,15.7057 6.25598,0 0,6.25598 -6.25598,0 z"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccscc" />
</g>
<rect
ry="0"
y="981.57758"
x="6.7597957"
height="70.821518"
width="2.4804094"
id="rect4142"
style="opacity:0.37007874;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter4680)" />
transform="translate(-2.4330747,-1028.3912)">
<path
id="path2987"
style="opacity:0.3503937;fill:url(#radialGradient3786);fill-opacity:1;stroke:none;filter:url(#filter3835)"
d="m 7.2673342,1041.6064 -1.960015,8.0963 0,-8.8981 -2.0878414,5.53 c 0.075899,-1.0493 0.3490324,-7.0871 1.5126195,-10.977 l -1.8961007,2.8203 c 0.1663707,-2.2747 1.6308493,-9.1111 5.2515611,-9.1521 3.6207113,0.041 5.0851903,6.8774 5.2515613,9.1521 l -1.896101,-2.8203 c 1.163587,3.8899 1.436721,9.9277 1.51262,10.977 l -2.087842,-5.53 0,8.8981 -1.9600148,-8.0963 -0.8202235,10.4931 z"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccccc"
transform="matrix(1,0,0,1.574915,0,-591.60242)"
inkscape:export-xdpi="119.96432"
inkscape:export-ydpi="119.96432" />
<path
sodipodi:nodetypes="ccccccccccccccc"
inkscape:connector-curvature="0"
d="m 7.5335973,1034.5132 -1.2303098,3.8498 0,-4.187 -1.3105469,2.3261 c 0.047642,-0.4414 0.2190892,-2.9811 0.9494777,-4.6174 l -1.1901904,1.1864 c 0.1044316,-0.9569 1.023691,-3.8325 3.2964271,-3.8498 2.272736,0.017 3.191995,2.8929 3.296427,3.8498 l -1.190191,-1.1864 c 0.730389,1.6363 0.901836,4.176 0.949478,4.6174 l -1.3105466,-2.3261 0,4.187 -1.2303096,-3.8498 -0.5148578,3.8382 z"
style="opacity:0.3503937;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3831)"
id="path3758"
transform="matrix(1,0,0,1.574915,0,-591.60242)" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -12,10 +12,6 @@ find_package(FLEX REQUIRED)
find_package(Freetype)
find_package(ZLIB)
if(WIN32)
add_definitions(-lwinmm -ldxguid -limm32 -lversion)
endif()
BISON_TARGET(cfgparser config.y ${CMAKE_CURRENT_SOURCE_DIR}/parser.c)
FLEX_TARGET(cfgscanner config.l ${CMAKE_CURRENT_SOURCE_DIR}/lexer.c)
ADD_FLEX_BISON_DEPENDENCY(cfgscanner cfgparser)
@ -74,6 +70,10 @@ endif()
if(ZLIB_FOUND)
set(LIBs ${LIBs} ${ZLIB_LIBRARY})
endif()
if(WIN32)
set(LIBs ${LIBs} -ldxguid -limm32 -lversion)
endif()
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${SDL_INCLUDE_DIR} ${ALUT_INCLUDE_DIR} ${GLEW_INCLUDE_PATH})
add_executable(taisei WIN32 ${SRCs})

View file

@ -26,6 +26,8 @@ enum {
KEY_SHOT,
KEY_BOMB,
FULLSCREEN,
NO_SHADER,
NO_AUDIO
};

View file

@ -28,6 +28,8 @@
"key_shot" { yylval = KEY_SHOT; return tKEY_SHOT; }
"key_bomb" { yylval = KEY_BOMB; return tKEY_BOMB; }
"fullscreen" { yylval = FULLSCREEN; return tFULLSCREEN; }
"disable_shader" { yylval = NO_SHADER; return tNO_SHADER; }
"disable_audio" {yylval = NO_AUDIO; return tNO_AUDIO; }

View file

@ -37,6 +37,8 @@
%token tKEY_SHOT
%token tKEY_BOMB
%token tFULLSCREEN
%token tNO_SHADER
%token tNO_AUDIO
@ -74,7 +76,8 @@ key_key : tKEY_UP
| tKEY_SHOT
| tKEY_BOMB
| tNO_SHADER
| tNO_AUDIO;
| tNO_AUDIO
| tFULLSCREEN;
nl : LB { lineno++; };
%%
@ -116,6 +119,8 @@ void config_preset() {
tconfig.intval[KEY_SHOT] = SDLK_z;
tconfig.intval[KEY_BOMB] = SDLK_x;
tconfig.intval[FULLSCREEN] = 0;
tconfig.intval[NO_SHADER] = 0;
tconfig.intval[NO_AUDIO] = 0;
}

View file

@ -39,7 +39,7 @@ void create_enemy_p(Enemy **enemies, complex pos, int hp, EnemyDrawRule draw_rul
void _delete_enemy(void **enemies, void* enemy) {
Enemy *e = (Enemy *)enemy;
if(e->hp <= 0) {
if(e->hp <= 0 && e->hp != ENEMY_IMMUNE) {
int i;
for(i = 0; i < 10; i++)
create_particle2c("flare", e->pos, NULL, Fade, timeout_linear, 10, (3+frand()*10)*cexp(I*frand()*2*M_PI));

View file

@ -43,8 +43,9 @@ enum {
POINT_OF_COLLECT = VIEWPORT_H/4,
ATTACK_START_DELAY = 40,
DEATHBOMB_TIME = 10,
PLR_MAXPOWER = 4,
SNDSRC_COUNT = 30,
SNDSRC_COUNT = 35,
ACTION_DESTROY,

View file

@ -32,7 +32,7 @@ void draw_items() {
for(p = global.items; p; p = p->next) {
switch(p->type){
case Power:
if(global.plr.power < 6) {
if(global.plr.power <= PLR_MAXPOWER) {
tex = get_tex("items/power");
break;
}
@ -90,7 +90,7 @@ void process_items() {
if(v == 1) {
switch(item->type) {
case Power:
global.plr.power += 0.1;
plr_set_power(&global.plr, global.plr.power + 0.05);
break;
case Point:
global.points += 100;

View file

@ -61,7 +61,12 @@ int main(int argc, char** argv) {
printf("-- SDL_Init\n");
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
if((display = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 32, SDL_OPENGL)) == NULL)
int flags = SDL_OPENGL;
if(tconfig.intval[FULLSCREEN])
flags |= SDL_FULLSCREEN;
if((display = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 32, flags)) == NULL)
errx(-1, "Error opening screen: %s", SDL_GetError());
printf("-- SDL viewport\n");

View file

@ -100,6 +100,25 @@ void player_logic(Player* plr) {
plr_realdeath(plr);
}
void plr_set_power(Player *plr, float npow) {
switch(plr->cha) {
case Youmu:
youmu_power(plr, npow);
break;
case Marisa:
marisa_power(plr, npow);
break;
}
plr->power = npow;
if(plr->power > PLR_MAXPOWER)
plr->power = PLR_MAXPOWER;
if(plr->power < 0)
plr->power = 0;
}
void plr_bomb(Player *plr) {
if(global.frames - plr->recovery >= 0 && plr->bombs > 0) {
Enemy *e;
@ -138,13 +157,10 @@ void plr_realdeath(Player *plr) {
if(global.plr.bombs < 3)
global.plr.bombs = 3;
}
if(plr->slaves)
delete_enemies(&plr->slaves);
}
void plr_death(Player *plr) {
if(plr->deathtime == -1) {
if(plr->deathtime == -1 && global.frames - abs(plr->recovery) > 0) {
int i;
for(i = 0; i < 20; i++)
create_particle2c("flare", plr->pos, NULL, Shrink, timeout_linear, 40, (3+frand()*7)*cexp(I*rand()));

View file

@ -27,7 +27,7 @@ typedef enum {
YoumuOpposite,
YoumuHoming,
MarisaFoo = YoumuOpposite,
MarisaLaser = YoumuOpposite,
MarisaBar = YoumuHoming
} ShotMode;
@ -43,7 +43,7 @@ typedef struct {
int lifes;
int bombs;
float recovery;
int recovery;
int deathtime;
@ -59,6 +59,8 @@ void init_player(Player*, Character cha, ShotMode shot);
void player_draw(Player*);
void player_logic(Player*);
void plr_set_power(Player *plr, float npow);
void plr_bomb(Player*);
void plr_realdeath(Player*);
void plr_death(Player*);

View file

@ -41,11 +41,11 @@ void youmu_shot(Player *plr) {
}
if(plr->shot == YoumuOpposite && plr->slaves == NULL)
create_enemy_p(&plr->slaves, plr->pos, ENEMY_IMMUNE, youmu_opposite_draw, youmu_opposite_logic, add_ref(plr), 0, 0, 0);
create_enemy_p(&plr->slaves, plr->pos, ENEMY_IMMUNE, youmu_opposite_draw, youmu_opposite_logic, 0, 0, 0, 0);
}
void youmu_opposite_draw(Enemy *e, int t) {
complex pos = e->pos + ((Player *)REF(e->args[0]))->pos;
complex pos = e->pos + global.plr.pos;
create_particle2c("flare", pos, NULL, Shrink, timeout, 10, -e->pos+10I);
}
@ -56,7 +56,7 @@ void youmu_opposite_logic(Enemy *e, int t) {
if(t < 0)
return;
Player *plr = (Player *)REF(e->args[0]);
Player *plr = &global.plr;
if(plr->focus < 15) {
e->args[2] = carg(plr->pos - e->pos0);
@ -91,34 +91,95 @@ int youmu_homing(Projectile *p, int t) { // a[0]: velocity, a[1]: target, a[2]:
return 1;
}
void youmu_power(Player *plr, float npow) {
}
/* Marisa */
void MariLaser(Projectile *p, int t) {
Player *plr = (Player *)REF(p->args[1]);
if(cimag(p->pos) - cimag(plr->pos) < 90) {
glScissor(VIEWPORT_X, SCREEN_H - cimag(plr->pos)+5, VIEWPORT_W+VIEWPORT_X, VIEWPORT_H);
if(REF(p->args[1]) == NULL)
return;
if(cimag(p->pos) - cimag(global.plr.pos) < 90) {
glScissor(VIEWPORT_X, SCREEN_H - VIEWPORT_Y- cimag(((Enemy *)REF(p->args[1]))->pos)+1, VIEWPORT_W+VIEWPORT_X, VIEWPORT_H);
glEnable(GL_SCISSOR_TEST);
}
ProjDraw(p, t);
glDisable(GL_SCISSOR_TEST);
}
int mari_laser(Projectile *p, int t) {
if(t == EVENT_DEATH) {
free_ref(p->args[1]);
return 1;
}
if(REF(p->args[1]) == NULL)
return ACTION_DESTROY;
linear(p, t);
Player *plr = (Player *)REF(p->args[1]);
p->pos = plr->pos + p->pos - creal(p->pos0)*abs(plr->focus)/30.0;
p->pos = ((Enemy *)REF(p->args[1]))->pos + p->pos;
return 1;
}
void marisa_laser_slave(Enemy *e, int t) {
if(global.plr.fire) {
if(!(global.frames % 4))
create_projectile_p(&global.projs, get_tex("proj/marilaser"), 0, NULL, MariLaser, mari_laser, -20I, add_ref(e),0,0)->type = PlrProj;
if(!(global.frames%3)) {
float s = 0.5 + 0.3*sin(global.frames/7.0);
create_particle2c("marilaser_part0", 0, rgb(1-s,0.5,s), PartDraw, mari_laser, -15I, add_ref(e))->type = PlrProj;
}
create_particle1c("lasercurve", e->pos, NULL, Fade, timeout, 4)->type = PlrProj;
}
e->pos = global.plr.pos + (1 - abs(global.plr.focus)/30.0)*e->pos0 + (abs(global.plr.focus)/30.0)*e->args[0];
}
void MariLaserSlave(Enemy *e, int t) {
glPushMatrix();
glTranslatef(creal(e->pos), cimag(e->pos), -1);
glRotatef(global.frames * 3, 0, 0, 1);
draw_texture(0,0,"part/lasercurve");
glPopMatrix();
}
void marisa_shot(Player *plr) {
if(plr->fire) {
if(!(global.frames % 4)) {
create_projectile_p(&global.projs, get_tex("proj/marisa"), +15, NULL, MariLaser, mari_laser, -20I, add_ref(plr),0,0)->type = PlrProj;
create_projectile_p(&global.projs, get_tex("proj/marisa"), -15, NULL, MariLaser, mari_laser, -20I, add_ref(plr),0,0)->type = PlrProj;
if(!(global.frames % 6)) {
create_projectile1c("marisa", plr->pos + 10 - 15I, NULL, linear, -20I)->type = PlrProj;
create_projectile1c("marisa", plr->pos - 10 - 15I, NULL, linear, -20I)->type = PlrProj;
}
}
if(plr->shot == MarisaLaser && plr->slaves == NULL)
create_enemy_p(&plr->slaves, -40I, ENEMY_IMMUNE, MariLaserSlave, marisa_laser_slave, -40I,0,0,0);
}
void marisa_power(Player *plr, float npow) {
delete_enemies(&plr->slaves);
if(npow < 1) {
create_enemy_p(&plr->slaves, -40I, ENEMY_IMMUNE, MariLaserSlave, marisa_laser_slave, -40I,0,0,0);
return;
}
if(npow >= 1) {
create_enemy_p(&plr->slaves, 25-5I, ENEMY_IMMUNE, MariLaserSlave, marisa_laser_slave, 8-40I,0,0,0);
create_enemy_p(&plr->slaves, -25-5I, ENEMY_IMMUNE, MariLaserSlave, marisa_laser_slave, -8-40I,0,0,0);
}
if(npow >= 3) {
create_enemy_p(&plr->slaves, 17-30I, ENEMY_IMMUNE, MariLaserSlave, marisa_laser_slave, 4-45I,0,0,0);
create_enemy_p(&plr->slaves, -17-30I, ENEMY_IMMUNE, MariLaserSlave, marisa_laser_slave, -4-45I,0,0,0);
} else if(npow >= 2) {
create_enemy_p(&plr->slaves, -30I, ENEMY_IMMUNE, MariLaserSlave, marisa_laser_slave, -50I,0,0,0);
}
}

View file

@ -21,8 +21,11 @@ void youmu_opposite_logic(Enemy *e, int t);
int youmu_homing(Projectile *p, int t);
void youmu_power(Player *plr, float npow);
/* Marisa */
void marisa_shot(Player *plr);
void marisa_power(Player *plr, float npow);
#endif

View file

@ -44,7 +44,7 @@ Projectile *create_projectile_p(Projectile **dest, Texture *tex, complex pos, Co
p->birthtime = global.frames;
p->pos = pos;
p->pos0 = pos;
p->angle = 0;
p->angle = M_PI/2;
p->rule = rule;
p->draw = draw;
p->tex = tex;
@ -211,6 +211,19 @@ void ProjDraw(Projectile *proj, int t) {
glPopMatrix();
}
void PartDraw(Projectile *proj, int t) {
glPushMatrix();
glTranslatef(creal(proj->pos), cimag(proj->pos), 0);
glRotatef(proj->angle*180/M_PI+90, 0, 0, 1);
if(proj->clr)
glColor4fv((float *)proj->clr);
draw_texture_p(0,0, proj->tex);
glPopMatrix();
glColor3f(1,1,1);
}
void Blast(Projectile *p, int t) {
if(t == 1) {
p->args[1] = frand()*360 + frand()*I;

View file

@ -74,6 +74,7 @@ int linear(Projectile *p, int t);
int accelerated(Projectile *p, int t);
int asymptotic(Projectile *p, int t);
void ProjDraw(Projectile *p, int t);
void PartDraw(Projectile *p, int t);
void Blast(Projectile *p, int t);

View file

@ -68,7 +68,7 @@ void play_sound_p(Sound *snd) {
alSourcei(global.sndsrc[res],AL_BUFFER, snd->alsnd);
alSourcePlay(global.sndsrc[res]);
} else {
fprintf(stderr,"play_sound_p():\n!- not enough sources");
warnx("play_sound_p():\n!- not enough sources");
}
}

View file

@ -266,10 +266,10 @@ void stage0_events() {
create_enemy2c(VIEWPORT_W*(_i&1) + frand()*100I + 70I, 2, Swirl, stage0_enemy2, 3.5*(1-2*(_i&1)), frand()*7I);
FROM_TO(1100, 1600, 20)
create_enemy2c(VIEWPORT_W/3, 3, Swirl, stage0_enemy3, 4I, 0.06);
create_enemy2c(VIEWPORT_W/3, 1, Swirl, stage0_enemy3, 4I, 0.06);
FROM_TO(1500, 2000, 20)
create_enemy2c(VIEWPORT_W+200I, 3, Swirl, stage0_enemy3, -2, -0.04-0.03I);
create_enemy2c(VIEWPORT_W+200I, 2, Swirl, stage0_enemy3, -2, -0.04-0.03I);
FROM_TO(1250, 1800, 60)
create_enemy1c(VIEWPORT_W/2 + frand()*500-250 , 8, Fairy, stage0_enemy0, frand()*2-1);