diff --git a/GUI.oz b/GUI.oz index 381fd932e649ae670130aecee010853a9472c4f0..90a9858ac6475b7ea0ceb8a9d1bc409c582a4aa8 100644 --- a/GUI.oz +++ b/GUI.oz @@ -2,6 +2,7 @@ functor import QTk at 'x-oz://system/wp/QTk.ozf' Input + System export portWindow:StartWindow define @@ -256,22 +257,29 @@ in of nil then skip [] buildWindow|T then NewGrid in NewGrid = {BuildWindow} + {Delay Input.guiDelay} {TreatStream T NewGrid State} [] initPlayer(ID Position)|T then NewState in NewState = {DrawSubmarine Grid ID Position} + {Delay Input.guiDelay} {TreatStream T Grid NewState|State} [] movePlayer(ID Position)|T then + {Delay Input.guiDelay} {TreatStream T Grid {StateModification Grid ID State {MoveSubmarine Position}}} [] lifeUpdate(ID Life)|T then + {Delay Input.guiDelay} {TreatStream T Grid {StateModification Grid ID State {UpdateLife Life}}} - {TreatStream T Grid State} [] putMine(ID Position)|T then + {Delay Input.guiDelay} {TreatStream T Grid {StateModification Grid ID State {DrawMine Position}}} [] removeMine(ID Position)|T then + {Delay Input.guiDelay} {TreatStream T Grid {StateModification Grid ID State {RemoveMine Position}}} [] surface(ID)|T then + {Delay Input.guiDelay} {TreatStream T Grid {StateModification Grid ID State RemovePath}} [] removePlayer(ID)|T then + {Delay Input.guiDelay} {TreatStream T Grid {RemovePlayer Grid ID State}} [] explosion(ID Position)|T then {TreatStream T Grid State} @@ -279,6 +287,8 @@ in {TreatStream T Grid State} [] sonar(ID)|T then {TreatStream T Grid State} + [] nil|T then + {TreatStream nil Grid State} [] _|T then {TreatStream T Grid State} end diff --git a/Main.oz b/Main.oz index 782f742f72a29b8197209418c2793f5bae9e330c..c503937f4686bfa8efb64abff752c09cffb04d25 100644 --- a/Main.oz +++ b/Main.oz @@ -168,21 +168,21 @@ define % 5. [else] Broadcast the direction to the radio proc {TurnByTurn345 Players CurrentIndex} CurrentPlayer={List.nth Players CurrentIndex} - ID Pos Direction NewPlayers fun{SetNbSurfaceOne Player} player(port:Player.port nbSurface:1) end + ID Pos Direction NewPlayers in {Send CurrentPlayer.port move(ID Pos Direction)} case ID#Direction of null#_ then - %% 9. + %% Go to step 9. {TurnByTurn Players (CurrentIndex mod Input.nbPlayer)+1} [] _#surface then - %% 9. + %% Go to step 9. NewPlayers={ModifyOnlyCurrent Players CurrentPlayer SetNbSurfaceOne} {Broadcast NewPlayers saySurface(ID)} {Send GUI_PORT surface(ID)} {TurnByTurn NewPlayers (CurrentIndex mod Input.nbPlayer)+1} else - %% 6. + %% Go to step 6. {Broadcast Players sayMove(ID Direction)} {Send GUI_PORT movePlayer(ID Pos)} {TurnByTurn6 Players CurrentIndex} @@ -267,24 +267,27 @@ define % 4. [If surface] Restart the game after turnSurface delay % 5. [else] Broadcast the direction to the radio % 6. Think - proc{Simultaneous3456 Player PlayersList} + proc {Simultaneous3456 Player PlayersList} ID Pos Direction - fun{DirectionOnSurface Player} player(port:Player.port nbSurface:1) end + fun {DirectionOnSurface Player} player(port:Player.port nbSurface:1) end in {Send Player.port move(ID Pos Direction)} case ID#Direction of null#_ then - % When player dead , restart the game for him + % When Player Dead + % Go to 1. {Simultaneous Player PlayersList} [] _#surface then {Broadcast PlayersList saySurface(ID)} {Send GUI_PORT surface(ID)} - {Delay Input.turnSurface * 100} + {Delay Input.turnSurface * 1000} + % Go to 1. {Simultaneous Player PlayersList} else {Broadcast PlayersList sayMove(ID Direction)} {Send GUI_PORT movePlayer(ID Pos)} {Delay Input.thinkMax * 100} + % Go to 7. {Simultaneous78 Player PlayersList} end @@ -309,7 +312,6 @@ define % 9. Submarine fire and/or explode an item % 10. Think - proc{Simultaneous91011 Player PlayersList} ID KindFire in @@ -365,11 +367,10 @@ in %% Launch the game if Input.isTurnByTurn then {TurnByTurn PlayersList 1} - {System.show '----'} else {List.forAll PlayersList proc{$ Player} thread {Simultaneous Player PlayersList} end end} end - %% Termination {List.forAll PlayersList proc{$ Player} {Send Player.port nil} end } + {Send GUI_PORT nil} end diff --git a/Makefile b/Makefile index 32d61a5a5aec04787724025acb4ee11c2aeb441a..0bd91e0572530490181c5faa5f1c71d8867b43f0 100644 --- a/Makefile +++ b/Makefile @@ -3,19 +3,19 @@ # noma1 : Ingenzi Vany 80461900 # noma2 : Hirwa Mihigo Olyvia 02701900 # ---------------------------- - -# TODO complete the header with your group number, your noma's and full names - -# TODO write your makefile here OZFILES=$(wildcard ./*.oz) OZEXEC=$(OZFILES:.oz=.ozf) %.ozf:%.oz - @ozc -c $^ + @ozc -c $^ 1> /dev/null 2>&1 + +.PHONY: compile + +compile: $(OZEXEC) -.PHONY: runMain +runMain: run clean -runMain: $(OZEXEC) +run: compile @ozengine ./Main.ozf clean: diff --git a/Player020HiderAndSeeker.oz b/Player020HiderAndSeeker.oz index 6aae259e70f14840b59e4cf3dae36cc4d78b8a69..8cf73bf725fac348af6c25955d4ff64d784d98d2 100644 --- a/Player020HiderAndSeeker.oz +++ b/Player020HiderAndSeeker.oz @@ -2,7 +2,6 @@ functor import Input OS - System export portPlayer:StartPlayer define @@ -128,7 +127,6 @@ define {NewRec {NewRec State chargingItems NewChargingItems} chargedItems AfterCharge.fireItem|State.chargedItems} else NewChargingItems={List.map State.chargingItems fun{$ Item} - {System.show Item} if Item.charge==ToCharge.charge andthen {Record.label Item.fireItem}=={Record.label AfterCharge.fireItem} then AfterCharge else Item end end} @@ -323,7 +321,7 @@ define proc{DeadTreatStream Stream State} case Stream - of nil|T then {System.show 'Seeker down'} skip + of nil|T then skip [] initPosition(ID Pos)|T then ID=null {DeadTreatStream T State} @@ -380,101 +378,70 @@ define proc{AliveTreatStream Stream State} case Stream - of nil|T then {System.show 'Seeker down'} skip + of nil|T then skip [] initPosition(ID Pos)|T then NewState in - {System.show 'Player'#State.id.id#'received'#initPosition(ID Pos)} NewState={HandleInitPosition State initPosition(ID Pos)} - {System.show 'Player'#State.id.id#'replied'#initPosition(ID Pos)} {AliveTreatStream T NewState} [] move(ID Pos Direction)|T then NewState in - {System.show 'Player'#State.id.id#'received'#move(ID Pos Direction)} NewState={HandleMove State move(ID Pos Direction)} - {System.show 'Player'#State.id.id#'replied'#move(ID Pos Direction)} {AliveTreatStream T NewState} - [] dive|T then %% Ignored - {System.show 'Player'#State.id.id#'received'#dive} + [] dive|T then {AliveTreatStream T State} - [] saySurface(ID)|T then %% Ignored - {System.show 'Player'#State.id.id#'received'#saySurface(ID)} + [] saySurface(ID)|T then {AliveTreatStream T State} - [] sayMove(ID Direction)|T then NewState in %% Ignored - {System.show 'Player'#State.id.id#'received'#sayMove(ID Direction)} + [] sayMove(ID Direction)|T then NewState in NewState={HandleSayMove State State.enemies sayMove(ID Direction) nil} - {System.show 'Player'#State.id.id#'enemies'#NewState.enemies} {AliveTreatStream T NewState} [] isDead(Answer)|T then Answer=false {AliveTreatStream T State} [] chargeItem(ID Item)|T then NewState in - {System.show 'Player'#State.id.id#'received'#chargeItem(ID Item)} NewState={HandleChargeItem State chargeItem(ID Item)} - {System.show 'Player'#State.id.id#'replied'#chargeItem(ID Item)} {AliveTreatStream T NewState} [] fireItem(ID KindFire)|T then NewState in - {System.show 'Player'#State.id.id#'received'#fireItem(ID KindFire)} NewState={HandleFireItem State fireItem(ID KindFire)} - {System.show 'Player'#State.id.id#'replied'#fireItem(ID KindFire)} {AliveTreatStream T NewState} [] fireMine(ID Mine)|T then NewState in - {System.show 'Player'#State.id.id#'received'#fireMine(ID Mine)} NewState={HandleFireMine State fireMine(ID Mine)} - {System.show 'Player'#State.id.id#'replied'#fireMine(ID Mine)} {AliveTreatStream T NewState} [] sayCharge(ID KindItem)|T then %% Ignored - {System.show 'Player'#State.id.id#'received'#sayCharge(ID KindItem)} {AliveTreatStream T State} [] sayMinePlaced(ID)|T then %% Ignored - {System.show 'Player'#State.id.id#'received'#sayMinePlaced(ID)} {AliveTreatStream T State} [] sayMissileExplode(ID Pos Msg)|T then NewState in - {System.show 'Player'#State.id.id#'received'#sayMissileExplode(ID Pos Msg)} NewState={HandleExplosion State ID Pos Msg} - {System.show 'Player'#State.id.id#'replied'#sayMissileExplode(ID Pos Msg)} if NewState.life > 0 then {AliveTreatStream T NewState} else {DeadTreatStream T NewState} end [] sayMineExplode(ID Pos Msg)|T then NewState in - {System.show 'Player'#State.id.id#'received'#sayMineExplode(ID Pos Msg)} NewState={HandleExplosion State ID Pos Msg} - {System.show 'Player'#State.id.id#'replied'#sayMineExplode(ID Pos Msg)} if NewState.life > 0 then {AliveTreatStream T NewState} else {DeadTreatStream T NewState} end [] sayPassingDrone(drone(row X) ID Answer)|T then - {System.show 'Player'#State.id.id#'received'#sayPassingDrone(drone(row X) ID Answer)} ID=State.id Answer=State.pos.x==X - {System.show 'Player'#State.id.id#'replied'#sayPassingDrone(drone(row X) ID Answer)} {AliveTreatStream T State} [] sayPassingDrone(drone(column Y) ID Answer)|T then - {System.show 'Player'#State.id.id#'received'#sayPassingDrone(drone(column Y) ID Answer)} ID=State.id Answer=State.pos.y==Y - {System.show 'Player'#State.id.id#'replied'#sayPassingDrone(drone(column Y) ID Answer)} {AliveTreatStream T State} [] sayAnswerDrone(Drone ID true)|T then - {System.show 'Player'#State.id.id#'received'#sayAnswerDrone(Drone ID true)} if ID.id \= State.id.id then NewState in NewState={HandleSayAnswerDrone State State.droneLogs sayAnswerDrone(Drone ID true) nil} - {System.show 'Player'#State.id.id#'received'#NewState.droneLogs} {AliveTreatStream T NewState} else {AliveTreatStream T State} end [] sayAnswerDrone(Drone ID false)|T then %% Ignore - {System.show 'Player'#State.id.id#'received'#sayAnswerDrone(Drone ID false)} {AliveTreatStream T State} [] sayPassingSonar(ID Resp)|T then ID=State.id Resp=pt(x:State.pos.x y:{Max 0 State.pos.y}) - {System.show 'Player'#State.id.id#'received'#sayPassingSonar(ID Resp)} {AliveTreatStream T State} [] sayAnswerSonar(ID Answer)|T then %% Ignore - {System.show 'Player'#State.id.id#'received'#sayAnswerSonar(ID Answer)} {AliveTreatStream T State} [] sayDamageTaken(ID Damage LifeLeft)|T then %% Ignore - {System.show 'Player'#State.id.id#'received'#sayDamageTaken(ID Damage LifeLeft)} {AliveTreatStream T State} [] sayDeath(ID)|T then NewState RemovedDeadEnemy in %% Ignore RemovedDeadEnemy={List.filter State.enemies fun{$ Enemy} Enemy.idNum \= ID.id end} NewState={NewRec State enemies RemovedDeadEnemy} - {System.show 'Player'#State.id.id#'received'#sayDeath(ID)} {AliveTreatStream T NewState} end end diff --git a/Player020Hunter.oz b/Player020Hunter.oz index 89a666beea45c5d6d7aa0b9f626ab63dc6d24a4c..421e936298766d714b9cf8e515d5ad94d64b672c 100644 --- a/Player020Hunter.oz +++ b/Player020Hunter.oz @@ -2,7 +2,6 @@ functor import Input OS - System export portPlayer:StartPlayer define @@ -125,7 +124,6 @@ define {NewRec {NewRec State chargingItems NewChargingItems} chargedItems AfterCharge.fireItem|State.chargedItems} else NewChargingItems={List.map State.chargingItems fun{$ Item} - {System.show Item} if Item.charge==ToCharge.charge andthen {Record.label Item.fireItem}=={Record.label AfterCharge.fireItem} then AfterCharge else Item end end} @@ -256,8 +254,8 @@ define proc{DeadTreatStream Stream State} case Stream - of nil|T then {System.show 'Hunter down'} skip - [] initPosition(ID Pos)|T then + of nil|T then skip + [] initPosition(ID Pos)|T then ID=null {DeadTreatStream T State} [] move(ID Pos Direction)|T then @@ -313,93 +311,64 @@ define proc{AliveTreatStream Stream State} case Stream - of nil|T then {System.show 'Hunter down'} skip + of nil|T then skip [] initPosition(ID Pos)|T then NewState in - {System.show 'Player'#State.id.id#'received'#initPosition(ID Pos)} NewState={HandleInitPosition State initPosition(ID Pos)} - {System.show 'Player'#State.id.id#'replied'#initPosition(ID Pos)} {AliveTreatStream T NewState} [] move(ID Pos Direction)|T then NewState in - {System.show 'Player'#State.id.id#'received'#move(ID Pos Direction)} NewState={HandleMove State move(ID Pos Direction)} - {System.show 'Player'#State.id.id#'replied'#move(ID Pos Direction)} {AliveTreatStream T NewState} - [] dive|T then %% Ignored - {System.show 'Player'#State.id.id#'received'#dive} + [] dive|T then {AliveTreatStream T State} - [] saySurface(ID)|T then %% Ignored - {System.show 'Player'#State.id.id#'received'#saySurface(ID)} + [] saySurface(ID)|T then {AliveTreatStream T State} - [] sayMove(ID Direction)|T then NewState in %% Ignored - {System.show 'Player'#State.id.id#'received'#sayMove(ID Direction)} + [] sayMove(ID Direction)|T then NewState in NewState={HandleSayMove State State.enemies sayMove(ID Direction) nil} - {System.show 'Player'#State.id.id#'enemies'#NewState.enemies} {AliveTreatStream T NewState} [] isDead(Answer)|T then Answer=false {AliveTreatStream T State} [] chargeItem(ID Item)|T then NewState in - {System.show 'Player'#State.id.id#'received'#chargeItem(ID Item)} NewState={HandleChargeItem State chargeItem(ID Item)} - {System.show 'Player'#State.id.id#'replied'#chargeItem(ID Item)} {AliveTreatStream T NewState} [] fireItem(ID KindFire)|T then NewState in - {System.show 'Player'#State.id.id#'received'#fireItem(ID KindFire)} NewState={HandleFireItem State fireItem(ID KindFire)} - {System.show 'Player'#State.id.id#'replied'#fireItem(ID KindFire)} {AliveTreatStream T NewState} [] fireMine(ID Mine)|T then NewState in - {System.show 'Player'#State.id.id#'received'#fireMine(ID Mine)} NewState={HandleFireMine State fireMine(ID Mine)} - {System.show 'Player'#State.id.id#'replied'#fireMine(ID Mine)} {AliveTreatStream T NewState} [] sayCharge(ID KindItem)|T then %% Ignored - {System.show 'Player'#State.id.id#'received'#sayCharge(ID KindItem)} {AliveTreatStream T State} [] sayMinePlaced(ID)|T then %% Ignored - {System.show 'Player'#State.id.id#'received'#sayMinePlaced(ID)} {AliveTreatStream T State} [] sayMissileExplode(ID Pos Msg)|T then NewState in - {System.show 'Player'#State.id.id#'received'#sayMissileExplode(ID Pos Msg)} NewState={HandleExplosion State ID Pos Msg} - {System.show 'Player'#State.id.id#'replied'#sayMissileExplode(ID Pos Msg)} if NewState.life > 0 then {AliveTreatStream T NewState} else {DeadTreatStream T NewState} end [] sayMineExplode(ID Pos Msg)|T then NewState in - {System.show 'Player'#State.id.id#'received'#sayMineExplode(ID Pos Msg)} NewState={HandleExplosion State ID Pos Msg} - {System.show 'Player'#State.id.id#'replied'#sayMineExplode(ID Pos Msg)} if NewState.life > 0 then {AliveTreatStream T NewState} else {DeadTreatStream T NewState} end [] sayPassingDrone(drone(row X) ID Answer)|T then - {System.show 'Player'#State.id.id#'received'#sayPassingDrone(drone(row X) ID Answer)} ID=State.id Answer=State.pos.x==X - {System.show 'Player'#State.id.id#'replied'#sayPassingDrone(drone(row X) ID Answer)} {AliveTreatStream T State} [] sayPassingDrone(drone(column Y) ID Answer)|T then - {System.show 'Player'#State.id.id#'received'#sayPassingDrone(drone(column Y) ID Answer)} ID=State.id Answer=State.pos.y==Y - {System.show 'Player'#State.id.id#'replied'#sayPassingDrone(drone(column Y) ID Answer)} {AliveTreatStream T State} [] sayAnswerDrone(Drone ID Answer)|T then %% Ignore - {System.show 'Player'#State.id.id#'received'#sayAnswerDrone(Drone ID Answer)} {AliveTreatStream T State} [] sayPassingSonar(ID Resp)|T then ID=State.id Resp=pt(x:State.pos.x y:{Max 0 State.pos.y}) - {System.show 'Player'#State.id.id#'received'#sayPassingSonar(ID Resp)} {AliveTreatStream T State} [] sayAnswerSonar(ID Answer)|T then %% Ignore - {System.show 'Player'#State.id.id#'received'#sayAnswerSonar(ID Answer)} {AliveTreatStream T State} [] sayDamageTaken(ID Damage LifeLeft)|T then %% Ignore - {System.show 'Player'#State.id.id#'received'#sayDamageTaken(ID Damage LifeLeft)} {AliveTreatStream T State} [] sayDeath(ID)|T then NewState RemovedDeadEnemy in %% Ignore RemovedDeadEnemy={List.filter State.enemies fun{$ Enemy} Enemy.idNum \= ID.id end} NewState={NewRec State enemies RemovedDeadEnemy} - {System.show 'Player'#State.id.id#'received'#sayDeath(ID)} {AliveTreatStream T NewState} end end diff --git a/Player020Random.oz b/Player020Random.oz index 99482a3602de716e3f83b4b343e9d86ece25bd0d..c534f6a51570c85294f13d4d095d6156043cdca4 100644 --- a/Player020Random.oz +++ b/Player020Random.oz @@ -2,7 +2,6 @@ functor import Input OS - System export portPlayer:StartPlayer define @@ -202,7 +201,7 @@ define proc{DeadTreatStream Stream State} case Stream - of nil|T then {System.show 'Random down'} skip + of nil|T then skip [] initPosition(ID Pos)|T then ID=null {DeadTreatStream T State} @@ -259,89 +258,61 @@ define proc{AliveTreatStream Stream State} case Stream - of nil then {System.show 'Random down'} skip skip + of nil|T then skip [] initPosition(ID Pos)|T then NewState in - {System.show 'Player'#State.id.id#'received'#initPosition(ID Pos)} NewState={HandleInitPosition State initPosition(ID Pos)} - {System.show 'Player'#State.id.id#'replied'#initPosition(ID Pos)} {AliveTreatStream T NewState} [] move(ID Pos Direction)|T then NewState in - {System.show 'Player'#State.id.id#'received'#move(ID Pos Direction)} NewState={HandleMove State move(ID Pos Direction)} - {System.show 'Player'#State.id.id#'replied'#move(ID Pos Direction)} {AliveTreatStream T NewState} - [] dive|T then %% Ignored - {System.show 'Player'#State.id.id#'received'#dive} + [] dive|T then {AliveTreatStream T State} [] saySurface(ID)|T then %% Ignored - {System.show 'Player'#State.id.id#'received'#saySurface(ID)} {AliveTreatStream T State} [] sayMove(ID Direct)|T then %% Ignored - {System.show 'Player'#State.id.id#'received'#sayMove(ID Direct)} {AliveTreatStream T State} [] isDead(Answer)|T then Answer=false {AliveTreatStream T State} [] chargeItem(ID Item)|T then NewState in - {System.show 'Player'#State.id.id#'received'#chargeItem(ID Item)} NewState={HandleChargeItem State chargeItem(ID Item)} - {System.show 'Player'#State.id.id#'replied'#chargeItem(ID Item)} {AliveTreatStream T NewState} [] fireItem(ID KindFire)|T then NewState in - {System.show 'Player'#State.id.id#'received'#fireItem(ID KindFire)} NewState={HandleFireItem State fireItem(ID KindFire)} - {System.show 'Player'#State.id.id#'replied'#fireItem(ID KindFire)} {AliveTreatStream T NewState} [] fireMine(ID Mine)|T then NewState in - {System.show 'Player'#State.id.id#'received'#fireMine(ID Mine)} NewState={HandleFireMine State fireMine(ID Mine)} - {System.show 'Player'#State.id.id#'replied'#fireMine(ID Mine)} {AliveTreatStream T NewState} [] sayCharge(ID KindItem)|T then %% Ignored - {System.show 'Player'#State.id.id#'received'#sayCharge(ID KindItem)} {AliveTreatStream T State} [] sayMinePlaced(ID)|T then %% Ignored - {System.show 'Player'#State.id.id#'received'#sayMinePlaced(ID)} {AliveTreatStream T State} [] sayMissileExplode(ID Pos Msg)|T then NewState in - {System.show 'Player'#State.id.id#'received'#sayMissileExplode(ID Pos Msg)} NewState={HandleExplosion State ID Pos Msg} - {System.show 'Player'#State.id.id#'replied'#sayMissileExplode(ID Pos Msg)} if NewState.life > 0 then {AliveTreatStream T NewState} else {DeadTreatStream T NewState} end [] sayMineExplode(ID Pos Msg)|T then NewState in - {System.show 'Player'#State.id.id#'received'#sayMineExplode(ID Pos Msg)} NewState={HandleExplosion State ID Pos Msg} - {System.show 'Player'#State.id.id#'replied'#sayMineExplode(ID Pos Msg)} if NewState.life > 0 then {AliveTreatStream T NewState} else {DeadTreatStream T NewState} end [] sayPassingDrone(drone(row X) ID Answer)|T then - {System.show 'Player'#State.id.id#'received'#sayPassingDrone(drone(row X) ID Answer)} ID=State.id Answer=State.pos.x==X - {System.show 'Player'#State.id.id#'replied'#sayPassingDrone(drone(row X) ID Answer)} {AliveTreatStream T State} [] sayPassingDrone(drone(column Y) ID Answer)|T then - {System.show 'Player'#State.id.id#'received'#sayPassingDrone(drone(column Y) ID Answer)} ID=State.id Answer=State.pos.y==Y - {System.show 'Player'#State.id.id#'replied'#sayPassingDrone(drone(column Y) ID Answer)} {AliveTreatStream T State} [] sayAnswerDrone(Drone ID Answer)|T then %% Ignore - {System.show 'Player'#State.id.id#'received'#sayAnswerDrone(Drone ID Answer)} {AliveTreatStream T State} [] sayPassingSonar(ID Resp)|T then ID=State.id Resp=pt(x:State.pos.x y:{Max 0 State.pos.y}) - {System.show 'Player'#State.id.id#'received'#sayPassingSonar(ID Resp)} {AliveTreatStream T State} [] sayAnswerSonar(ID Answer)|T then %% Ignore - {System.show 'Player'#State.id.id#'received'#sayAnswerSonar(ID Answer)} {AliveTreatStream T State} [] sayDamageTaken(ID Damage LifeLeft)|T then %% Ignore - {System.show 'Player'#State.id.id#'received'#sayDamageTaken(ID Damage LifeLeft)} {AliveTreatStream T State} [] sayDeath(ID)|T then %% Ignore - {System.show 'Player'#State.id.id#'received'#sayDeath(ID)} {AliveTreatStream T State} end end @@ -352,6 +323,7 @@ define in {NewPort Stream Port} thread + {AliveTreatStream Stream '#'( id:id(id:ID color:Color name:player020hunter) life:Input.maxDamage pos:pt(x:0 y:0) chargingItems:[ {GetNewChargeFireItem mine} {GetNewChargeFireItem missile}