From 561a7faf4b34c4e42e10c21eb0f04aec4a85e7bc Mon Sep 17 00:00:00 2001 From: laochailan Date: Tue, 28 Jun 2011 19:23:02 +0200 Subject: [PATCH] fancyness and content i am content with the current development of content. --- CMakeLists.txt | 5 +- gfx/fairy_circle.png | Bin 3472 -> 9818 bytes gfx/fairy_circle.svg | 483 +++++++++++++++++++++++------------------ gfx/items/bomb.png | Bin 1311 -> 821 bytes gfx/items/bomb.svg | 4 +- gfx/items/life.png | Bin 1242 -> 777 bytes gfx/items/life.svg | 4 +- gfx/part/blast.png | Bin 0 -> 7877 bytes gfx/part/blast.svg | 109 ++++++++++ gfx/proj/crystal.png | Bin 0 -> 548 bytes gfx/proj/crystal.svg | 137 ++++++++++++ gfx/proj/flea.png | Bin 0 -> 398 bytes gfx/proj/flea.svg | 130 +++++++++++ gfx/proj/marisa.png | Bin 1599 -> 1677 bytes gfx/proj/marisa.svg | 64 ++++-- gfx/proj/thickrice.png | Bin 0 -> 412 bytes gfx/proj/thickrice.svg | 101 +++++++++ src/CMakeLists.txt | 33 ++- src/enemy.c | 22 +- src/global.c | 4 + src/global.h | 2 + src/item.c | 28 ++- src/main.c | 13 +- src/menu/charselect.c | 18 ++ src/menu/ingamemenu.c | 2 +- src/player.c | 17 +- src/plrmodes.c | 15 +- src/projectile.c | 48 +++- src/projectile.h | 4 + src/stage.c | 4 +- src/stage.h | 16 +- src/stages/stage0.c | 95 ++++++-- 32 files changed, 1074 insertions(+), 284 deletions(-) create mode 100644 gfx/part/blast.png create mode 100644 gfx/part/blast.svg create mode 100644 gfx/proj/crystal.png create mode 100644 gfx/proj/crystal.svg create mode 100644 gfx/proj/flea.png create mode 100644 gfx/proj/flea.svg create mode 100644 gfx/proj/thickrice.png create mode 100644 gfx/proj/thickrice.svg diff --git a/CMakeLists.txt b/CMakeLists.txt index c1391b59..8deb5cad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,10 @@ else() set(DATA_DIR "share/taisei") endif() -install(DIRECTORY gfx DESTINATION ${DATA_DIR}) +install(DIRECTORY gfx DESTINATION ${DATA_DIR} + FILES_MATCHING PATTERN "*.png") +install(DIRECTORY gfx DESTINATION ${DATA_DIR} + FILES_MATCHING PATTERN "*.ttf") install(DIRECTORY sfx DESTINATION ${DATA_DIR}) install(DIRECTORY shader DESTINATION ${DATA_DIR}) diff --git a/gfx/fairy_circle.png b/gfx/fairy_circle.png index a9c3401abdb989b14f9a8db516190d0d1eb84286..93c284797d003c6778f5ff252a3b1661b4ebbdcc 100644 GIT binary patch literal 9818 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 U>~b^YJ}`jtYYl}eIn&Vp0r1+k$N&HU delta 3445 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 + inkscape:export-xdpi="15.638364" + inkscape:export-ydpi="15.638364"> + + + + @@ -33,199 +44,10 @@ offset="1" id="stop3838" /> - - - - - - - - - - - - - - - - - - - - - - - - - - + id="filter3807" + color-interpolation-filters="sRGB"> + id="filter3811" + color-interpolation-filters="sRGB"> + id="filter3815" + color-interpolation-filters="sRGB"> + r="182.26353" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + inkscape:window-y="-2" + inkscape:window-maximized="1" + inkscape:snap-global="false" /> @@ -308,21 +312,33 @@ inkscape:label="Ebene 1" inkscape:groupmode="layer" id="layer1" - transform="translate(-23.288305,-119.5411)"> + transform="translate(-16.352778,-112.60557)"> + + id="g3992" + style="filter:url(#filter4118)"> + + + + + + diff --git a/gfx/items/bomb.png b/gfx/items/bomb.png index 28b1e94f14587a540f493a080f3a7b6e8971ea20..ddcc5e937f0a3977162e268a243bdf9c78a3bf9a 100644 GIT binary patch delta 773 zcmV+g1N!`*3bh6yiBL{Q4GJ0x0000DNk~Le0000K0000K2nGNE0F8+q4Ur)m3NZix z0WkqYtE8QgMkjv)vPnciR5*>Tl}kueVHC%IS4VAp%#dZ0mZmPOaV#I1hG}gIX=w$b zXc0X~aiK-vMg$kOD8|Nr~W`M!J4m1r>@MsPJm7rfgXZbFhI))GPpMrVIMF)uF+BXJ3ujYAc0s>JM~ zP5f`nF4{!Jn<_!GaYzbj+bVvPe8IM8qsh{SUAC{OLcLB;S?XB~K?b7Q6VaK&O&9{h zsC#>jD}D8Xv91P~t{$N7V202r`ZR^M_{*Da1`@m&AoW|ePFhL5xR--Txui`eq>&nz!o;udbPx9MYNVGryY}U%UOcl= z8((v?G`(oX?p)*e3e;0}^a6%3BT?;%tp9*r?_a=QP#?>sTH?KciBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^pPPO3g`d; z0q6lCV3#bBMkjv+oJmAMR9J<@mw!xEWf;dl_uO;gg5Uup5O5hOf-}n1I&-1>ogf2oyf@ zCL5=(!ykY1ovIId0r>aa-Q}UAE_m<Dr$2oR4?ZwsE z5fp%eLP=dI#aU~SLWc%oivM=<`n)JU+3<5@NCX>au4m5JTx^2PG{8n>9sAE6WKrc( zF1jxT0U_h{c{N)hn0RS4QjFl}8wYqLJwIr008xJs$w`^P$--ZGY19jbc><~vEdUje zRgJ!yUciKSV_CYr9;z?baI&=?PuH!0J<2YzefBpb4M{M}g{=0*2nxW2ffrMzYcZ-S zi}o!g>XSsC{5qRSjtr!t1ZHh5zA1vAuNwfHAR=Nl`st)k z1{6ihTWol&>B_8vl{M2=5*-!=zz@y}d_BIquHFbh#eh=JK<2|4WF=3f>ijVjRbhmb zMAqm`mS-6@sV*Fu$xb8;p6>l z@Z9#8E!ZGN0J==oGvJpnTNq)sFpX_fbty~Am(khN*{|SWmV~;xRpkDk32#3&k2A|p zk{&nKya&j}EipDCUEKy_AefAdd64aIl@cn1n)iV|8aA?6*~x#A zvqv>!;}gfRB^s;n}jD2Hvwb{Jd}qZ1erlN1Pk&3%83RlC-Z zTRew5op%O)AF$i(2#UpUDeacKcpaJeCf<>V4xp_$8 z68@L~<`0uQZoJ)t{4fcz2ZB3;_F+<0?{a3AU)aO!APS dmizrY{~NLq(` + inkscape:export-xdpi="7.75" + inkscape:export-ydpi="7.75"> Tl}$)gQ5462cjk@Gj9)3^luCtY5h6zDLI^A(7ePko zHfR+@vq@+Zv=v=MizqFkz>PvtL=YiZAz`gDjIpp#+GJ{_z42q-efK?YidsEIEJg1^N;_^p6g=k7(Oedb?qp zN)NY>=pOn<#httd`s~zcM8eO)O$VLannDqRf|!9Wbm=XBj8RfsM4-^%d*?E9UDnoU z>2L^A+8L&#wg@9rGi50(vOr&05N^z2@rB$Js4RaR*4p@tLvXa;dm?j`g|IIineGTyu0r1Au< zjlqtWL>nSR>mvk00UBfV*a^j4++=mZO4A|U_JWnBon5g1`xo#Vo=3R$3Z*K{00000 LNkvXXu0mjfDK6bQ$5o3xa}SMlQ@43C3n22A8=)m@eoTFc`#DyN#_q zJ#YJZaiGWkbdC+4lP2wRp1$Aj`8>~g+ar!~%oRiK0rr1`2y;(DMS#zP=*M+iTpR@m zw)@$-ua!_oU{z#iM*rqQ@9)H-@h}jMA$vqGM}7nm-gSHjE!|D4BAg$W`lmR#X9!Rc z9Yi?T?#~g=%z{d)6%`eRK=aw}Te_PFw)=@i<6#|O>%P`(;mn&RbB8R*tf)R{P`%ep zsL#tC&B%XS!{|V^=b2eW?9k%MivwgJcF3aULl2ryWHt4inxsNztW{8VOk|P@%_p)c zJ-^1HxB<-&)E%f|_C$ij$jX__F`!ULQUyi+m)5ZUlOWy}9l2mJKeDiFK}GIxmnC3q zbhF{JIsz|LI=K#aNlMF!0s?myuXxzYwxMR+AyQY& zA<=(=f~N*LsOhTC);#w0Hg-?$#KJn()+EsXQOCq2$j_Xt+#lm#LCJ^#M6?oRU zoeR(;2&j6f(x#&cq)cPf8Ym;Pw4E?N=C9r&u*sJ-FflO6)8^y2ye{^f+0B}Irv-mz zG6_IaR|78&K8q3bQr8(`nklbjX!T;VR7=EAGr4OG;ObM zVPfzyq0KckKhuQr+6Jc1Omn2GpR|9OCSRkZ0iftMd-jWA%*7-|z{{^E#z~U~1*3=0 zF?#qM0PadRRgG)W4f_WyZAnbC5c#qQ01SWmOWB321&hUti#+hCy&q^Et@uEfBcK~P zX-(!#{r?WH${NTYXrT#oBNw^`_7e+$;q%hDw+*SuqQkh9V|x4sKOG$A#Cvt$=j5d( z>D=3f;j{mi-_aDke5HczeqJ4YKIB#UI7`_$N&xuR@Q^cZiKt)6^M_#)R52v>?sz==K$Mb&x^;Rb~&0YH~00000 LNkvXXu0mjfo|rxg diff --git a/gfx/items/life.svg b/gfx/items/life.svg index c50e3332..108da3ac 100644 --- a/gfx/items/life.svg +++ b/gfx/items/life.svg @@ -17,8 +17,8 @@ inkscape:version="0.48.1 r9760" sodipodi:docname="life.svg" inkscape:export-filename="/home/laochailan/src/taisei/gfx/items/life.png" - inkscape:export-xdpi="12.392977" - inkscape:export-ydpi="12.392977"> + inkscape:export-xdpi="7.7456102" + inkscape:export-ydpi="7.7456102"> ApigX8FWQhbW?9;ba!ELWdL_~cP?peYja~^ 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

