Author: dreimer
Date: Tue Mar 30 14:54:03 2010
New Revision: 46595
URL:
http://svn.reactos.org/svn/reactos?rev=46595&view=rev
Log:
- Add sound output on finished build. On PS we have one for a successful and one for a
failed build. On CMD we have just one for now, because it seems to dislike my tries to get
the errorlevel of make.
- Made a small modification to be able to ask for help for ps commands in rosbe, too.
Added:
trunk/tools/RosBE/RosBE-Windows/Powershell/playwav.ps1 (with props)
trunk/tools/RosBE/RosBE-Windows/Tools/WAV.BAS (with props)
trunk/tools/RosBE/RosBE-Windows/samples/
trunk/tools/RosBE/RosBE-Windows/samples/Error.wav (with props)
trunk/tools/RosBE/RosBE-Windows/samples/Notification.wav (with props)
trunk/tools/RosBE/RosBE-Windows/samples/baseexplode.wav (with props)
trunk/tools/RosBE/RosBE-Windows/samples/duh0.wav (with props)
trunk/tools/RosBE/RosBE-Windows/samples/duh1.wav (with props)
trunk/tools/RosBE/RosBE-Windows/samples/duh2.wav (with props)
trunk/tools/RosBE/RosBE-Windows/samples/duh3.wav (with props)
trunk/tools/RosBE/RosBE-Windows/samples/fade.wav (with props)
trunk/tools/RosBE/RosBE-Windows/samples/firemissile.wav (with props)
trunk/tools/RosBE/RosBE-Windows/samples/freecredit.wav (with props)
trunk/tools/RosBE/RosBE-Windows/samples/insertcoin.wav (with props)
trunk/tools/RosBE/RosBE-Windows/samples/invaderexplode.wav (with props)
trunk/tools/RosBE/RosBE-Windows/samples/mothershipexplode.wav (with props)
trunk/tools/RosBE/RosBE-Windows/samples/mothershiploop.wav (with props)
trunk/tools/RosBE/RosBE-Windows/samples/shortdweep.wav (with props)
trunk/tools/RosBE/RosBE-Windows/samples/shortwhite.wav (with props)
Modified:
trunk/tools/RosBE/RosBE-Windows/Powershell/Build.ps1
trunk/tools/RosBE/RosBE-Windows/Powershell/Help.ps1
trunk/tools/RosBE/RosBE-Windows/Powershell/RosBE.ps1
trunk/tools/RosBE/RosBE-Windows/Root/Build-Shared.cmd
trunk/tools/RosBE/RosBE-Windows/RosBE.nsi
Modified: trunk/tools/RosBE/RosBE-Windows/Powershell/Build.ps1
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/Powershe…
==============================================================================
--- trunk/tools/RosBE/RosBE-Windows/Powershell/Build.ps1 [iso-8859-1] (original)
+++ trunk/tools/RosBE/RosBE-Windows/Powershell/Build.ps1 [iso-8859-1] Tue Mar 30 14:54:03
2010
@@ -69,4 +69,15 @@
# Highlight the fact that building has ended.
FlashWindow (ps -id $pid).MainWIndowHandle $true
+
+$sound = new-Object System.Media.SoundPlayer;
+
+if ($LASTEXITCODE -ne 0) {
+ $sound.SoundLocation="$_ROSBE_BASEDIR\samples\error.wav";
+} else {
+ $sound.SoundLocation="$_ROSBE_BASEDIR\samples\notification.wav";
+}
+
+$sound.Play();
+
$host.ui.RawUI.WindowTitle = "ReactOS Build Environment $_ROSBE_VERSION"
Modified: trunk/tools/RosBE/RosBE-Windows/Powershell/Help.ps1
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/Powershe…
==============================================================================
--- trunk/tools/RosBE/RosBE-Windows/Powershell/Help.ps1 [iso-8859-1] (original)
+++ trunk/tools/RosBE/RosBE-Windows/Powershell/Help.ps1 [iso-8859-1] Tue Mar 30 14:54:03
2010
@@ -255,5 +255,5 @@
" status - Shows the recent status of available, non installed
updates."
}
} else {
- " Unknown command specified. No help available for $args."
+ get-help $args[0]
}
Modified: trunk/tools/RosBE/RosBE-Windows/Powershell/RosBE.ps1
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/Powershe…
==============================================================================
--- trunk/tools/RosBE/RosBE-Windows/Powershell/RosBE.ps1 [iso-8859-1] (original)
+++ trunk/tools/RosBE/RosBE-Windows/Powershell/RosBE.ps1 [iso-8859-1] Tue Mar 30 14:54:03
2010
@@ -110,6 +110,10 @@
set-alias MAKE "$_ROSBE_BASEDIR\Build.ps1" -scope Global
function global:MAKEX {IEX "&'$_ROSBE_BASEDIR\Build.ps1' multi
$args"}
+ if (Test-Path "$_ROSBE_BASEDIR\playwav.ps1") {
+ set-alias PLAYWAV "$_ROSBE_BASEDIR\playwav.ps1" -scope Global
+ }
+
if (Test-Path "$_ROSBE_BASEDIR\reladdr2line.ps1") {
set-alias RADDR2LINE "$_ROSBE_BASEDIR\reladdr2line.ps1" -scope Global
}
Added: trunk/tools/RosBE/RosBE-Windows/Powershell/playwav.ps1
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/Powershe…
==============================================================================
--- trunk/tools/RosBE/RosBE-Windows/Powershell/playwav.ps1 (added)
+++ trunk/tools/RosBE/RosBE-Windows/Powershell/playwav.ps1 [iso-8859-1] Tue Mar 30
14:54:03 2010
@@ -1,0 +1,746 @@
+##################################################################################
+# PowerShell Invaders #
+# #
+# Released under the Creative Commons #
+# Attribution-NonCommercial-ShareAlike 2.5 License #
+# #
+# For the full license see :
http://creativecommons.org/licenses/by-nc-sa/2.5/ #
+# #
+# Authors: #
+# #
+# Adrian Milliner - ps1(a)soapyfrog.com (aka millinad) #
+# Richy King - richy(a)wiredupandfiredup.com #
+# Nik Crabtree - fido(a)prophecie.co.uk #
+# Brian Long - brian(a)blong.com #
+# #
+# Dipswitches : #
+# #
+# If the variable $PSInvadersDipswitches is set to an integer value it #
+# represents dipswitches on the PowerShell Invaders arcade game circuit board. #
+# The variable is setup as a bitmask based on the options you require. #
+# By default all dispswitches are off, so $PSInvadersDipswitches = 0 #
+# For example, to have a more horrific death sequence for your base station: #
+# #
+# $PSInvadersDipswitches = 0x100 #
+# #
+# Dispswitch meanings: #
+# #
+# Switch 1 (value 0x1) = infinite lives #
+# Switch 2 (value 0x2) = reserved for future expansion #
+# Switch 3 (value 0x4) = reserved for future expansion #
+# Switch 4 (value 0x8) = reserved for future expansion #
+# Switch 5 (value 0x10) = reserved for future expansion #
+# Switch 6 (value 0x20) = reserved for future expansion #
+# Switch 7 (value 0x40) = reserved for future expansion #
+# Switch 8 (value 0x80) = reserved for future expansion #
+# Switch 9 (value 0x100) = pimp mode (horrific death sequence, etc) #
+# Switch 10 (value 0x200) = reserved for future expansion #
+# Switch 11 (value 0x400) = reserved for future expansion #
+# Switch 12 (value 0x800) = reserved for future expansion #
+##################################################################################
+
+#Activated DIP Switches
+$PSInvadersDipswitches = 0x100
+
+# $Id: psinvaders.ps1 94 2007-01-12 07:33:40Z adrian $
+
+# test for dot sourcing
+$global:__gtest__ = 1
+$local:__gtest__ = 2
+if ($global:__gtest__ -eq 2) { write-error "Don't run this with (.)!";
return }
+
+
+# set up some script globals
+$script:globs = @{
+ #size of console used
+ 'screenwidth' = [int]60
+ 'screenheight' = [int]30
+
+ # internal borders for movement
+ 'leftborder' = [int]1
+ 'rightborder' = [int]59
+ 'topborder' = [int]1
+
+ 'baseline' = [int]28 # where the base lives
+ 'motherline' = [int]2 # where the mothership flies
+ 'alienline' = [int]4 # top line for invaders
+
+ # size of each wave of aliens
+ 'waveheight' = [int]5
+ 'wavewidth' = [int]8
+}
+$script:rawui = $host.UI.RawUI
+
+# set up some changable script globals
+$script:cabinet = @{
+ 'hiscores' = [int[]](3000,4000,5000,6000,7000,8000,9000,10000)
+ 'lastscore' = [int]0
+ 'credits' = [int]0
+ 'scores' = [int[]](0,0) # current player scores
+}
+
+# get the dipswitch settings
+$script:dipswitches = @{
+ 'infiniteLives' = ($PSInvadersDipswitches -band 0x1) -eq 0x1
+ 'switch02' = ($PSInvadersDipswitches -band 0x2) -eq 0x2
+ 'switch03' = ($PSInvadersDipswitches -band 0x4) -eq 0x4
+ 'switch04' = ($PSInvadersDipswitches -band 0x8) -eq 0x8
+ 'switch05' = ($PSInvadersDipswitches -band 0x10) -eq 0x10
+ 'switch06' = ($PSInvadersDipswitches -band 0x20) -eq 0x20
+ 'switch07' = ($PSInvadersDipswitches -band 0x40) -eq 0x40
+ 'switch08' = ($PSInvadersDipswitches -band 0x80) -eq 0x80
+ 'pimpMode' = ($PSInvadersDipswitches -band 0x100) -eq 0x100
+ 'switch10' = ($PSInvadersDipswitches -band 0x200) -eq 0x200
+ 'switch11' = ($PSInvadersDipswitches -band 0x400) -eq 0x400
+ 'switch12' = ($PSInvadersDipswitches -band 0x800) -eq 0x800
+}
+
+# load game sounds
+function load-sounds {
+ $sounds =
@("duh0","duh1","duh2","duh3","baseexplode"
+ "firemissile","insertcoin","invaderexplode",
+ "mothershiploop","mothershipexplode")
+ $script:soundplayers=@{}
+ foreach ($s in $sounds) {
+ $p = resolve-path "$_ROSBE_BASEDIR\samples\$s.wav" -erroraction
"silentlycontinue"
+ if ($p) {
+ $pm = new-object media.soundplayer ($p.path)
+ $pm.load()
+ $script:soundplayers[$s] = $pm
+ }
+ else {
+ write-warning "Unable to find sound $s"
+ }
+ }
+}
+
+
+# play-sample
+function play-sound([string]$sample) {
+ $pm = $script:soundplayers[$sample]
+ if ($pm) { $pm.play() }
+}
+
+# function to create a sprite at a specific x,y position with specific image
+function create-sprite {
+ param([int]$x, [int]$y, [string[]]$img, [string]$clr, [string]$dimg )
+ if ($clr -eq $null -or $clr -eq '') { $clr='white' }
+ $sprite = @{
+ 'x' = $x
+ 'y' = $y
+ 'ox' = -1
+ 'oy' = -1
+ 'img' = $img
+ 'eimg' = ' '*($img[0].length)
+ 'dimg' = $dimg
+ '_ioff' = 0
+ 'state' = 'alive'
+ 'colour' = $clr
+ }
+ return $sprite
+}
+
+# draw a sprite, erasing it from it's previous position, if any
+function draw-sprite {
+ param($sprite)
+ if ($sprite.oy -ge 0) {
+ [Console]::SetCursorPosition($sprite.ox,$sprite.oy)
+ [Console]::Write($sprite.eimg) # this should be constructed based on size of image
+ }
+ [Console]::SetCursorPosition($sprite.x,$sprite.y)
+ $clr=$rawui.foregroundcolor
+ $rawui.foregroundcolor=$sprite.colour
+ [string]$render = ''
+ if ($sprite.state -eq 'alive') { $render = $sprite.img[$sprite._ioff] }
+ else { $render = $sprite.dimg; }
+ [Console]::Write( $render )
+ $rawui.foregroundcolor=$clr
+ $sprite._ioff = ($sprite._ioff + 1) % $sprite.img.length
+ $sprite.ox = $sprite.x
+ $sprite.oy = $sprite.y
+}
+
+# erase a sprite if it's been drawn before
+function erase-sprite {
+ param($sprite)
+ if ($sprite.oy -ge 0) {
+ [Console]::SetCursorPosition($sprite.ox,$sprite.oy)
+ [Console]::Write($sprite.eimg) # this should be constructed based on size of image
+ }
+}
+
+# move a sprite to an absolute position
+function move-sprite {
+ param($sprite, [int]$x, [int]$y)
+ $sprite.x = $x
+ $sprite.y = $y
+ draw-sprite $sprite
+}
+
+# move a sprite by a relative position
+function delta-sprite {
+ param($sprite, [int]$x, [int]$y)
+ $sprite.x += $x
+ $sprite.y += $y
+ draw-sprite $sprite
+}
+
+
+# build invader fleet as a block of 8x5
+function build-fleet {
+ param([int]$level) # starts from 0 (default)
+ # at higher levels, the hoard starts a bit lower
+ if ($level -gt 4) { $level = 4 }
+ $offset = $globs.alienline + $level;
+ $invaders = @()
+ $clrs='red','blue','green','cyan','white'
+ for ($row=$globs.waveheight-1; $row -ge 0; $row--) {
+ for ($col=0; $col -lt 8; $col++) {
+ $x = 4 + $col * 4
+ $y = $offset + $row * 2
+ $inv = create-sprite $x $y '/#\','\#/' $clrs[$row]
'>X<'
+ $invaders += $inv
+ }
+ }
+ return $invaders
+}
+
+# wipe screen, oldskool, with a character and a duration in milliseconds
+function wipe-game-screen {
+ param([int]$duration, [string]$ch)
+ if ($duration -le 0) { $duration = 500 }
+ if ($ch -eq '') { $ch = ' '}
+
+ $delay = $duration / $globs.screenheight
+ $rawui.backgroundcolor='black'
+ $rawui.foregroundcolor='white'
+ $wipe=$ch * $globs.screenwidth
+ for ($row=0; $row -lt $globs.screenheight; $row++) {
+ [Console]::SetCursorPosition(0,$row)
+ [Console]::Write($wipe)
+ sleep -m $delay
+ }
+}
+
+
+# clear the screen for play
+function clear-game-screen {
+ $rawui.backgroundcolor='darkmagenta'
+ cls
+}
+
+function draw-centre-string {
+ param([int]$row, [string]$txt)
+ [int]$x = ( $globs.screenwidth - $txt.length ) / 2
+ [Console]::SetCursorPosition($x,$row);
+ [Console]::Write($txt)
+}
+
+function draw-left-string {
+ param([int]$row, [string]$txt)
+ [Console]::SetCursorPosition(0,$row);
+ [Console]::Write($txt)
+}
+
+function draw-right-string {
+ param([int]$row, [string]$txt)
+ [int]$x = ( $globs.screenwidth - $txt.length )
+ [Console]::SetCursorPosition($x,$row);
+ [Console]::Write($txt)
+}
+
+
+
+# draw the top line of the play window
+function draw-scores-etc {
+ $clr=$rawui.foregroundcolor
+ $rawui.foregroundcolor='white'
+ draw-left-string 0 ([string]::Format('1UP: {0:00000#}',$cabinet.scores[0]))
+ draw-centre-string 0 ([string]::Format('HIGH:
{0:00000#}',$cabinet.hiscores[-1]))
+ draw-right-string 0 ([string]::Format('CREDITS: {0:0#}',$cabinet.credits))
+ $rawui.foregroundcolor=$clr
+}
+
+
+
+
+
+# main func
+function play-game {
+ wipe-game-screen 300 '*'
+ wipe-game-screen 300 ' '
+ [int]$seed = [DateTime]::Now.Millisecond
+ $random = new-object Random -argumentList $seed
+
+ [int]$level = 10
+ [int]$lives = 0
+ if($dipswitches.infiniteLives){
+ $lives = 999
+ }
+ else{
+ $lives = 2
+ }
+ [int]$numshots = 0
+
+ # build alien fleet
+ $invaders = build-fleet $level
+ [int]$fleetsize = $invaders.Count
+
+ # create base
+ [int]$basex = 20 + $globs.leftborder
+ [int]$basey = $globs.baseline
+ $base = create-sprite $basex $basey @('<@>') 'white'
'XXX'
+
+ # create horrificdeathsequence if in pimpMode
+ $horrificdeathsequence = @()
+ if ($dipswitches.pimpMode) {
+ $horrificdeathsequence += create-sprite 0 0 " <*@*> "
"Red"
+ $horrificdeathsequence += create-sprite 0 0 " . / @ \ . "
"Red"
+ $horrificdeathsequence += create-sprite 0 0 " \ . @ . / "
"Yellow"
+ $horrificdeathsequence += create-sprite 0 0 " / . . * . . \ "
"Yellow"
+ $horrificdeathsequence += create-sprite 0 0 " . . . . . "
"DarkYellow"
+ $horrificdeathsequence += create-sprite 0 0 " . . . "
"DarkYellow"
+ $horrificdeathsequence += create-sprite 0 0 " . . . "
"DarkRed"
+ $horrificdeathsequence += create-sprite 0 0 " . . . "
"DarkRed"
+ $horrificdeathsequence += create-sprite 0 0 ". ."
"Gray"
+ $horrificdeathsequence += create-sprite 0 0 " "
"DarkGray"
+ }
+ #missile
+ $missile = 0
+
+ #mothership
+ $mothership = 0
+ $frameToLaunchShip = ($numshots + 20 + $random.Next(5))
+
+ $bombs= @()
+ for ([int]$temp=0; $temp -lt 5; $temp++) {
+ $bomb = 0
+ $bombs += $bomb
+ }
+
+ $bases= @()
+ for ([int]$temp=0; $temp -lt 24; $temp++){
+ $bbit = 0
+ $bases += $bbit
+ }
+
+#draw the bases
+[int]$c = 0
+for([int]$temp = 10; $temp -lt 50; $temp += 10){
+ for([int]$off = 0; $off -lt 3 ; $off++){
+ $bases[$c] = create-sprite ($temp+$off) ($globs.baseline-1) "#"
+ draw-sprite $bases[$c]
+ $c += 1
+ $bases[$c] = create-sprite ($temp+$off) ($globs.baseline-2) "#"
+ draw-sprite $bases[$c]
+ $c += 1
+ }
+}
+
+ [int]$dx = 1
+ [int]$dy = 0
+ [int]$xmax = 0
+ [int]$xmin = 0
+ [int]$ymax = 0
+ [int]$basedx = 0
+
+ [int]$playing = 1
+ $cabinet.scores[0] = 0
+ [int]$framecount = 0
+ [int]$duhcount = 0
+
+ draw-scores-etc
+
+ while ($playing) {
+ $xmax = 0; $xmin = 999; $ymax = 0
+ [int]$duh = ($duhcount++) % 4
+ play-sound "duh$duh"
+ foreach ($inv in $invaders) {
+ # here's the main game loop
+ $framecount++
+
+ # process next alien
+ if ($inv.state -eq 'alive') {
+ delta-sprite $inv $dx $dy
+ # randomly self-destruct
+ if ($random.Next(50) -eq 1) {
+ for($temp=0;$temp -lt $bombs.length;$temp++){
+ if($bombs[$temp] -eq 0){
+ $bombs[$temp] = create-sprite ($inv.x+1) ($inv.y+1)
':','+'
+ break
+ }
+ }
+ }
+ }
+ elseif ($inv.state -eq 'dying') {
+ erase-sprite $inv
+ $inv.state = 'dead'
+ $fleetsize--
+ if ($fleetsize -eq 0) {
+ $level += 1
+ $invaders = build-fleet $level
+ [int]$fleetsize = $invaders.Count
+ }
+ }
+ else { # dead
+ continue;
+ }
+ # move missile if there
+ if ($missile -ne 0){
+ if($missile.y -eq $globs.topborder){
+ erase-sprite $missile
+ $missile = 0
+ }else{
+ delta-sprite $missile 0 -1
+ }
+ }
+
+ # move bombs
+ for($temp=0;$temp -lt $bombs.length;$temp++){
+ if($bombs[$temp] -ne 0){
+ if($bombs[$temp].y -eq $globs.baseline){
+ erase-sprite $bombs[$temp]
+ $bombs[$temp]= 0
+ }else{
+ delta-sprite $bombs[$temp] 0 1
+ }
+ }
+ }
+
+
+ #do mothership?
+ if($mothership -ne 0){
+ if(($mothership.x + 5) -gt $globs.rightborder){
+ erase-sprite $mothership
+ $mothership = 0
+ $frameToLaunchShip = ($numshots + 20 + $random.Next(5))
+ }else{
+ delta-sprite $mothership 1 0
+ }
+ }else{
+ if ($numshots -eq $frameToLaunchShip){
+ $mothership = create-sprite $globs.leftborder $globs.motherline
@('[=O=]') 'green' '//o\\'
+ }
+ }
+
+ # update the mins and maxes
+ $xmax = [Math]::Max($inv.x,$xmax)
+ $xmin = [Math]::Min($inv.x,$xmin)
+ $ymax = [Math]::Max($inv.y,$ymax)
+ # scan keyboard
+ # left/right arrow down set basedx to -1/+1 and these are
+ # reset on key up
+ # a fire event is just set when space key down is registered.
+ [int]$dofire = 0;
+ while ($rawui.KeyAvailable ) {
+ $rk = $rawui.ReadKey('NoEcho,IncludeKeyDown,IncludeKeyUp')
+ $k = $rk.VirtualKeyCode
+ if ($rk.KeyDown) {
+ switch ($k) {
+ 37 { $basedx = -1; break }
+ 39 { $basedx = 1; break }
+ 32 { $dofire = 1; break }
+ 27 { return 'quit' }
+ ([int][char]'C') {
+ if (-not $dipswitches.infiniteLives) {
+ $cabinet.credits++
+ play-sound "insertcoin"
+ }
+ draw-scores-etc
+ break
+ }
+ }
+ }
+ else {
+ if ($k -eq 37) { $basedx = 0 }
+ elseif ($k -eq 39) { $basedx = 0}
+ }
+ }
+
+ # fire missile
+ if ($dofire -eq 1){
+ if($missile -eq 0){
+ play-sound "firemissile"
+ $missile = create-sprite ($basex+1) ($basey-1) @('|')
+ $numshots += 1
+ }
+ }
+
+ # move the base
+ $basex += $basedx;
+ if ($basex -lt $globs.leftborder) { $basex = $globs.leftborder; $basedx = 0 }
+ elseif ($basex -ge ( $globs.rightborder - 3 ) ) { $basex = $globs.rightborder - 3;
$basedx = 0 }
+ move-sprite $base $basex $basey
+
+ # and check for collisions, change state to 'dying' etc for next loop
+ # did we hit an alien?
+ if($missile -ne 0){
+ foreach ($inv in $invaders){
+ if($inv.state -ne 'dead' -and $inv.state -ne 'dying' -and
$inv.y -eq $missile.y -and ($missile.x -ge ($inv.x) -and $missile.x -lt ($inv.x+3))){
+ play-sound "invaderexplode"
+ $inv.state = 'dying'
+ erase-sprite $missile
+ draw-sprite $inv
+ $missile = 0
+ $cabinet.scores[0] += 100
+ draw-scores-etc
+ }
+ }
+
+ #oo what about a mothership
+ if($mothership -ne 0){
+ if($missile.y -eq $mothership.y -and ($missile.x -ge ($mothership.x) -and
$missile.x -lt ($mothership.x+5))){
+ $mothership.state = 'dying'
+ erase-sprite $missile
+ draw-sprite $mothership
+ $missile = 0
+ $cabinet.scores[0] += $random.Next(5) * 1000
+ draw-scores-etc
+ erase-sprite $mothership
+ $mothership = 0
+ }
+ }
+ }
+ #did we hit any bases?
+ if($missile -ne 0){
+ for($basecount=0; $basecount -lt $bases.length; $basecount++){
+ if($bases[$basecount] -ne 0){
+ if($missile.y -eq $bases[$basecount].y -and $missile.x -eq $bases[$basecount].x){
+ erase-sprite $missile
+ $missile=0
+ erase-sprite $bases[$basecount]
+ $bases[$basecount]=0
+ }
+ }
+ }
+
+ }
+ #did the aliens hit any bases
+for($basecount=0; $basecount -lt $bases.length; $basecount++){
+ if($bases[$basecount] -ne 0){
+ for($temp=0;$temp -lt $bombs.length;$temp++){
+ if($bombs[$temp] -ne 0){
+
+ if($bombs[$temp].y -eq $bases[$basecount].y -and $bombs[$temp].x -eq
$bases[$basecount].x){
+ erase-sprite $bombs[$temp]
+ $bombs[$temp]=0
+ erase-sprite $bases[$basecount]
+ $bases[$basecount]=0
+ }
+ }
+ }
+ }
+ }
+
+ # and did any aliens hit us?
+ $isdead = $false
+ for($temp=0;$temp -lt $bombs.length;$temp++){
+ if($bombs[$temp] -ne 0){
+ if($bombs[$temp].y -eq $globs.baseline-1 -and ($bombs[$temp].x -ge ($basex)
-and $bombs[$temp].x -lt ($basex+3))){
+ play-sound "baseexplode"
+ $isdead = $true
+ if ($dipswitches.pimpMode){
+
$deathx=$basex-(($horrificdeathsequence[0].eimg.length-$base.img.length)/2)
+ $ferocity = 20
+ foreach ($deathframe in $horrificdeathsequence) {
+ move-sprite $deathframe $deathx $basey
+ sleep -m $ferocity
+ $ferocity = $ferocity*1.5
+ }
+ }
+ else{
+ for($flash=0;$flash -lt 10; $flash++){
+ $base.state = 'dying'
+ draw-sprite $base
+ sleep -m 20
+ $base.state = 'alive'
+ draw-sprite $base
+ sleep -m 20
+ }
+ }
+ if($lives -gt 0){
+ if (-not $dipswitches.infiniteLives) { $lives -= 1 }
+ $basex = (20 + $globs.leftborder)
+ move-sprite $base $basex $basey
+ }else{
+ $playing=0
+ break
+ }
+ }
+ }
+ }
+
+
+ #if dead remove bombs...
+ if($isdead){
+ for($temp=0;$temp -lt $bombs.length;$temp++){
+ if($bombs[$temp] -ne 0){
+ erase-sprite $bombs[$temp]
+ $bombs[$temp]= 0
+ }
+ }
+ }
+
+
+ sleep -m 10
+ }
+ # end of main game loop (invader drawing block)
+ # everything below is done once per movement wave
+
+ # determine if the block as hit the edges, and if so change direction
+ if ($ymax -ge $globs.baseline) { $playing=0; break};
+ if ($dx -eq 1) {
+ if ($xmax -ge ( $globs.rightborder - 3 ) ) { $dx = 0; $dy = 1 }
+ }
+ elseif ($dx -eq -1) {
+ if ($xmin -lt $globs.leftborder ) { $dx = 0; $dy = 1 }
+ }
+ elseif ($dx -eq 0) {
+ if ($xmin -lt $globs.leftborder) {
+ $dx = 1;
+ }
+ else {
+ $dx = -1;
+ }
+ $dy = 0;
+ }
+
+ }
+ # game is over here
+ }
+
+ # game intro sequence.. shows high score table, collects credits
+ # and waits for user to quit or choose one player game.
+ # returns 'quit' if prog should end, or '1up' if player 1 should start
+
+function play-intro {
+ wipe-game-screen 300 '*'; wipe-game-screen 300 ' '
+
+ [string]$icmsg = 'INSERT COIN'
+ [string]$icblank = (' ' * $icmsg.length)
+
+ [int]$framecount = 0
+ [int]$seqduration = 400
+
+ # max out credits if infiniteLives switch is on
+ if ($dipswitches.infiniteLives) { $cabinet.credits = 99 }
+
+ while ($true) {
+
+ # show title
+ $rawui.foregroundcolor='white'
+ draw-centre-string 5 'POWERSHELL INVADERS'
+
+ # different things get drawn in the middle, depending on sequence
+ $rawui.foregroundcolor='green'
+ $sequence = ($framecount % $seqduration)
+
+ if ($sequence -eq ($seqduration/2) -or $sequence -eq 0) {
+ # clear area on sequence change
+ $blank = ' ' * $globs.screenwidth
+ for ([int]$i = 7; $i -lt 20; $i++) { draw-centre-string $i $blank }
+ }
+
+ if ($sequence -lt ($seqduration/2)) {
+ # high score table
+ draw-centre-string 8 'HIGH SCORE TABLE'
+ for($i = 0; $i -lt $cabinet.hiscores.Count; $i++) {
+ [string]$str = [string]::Format('{0} . . . . .
{1:00000#}',(1+$i),$cabinet.hiscores[-1-$i])
+ draw-centre-string (10+$i) $str
+ }
+ }
+ else {
+ # score advance table
+ draw-centre-string 8 'SCORE ADVANCE TABLE'
+ draw-centre-string 11 '[=O=] . . . . MYSTERY'
+ draw-centre-string 13 '/#\ . . . . . . . 100'
+ }
+
+ $rawui.foregroundcolor='white'
+ draw-centre-string 21 'PRESS C FOR CREDIT - 1 FOR PLAYER 1 - ESC TO QUIT'
+
+ draw-scores-etc
+
+ while ( $rawui.KeyAvailable ) {
+ $rk = $rawui.ReadKey('NoEcho,IncludeKeyDown,IncludeKeyUp')
+ $k = $rk.VirtualKeyCode
+ if ($rk.KeyDown) {
+ # check for C key to add a credit
+ if (-not $dipswitches.infiniteLives -and $k -eq 67) {
+ $cabinet.credits++
+ play-sound "insertcoin"
+ }
+ # check for ESC key to quit
+ elseif ($k -eq 27) {
+ return 'quit'
+ }
+ # check for '1' key to start player 1
+ elseif ($k -eq 49 -and $cabinet.credits -gt 0) {
+ if (-not $dipswitches.infiniteLives) { $cabinet.credits-- }
+ return '1up'
+ }
+ }
+ }
+
+ $rawui.foregroundcolor='red'
+ if ($cabinet.credits -eq 0 -and ($framecount % 20 -lt 10)) {
+ draw-centre-string 23 $icmsg : $icblank
+ }
+ else {
+ draw-centre-string 23 $icblank
+ }
+
+ sleep -m 20 # 50 times a second loop
+ $framecount++
+ }
+
+}
+
+# outro sequence when the game ends (due to death, usually)
+function play-outro {
+ [int]$y = ($globs.screenheight / 2)
+ $rawui.foregroundcolor='yellow'
+ draw-centre-string ($y++) ' '
+ draw-centre-string ($y++) ' G A M E O V E R '
+ draw-centre-string ($y++) ' '
+ $rawui.foregroundcolor='white'
+ # add a score, sort it, remove smallest
+ $cabinet.hiscores += $cabinet.scores[0]
+ [array]::Sort( $cabinet.hiscores )
+ $cabinet.hiscores = $cabinet.hiscores[1..($cabinet.hiscores.Count-1)]
+ sleep 2
+}
+
+# program kicks off here
+load-sounds
+$Script:oldBClr = $rawui.backgroundcolor
+$Script:oldFClr = $rawui.foregroundcolor
+$Script:oldCursorSize = $rawui.CursorSize
+$rawui.CursorSize = 0
+$Script:oldTitle = $rawui.WindowTitle
+$rawui.WindowTitle = 'playwav'
+clear-game-screen
+while ($true) {
+ $action = ''
+ $action = play-intro
+ if ($action -eq 'quit') { break }
+ elseif ($action -eq '1up') {
+ $action = play-game
+ $action = play-outro
+ }
+}
+$rawui.WindowTitle = $oldTitle
+$rawui.CursorSize = $oldCursorSize
+$rawui.backgroundcolor = $oldBClr
+$rawui.foregroundcolor = $oldFClr
+cls
+'Bye bye'
+
+
+######################################
+# Issues
+#
+# 1) Need support for entering scores
+# 2) Need support for persisting scores
+#
+######################################
Propchange: trunk/tools/RosBE/RosBE-Windows/Powershell/playwav.ps1
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/tools/RosBE/RosBE-Windows/Root/Build-Shared.cmd
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/Root/Bui…
==============================================================================
--- trunk/tools/RosBE/RosBE-Windows/Root/Build-Shared.cmd [iso-8859-1] (original)
+++ trunk/tools/RosBE/RosBE-Windows/Root/Build-Shared.cmd [iso-8859-1] Tue Mar 30 14:54:03
2010
@@ -62,5 +62,10 @@
:EOC
:: Highlight the fact that building has ended.
+
+cd /d "%_ROSBE_BASEDIR%\samples"
+wav.exe Notification.wav
+
flash.exe
+
title ReactOS Build Environment %_ROSBE_VERSION%
Modified: trunk/tools/RosBE/RosBE-Windows/RosBE.nsi
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/RosBE.ns…
==============================================================================
--- trunk/tools/RosBE/RosBE-Windows/RosBE.nsi [iso-8859-1] (original)
+++ trunk/tools/RosBE/RosBE-Windows/RosBE.nsi [iso-8859-1] Tue Mar 30 14:54:03 2010
@@ -153,6 +153,10 @@
File /r Components\Tools\iconv.exe
File /r Components\Tools\m4.exe
File /r Components\Tools\patch.exe
+ File /r Components\Tools\wav.exe
+ SetOutPath "$INSTDIR\samples"
+ SetOverwrite try
+ File /r Components\samples\*.*
SectionEnd
Section -MinGWGCCNASM SEC02
@@ -283,6 +287,7 @@
File /r Components\Powershell\chdefdir.ps1
File /r Components\Powershell\Config.ps1
File /r Components\Powershell\options.ps1
+ File /r Components\Powershell\playwav.ps1
File /r Components\Powershell\Remake.ps1
File /r Components\Powershell\Remakex.ps1
File /r Components\Powershell\kdbg.ps1
@@ -396,6 +401,7 @@
;;
RMDir /r /REBOOTOK "$INSTDIR\i386"
RMDir /r /REBOOTOK "$INSTDIR\Tools"
+ RMDir /r /REBOOTOK "$INSTDIR\samples"
StrCmp $ICONS_GROUP "" NO_SHORTCUTS
RMDir /r /REBOOTOK "$SMPROGRAMS\$ICONS_GROUP"
NO_SHORTCUTS:
@@ -425,6 +431,7 @@
Delete /REBOOTOK "$INSTDIR\Remakex.cmd"
Delete /REBOOTOK "$INSTDIR\Remake.ps1"
Delete /REBOOTOK "$INSTDIR\Remakex.ps1"
+ Delete /REBOOTOK "$INSTDIR\playwav.ps1"
Delete /REBOOTOK "$INSTDIR\kdbg.cmd"
Delete /REBOOTOK "$INSTDIR\kdbg.ps1"
Delete /REBOOTOK "$INSTDIR\RosBE.cmd"
Added: trunk/tools/RosBE/RosBE-Windows/Tools/WAV.BAS
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/Tools/WA…
==============================================================================
--- trunk/tools/RosBE/RosBE-Windows/Tools/WAV.BAS (added)
+++ trunk/tools/RosBE/RosBE-Windows/Tools/WAV.BAS [iso-8859-1] Tue Mar 30 14:54:03 2010
@@ -1,0 +1,42 @@
+'==============================================================================
+'
+' WAV.EXE - Command line .WAV file player
+' Copyright (c) 1998 by PowerBASIC, Inc. All Rights Reserved.
+'
+'==============================================================================
+
+$INCLUDE "WIN32API.INC"
+
+FUNCTION PbMain() AS LONG
+
+ DIM wav AS ASCIIZ * 256
+
+ wav = COMMAND$
+
+ STDOUT "WAV.EXE v1.0 - Command line .WAV file player"
+ STDOUT "Copyright (c) 1998 by PowerBASIC, Inc."
+ STDOUT ""
+
+ IF LEN(wav) = 0 THEN
+ STDOUT "Usage: WAV filename.wav
+
+ SndPlaySound BYVAL %NULL, %SND_SYNC 'stop anything currently playing
+
+ FUNCTION = 1
+ EXIT FUNCTION
+ END IF
+
+ IF INSTR(wav, ".") = 0 THEN
+ wav = wav + ".WAV"
+ END IF
+
+ IF LEN(DIR$(wav)) THEN
+ STDOUT "Playing " & wav
+ SndPlaySound wav, %SND_SYNC
+ ELSE
+ STDOUT "File not found: " & wav
+ FUNCTION = 1
+ END IF
+
+END FUNCTION
+
Propchange: trunk/tools/RosBE/RosBE-Windows/Tools/WAV.BAS
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/tools/RosBE/RosBE-Windows/samples/Error.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/Error.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/tools/RosBE/RosBE-Windows/samples/Notification.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/Notification.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/tools/RosBE/RosBE-Windows/samples/baseexplode.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/baseexplode.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/tools/RosBE/RosBE-Windows/samples/duh0.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/duh0.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/tools/RosBE/RosBE-Windows/samples/duh1.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/duh1.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/tools/RosBE/RosBE-Windows/samples/duh2.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/duh2.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/tools/RosBE/RosBE-Windows/samples/duh3.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/duh3.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/tools/RosBE/RosBE-Windows/samples/fade.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/fade.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/tools/RosBE/RosBE-Windows/samples/firemissile.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/firemissile.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/tools/RosBE/RosBE-Windows/samples/freecredit.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/freecredit.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/tools/RosBE/RosBE-Windows/samples/insertcoin.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/insertcoin.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/tools/RosBE/RosBE-Windows/samples/invaderexplode.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/invaderexplode.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/tools/RosBE/RosBE-Windows/samples/mothershipexplode.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/mothershipexplode.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/tools/RosBE/RosBE-Windows/samples/mothershiploop.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/mothershiploop.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/tools/RosBE/RosBE-Windows/samples/shortdweep.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/shortdweep.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/tools/RosBE/RosBE-Windows/samples/shortwhite.wav
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-Windows/samples/…
==============================================================================
Binary file - no diff available.
Propchange: trunk/tools/RosBE/RosBE-Windows/samples/shortwhite.wav
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream