3 This program "Emerald Mine for X11"
4 is copyright © 2009 David Tritscher. All rights reserved.
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions
10 1. Redistributions of source code must retain the above copyright
11 notice, this list of conditions and the following disclaimer.
13 2. The origin of this software must not be misrepresented; you must
14 not claim that you wrote the original software. If you use this
15 software in a product, an acknowledgment in the product
16 documentation would be appreciated but is not required.
18 3. Altered source versions must be plainly marked as such, and must
19 not be misrepresented as being the original software.
21 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
22 OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
25 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
27 GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 /* 2007-03-31 06:22:47
36 * emerald mine game engine defines
39 // ----------------------------------------------------------------------------
40 // EM game engine source code was altered for integration in Rocks'n'Diamonds
41 // ----------------------------------------------------------------------------
47 // ----------------------------------------------------------------------------
48 // constant definitions
49 // ----------------------------------------------------------------------------
51 /* define these for backwards compatibility */
52 #define EM_ENGINE_BAD_ROLL
53 #define EM_ENGINE_BAD_SPRING
55 /* define these to use additional elements */
56 #define EM_ENGINE_USE_ADDITIONAL_ELEMENTS
58 /* internal definitions for EM engine */
59 #ifdef EM_ENGINE_BAD_ROLL
63 #ifdef EM_ENGINE_BAD_SPRING
67 /* one border for Zborder elements, one border for steelwall, if needed */
68 #define EM_MAX_CAVE_WIDTH (MAX_PLAYFIELD_WIDTH + 2 + 2)
69 #define EM_MAX_CAVE_HEIGHT (MAX_PLAYFIELD_HEIGHT + 2 + 2)
72 -----------------------------------------------------------------------------
73 definition of elements used in the Emerald Mine Club engine;
74 the element names have the following properties:
75 - elements that start with 'X' can be stored in a level file
76 - elements that start with 'Y' indicate moving elements
77 - elements that end with 'B' are the "backside" of moving elements
78 -----------------------------------------------------------------------------
87 #ifdef EM_ENGINE_BAD_ROLL
318 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
333 Xslidewall_ns, /* growing wall */
396 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
397 Xsand_stonesand_quickout_1,
398 Xsand_stonesand_quickout_2,
411 Xfake_amoeba, /* dripper */
426 #ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS
508 Xboom_bug, /* passed from explode to synchro (linked explosion);
509 transition to explode_normal */
510 Xboom_bomb, /* passed from explode to synchro (linked explosion);
511 transition to explode_normal */
512 Xboom_android, /* passed from explode to synchro;
513 transition to boom_2 */
514 Xboom_1, /* passed from explode to synchro;
515 transition to boom_2 */
516 Xboom_2, /* transition to boom[] */
518 Znormal, /* passed from synchro to explode, only in next[];
520 Zdynamite, /* passed from synchro to explode, only in next[];
522 Zplayer, /* special code to indicate player;
524 Zborder, /* special code to indicate border;
530 /* other definitions */
553 SOUND_blank = 0, /* player walks on blank */
554 SOUND_roll, /* player pushes stone/bomb/nut/spring */
555 SOUND_stone, /* stone hits ground */
556 SOUND_nut, /* nut hits ground */
557 SOUND_crack, /* stone hits nut */
558 SOUND_bug, /* bug moves */
559 SOUND_tank, /* tank moves */
560 SOUND_android_clone, /* android places something */
561 SOUND_android_move, /* android moves */
562 SOUND_spring, /* spring hits ground/wall/bumper, stone hits spring */
563 SOUND_slurp, /* spring kills alien */
564 SOUND_eater, /* eater sits */
565 SOUND_eater_eat, /* eater eats diamond */
566 SOUND_alien, /* alien moves */
567 SOUND_collect, /* player collects object */
568 SOUND_diamond, /* diamond/emerald hits ground */
569 SOUND_squash, /* stone squashes diamond */
570 SOUND_wonderfall, /* object falls thru wonderwall */
571 SOUND_drip, /* drip hits ground */
572 SOUND_push, /* player pushes spring/balloon/android */
573 SOUND_dirt, /* player digs into dirt */
574 SOUND_acid, /* acid splashes */
575 SOUND_ball, /* ball places something */
576 SOUND_slidewall, /* slide wall grows */
577 SOUND_wonder, /* wonderwall is active */
578 SOUND_door, /* player goes thru door (gate) */
579 SOUND_exit_open, /* exit opens */
580 SOUND_exit_leave, /* player goes into exit */
581 SOUND_dynamite, /* player places dynamite */
582 SOUND_tick, /* dynamite ticks */
583 SOUND_press, /* player presses wheel/wind/switch */
584 SOUND_wheel, /* wheel moves */
585 SOUND_boom, /* explosion */
586 SOUND_time, /* time runs out */
587 SOUND_die, /* player dies */
593 // ----------------------------------------------------------------------------
594 // data structure definitions
595 // ----------------------------------------------------------------------------
599 int home_initial; /* number of players (initial) */
600 int home; /* number of players not yet at home */
601 /* 0 == all players at home */
603 int width; /* playfield width */
604 int height; /* playfield height */
606 int time_seconds; /* available time (seconds) */
607 int time_initial; /* available time (initial) */
608 int time; /* time remaining (runtime) */
610 boolean killed_out_of_time; /* kill player due to time out */
612 int required_initial; /* emeralds needed (initial) */
613 int required; /* emeralds needed (runtime) */
615 int score; /* score */
617 /* all below entries must be filled every time a level is read */
619 int alien_score; /* score for killing alien */
620 int amoeba_time; /* amoeba speed */
621 int android_move_cnt_initial; /* android move counter (initial) */
622 int android_move_cnt; /* android move counter */
623 int android_move_time; /* android move reset time */
624 int android_clone_cnt_initial;/* android clone counter (initial) */
625 int android_clone_cnt; /* android clone counter */
626 int android_clone_time; /* android clone reset time */
627 int ball_cnt; /* ball counter */
628 int ball_pos; /* ball array pos counter */
629 int ball_random; /* ball is random flag */
630 int ball_state_initial; /* ball active flag (initial) */
631 int ball_state; /* ball active flag */
632 int ball_time; /* ball reset time */
633 int bug_score; /* score for killing bug */
634 int diamond_score; /* score for collecting diamond */
635 int dynamite_score; /* score for collecting dynamite */
636 int eater_pos; /* eater array pos */
637 int eater_score; /* score for killing eater */
638 int emerald_score; /* score for collecting emerald */
639 int exit_score; /* score for entering exit */
640 int key_score; /* score for colleting key */
641 int lenses_cnt_initial; /* lenses counter (initial) */
642 int lenses_cnt; /* lenses counter */
643 int lenses_score; /* score for collecting lenses */
644 int lenses_time; /* lenses reset time */
645 int magnify_cnt_initial; /* magnify counter (initial) */
646 int magnify_cnt; /* magnify counter */
647 int magnify_score; /* score for collecting magnifier */
648 int magnify_time; /* magnify reset time */
649 int nut_score; /* score for cracking nut */
650 int shine_cnt; /* shine counter for emerald/diamond */
651 int slurp_score; /* score for slurping alien */
652 int tank_score; /* score for killing tank */
653 int wheel_cnt_initial; /* wheel counter (initial) */
654 int wheel_cnt; /* wheel counter */
655 int wheel_x_initial; /* wheel x pos (initial) */
656 int wheel_x; /* wheel x pos */
657 int wheel_y_initial; /* wheel y pos (initial) */
658 int wheel_y; /* wheel y pos */
659 int wheel_time; /* wheel reset time */
660 int wind_cnt_initial; /* wind counter (initial) */
661 int wind_cnt; /* wind time counter */
662 int wind_direction_initial; /* wind direction (initial) */
663 int wind_direction; /* wind direction */
664 int wind_time; /* wind reset time */
665 int wonderwall_state_initial; /* wonderwall active flag (initial) */
666 int wonderwall_state; /* wonderwall active flag */
667 int wonderwall_time_initial; /* wonderwall time (initial) */
668 int wonderwall_time; /* wonderwall time */
669 short eater_array[8][9]; /* eater data */
670 short ball_array[8][8]; /* ball data */
671 short android_array[TILE_MAX];/* android clone table */
672 int num_ball_arrays; /* number of ball data arrays used */
674 int exit_x, exit_y; /* kludge for playing player exit sound */