uIXfcj92c(m=VpT^gy1fIZxgsa3A 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 literal 0 HcmV?d00001 diff --git a/gfx/part/blast.svg b/gfx/part/blast.svg new file mode 100644 index 00000000..24d667d9 --- /dev/null +++ b/gfx/part/blast.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/gfx/proj/crystal.png b/gfx/proj/crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..5f544a82cd06d46d2ec7b66ee7fdf8df4a379717 GIT binary patch literal 548 zcmV+<0^9wGP)Tw@-pipFP-b}I#*H%U%RG1Xwv}g?hKNecP@IGh(u8HjcfiKwfWP>!bbzfc42D0 zESYx>5KSyF=bArqHnlA5r{TjmjBi1xm$c$ELdDSw%(>?Fu+8@jR7awJzKwvFg&QH{ zwn~~cjlRaR&CUbZJO--g8(AP4EI$Iv1IsHZP7+Y>hagE;_Dop62Zsg<-++U3H*}F& z7Jl7A5hUTLHy->w0DC5iP=|IR9&GkPkV3^1olzuCAsNOK=@u9#D2z7TY{i4a2QcKL zFasE9#)J2F;LbjZR0x?vFxuVFkPnYHp+7*emVC?C2Gr`X1T3CIn!xifFzEr5b;)lO zH71}@w>j&Hq{wYYQoQ&KmRA-kjt(ICjiTmHLeF2D+kNo#)1_uq9DojsS$X2}{+Upn m6 + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/gfx/proj/flea.png b/gfx/proj/flea.png new file mode 100644 index 0000000000000000000000000000000000000000..0cffb9d9bd0ace11a9f3c5d91a097d69a176cfde GIT binary patch literal 398 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&kmSQK*5Dp-y;YjHK@;M7UB8!3Q zuY)k7lg8`{prB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&3=E9io-U3d z8WUS5?e}&{6lt6Pes@@QivWw_l)HvqQ8^i%Y|%`tg@uz=)Gu7RajoqkTMaL%5(BAs z6Lej-&T?Vp`zsOU{W$l>F3~CXnA^Y0RK!`#Deh4@WYEU5f#nQ?`~k}Xjlkb+a~ul; zB$w11?~hgvm7kQ&y5f?kTT*Fs$mO%^Gecf*Dov-bw=Jk=>XWXQg z>CgSuTgY88vF&K`@{N6454ig8_%AEw7gIaGVuQm{?K{`o_R1WIkGbzNjWIIdL%Q+C zZ5AhXyyXx)v%T(qB8$j_QkO@5Yu + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/gfx/proj/marisa.png b/gfx/proj/marisa.png index 357c2de2be89340118e5878b32f8b35c99e36471..f450770486b2d011ad50a89a81e5ffc52430a603 100644 GIT binary patch delta 1616 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 diff --git a/gfx/proj/marisa.svg b/gfx/proj/marisa.svg index 800a597e..ecb8b257 100644 --- a/gfx/proj/marisa.svg +++ b/gfx/proj/marisa.svg @@ -17,8 +17,8 @@ inkscape:version="0.48.1 r9760" sodipodi:docname="marisa.svg" inkscape:export-filename="/home/laochailan/src/taisei/gfx/proj/marisa.png" - inkscape:export-xdpi="101.66402" - inkscape:export-ydpi="101.66402"> + inkscape:export-xdpi="104.20562" + inkscape:export-ydpi="104.20562"> + + + + + + - - - + + + + diff --git a/gfx/proj/thickrice.png b/gfx/proj/thickrice.png new file mode 100644 index 0000000000000000000000000000000000000000..93fcbcf3897ad22426f843730d6979411cbee5c7 GIT binary patch literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^AT}Qd8;}%R+`Ae`u@pObhHwBu4M$1`kk47*5m^jW ze;tGwoit`w00kvWTq8-%-@JI&&b;Uw7nyh6?sM6$>vB@X%XG%nhY6pT zHS=yZa#`8t`64ay>HUSf!zwxMt~qJ>@bBzzbE^C*)Qs$$%TFFqspH(hKVR`T!$A)h&Cw5UpJ_?^zt!7X= + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2431d7df..935e49f6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -7,8 +7,14 @@ find_package(ALUT REQUIRED) find_package(PNG REQUIRED) find_package(SDL_ttf REQUIRED) find_package(GLEW REQUIRED) -find_package(BISON) -find_package(FLEX) +find_package(BISON REQUIRED) +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) @@ -51,12 +57,27 @@ endif() add_definitions(-DPREFIX="${CMAKE_INSTALL_PREFIX}") -include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +set(LIBs ${LIBs} + ${SDL_LIBRARY} + ${PNG_LIBRARY} + ${SDLTTF_LIBRARY} + ${OPENAL_LIBRARY} + ${ALUT_LIBRARY} + ${GLEW_LIBRARY} + ${OPENGL_LIBRARY}) + -include_directories(${SDL_INCLUDE_DIR} ${ALUT_INCLUDE_DIR} ${GLEW_INCLUDE_PATH}) +if(FREETYPE_FOUND) + set(LIBs ${LIBs} ${FREETYPE_LIBRARY}) +endif() + +if(ZLIB_FOUND) + set(LIBs ${LIBs} ${ZLIB_LIBRARY}) +endif() + +include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${SDL_INCLUDE_DIR} ${ALUT_INCLUDE_DIR} ${GLEW_INCLUDE_PATH}) add_executable(taisei WIN32 ${SRCs}) -target_link_libraries(taisei ${SDL_LIBRARY} ${PNG_LIBRARY} ${SDLTTF_LIBRARY} - ${OPENAL_LIBRARY} ${ALUT_LIBRARY} ${GLEW_LIBRARY} ${OPENGL_LIBRARY}) +target_link_libraries(taisei ${LIBs}) if(RELATIVE) install(TARGETS taisei RUNTIME DESTINATION .) diff --git a/src/enemy.c b/src/enemy.c index 114370b4..a0e0ae8b 100644 --- a/src/enemy.c +++ b/src/enemy.c @@ -37,8 +37,17 @@ void create_enemy_p(Enemy **enemies, complex pos, int hp, EnemyDrawRule draw_rul } void _delete_enemy(void **enemies, void* enemy) { - if(((Enemy* )enemy)->hp <= 0) - ((Enemy* )enemy)->logic_rule(enemy, EVENT_DEATH); + Enemy *e = (Enemy *)enemy; + + if(e->hp <= 0) { + 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)); + create_particle1c("blast", e->pos, NULL, Blast, timeout, 20); + create_particle1c("blast", e->pos, NULL, Blast, timeout, 20); + create_particle2c("blast", e->pos, NULL, GrowFade, timeout, 15,0); + e->logic_rule(enemy, EVENT_DEATH); + } del_ref(enemy); delete_element((void **)enemies, enemy); @@ -69,7 +78,7 @@ void Fairy(Enemy *e, int t) { glPushMatrix(); glRotatef(global.frames*10,0,0,1); glScalef(s, s, s); - glColor3f(0.2,0.7,1); +// glColor4f(1,1,1,0.7); draw_texture(0,0,"fairy_circle"); glPopMatrix(); @@ -103,7 +112,10 @@ void process_enemies(Enemy **enemies) { while(enemy != NULL) { enemy->logic_rule(enemy, global.frames - enemy->birthtime); - + + if(enemy->hp != ENEMY_IMMUNE && cabs(enemy->pos - global.plr.pos) < 25) + plr_death(&global.plr); + if(enemy->hp != ENEMY_IMMUNE && (creal(enemy->pos) < -20 || creal(enemy->pos) > VIEWPORT_W + 20 || cimag(enemy->pos) < -20 || cimag(enemy->pos) > VIEWPORT_H + 20 @@ -113,6 +125,6 @@ void process_enemies(Enemy **enemies) { delete_enemy(enemies, del); } else { enemy = enemy->next; - } + } } } \ No newline at end of file diff --git a/src/global.c b/src/global.c index 3ac710b8..de0be6f0 100644 --- a/src/global.c +++ b/src/global.c @@ -56,4 +56,8 @@ void set_ortho() { glOrtho(0, SCREEN_W, SCREEN_H, 0, -100, 100); glMatrixMode(GL_MODELVIEW); glDisable(GL_DEPTH_TEST); +} + +inline double frand() { + return rand()/(double)RAND_MAX; } \ No newline at end of file diff --git a/src/global.h b/src/global.h index d38dba80..a56708fb 100644 --- a/src/global.h +++ b/src/global.h @@ -121,4 +121,6 @@ void frame_rate(); void calc_fps(FPSCounter *fps); void set_ortho(); +double frand(); + #endif \ No newline at end of file diff --git a/src/item.c b/src/item.c index 2b769640..58838559 100644 --- a/src/item.c +++ b/src/item.c @@ -74,8 +74,13 @@ void move_item(Item *i) { void process_items() { Item *item = global.items, *del = NULL; int v; + + float r = 30; + if(global.plr.focus > 0); + r *= 2; + while(item != NULL) { - if(cimag(global.plr.pos) < POINT_OF_COLLECT || cabs(global.plr.pos - item->pos) < 19 + global.plr.focus + if(cimag(global.plr.pos) < POINT_OF_COLLECT || cabs(global.plr.pos - item->pos) < r || global.frames - global.plr.recovery < 0) item->auto_collect = 1; @@ -115,12 +120,27 @@ void process_items() { } int collision_item(Item *i) { - if(cabs(global.plr.pos - i->pos) < 5) + if(cabs(global.plr.pos - i->pos) < 10) return 1; return 0; } -void spawn_item(complex pos, Type type) { - create_item(pos, 5*cexp(I*rand()/(float)RAND_MAX*M_PI*2), type); +inline void spawn_item(complex pos, Type type) { + create_item(pos, 5*cexp(I*rand()/frand()*M_PI*2), type); +} + +void spawn_items(complex pos, int point, int power, int bomb, int life) { + int i; + for(i = 0; i < point; i++) + spawn_item(pos, Point); + + for(i = 0; i < power; i++) + spawn_item(pos, Power); + + for(i = 0; i < bomb; i++) + spawn_item(pos, Bomb); + + for(i = 0; i < life; i++) + spawn_item(pos, Life); } \ No newline at end of file diff --git a/src/main.c b/src/main.c index b4dc752f..f44c48a7 100644 --- a/src/main.c +++ b/src/main.c @@ -28,7 +28,7 @@ void init_gl() { glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glViewport(0, 0, SCREEN_W, SCREEN_H); - + glClearDepth(1.0); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); @@ -39,10 +39,15 @@ void init_gl() { void shutdown() { delete_textures(); delete_animations(); - delete_sounds(); - delete_shaders(); - alutExit(); + if(!tconfig.intval[NO_SHADER]) + delete_shaders(); + + if(!tconfig.intval[NO_AUDIO]) { + delete_sounds(); + alutExit(); + } + SDL_FreeSurface(display); SDL_Quit(); } diff --git a/src/menu/charselect.c b/src/menu/charselect.c index 72e4aa8d..5bc3a09f 100644 --- a/src/menu/charselect.c +++ b/src/menu/charselect.c @@ -90,6 +90,24 @@ void draw_char_menu(MenuData *menu, MenuData *mod) { glPopMatrix(); } + glColor4f(1,1,1,0.3*sin(menu->frames/20.0)+0.5); + + for(i = 0; i <= 1; i++) { + glPushMatrix(); + + glTranslatef(60 + (SCREEN_W/2 - 30)*i, SCREEN_H/2+80, 0); + glScalef(1-2*i,1,1); + if(i) glCullFace(GL_FRONT); + glBegin(GL_TRIANGLES); + glVertex3f(0,0,0); + glVertex3f(20,30,0); + glVertex3f(20,-30,0); + glEnd(); + + glPopMatrix(); + } + + glCullFace(GL_BACK); glColor4f(1,1,1,1); fade_out(menu->fade); diff --git a/src/menu/ingamemenu.c b/src/menu/ingamemenu.c index 0a25e844..01a4cece 100644 --- a/src/menu/ingamemenu.c +++ b/src/menu/ingamemenu.c @@ -68,7 +68,7 @@ void draw_ingame_menu(MenuData *menu) { glPopMatrix(); // cirno's perfect math class #2: Euler Sign ~ Differential Fun - menu->drawdata[0] += (menu->cursor*35 - menu->drawdata[0])/10.0; + menu->drawdata[0] += (menu->cursor*35 - menu->drawdata[0])/7.0; menu->drawdata[1] += (strlen(menu->entries[menu->cursor].name)*5 - menu->drawdata[1])/10.0; int i; diff --git a/src/player.c b/src/player.c index 4598a8ab..1e38bf6b 100644 --- a/src/player.c +++ b/src/player.c @@ -57,8 +57,8 @@ void player_draw(Player* plr) { glScalef(-1,1,1); } - if(global.frames - abs(plr->recovery) < 0 && (global.frames/17)&1) - glColor4f(0.8,0.8,1,0.9); + if(global.frames - abs(plr->recovery) < 0 && (global.frames/8)&1) + glColor4f(0.4,0.4,1,0.9); draw_animation_p(0, 0, !plr->moving, plr->ani); @@ -96,9 +96,6 @@ void player_logic(Player* plr) { break; } - if(plr->deathtime > 0) - create_particle2c("flare", plr->pos, rgb(255,0,0), Shrink, timeout_linear, 10, 4*cexp(I*rand())); - if(global.frames == plr->deathtime) plr_realdeath(plr); } @@ -136,7 +133,7 @@ void plr_realdeath(Player *plr) { create_item(plr->pos, -6-15*I, Power); plr->pos = VIEWPORT_W/2 + VIEWPORT_H*I; - plr->recovery = -(global.frames + 200); + plr->recovery = -(global.frames + 150); if(global.plr.bombs < 3) global.plr.bombs = 3; @@ -147,5 +144,11 @@ void plr_realdeath(Player *plr) { } void plr_death(Player *plr) { - plr->deathtime = global.frames + DEATHBOMB_TIME; + if(plr->deathtime == -1) { + int i; + for(i = 0; i < 20; i++) + create_particle2c("flare", plr->pos, NULL, Shrink, timeout_linear, 40, (3+frand()*7)*cexp(I*rand())); + create_particle2c("blast", plr->pos, rgb(1,0.5,0.3), GrowFade, timeout, 35, 2.4); + plr->deathtime = global.frames + DEATHBOMB_TIME; + } } \ No newline at end of file diff --git a/src/plrmodes.c b/src/plrmodes.c index 144534c7..5daa0ccd 100644 --- a/src/plrmodes.c +++ b/src/plrmodes.c @@ -93,6 +93,17 @@ int youmu_homing(Projectile *p, int t) { // a[0]: velocity, a[1]: target, a[2]: /* 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); + glEnable(GL_SCISSOR_TEST); + } + ProjDraw(p, t); + + glDisable(GL_SCISSOR_TEST); +} + int mari_laser(Projectile *p, int t) { linear(p, t); @@ -106,8 +117,8 @@ int mari_laser(Projectile *p, int t) { void marisa_shot(Player *plr) { if(plr->fire) { if(!(global.frames % 4)) { - create_projectile2c("marisa", +10, NULL, mari_laser, -20I, add_ref(plr))->type = PlrProj; - create_projectile2c("marisa", -10, NULL, mari_laser, -20I, add_ref(plr))->type = PlrProj; + 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; } } } \ No newline at end of file diff --git a/src/projectile.c b/src/projectile.c index 70485c4b..2d16b89b 100644 --- a/src/projectile.c +++ b/src/projectile.c @@ -84,7 +84,7 @@ void delete_projectiles(Projectile **projs) { int collision_projectile(Projectile *p) { if(p->type == FairyProj) { - float angle = carg(global.plr.pos - p->pos); + float angle = carg(global.plr.pos - p->pos) + p->angle; int projr = sqrt(pow(p->tex->w/4*cos(angle),2)*8/10 + pow(p->tex->h/2*sin(angle)*8/10,2)); if(cabs(global.plr.pos - p->pos) < projr + 1) @@ -174,6 +174,15 @@ int accelerated(Projectile *p, int t) { return 1; } +int asymptotic(Projectile *p, int t) { // v = a[0]*(a[1] + 1); a[1] -> 0 + p->angle = carg(p->args[0] + p->args[1]); + + p->args[1] *= 0.8; + p->pos += p->args[0]*(p->args[1] + 1); + + return 1; +} + void _ProjDraw(Projectile *proj, int t) { if(proj->clr != NULL && !tconfig.intval[NO_SHADER]) { GLuint shader = get_shader("bullet_color"); @@ -202,6 +211,23 @@ void ProjDraw(Projectile *proj, int t) { glPopMatrix(); } +void Blast(Projectile *p, int t) { + if(t == 1) { + p->args[1] = frand()*360 + frand()*I; + p->args[2] = frand() + frand()*I; + } + + glPushMatrix(); + glTranslatef(creal(p->pos), cimag(p->pos), 0); + glRotatef(creal(p->args[1]), cimag(p->args[1]), creal(p->args[2]), cimag(p->args[2])); + glScalef(t/p->args[0], t/p->args[0], 1); + glColor4f(0.3,0.6,1,1 - t/p->args[0]); + draw_texture_p(0,0,p->tex); + glPopMatrix(); + + glColor4f(1,1,1,1); +} + void Shrink(Projectile *p, int t) { glPushMatrix(); float s = 2.0-t/p->args[0]*2; @@ -224,12 +250,28 @@ void DeathShrink(Projectile *p, int t) { glPopMatrix(); } +void GrowFade(Projectile *p, int t) { + glPushMatrix(); + glTranslatef(creal(p->pos), cimag(p->pos), 0); + glRotatef(p->angle*180/M_PI+90, 0, 0, 1); + glScalef(t/p->args[0]*(1+p->args[1]), t/p->args[0]*(1+p->args[1]), 1); + + if(p->clr) + glColor4f(p->clr->r,p->clr->g,p->clr->b,1-t/p->args[0]); + else + glColor4f(1,1,1,1-t/p->args[0]); + + draw_texture_p(0,0,p->tex); + + glColor4f(1,1,1,1); + glPopMatrix(); +} + int bullet_flare_move(Projectile *p, int t) { if(t > 16 || REF(p->args[1]) == NULL) { free_ref(p->args[1]); return ACTION_DESTROY; - } - + } p->pos = ((Projectile *) REF(p->args[1]))->pos; p->angle = ((Projectile *) REF(p->args[1]))->angle; diff --git a/src/projectile.h b/src/projectile.h index 4d8f5e99..901c5f30 100644 --- a/src/projectile.h +++ b/src/projectile.h @@ -72,9 +72,13 @@ Projectile *get_proj(Projectile *hay, int birthtime); 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 Blast(Projectile *p, int t); + void Shrink(Projectile *p, int t); +void GrowFade(Projectile *p, int t); int bullet_flare_move(Projectile *p, int t); void Fade(Projectile *p, int t); diff --git a/src/stage.c b/src/stage.c index 91754112..b2808947 100644 --- a/src/stage.c +++ b/src/stage.c @@ -110,6 +110,8 @@ void draw_hud() { sprintf(buf, "%i fps", global.fps.show_fps); draw_text(AL_Right, SCREEN_W, SCREEN_H-20, buf, _fonts.standard); + + glDisable(GL_STENCIL_TEST); } void stage_draw() { @@ -126,9 +128,9 @@ void stage_draw() { player_draw(&global.plr); + draw_items(); draw_projectiles(global.projs); draw_enemies(global.enemies); - draw_items(); draw_lasers(); if(global.boss) diff --git a/src/stage.h b/src/stage.h index ae8062a8..cc1b5fab 100644 --- a/src/stage.h +++ b/src/stage.h @@ -8,9 +8,21 @@ #ifndef STAGE_H #define STAGE_H -#define TIMER(ptr) int *__timep = ptr; int _i; +/* taisei's strange macro language. + * + * sorry, I guess it is bad style, but I hardcode everything and in that case + * you'll find yourself soon in a situation where you have to spread your + * coherent thoughts over frames using masses of redundant ifs. + * I've just invented this thingy to keep track of my sanity. + * + */ + +#define TIMER(ptr) int *__timep = ptr; int _i, _ni; #define AT(t) if(*__timep == t) -#define FROM_TO(start,end,step) _i = (*__timep - start)/step; if(*__timep >= (start) && *__timep <= (end) && !(*__timep % (step))) +#define FROM_TO(start,end,step) _i = (*__timep - (start))/(step); if(*__timep >= (start) && *__timep <= (end) && !((*__timep - (start)) % (step))) +#define FROM_TO_INT(start, end, step, dur, istep) \ + _i = (*__timep - (start))/(step+dur); _ni = ((*__timep - (start)) % (step+dur))/istep; \ + if(*__timep >= (start) && *__timep <= (end) && (*__timep - (start)) % ((dur) + (step)) <= dur && !((*__timep - (start)) % (istep))) typedef void (*StageRule)(void); diff --git a/src/stages/stage0.c b/src/stages/stage0.c index 6215b8d3..d3243422 100644 --- a/src/stages/stage0.c +++ b/src/stages/stage0.c @@ -133,7 +133,7 @@ Boss *create_cirno() { void stage0_enemy0(Enemy *e, int time) { TIMER(&time); AT(EVENT_DEATH) { - spawn_item(e->pos, Power); + spawn_items(e->pos, 3,0,0,0); return; } @@ -143,7 +143,7 @@ void stage0_enemy0(Enemy *e, int time) { AT(60) { int i = 0; for(i = -1; i <= 1; i++) - create_projectile1c("ball", e->pos, rgb(0.2, 0.3, 0.5), linear, 4*cexp(I*(carg(global.plr.pos - e->pos) + 0.2*i))); + create_projectile2c("crystal", e->pos, rgb(0.2, 0.3, 0.5), asymptotic, 2*cexp(I*(carg(global.plr.pos - e->pos) + 0.2*i)), 5); e->moving = 1; e->dir = creal(e->args[0]) < 0; @@ -158,9 +158,7 @@ void stage0_enemy0(Enemy *e, int time) { void stage0_enemy1(Enemy *e, int time) { TIMER(&time); AT(EVENT_DEATH) { - spawn_item(e->pos, Power); - spawn_item(e->pos, Power); - spawn_item(e->pos, Point); + spawn_items(e->pos, 2,2,0,0); return; } @@ -169,15 +167,14 @@ void stage0_enemy1(Enemy *e, int time) { FROM_TO(60,100,2) { e->args[0] = 0.5*e->args[0]; - create_projectile1c("rice", e->pos, rgb(0.2, 0.4, 0.8), linear, 3*cexp(I*M_PI/10*_i)); + create_projectile2c("rice", e->pos, rgb(0.6, 0.2, 0.7), asymptotic, 2*cexp(I*M_PI/10*_i), _i/2.0); } - FROM_TO(90, 500, 60) { - int i; - for(i = 4; i < 8; i++) - create_projectile1c("ball", e->pos, rgb(0.2,0.4,0.8), linear, i*cexp(I*carg(global.plr.pos- e->pos))); - } + FROM_TO(90, 500, 20); + if(!(_i % 9)) + create_projectile2c("thickrice", e->pos, rgb(0.2, 0.4, 0.8), asymptotic, (1+frand()*3)*cexp(I*carg(global.plr.pos - e->pos)), 3); + FROM_TO(500, 900, 1) e->args[0] += 0.03*e->args[1] - 0.04I; } @@ -185,7 +182,7 @@ void stage0_enemy1(Enemy *e, int time) { void stage0_enemy2(Enemy *e, int time) { TIMER(&time); AT(EVENT_DEATH) { - spawn_item(e->pos, Point); + spawn_items(e->pos, frand()>0.5, frand()>0.2,0,0); return; } @@ -194,6 +191,58 @@ void stage0_enemy2(Enemy *e, int time) { } +void stage0_enemy3(Enemy *e, int t) { + TIMER(&t); + AT(EVENT_DEATH) { + spawn_items(e->pos, 2,1,0,0); + return; + } + + e->pos = e->pos0 + e->args[0]*t + e->args[1]*t*t; + + FROM_TO(10,1000,1) + if(frand() > 0.98) + create_projectile1c("ball", e->pos, rgb(0.8,0.8,0.4), linear, (1+frand())*cexp(I*carg(global.plr.pos - e->pos))); +} + +void stage0_enemy4(Enemy *e, int t) { + TIMER(&t); + AT(EVENT_DEATH) { + spawn_items(e->pos, 3,4,0,0); + return; + } + + FROM_TO(0, 150, 1) + e->pos += (e->args[0] - e->pos)*0.02; + + FROM_TO_INT(150, 550, 40, 40, 2) + create_projectile2c("rice", e->pos, rgb(0.6, 0.2, 0.7), asymptotic, 2*cexp(I*M_PI/10*_ni), _ni/2.0); + + FROM_TO(560,1000,1) + e->pos += e->args[1]; +} + +void stage0_enemy5(Enemy *e, int t) { + TIMER(&t); + AT(EVENT_DEATH) { + spawn_items(e->pos, 3,4,0,0); + return; + } + + FROM_TO(0, 50, 1) + e->pos += 2I; + + FROM_TO_INT(60, 300, 70, 40, 12) { + int i; + for(i = -1; i <= 1; i++) + create_projectile1c("crystal", e->pos, rgb(0.2, 0.3, 0.5), linear, 2.5*cexp(I*(carg(global.plr.pos - e->pos) + i/5.0))); + } + + FROM_TO(320, 700, 1) { + e->args[1] += 0.03; + e->pos += e->args[0]*e->args[1] + 1.4I; + } +} void stage0_events() { if(global.dialog) return; @@ -211,10 +260,28 @@ void stage0_events() { } FROM_TO(400, 460, 50) - create_enemy2c(VIEWPORT_W*_i + VIEWPORT_H/3*I, 15, Fairy, stage0_enemy1, 2-4*_i-0.3I, 1-2*_i); + create_enemy2c(VIEWPORT_W*_i + VIEWPORT_H/3*I, 25, Fairy, stage0_enemy1, 2-4*_i-0.3I, 1-2*_i); FROM_TO(380, 1000, 20) - create_enemy2c(VIEWPORT_W*(_i&1) + rand()/(float)RAND_MAX*100I + 70I, 5, Swirl, stage0_enemy2, 3.5*(1-2*(_i&1)), rand()/(float)RAND_MAX*7I); + 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); + + FROM_TO(1500, 2000, 20) + create_enemy2c(VIEWPORT_W+200I, 3, 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); + + FROM_TO(1700, 2700, 300) + create_enemy2c(VIEWPORT_W/2, 35, Fairy, stage0_enemy4, VIEWPORT_W/4 + VIEWPORT_W/2*frand()+200I, 3-6*(frand()>0.5)+frand()*2I); + + FROM_TO(2000,2800, 200) { + int i; + for(i = 0; i < 5; i++) + create_enemy1c(VIEWPORT_W/4 + VIEWPORT_H/10*i, 8, Fairy, stage0_enemy5, i - 2.5); + } // if(!(global.timer % 100)) // create_laser(LaserCurve, 300, 300, 60, 500, ((ColorA){0.6,0.6,1,0.4}), lolsin, 0); }