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 /* maximum cave size */
52 #define CAVE_WIDTH MAX_PLAYFIELD_WIDTH
53 #define CAVE_HEIGHT MAX_PLAYFIELD_HEIGHT
55 /* additional padding for Zborder elements and linked cave buffer columns */
56 #define CAVE_BUFFER_XOFFSET 4
57 #define CAVE_BUFFER_YOFFSET 2
58 #define CAVE_BUFFER_WIDTH (CAVE_WIDTH + 2 * CAVE_BUFFER_XOFFSET)
59 #define CAVE_BUFFER_HEIGHT (CAVE_HEIGHT + 2 * CAVE_BUFFER_YOFFSET)
62 // ----------------------------------------------------------------------------
63 // definition of elements used in the Emerald Mine Club engine;
64 // the element names (mostly) have the following properties:
65 // - elements that start with 'X' are not animated (more or less)
66 // - elements that start with 'Y' are animated elements
67 // - elements that start with 'Z' are internal elements (without graphics)
68 // - elements that end with 'B' or '_blank' change to the "Xblank" element
69 // ----------------------------------------------------------------------------
73 Zborder, /* special code to indicate border */
74 Zplayer, /* special code to indicate player */
76 Zbug, /* internal bug explosion */
77 Ztank, /* internal tank/alien/bomb explosion */
78 Zeater, /* internal eater explosion */
79 Zdynamite, /* internal dynamite explosion */
81 Xboom_bug, /* bug explosion; transition to Zbug */
82 Xboom_tank, /* tank/alien/bomb explosion; transition to Ztank */
83 Xboom_android, /* android explosion; transition to Xboom_2 */
84 Xboom_1, /* tile explosion; transition to Xboom_2 */
85 Xboom_2, /* transition to boom[] */
104 Xfake_acid_1, /* newly added to EM engine */
411 Xfake_amoeba, /* dripper */
434 Xsand_stonesand_quickout_1, /* newly added to EM engine */
435 Xsand_stonesand_quickout_2,
437 Xslide_ns, /* growing wall */
531 Ykey_1_blank, /* newly added to EM engine */
547 /* other definitions */
573 SOUND_blank = 0, /* player walks on blank */
574 SOUND_roll, /* player pushes stone/bomb/nut/spring */
575 SOUND_stone, /* stone hits ground */
576 SOUND_nut, /* nut hits ground */
577 SOUND_crack, /* stone hits nut */
578 SOUND_bug, /* bug moves */
579 SOUND_tank, /* tank moves */
580 SOUND_android_clone, /* android places something */
581 SOUND_android_move, /* android moves */
582 SOUND_spring, /* spring hits ground/wall/bumper, stone hits spring */
583 SOUND_slurp, /* spring kills alien */
584 SOUND_eater, /* eater sits */
585 SOUND_eater_eat, /* eater eats diamond */
586 SOUND_alien, /* alien moves */
587 SOUND_collect, /* player collects object */
588 SOUND_diamond, /* diamond/emerald hits ground */
589 SOUND_squash, /* stone squashes diamond */
590 SOUND_wonderfall, /* object falls thru wonderwall */
591 SOUND_drip, /* drip hits ground */
592 SOUND_push, /* player pushes spring/balloon/android */
593 SOUND_dirt, /* player digs into dirt */
594 SOUND_acid, /* acid splashes */
595 SOUND_ball, /* ball places something */
596 SOUND_slide, /* slide wall grows */
597 SOUND_wonder, /* wonderwall is active */
598 SOUND_door, /* player goes thru door (gate) */
599 SOUND_exit_open, /* exit opens */
600 SOUND_exit_leave, /* player goes into exit */
601 SOUND_dynamite, /* player places dynamite */
602 SOUND_tick, /* dynamite ticks */
603 SOUND_press, /* player presses wheel/wind/switch */
604 SOUND_wheel, /* wheel moves */
605 SOUND_boom, /* explosion */
606 SOUND_time, /* time runs out */
607 SOUND_die, /* player dies */
613 // ----------------------------------------------------------------------------
614 // data structure definitions
615 // ----------------------------------------------------------------------------
619 int width; /* cave width */
620 int height; /* cave height */
622 int left; /* cave left edge */
623 int top; /* cave top edge */
624 int right; /* cave right edge */
625 int bottom; /* cave bottom edge */
627 int time; /* time remaining */
628 int gems_needed; /* emeralds needed */
629 int score; /* score */
631 int eater_score; /* score for killing eater */
632 int alien_score; /* score for killing alien */
633 int bug_score; /* score for killing bug */
634 int tank_score; /* score for killing tank */
635 int slurp_score; /* score for slurping alien with spring */
636 int nut_score; /* score for cracking nut to emerald */
637 int emerald_score; /* score for collecting emerald */
638 int diamond_score; /* score for collecting diamond */
639 int dynamite_score; /* score for collecting dynamite */
640 int key_score; /* score for colleting key */
641 int lenses_score; /* score for collecting lenses */
642 int magnify_score; /* score for collecting magnifier */
643 int exit_score; /* score for entering exit */
645 int android_move_time; /* android move reset time */
646 int android_clone_time; /* android clone reset time */
647 int ball_time; /* ball reset time */
648 int amoeba_time; /* amoeba speed */
649 int wonderwall_time; /* wonderwall time */
650 int wheel_time; /* wheel reset time */
651 int wheel_x; /* wheel x pos */
652 int wheel_y; /* wheel y pos */
653 int lenses_time; /* lenses reset time */
654 int magnify_time; /* magnify reset time */
655 int wind_time; /* wind reset time */
656 int wind_direction; /* wind direction */
658 int ball_random; /* ball is random flag */
659 int ball_state; /* ball active flag */
660 int wonderwall_state; /* wonderwall active flag */
661 int wheel_cnt; /* wheel counter */
662 int lenses_cnt; /* lenses counter */
663 int magnify_cnt; /* magnify counter */
664 int wind_cnt; /* wind time counter */
666 int android_move_cnt; /* android move counter */
667 int android_clone_cnt; /* android clone counter */
668 int ball_cnt; /* ball counter */
669 int ball_pos; /* ball array pos counter */
670 int eater_pos; /* eater array pos */
671 int shine_cnt; /* shine counter for emerald/diamond */
673 int num_ball_arrays; /* number of ball data arrays used */
675 int home_initial; /* number of players (initial) */
676 int home; /* number of players not yet at home */
677 /* 0 == all players at home */
679 boolean killed_out_of_time; /* kill player due to time out */
681 int exit_x, exit_y; /* kludge for playing player exit sound */
683 short eater_array[8][9]; /* eater data */
684 short ball_array[8][8]; /* ball data */
685 short android_array[TILE_MAX]; /* android clone data */
687 short cavebuf[CAVE_BUFFER_WIDTH][CAVE_BUFFER_HEIGHT];
688 short nextbuf[CAVE_BUFFER_WIDTH][CAVE_BUFFER_HEIGHT];
689 short drawbuf[CAVE_BUFFER_WIDTH][CAVE_BUFFER_HEIGHT];
690 short boombuf[CAVE_BUFFER_WIDTH][CAVE_BUFFER_HEIGHT];
692 short *cavecol[CAVE_BUFFER_WIDTH];
693 short *nextcol[CAVE_BUFFER_WIDTH];
694 short *drawcol[CAVE_BUFFER_WIDTH];
695 short *boomcol[CAVE_BUFFER_WIDTH];