From 2cffa0035df44d5116e015f0a461d1195cee83b6 Mon Sep 17 00:00:00 2001 From: div0 Date: Thu, 27 Nov 2008 08:10:04 +0000 Subject: [PATCH] add the ACBC Assault Circuit Board Creator a script that makes an assault map template given objective counts git-svn-id: svn://svn.icculus.org/nexuiz/trunk@5114 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- misc/assault-circuit-board-creator.pl | 277 ++++++++++++++++++++++++++ 1 file changed, 277 insertions(+) create mode 100644 misc/assault-circuit-board-creator.pl diff --git a/misc/assault-circuit-board-creator.pl b/misc/assault-circuit-board-creator.pl new file mode 100644 index 000000000..83fda1892 --- /dev/null +++ b/misc/assault-circuit-board-creator.pl @@ -0,0 +1,277 @@ +#!/usr/bin/perl + +# script that creates an "assault circuit" + +use strict; +use warnings; + +my @objectives = @ARGV; + +if(!@objectives) +{ + print STDERR < file.map + +Example: + ofs_z=1024 perl $0 1 1 3,2 1 > assault.map +EOF + exit 1; +} + +my $bp = $ENV{brushprimit}; +my @ofs = ($ENV{ofs_x} || 0, $ENV{ofs_y} || 0, $ENV{ofs_z} || 0); + +my $BRUSHDEF_START = $bp ? "{\nbrushDef\n{" : "{"; +my $BRUSHDEF_END = $bp ? "}\n}" : "}"; +my $BRUSHDEF_PRE = $bp ? "( ( 0.03125 0 -0 ) ( -0 0.03125 0 ) ) " : ""; +my $BRUSHDEF_POST = $bp ? " 0 0 0" : " 0 0 0 0.500000 0.500000 0 0 0"; + +sub BrushRectangle($@@) +{ + my ($shader, $x0, $y0, $z0, $x1, $y1, $z1) = @_; + return < "info_player_attacker", + target => $target, + origin => "$xx $yy $z"; + + $xx = $x + 32; + push @l, Entity + classname => "info_player_defender", + target => $target, + origin => "$xx $yy $z"; + } + + return @l; +} + +my @assault_entities = (); + +my $obj_prev = undef; +my $des_prev = undef; + +my @prevorigin = (-256, 0, 0); + +for my $i(0..@objectives - 1) +{ + my @origin = + ( + $ofs[0] + $i * 256, + $ofs[1] + 0, + $ofs[2] + 0 + ); + + my $count = $objectives[$i]; + $count =~ /^(\d+)(?:,(\d+))?$/s + or die "Invalid count spec: must be number or number,number"; + my $count_destroy = $1; + my $count_push = $2 || 0; + $count = $count_destroy + $count_push; + + my $obj = "obj$i"; + my $des = "obj$i\_destructible"; + my $dec = "obj$i\_decrease"; + + if($i == 0) + { + push @assault_entities, Entity + classname => "target_assault_roundstart", + target => $obj, + target2 => $des, + origin => "@prevorigin"; + } + else + { + push @assault_entities, Entity + classname => "target_objective", + targetname => $obj_prev, + target => $obj, + target2 => $des, + origin => "@prevorigin"; + + push @assault_entities, ObjectiveSpawns $obj_prev, @prevorigin; + + push @assault_entities, Entity + classname => "func_assault_wall", + target => $obj_prev, + model => [ + BrushRectangle + "dsi/dsiglass", + $origin[0] - 128 - 16, + $origin[1] - 512, + $origin[2] - 512, + $origin[0] - 128 + 16, + $origin[1] + 512, + $origin[2] + 512 + ]; + } + + @prevorigin = @origin; + + $origin[2] += 64; + + my $dmg = FindDamage($count); + + push @assault_entities, Entity + classname => "target_objective_decrease", + targetname => $dec, + target => $obj, + dmg => $dmg, + origin => "@origin"; + + $origin[2] += 64; + + for(1..$count_destroy) + { + push @assault_entities, Entity + classname => "func_assault_destructible", + targetname => $des, + target => $dec, + health => 1000, + mdl => "rocket_explode", + count => 1, + noise => "weapons/rocket_impact.wav", + dmg => 50, + dmg_edge => 0, + dmg_radius => 150, + dmg_force => 200, + model => [ + BrushRectangle + "dsi/cretebase", + $origin[0] - 16, + $origin[1] - 16, + $origin[2] - 16, + $origin[0] + 16, + $origin[1] + 16, + $origin[2] + 16 + ]; + + $origin[2] += 64; + } + + for(1..$count_push) + { + push @assault_entities, Entity + classname => "func_button", + target => $dec, + angle => -2, + model => [ + BrushRectangle + "dsi/dablue", + $origin[0] - 16, + $origin[1] - 16, + $origin[2] - 16, + $origin[0] + 16, + $origin[1] + 16, + $origin[2] + 16 + ]; + + $origin[2] += 64; + } + + $obj_prev = $obj; + $des_prev = $des; +} + +my $obj = "roundend"; +my @origin = +( + $ofs[0] + @objectives * 256, + $ofs[1] + 0, + $ofs[2] + 0 +); + +push @assault_entities, Entity + classname => "target_objective", + targetname => $obj_prev, + target => $obj, + origin => "@prevorigin"; + +push @assault_entities, ObjectiveSpawns $obj_prev, @prevorigin; + +push @assault_entities, Entity + classname => "target_assault_roundend", + targetname => $obj, + origin => "@origin"; + +my $map = join "", +( + Entity(classname => "worldspawn"), + @assault_entities +); + +print $map; -- 2.39.2