X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=build-scripts%2Fcreate_element_defs.pl;h=3f5693fe4de0ab304a9b38181bd8d4adae64ae78;hp=d935b3fed230b851a37aaa27a8d21bff7084a159;hb=HEAD;hpb=94f017e57e45fae89e35a4948fe7005bdf3f13ba diff --git a/build-scripts/create_element_defs.pl b/build-scripts/create_element_defs.pl index d935b3fe..b75d86ac 100755 --- a/build-scripts/create_element_defs.pl +++ b/build-scripts/create_element_defs.pl @@ -1,9 +1,14 @@ #!/usr/bin/perl -w # ============================================================================= -# create_element_defs.pl +# Rocks'n'Diamonds - McDuffin Strikes Back! +# ----------------------------------------------------------------------------- +# (c) 1995-2014 by Artsoft Entertainment +# Holger Schemel +# info@artsoft.org +# https://www.artsoft.org/ # ----------------------------------------------------------------------------- -# 2002-09-19 holger.schemel@mediaways.net +# create_element_defs.pl # ============================================================================= use strict; @@ -37,6 +42,8 @@ my $filename_conf_cus_c = 'conf_cus.c'; my $filename_conf_cus_h = 'conf_cus.h'; my $filename_conf_grp_c = 'conf_grp.c'; my $filename_conf_grp_h = 'conf_grp.h'; +my $filename_conf_emp_c = 'conf_emp.c'; +my $filename_conf_emp_h = 'conf_emp.h'; my $filename_conf_e2g_c = 'conf_e2g.c'; my $filename_conf_esg_c = 'conf_esg.c'; my $filename_conf_e2s_c = 'conf_e2s.c'; @@ -56,6 +63,8 @@ my $text_cus_c = 'values for graphics configuration (custom elements)'; my $text_cus_h = 'values for elements configuration (custom elements)'; my $text_grp_c = 'values for graphics configuration (group elements)'; my $text_grp_h = 'values for elements configuration (group elements)'; +my $text_emp_c = 'values for graphics configuration (empty elements)'; +my $text_emp_h = 'values for elements configuration (empty elements)'; my $text_e2g_c = 'values for element/graphics mapping configuration (normal)'; my $text_esg_c = 'values for element/graphics mapping configuration (special)'; my $text_e2s_c = 'values for element/sounds mapping configuration'; @@ -67,6 +76,7 @@ my $text_act_c = 'values for active states of elements and fonts'; my $num_custom_elements = 256; my $num_group_elements = 32; +my $num_empty_elements = 16; my $char_skip = '---[SKIP]---'; @@ -193,7 +203,7 @@ sub contains_image_file { my ($line) = @_; - return ($line =~ /\".+\.pcx\"/ || + return ($line =~ /\".+\.png\"/ || $line =~ /UNDEFINED_FILENAME/); } @@ -238,12 +248,12 @@ sub print_file_header close FILE; print "\n"; - print "/* ----- $text_auto ----- */\n"; + print "// ------- $text_auto -------\n"; print "\n"; print "#ifndef $filename_def\n"; print "#define $filename_def\n"; print "\n"; - print "/* $comment */\n"; + print "// $comment\n"; print "\n"; } @@ -254,7 +264,7 @@ sub print_file_footer $filename_def =~ s/\./_/; print "\n"; - print "#endif /* $filename_def */\n"; + print "#endif // $filename_def\n"; } sub get_tabs @@ -388,6 +398,28 @@ sub print_graphics_list } } + if (/^\#include "conf_emp.c"/) # dump list of empty elements + { + for (my $nr = 0; $nr < $num_empty_elements; $nr++) + { + my $line = sprintf("#define IMG_EMPTY_SPACE_%d", $nr + 1); + + my $tabs = get_tabs($line, $max_num_tabs); + + print "$line$tabs$i\n"; + + $i++; + + $line = sprintf("#define IMG_EMPTY_SPACE_%d_EDITOR", $nr + 1); + + $tabs = get_tabs($line, $max_num_tabs); + + print "$line$tabs$i\n"; + + $i++; + } + } + if (!contains_image_file($_)) # skip all lines without image file { next; @@ -468,6 +500,11 @@ sub print_sounds_list $sound =~ s/^/CLASS_/; # add class identifier } + # dirty hack for making "ABC[DEF]" work as a "special" suffix + $sound =~ s/([^_])\[/$1_/; + $sound =~ s/\[//; + $sound =~ s/\]//; + $sound = "SND_$sound"; my $define_text = "#define $sound"; @@ -526,6 +563,11 @@ sub print_music_list my $music = $_; + # dirty hack for making "ABC[DEF]" work as a "special" suffix + $music =~ s/([^_])\[/$1_/; + $music =~ s/\[//; + $music =~ s/\]//; + $music = "MUS_$music"; my $define_text = "#define $music"; @@ -609,7 +651,7 @@ sub print_chars_graphics_list_line my $tabs_left = get_tabs($left, 6); - my $right = ($ext eq '' ? $basename . '.pcx' : + my $right = ($ext eq '' ? $basename . '.png' : $ext eq '.frames' ? '1' : '0'); if ($ext eq '.xpos') @@ -722,6 +764,24 @@ sub print_group_elements_list print_file_footer($filename_conf_grp_c); } +sub print_empty_elements_list +{ + print_file_header($filename_conf_emp_h, $text_emp_h); + + for (my $i = 0; $i < $num_empty_elements; $i++) + { + my $left = sprintf("#define EL_EMPTY_SPACE_%d", $i + 1); + + my $tabs_left = get_tabs($left, 5); + + my $right = "(EL_EMPTY_SPACE_START + $i)"; + + print "$left$tabs_left$right\n"; + } + + print_file_footer($filename_conf_emp_c); +} + sub print_custom_graphics_list { my @extensions1 = @@ -748,8 +808,8 @@ sub print_custom_graphics_list my $tabs_left = get_tabs($left, 6); - # my $right = ($ext eq '' ? 'RocksElements.pcx' : - my $right = ($ext eq '' ? 'RocksCE.pcx' : + # my $right = ($ext eq '' ? 'RocksElements.png' : + my $right = ($ext eq '' ? 'RocksCE.png' : $ext eq '.frames' ? '1' : '0'); if ($ext eq '.xpos') @@ -776,8 +836,8 @@ sub print_custom_graphics_list my $tabs_left = get_tabs($left, 6); - # my $right = ($ext eq '' ? 'RocksElements.pcx' : '0'); - my $right = ($ext eq '' ? 'RocksCE.pcx' : '0'); + # my $right = ($ext eq '' ? 'RocksElements.png' : '0'); + my $right = ($ext eq '' ? 'RocksCE.png' : '0'); if ($ext eq '.xpos') { @@ -829,8 +889,8 @@ sub print_group_graphics_list my $tabs_left = get_tabs($left, 6); - # my $right = ($ext eq '' ? 'RocksDC.pcx' : - my $right = ($ext eq '' ? 'RocksCE.pcx' : + # my $right = ($ext eq '' ? 'RocksDC.png' : + my $right = ($ext eq '' ? 'RocksCE.png' : $ext eq '.frames' ? '1' : '0'); if ($ext eq '.xpos') @@ -857,8 +917,8 @@ sub print_group_graphics_list my $tabs_left = get_tabs($left, 6); - # my $right = ($ext eq '' ? 'RocksDC.pcx' : '0'); - my $right = ($ext eq '' ? 'RocksCE.pcx' : '0'); + # my $right = ($ext eq '' ? 'RocksDC.png' : '0'); + my $right = ($ext eq '' ? 'RocksCE.png' : '0'); if ($ext eq '.xpos') { @@ -884,6 +944,89 @@ sub print_group_graphics_list print_file_footer($filename_conf_grp_c); } +sub print_empty_graphics_list +{ + my @extensions1 = + ( + '', + '.xpos', + '.ypos', + '.frames', + ); + my @extensions2 = + ( + '', + '.xpos', + '.ypos', + ); + + my $num_non_empty_elements = $num_custom_elements + $num_group_elements; + + print_file_header($filename_conf_emp_c, $text_emp_c); + + for (my $i = 0; $i < $num_empty_elements; $i++) + { + foreach my $ext (@extensions1) + { + my $left = sprintf(" \{ \"empty_space_%d$ext\",", $i + 1); + + my $tabs_left = get_tabs($left, 6); + + # my $right = ($ext eq '' ? 'RocksDC.png' : + my $right = ($ext eq '' ? 'RocksCE.png' : + $ext eq '.frames' ? '1' : '0'); + + if ($ext eq '.xpos') + { + # $right = 4; + $right = int($i % 16); + } + elsif ($ext eq '.ypos') + { + # $right = 15; + $right = int($i / 16) + int($num_non_empty_elements / 16); + } + + $right = "\"$right\""; + + my $tabs_right = get_tabs($right, 3); + + print "$left$tabs_left$right$tabs_right},\n"; + } + + foreach my $ext (@extensions2) + { + my $left = sprintf(" \{ \"empty_space_%d.EDITOR$ext\",", $i + 1); + + my $tabs_left = get_tabs($left, 6); + + # my $right = ($ext eq '' ? 'RocksDC.png' : '0'); + my $right = ($ext eq '' ? 'RocksCE.png' : '0'); + + if ($ext eq '.xpos') + { + # $right = 14; + $right = int($i % 16) + 16; + } + elsif ($ext eq '.ypos') + { + # $right = 15; + $right = int($i / 16) + int($num_non_empty_elements / 16); + } + + $right = "\"$right\""; + + my $tabs_right = get_tabs($right, 3); + + print "$left$tabs_left$right$tabs_right},\n"; + } + + print "\n"; + } + + print_file_footer($filename_conf_emp_c); +} + sub get_known_element_definitions_ALTERNATIVE { my %known_element = (); @@ -1069,7 +1212,7 @@ sub get_known_action_definitions chomp; # cut trailing newline # process line with action definition - if (/^\#define ACTION_([A-Z0-9_]+)\s/) + if (/^ ACTION_([A-Z0-9_]+)[, ]/) { $known_action{$1} = 1; @@ -1096,7 +1239,7 @@ sub get_known_special_arg_definitions chomp; # cut trailing newline # process line with special arg definition - if (/^\#define GFX_SPECIAL_ARG_([A-Z0-9_]+)\s/) + if (/^ GFX_SPECIAL_ARG_([A-Z0-9_]+)[, ]/) { if ($1 eq 'CRUMBLED') { @@ -1155,7 +1298,7 @@ sub get_known_font_definitions chomp; # cut trailing newline # process line with font definition - if (/^\#define (FONT_[A-Z0-9_]+)\s/) + if (/^ (FONT_[A-Z0-9_]+)[, ]/) { $known_font{$1} = 1; @@ -1568,7 +1711,7 @@ sub print_element_to_graphic_list { print_element_to_graphic_entry($element_without_action, $gfx_action, - '-1', + $gfx_direction, $gfx_crumbled, $graphic); } @@ -1639,6 +1782,15 @@ sub print_element_to_graphic_list print_element_to_graphic_entry($element, '-1', '-1', '-1', $graphic); } + # dump list of empty elements + for (my $i = 0; $i < $num_empty_elements; $i++) + { + my $element = sprintf("EL_EMPTY_SPACE_%d", $i + 1); + my $graphic = sprintf("IMG_EMPTY_SPACE_%d", $i + 1); + + print_element_to_graphic_entry($element, '-1', '-1', '-1', $graphic); + } + print_element_to_graphic_entry('-1', '-1', '-1', '-1', '-1'); print "};\n"; @@ -1678,7 +1830,8 @@ sub print_element_to_special_graphic_list my @elements_with_editor_graphic = ( - 'char_space' + 'char_space', + 'steel_char_space' ); my @unknown_graphics = (); @@ -1809,6 +1962,17 @@ sub print_element_to_special_graphic_list $graphic); } + # dump list of empty element editor graphics + for (my $i = 0; $i < $num_empty_elements; $i++) + { + my $element = sprintf("EL_EMPTY_SPACE_%d", $i + 1); + my $graphic = sprintf("IMG_EMPTY_SPACE_%d_EDITOR", $i + 1); + + print_element_to_special_graphic_entry($element, + 'GFX_SPECIAL_ARG_EDITOR', + $graphic); + } + # dump other special editor graphics foreach my $token (@elements_with_editor_graphic) { @@ -2354,13 +2518,18 @@ sub print_image_config_vars # --- some prefix replacements --- $var =~ s/^main\./menu.main./; + $var =~ s/^setup\./menu.setup./; + $var =~ s/^scores\./menu.scores./; $var =~ s/^\[player\]\./game.player_/; $var =~ s/^\[title_initial\]/title_initial_default/; $var =~ s/^\[title\]/title_default/; + $var =~ s/^\[titlescreen_initial\]/titlescreen_initial_default/; + $var =~ s/^\[titlescreen\]/titlescreen_default/; $var =~ s/^\[titlemessage_initial\]/titlemessage_initial_default/; $var =~ s/^\[titlemessage\]/titlemessage_default/; - if ($var =~ /^titlemessage.*(\d)/ || + if ($var =~ /^titlescreen.*(\d)/ || + $var =~ /^titlemessage.*(\d)/ || $var =~ /^game.panel.key_(\d)/ || $var =~ /^game.panel.inventory_first_(\d)/ || $var =~ /^game.panel.inventory_last_(\d)/ || @@ -2386,19 +2555,24 @@ sub print_image_config_vars # --- some suffix replacements --- $var =~ s/^(menu\.main\..*)\.chars$/$1.size/; + $var =~ s/^(tape\.text\..*)\.chars$/$1.size/; $var =~ s/^(game\.panel\..*)\.chars$/$1.size/; $var =~ s/^(game\.panel\..*)\.tile_size$/$1.size/; + $var =~ s/^(request\.button\..*)\.tile_size$/$1.size/; $var =~ s/\.digits$/.size/; + $var =~ s/\.2nd_offset$/.offset2/; + $var =~ s/\.2nd_xoffset$/.xoffset2/; + $var =~ s/\.2nd_yoffset$/.yoffset2/; $var =~ s/\.element$/.id/; $var =~ s/\.draw_order$/.sort_priority/; $var =~ s/\.font_[a-z]+$/.font_alt/; - $var =~ s/\.INFO\[([A-Z]+)\]$/_info\[GFX_SPECIAL_ARG_INFO_$1\]/; - $var =~ s/\.SETUP\[([A-Z0-9_]+)\]$/_setup\[GFX_SPECIAL_ARG_SETUP_$1\]/; + $var =~ s/\.INFO\[([A-Z]+)\](.*)$/_info\[GFX_SPECIAL_ARG_INFO_$1\]$2/; + $var =~ s/\.SETUP\[([A-Z0-9_]+)\](.*)$/_setup\[GFX_SPECIAL_ARG_SETUP_$1\]$2/; $var =~ s/\.([A-Z]+)$/\[GFX_SPECIAL_ARG_$1\]/; $var =~ s/\.([A-Z]+)\./\[GFX_SPECIAL_ARG_$1\]./; - if ($var =~ /^(menu.(enter|leave)_screen)(.[a-z_]+)$/) + if ($var =~ /^(menu.(enter|leave|next)_screen)(.[a-z_]+)$/) { $var = $1 . "[GFX_SPECIAL_ARG_DEFAULT]" . $3; } @@ -2408,12 +2582,23 @@ sub print_image_config_vars $var .= "[GFX_SPECIAL_ARG_DEFAULT]"; } - if ($var =~ /^(viewport.(playfield|door_[12]))(.[a-z_]+)$/) + if ($var =~ /^(viewport.(window|playfield|door_[12]))(.[a-z_]+)$/) { $var = $1 . "[GFX_SPECIAL_ARG_DEFAULT]" . $3; } print_image_config_var_entry("\"$token\"", "&$var"); + + if ($var =~ /^(title)_default/ || + $var =~ /^(title_initial)_default/ || + $var =~ /^(titlescreen.*)\[\d\]/ || + $var =~ /^(titlemessage.*)\[\d\]/) + { + my $prefix = $1; + $var =~ s/^$prefix/${prefix}_first/; + + print_image_config_var_entry("\"$token\"", "&$var"); + } } } @@ -2531,6 +2716,8 @@ sub main print "- '$filename_conf_cus_h'\n"; print "- '$filename_conf_grp_c'\n"; print "- '$filename_conf_grp_h'\n"; + print "- '$filename_conf_emp_c'\n"; + print "- '$filename_conf_emp_h'\n"; print "- '$filename_conf_e2g_c'\n"; print "- '$filename_conf_esg_c'\n"; print "- '$filename_conf_fnt_c'\n"; @@ -2578,6 +2765,14 @@ sub main { print_group_elements_list(); } + elsif ($ARGV[0] eq $filename_conf_emp_c) + { + print_empty_graphics_list(); + } + elsif ($ARGV[0] eq $filename_conf_emp_h) + { + print_empty_elements_list(); + } elsif ($ARGV[0] eq $filename_conf_e2g_c) { print_element_to_graphic_list();