Subversion Repositories NedoOS

Rev

Rev 954 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1. #ifndef LEVEL3_C
  2. #define LEVEL3_C
  3. #include "gameloop.c"
  4. #include "level_fragments.h"
  5. #include "engine.c"
  6. #include "resources.h"
  7. #include "dialogs.c"
  8. #include "gameloop.c"
  9. #include "sprite_pool.c"
  10. #include "level4.c"
  11.  
  12. //static void init_level(u8 image);
  13. //static void start_level(u8 image, u8 *name);
  14. static void init_level(u8 pal, char *fn);
  15. static void start_level(u8 pal, char *fn, u8 *name);
  16.  
  17. static void process_level3();
  18.  
  19. i16 px, py;
  20. u8 l3s = 0;
  21. const u8 l3intro[] = {
  22.     DroppedEnemy(40, KNIFES, 10),
  23.     DroppedEnemy(100, KNIFES, 10),
  24.     DroppedEnemy(20, KNIFES, 10),
  25.     DroppedEnemy(140, KNIFES, 10),
  26.     DroppedEnemy(80, KNIFES, 10),
  27.     DroppedEnemy(180, KNIFES, 10),
  28.     Nop(10),
  29.     End
  30. };
  31.  
  32. const u8 boss3[] = {
  33.     DroppedEnemy(20, KNIFES, 10),
  34.     DroppedEnemy(40, KNIFES, 10),
  35.     DroppedEnemy(100, KNIFES, 10),
  36.     Nop(20),
  37.     DroppedEnemy(30, KNIFES, 10),
  38.     DroppedEnemy(40, KNIFES, 10),
  39.     Nop(20),
  40.     AimedCircle(FIREBALL, 1, 1),
  41.     Nop(10),
  42.     AimedCircle(FIREBALL, 1, 1),
  43.     Nop(30),
  44.     DroppedEnemy(10, KNIFES, 10),
  45.     DroppedEnemy(90, KNIFES, 10),
  46.     Nop(20),
  47.     DroppedEnemy(20, KNIFES, 10),
  48.     DroppedEnemy(190, KNIFES, 10),
  49.     DroppedEnemy(140, KNIFES, 10),
  50.     Nop(30),
  51.     AimedCircle(FIREBALL, 1, 1),
  52.     Nop(10),
  53.     AimedCircle(FIREBALL, 1, 1),
  54.     Nop(10),
  55.     AimedCircle(FIREBALL, 1, 1),
  56.     Nop(40),
  57.     MarisaHelp,
  58.     Nop(20),
  59.     DroppedEnemy(20, KNIFES, 10),
  60.     DroppedEnemy(60, KNIFES, 10),
  61.     Nop(20),
  62.     DroppedEnemy(140, KNIFES, 10),
  63.     DroppedEnemy(130, KNIFES, 10),
  64.     DroppedEnemy(40, KNIFES, 10),
  65.     Nop(20),
  66.     End
  67. };
  68.  
  69. const u8 level3[] = {
  70.     MakeEnemyWave(EYE, 1, 20),
  71.     MakeLeftFlyers(70, BAT, 10, BONUS_CARD),
  72.     MakeRightFlyers(120, BAT, 10, BONUS_CARD),
  73.     MakeRightFlyers(15, BAT, 10, BONUS_CARD),
  74.     Nop(20),
  75.     MakeShootingStar(120, 64, FIREBALL, 20, 20),
  76.     Nop(20),
  77.     DroppedEnemy(20, KNIFES, 10),
  78.     DroppedEnemy(40, KNIFES, 10),
  79.     DroppedEnemy(100, KNIFES, 10),
  80.     DroppedEnemy(30, KNIFES, 10),
  81.     DroppedEnemy(40, KNIFES, 10),
  82.     Nop(10),
  83.     DroppedEnemy(120, KNIFES, 10),
  84.     DroppedEnemy(140, KNIFES, 10),
  85.     DroppedEnemy(10, KNIFES, 10),
  86.     DroppedEnemy(130, KNIFES, 10),
  87.     DroppedEnemy(140, KNIFES, 10),
  88.     Nop(20),
  89.     MakeBoomFairy(120, 40, HEALTH_CARD),
  90.     Nop(20),
  91.     DroppedEnemy(20, KNIFES, 10),
  92.     DroppedEnemy(40, KNIFES, 10),
  93.     DroppedEnemy(100, KNIFES, 10),
  94.     DroppedEnemy(30, KNIFES, 10),
  95.     DroppedEnemy(40, KNIFES, 10),
  96.     Nop(10),
  97.     DroppedEnemy(120, KNIFES, 10),
  98.     DroppedEnemy(140, KNIFES, 10),
  99.     DroppedEnemy(10, KNIFES, 10),
  100.     DroppedEnemy(130, KNIFES, 10),
  101.     DroppedEnemy(140, KNIFES, 10),
  102.     Nop(20),
  103.     AimedSideEnemies(KNIFE_LEFT, 10, 6),
  104.     Nop(20),
  105.     MarisaHelp,
  106.     Nop(10),
  107.     AimedCircle(FIREBALL, 5, 10),
  108.     Nop(20),
  109.     FiringTrap(EYE),
  110.     Nop(20),
  111.     TriangleHalf(1, BAT, 20, HEALTH_CARD),
  112.     Nop(10),
  113.     TriangleHalf(0, BAT, 20, HEALTH_CARD),
  114.     Nop(20),
  115.     MakeShootingStar(160, 70, FIREBALL, 33, 33),
  116.     Nop(20),
  117.     MidBoss1(EYE, 500),
  118.     Nop(20),
  119.     DoubleCaravan(BAT, 40, 50, BONUS_CARD),
  120.     Nop(20),
  121.     AimedCircle(FIREBALL, 5, 5),
  122.     Nop(5),
  123.     JustStar(80, 120, 5),
  124.     AimedCircle(FIREBALL, 5, 5),
  125.     DroppedEnemy(120, KNIFES, 10),
  126.     DroppedEnemy(140, KNIFES, 10),
  127.     DroppedEnemy(10, KNIFES, 10),
  128.     DroppedEnemy(130, KNIFES, 10),
  129.     DroppedEnemy(140, KNIFES, 10),
  130.     DroppedEnemy(120, KNIFES, 10),
  131.     DroppedEnemy(140, KNIFES, 10),
  132.     DroppedEnemy(10, KNIFES, 10),
  133.     DroppedEnemy(130, KNIFES, 10),
  134.     DroppedEnemy(140, KNIFES, 10),
  135.     Nop(20),
  136.     PushNpc(160, -20, 0, 1, MAID, 255, 1024, 0),
  137.     Nop(15),
  138.     End
  139. };
  140.  
  141. static void init_level3()
  142. {
  143.     level_loop = 0;
  144.     scroll_speed = 1;
  145.     process_level = process_level3;
  146.     flush_sprites();
  147.     //start_level(IMG256_BG5, "Scarlet Devil Mansion");
  148. start_level(PAL256_BG5, "bg5-16.bmp", "Scarlet Devil Mansion");
  149.     music_play(MUS_SISTERS);
  150.     bullet_sprite = DEFAULT_BULLET;
  151.     init_vm(l3intro);
  152.     l3s = 0;
  153.     state = STATE_PLAY;
  154. }
  155.  
  156. static void dialog_l3b()
  157. {
  158.     init_dialog();
  159.     swap_screen();
  160.     put_dialog_string(REIMU_FACE, "And here is the famous\nhospitality of the Scarlets.", 1);
  161. //swap_screen();
  162.     wait_for_space();
  163.     flush_sprites();
  164.     //init_level(IMG256_BG5);
  165. init_level(PAL256_BG5, "bg5-16.bmp");
  166.     init_vm(level3);
  167. }
  168.  
  169. static void dialog_l3f()
  170. {
  171.     init_dialog();
  172.     swap_screen();
  173.     put_dialog_string(REIMU_FACE, "I've not asked you!\nI'm going to talk with\nPatchuly!", 1);
  174. //swap_screen();
  175.     wait_for_space();
  176.     flush_sprites();
  177.     init_level4();
  178. }
  179.  
  180. static void process_boss3()
  181. {
  182.     u8 c;
  183.     Npc *boss;
  184.  
  185.     if (scroll_pos < 4)
  186.     {
  187.         scroll_speed = -2;
  188.     }
  189.    
  190.     if (scroll_pos > 190) {
  191.         scroll_speed = 2;
  192.     }
  193.  
  194.     boss = find_npc_by_type(BOSS_TYPE);
  195.  
  196.     if (boss)
  197.     {
  198.         if (boss->sprite.x <= 20 || boss->sprite.x >= 280)
  199.         {
  200.             boss->sprite.dx = -boss->sprite.dx;
  201.             boss->sprite.x += boss->sprite.dx;
  202.         }
  203.         if (boss->sprite.y <= 20 || boss->sprite.y >= 120)
  204.         {
  205.             boss->sprite.dy = -boss->sprite.dy;
  206.             boss->sprite.y += boss->sprite.dy;
  207.         }
  208.     }
  209.     else
  210.     {
  211.         dialog_l3f();
  212.         return;
  213.     }
  214.  
  215.     if (executing) {
  216.         vm_step();
  217.     } else {
  218.         init_vm(boss3);
  219.     }
  220.  
  221.     if (level_loop % 15 < 6)
  222.         push_star(boss->sprite.x + 8, boss->sprite.y);
  223. }
  224.  
  225. static void dialog_l3m()
  226. {
  227.     music_play(MUS_HARD);
  228.     init_dialog();
  229.     swap_screen();
  230.     put_dialog_string(MAID_FACE, "Hello!\nWe are too busy today!\nCome tomorrow please!", 0);
  231.     put_dialog_string(REIMU_FACE, "Did I ask about it?\nI need to talk with\nyour bookworm!", 1);
  232.     put_dialog_string(MAID_FACE, "No no no!\nPatchuly is veery busy\nnow!", 0);
  233. //swap_screen();
  234.     wait_for_space();
  235.     init_dialog();
  236.     swap_screen();
  237.     put_dialog_string(REIMU_FACE, "Who will ask you?", 1);
  238. //swap_screen();
  239.     wait_for_space();
  240.     //init_level(IMG256_BG6);
  241. init_level(PAL256_BG6, "bg6-16.bmp");
  242.     level_loop = 0;
  243.     process_level = process_boss3;
  244.     scroll_pos = 192;
  245.     scroll_speed = 2;
  246.     push_npc(144, 20, 2, 2, MAID, BOSS_TYPE, 1100, 1);
  247.     init_vm(boss3);
  248.     bullet_sprite = SAKUYA_BULLET;
  249. }
  250.  
  251.  
  252.  
  253. static void process_level3()
  254. {
  255.     if (executing) {
  256.         vm_step();
  257.     } else {
  258.         switch (l3s)
  259.         {
  260.         case 0:
  261.             l3s++;
  262.             dialog_l3b();
  263.             break;
  264.         case 1:
  265.             dialog_l3m();
  266.             break;
  267.         default:
  268.             break;
  269.         }
  270.     }
  271. }
  272. #endif