diff --git a/assignments/nbproject/project.properties b/assignments/nbproject/project.properties
index 58458faeae7e33494078e93d20fe58c9ab4e9521..9003d11a34aa62d496dd78e30b32d7bea504d908 100644
--- a/assignments/nbproject/project.properties
+++ b/assignments/nbproject/project.properties
@@ -1,135 +1,135 @@
-annotation.processing.enabled=true
-annotation.processing.enabled.in.editor=false
-annotation.processing.processors.list=
-annotation.processing.run.all.processors=true
-annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
-application.desc=Student assignments performed as part of NPS course Networked Graphics MV3500.  This course is an introduction to network communications in simulation applications. Topics include an introduction to the TCP/IP protocol stack; TCP/IP socket communications, including TCP, UDP, and multicast; and protocol design issues, with emphasis on Distributed Interactive Simulation (DIS) Protocol and High Level Architecture (HLA). Course emphasis is on creation and testing of network programming network code and web-browser applications.
-application.homepage=https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/assignments
-application.splash=../..\\NetworkedGraphicsMV3500\\documentation\\images\\OpenDisSurferDude.png
-application.title=NPS Networked Graphics MV3500 assignments
-application.vendor=Don Brutzman
-auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml
-build.classes.dir=${build.dir}/classes
-build.classes.excludes=**/*.java,**/*.form
-# This directory is removed when the project is cleaned:
-build.dir=build
-build.generated.dir=${build.dir}/generated
-build.generated.sources.dir=${build.dir}/generated-sources
-# Only compile against the classpath explicitly listed here:
-build.sysclasspath=ignore
-build.test.classes.dir=${build.dir}/test/classes
-build.test.results.dir=${build.dir}/test/results
-# Uncomment to specify the preferred debugger connection transport:
-#debug.transport=dt_socket
-debug.classpath=\
-    ${run.classpath}
-debug.modulepath=\
-    ${run.modulepath}
-debug.test.classpath=\
-    ${run.test.classpath}
-debug.test.modulepath=\
-    ${run.test.modulepath}
-# Files in build.classes.dir which should be excluded from distribution jar
-# Avoid compilation or inclusion of student project depending on mutex libraries only available in JDK8
-# https://stackoverflow.com/questions/27906896/exclude-package-from-build-but-not-from-view-in-netbeans-8
-excludes=**/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/**
-dist.archive.excludes=**/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/**
-
-# This directory is removed when the project is cleaned:
-dist.dir=dist
-dist.jar=${dist.dir}/Networked_Graphics_MV3500_assignments.jar
-dist.javadoc.dir=${dist.dir}/javadoc
-endorsed.classpath=
-file.reference.dis-enums-1.3.jar=../lib/dis-enums-1.3.jar
-file.reference.opendis7-full.jar=../lib/opendis7-full.jar
-file.reference.open-dis_4.16.jar=../lib/open-dis_4.16.jar
-file.reference.simkit-doc.zip=../lib/simkit-doc.zip
-file.reference.simkit-src.zip=../lib/simkit-src.zip
-file.reference.simkit.jar=../lib/simkit.jar
-#file.reference.opendis7-enumerations-classes.jar=../lib/opendis7-enumerations-classes.jar
-#file.reference.opendis7-pdus-classes.jar=../lib/opendis7-pdus-classes.jar
-includes=**
-jar.archive.disabled=${jnlp.enabled}
-jar.compress=false
-jar.index=${jnlp.enabled}
-javac.classpath=\
-    ${file.reference.opendis7-full.jar}:\
-    ${file.reference.dis-enums-1.3.jar}:\
-    ${file.reference.open-dis_4.16.jar}:\
-    ${file.reference.simkit-doc.zip}:\
-    ${file.reference.simkit-src.zip}:\
-    ${file.reference.simkit.jar}
-#   ${file.reference.opendis7-enumerations-classes.jar}:\
-#   ${file.reference.opendis7-pdus-classes.jar}:\
-
-# Space-separated list of extra javac options
-javac.compilerargs=-Xlint:deprecation -Xlint:unchecked
-javac.deprecation=false
-javac.external.vm=true
-javac.modulepath=
-javac.processormodulepath=
-javac.processorpath=\
-    ${javac.classpath}
-javac.source=22
-javac.target=22
-javac.test.classpath=\
-    ${javac.classpath}:\
-    ${build.classes.dir}
-javac.test.modulepath=\
-    ${javac.modulepath}
-javac.test.processorpath=\
-    ${javac.test.classpath}
-javadoc.additionalparam=-header "NPS Networked Graphics MV3500 Assignments"
-javadoc.author=true
-javadoc.encoding=${source.encoding}
-javadoc.html5=false
-javadoc.noindex=false
-javadoc.nonavbar=false
-javadoc.notree=false
-javadoc.private=false
-#javadoc.reference.opendis7-enumerations-classes.jar=../lib/opendis7-enumerations-javadoc.jar
-javadoc.splitindex=true
-javadoc.use=true
-javadoc.version=false
-javadoc.windowtitle=MV3500 Assignments
-jlink.launcher=false
-jlink.launcher.name=Networked_Graphics_MV3500_assignments
-jnlp.codebase.type=no.codebase
-jnlp.descriptor=application
-jnlp.enabled=false
-jnlp.mixed.code=default
-jnlp.offline-allowed=false
-jnlp.signed=false
-jnlp.signing=
-jnlp.signing.alias=
-jnlp.signing.keystore=
-# Optional override of default Application-Library-Allowable-Codebase attribute identifying the locations where your signed RIA is expected to be found.
-manifest.custom.application.library.allowable.codebase=
-# Optional override of default Caller-Allowable-Codebase attribute identifying the domains from which JavaScript code can make calls to your RIA without security prompts.
-manifest.custom.caller.allowable.codebase=
-# Optional override of default Codebase manifest attribute, use to prevent RIAs from being repurposed
-manifest.custom.codebase=
-# Optional override of default Permissions manifest attribute (supported values: sandbox, all-permissions)
-manifest.custom.permissions=
-meta.inf.dir=${src.dir}/META-INF
-mkdist.disabled=false
-platform.active=default_platform
-project.licensePath=../license.txt
-run.classpath=\
-    ${javac.classpath}:\
-    ${build.classes.dir}
-# Space-separated list of JVM arguments used when running the project.
-# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
-# To set system properties for unit tests define test-sys-prop.name=value:
-run.jvmargs=
-run.modulepath=\
-    ${javac.modulepath}
-run.test.classpath=\
-    ${javac.test.classpath}:\
-    ${build.test.classes.dir}
-run.test.modulepath=\
-    ${javac.test.modulepath}
-source.encoding=UTF-8
-#source.reference.opendis7-enumerations-classes.jar=../lib/opendis7-enumerations-source.jar
-src.dir=src
-test.src.dir=test
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=false
+annotation.processing.processors.list=
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+application.desc=Student assignments performed as part of NPS course Networked Graphics MV3500.  This course is an introduction to network communications in simulation applications. Topics include an introduction to the TCP/IP protocol stack; TCP/IP socket communications, including TCP, UDP, and multicast; and protocol design issues, with emphasis on Distributed Interactive Simulation (DIS) Protocol and High Level Architecture (HLA). Course emphasis is on creation and testing of network programming network code and web-browser applications.
+application.homepage=https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/tree/master/assignments
+application.splash=../..\\NetworkedGraphicsMV3500\\documentation\\images\\OpenDisSurferDude.png
+application.title=NPS Networked Graphics MV3500 assignments
+application.vendor=Don Brutzman
+auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml
+build.classes.dir=${build.dir}/classes
+build.classes.excludes=**/*.java,**/*.form
+# This directory is removed when the project is cleaned:
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+# Only compile against the classpath explicitly listed here:
+build.sysclasspath=ignore
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+# Uncomment to specify the preferred debugger connection transport:
+#debug.transport=dt_socket
+debug.classpath=\
+    ${run.classpath}
+debug.modulepath=\
+    ${run.modulepath}
+debug.test.classpath=\
+    ${run.test.classpath}
+debug.test.modulepath=\
+    ${run.test.modulepath}
+# Files in build.classes.dir which should be excluded from distribution jar
+# Avoid compilation or inclusion of student project depending on mutex libraries only available in JDK8
+# https://stackoverflow.com/questions/27906896/exclude-package-from-build-but-not-from-view-in-netbeans-8
+excludes=**/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/**
+dist.archive.excludes=**/MV3500Cohort2019JulySeptember/projects/BrennenstuhlKnobelochMcCann/**
+
+# This directory is removed when the project is cleaned:
+dist.dir=dist
+dist.jar=${dist.dir}/Networked_Graphics_MV3500_assignments.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+endorsed.classpath=
+file.reference.dis-enums-1.3.jar=../lib/dis-enums-1.3.jar
+file.reference.opendis7-full.jar=../lib/opendis7-full.jar
+file.reference.open-dis_4.16.jar=../lib/open-dis_4.16.jar
+file.reference.simkit-doc.zip=../lib/simkit-doc.zip
+file.reference.simkit-src.zip=../lib/simkit-src.zip
+file.reference.simkit.jar=../lib/simkit.jar
+#file.reference.opendis7-enumerations-classes.jar=../lib/opendis7-enumerations-classes.jar
+#file.reference.opendis7-pdus-classes.jar=../lib/opendis7-pdus-classes.jar
+includes=**
+jar.archive.disabled=${jnlp.enabled}
+jar.compress=false
+jar.index=${jnlp.enabled}
+javac.classpath=\
+    ${file.reference.opendis7-full.jar}:\
+    ${file.reference.dis-enums-1.3.jar}:\
+    ${file.reference.open-dis_4.16.jar}:\
+    ${file.reference.simkit-doc.zip}:\
+    ${file.reference.simkit-src.zip}:\
+    ${file.reference.simkit.jar}
+#   ${file.reference.opendis7-enumerations-classes.jar}:\
+#   ${file.reference.opendis7-pdus-classes.jar}:\
+
+# Space-separated list of extra javac options
+javac.compilerargs=-Xlint:deprecation -Xlint:unchecked
+javac.deprecation=false
+javac.external.vm=true
+javac.modulepath=
+javac.processormodulepath=
+javac.processorpath=\
+    ${javac.classpath}
+javac.source=22
+javac.target=22
+javac.test.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+javac.test.modulepath=\
+    ${javac.modulepath}
+javac.test.processorpath=\
+    ${javac.test.classpath}
+javadoc.additionalparam=-header "NPS Networked Graphics MV3500 Assignments"
+javadoc.author=true
+javadoc.encoding=${source.encoding}
+javadoc.html5=false
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.private=false
+#javadoc.reference.opendis7-enumerations-classes.jar=../lib/opendis7-enumerations-javadoc.jar
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=MV3500 Assignments
+jlink.launcher=false
+jlink.launcher.name=Networked_Graphics_MV3500_assignments
+jnlp.codebase.type=no.codebase
+jnlp.descriptor=application
+jnlp.enabled=false
+jnlp.mixed.code=default
+jnlp.offline-allowed=false
+jnlp.signed=false
+jnlp.signing=
+jnlp.signing.alias=
+jnlp.signing.keystore=
+# Optional override of default Application-Library-Allowable-Codebase attribute identifying the locations where your signed RIA is expected to be found.
+manifest.custom.application.library.allowable.codebase=
+# Optional override of default Caller-Allowable-Codebase attribute identifying the domains from which JavaScript code can make calls to your RIA without security prompts.
+manifest.custom.caller.allowable.codebase=
+# Optional override of default Codebase manifest attribute, use to prevent RIAs from being repurposed
+manifest.custom.codebase=
+# Optional override of default Permissions manifest attribute (supported values: sandbox, all-permissions)
+manifest.custom.permissions=
+meta.inf.dir=${src.dir}/META-INF
+mkdist.disabled=false
+platform.active=default_platform
+project.licensePath=../license.txt
+run.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+# Space-separated list of JVM arguments used when running the project.
+# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
+# To set system properties for unit tests define test-sys-prop.name=value:
+run.jvmargs=
+run.modulepath=\
+    ${javac.modulepath}
+run.test.classpath=\
+    ${javac.test.classpath}:\
+    ${build.test.classes.dir}
+run.test.modulepath=\
+    ${javac.test.modulepath}
+source.encoding=UTF-8
+#source.reference.opendis7-enumerations-classes.jar=../lib/opendis7-enumerations-source.jar
+src.dir=src
+test.src.dir=test
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework3/Romero/RomeroSimulationProgram.java b/assignments/src/MV3500Cohort2024JulySeptember/homework3/Romero/RomeroSimulationProgram.java
index 8c3664dfb408fe2a5bfe73f548320cda92ed25cd..17146884a69739c454be4dae27a23632195da1c0 100644
--- a/assignments/src/MV3500Cohort2024JulySeptember/homework3/Romero/RomeroSimulationProgram.java
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework3/Romero/RomeroSimulationProgram.java
@@ -5,13 +5,23 @@
  */
 package MV3500Cohort2024JulySeptember.homework3.Romero;
 
-import edu.nps.moves.dis7.entities.swe.platform.surface._001Poseidon;
-import edu.nps.moves.dis7.entities.swe.platform.surface._002Triton;
+//import edu.nps.moves.dis7.entities.swe.platform.surface._001Poseidon;
+//import edu.nps.moves.dis7.entities.swe.platform.surface._002Triton;
+//https://savage.nps.edu/opendis7-java/javadoc/edu/nps/moves/dis7/entities/usa/platform/land/ChevyS10ShooterwAK74.html
+import edu.nps.moves.dis7.entities.usa.platform.land.M41lighttank;
+
+//https://savage.nps.edu/opendis7-java/javadoc/edu/nps/moves/dis7/entities/usa/platform/land/ChenowthLightStrikeVehicleLSV.html
+import edu.nps.moves.dis7.entities.usa.platform.land.ChenowthLightStrikeVehicleLSV;
+
+//https://savage.nps.edu/open-dis7-java/javadoc/edu/nps/moves/dis7/entities/chn/munition/tactical/Ballistic.html
+//import edu.nps.moves.dis7.entities.usa.*;
+import edu.nps.moves.dis7.enumerations.VariableRecordType;
 import edu.nps.moves.dis7.enumerations.*;
 import edu.nps.moves.dis7.pdus.*;
 import edu.nps.moves.dis7.utilities.DisChannel;
 import edu.nps.moves.dis7.utilities.PduFactory;
 import java.time.LocalDateTime;
+import java.util.Random;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -42,7 +52,7 @@ public class RomeroSimulationProgram
     /** current simulation time in seconds */
     double  simulationTimeSeconds = simulationTimeInitial;
     /** Maximum number of simulation loops */
-    int MAX_LOOP_COUNT = 4;
+    int MAX_LOOP_COUNT = 10;
     
     String narrativeMessage1 = new String();
     String narrativeMessage2 = new String();
@@ -52,19 +62,31 @@ public class RomeroSimulationProgram
     protected EntityID           entityID_1          = new EntityID();
     /** EntityID settings for entity 2 */
     protected EntityID           entityID_2          = new EntityID();
+    protected EntityID           entityID_3          = new EntityID();
     /** ESPDU for entity 1 */
     protected EntityStatePdu     entityStatePdu_1;
     /** ESPDU for entity 2 */
     protected EntityStatePdu     entityStatePdu_2;
+    /** ESPDU for entity 3 */
+    protected EntityStatePdu     entityStatePdu_3;
     /** FirePdu for entity 1 first  weapon (if any) */
-    protected FirePdu            firePdu_1a;
+    protected FirePdu            firePdu_1a = new FirePdu();
     /** FirePdu for entity 1 second weapon (if any) */
     protected FirePdu            firePdu_1b;
     /** MunitionDescriptor for these weapons */
-    protected MunitionDescriptor munitionDescriptor1;
+    protected MunitionDescriptor munition;
     
     // hey programmer, what other state do you want?  this is a good place to declare it...
+    protected EntityType        entityType_1;
+    protected EntityType        entityType_2;
+    protected EntityType        entityType_3;
     
+    protected EntityType munitionType = new EntityType();
+        
+    Vector3Double location_1 = new Vector3Double();
+    Vector3Double location_2 = new Vector3Double();
+    Vector3Double location_3 = new Vector3Double();
+        
     /**
      * Constructor to create an instance of this class.
      * Design goal: additional built-in initialization conveniences can go here
@@ -139,7 +161,7 @@ public class RomeroSimulationProgram
 
         // TODO confirm whether recorder is explicitly started by programmer (or not)
         
-//      disChannel.sendCommentPdu(VariableRecordType.OTHER, "DisThreadedNetworkInterface.initializeDisChannel() complete"); // hello channel, debug
+      //disChannel.sendCommentPdu(VariableRecordType.OTHER, "DisThreadedNetworkInterface.initializeDisChannel() complete"); // hello channel, debug
     }
     
     /** Get ready, get set... initialize simulation entities.  Who's who in the zoo?
@@ -150,39 +172,110 @@ public class RomeroSimulationProgram
             pduFactory      = disChannel.getPduFactory();
         entityStatePdu_1    = pduFactory.makeEntityStatePdu();
         entityStatePdu_2    = pduFactory.makeEntityStatePdu();
+        entityStatePdu_3    = pduFactory.makeEntityStatePdu();        
         firePdu_1a          = pduFactory.makeFirePdu();
-        firePdu_1b          = pduFactory.makeFirePdu();
-        munitionDescriptor1 = new MunitionDescriptor();
-        
+        //firePdu_1b          = pduFactory.makeFirePdu();
+        munition = new MunitionDescriptor();
+      
         // Your model setup: define participants.  who's who in this zoo?
         // Assuming you keep track of entity objects...  here is some support for for Entity 1.
         
-        // PDU objects are already declared and instances created, so now set their values.
-        // who is who in our big zoo, sufficient for global participation if we need it
-        entityID_1.setSiteID(1).setApplicationID(2).setEntityID(3); // made-up example ID;
-        disChannel.addEntity(entityID_1);
-        
-        entityID_2.setSiteID(1).setApplicationID(2).setEntityID(4); // made-up example ID; 
-        disChannel.addEntity(entityID_2);
-        // TODO someday, use enumerations for sites as part of a SimulationManager object; e.g. is there a unique site triplet for MOVES Institute?
+        try {
+            Thread.sleep(2000);
+            System.out.println("\nWho's who in this zoo?\n");
+            Thread.sleep(2000);
+                
+            // PDU objects are already declared and instances created, so now set their values.
+            // who is who in our big zoo, sufficient for global participation if we need it
+            entityID_1.setSiteID(1).setApplicationID(2).setEntityID(3); // made-up example ID;
+            disChannel.addEntity(entityID_1);
 
-        entityStatePdu_1.setEntityID(entityID_1);
-        entityStatePdu_1.setForceId(ForceID.FRIENDLY);
-        entityStatePdu_1.setEntityType(new _001Poseidon());       // note import statement above
-//      entityStatePdu_1.setMarking("Entity #1");
-        entityStatePdu_1.setEntityType(new edu.nps.moves.dis7.entities.usa.platform.air.MV22B()); // note import statement at top
-        entityStatePdu_1.setMarking("Entity #53");
-        entityStatePdu_1.getMarkingString(); // use Netbeans Debug breakpoint here to check left justified...
+            entityID_2.setSiteID(1).setApplicationID(2).setEntityID(4); // made-up example ID; 
+            disChannel.addEntity(entityID_2);
+            // TODO someday, use enumerations for sites as part of a SimulationManager object; e.g. is there a unique site triplet for MOVES Institute?
 
-        entityStatePdu_2.setEntityID(entityID_2);
-        entityStatePdu_2.setForceId(ForceID.OPPOSING);
-        entityStatePdu_2.setEntityType(new _002Triton()); // note import statement above
-        entityStatePdu_2.setMarking("Entity #2");
+            entityID_3.setSiteID(1).setApplicationID(2).setEntityID(5); // made-up example ID;
+            disChannel.addEntity(entityID_3);
 
-        // TODO how should we customize this munition?  what are key parameters for your simulation? 
-        // more is needed here by scenario authors...
-        munitionDescriptor1.setQuantity(1);
-        firePdu_1a.setDescriptor(munitionDescriptor1).setRange(1000.0f);
+            
+            //*********************************************************************************
+            
+            entityStatePdu_1.setEntityID(entityID_1);
+            entityStatePdu_1.setForceId(ForceID.OPPOSING);
+            entityStatePdu_1.setEntityType(new M41lighttank());       // note import statement above
+    //      entityStatePdu_1.setMarking("Entity #1");
+            //entityStatePdu_1.setEntityType(new edu.nps.moves.dis7.entities.usa.platform.air.MV22B()); // note import statement at top
+            entityStatePdu_1.setMarking("Entity #001");
+            entityStatePdu_1.getMarkingString(); // use Netbeans Debug breakpoint here to check left justified...
+            location_1.setX(500.0);
+            location_1.setY(1000.0);
+            location_1.setZ(0.0);
+            entityStatePdu_1.setEntityLocation(location_1);
+            firePdu_1a.setFiringEntityID(entityID_1);            
+            //firePdu_1a.setLocationInWorldCoordinates(location_1);
+
+            System.out.println("OPPOSING entity: " + entityStatePdu_1.getEntityType() + "\n");
+            System.out.println("ID: " + entityStatePdu_1.getEntityID() + "\n");            
+            System.out.println("Location: " + entityStatePdu_1.getEntityLocation() + "\n");
+            
+            Thread.sleep(1500);
+                        
+//            munitionType.setEntityKind(EntityKind.MUNITION);
+//            munitionType.setDomain((short) )
+
+            munition.setQuantity(30);
+            munition.setMunitionType(munitionType);
+            System.out.println("Munition: " + munition.getMunitionType() + "\n");
+            firePdu_1a.setDescriptor(munition).setRange(600.0f);
+                        
+            Vector3Float munitionVelocity = new Vector3Float();
+            munitionVelocity.setX(200.0f);
+            munitionVelocity.setY(0.0f);
+            munitionVelocity.setZ(0.0f);
+            firePdu_1a.setVelocity(munitionVelocity);            
+            Thread.sleep(4000);
+            
+            //****************************************************
+
+            entityStatePdu_2.setEntityID(entityID_2);
+            entityStatePdu_2.setForceId(ForceID.FRIENDLY);
+            entityStatePdu_2.setEntityType(new ChenowthLightStrikeVehicleLSV()); // note import statement above
+            entityStatePdu_2.setMarking("Entity #2");
+            location_2.setX(1000.0);
+            location_2.setY(750.0);
+            location_2.setZ(0.0);
+            entityStatePdu_2.setEntityLocation(location_2);
+            firePdu_1a.setTargetEntityID(entityID_2);
+            
+            System.out.println("\n********\nFRIENDLY unit: " + entityStatePdu_2.getEntityType() + "\n");
+            System.out.println("ID: " + entityStatePdu_2.getEntityID() + "\n");            
+            System.out.println("Initial Location: " + entityStatePdu_2.getEntityLocation() + "\n");
+            Thread.sleep(4000);
+            
+            //*****************************************************
+            
+            entityStatePdu_3.setEntityID(entityID_3);
+            entityStatePdu_3.setForceId(ForceID.FRIENDLY);
+            entityStatePdu_3.setEntityType(new ChenowthLightStrikeVehicleLSV()); // note import statement above
+            entityStatePdu_3.setMarking("Entity #3");
+            location_3.setX(0.0);
+            location_3.setY(250.0);
+            location_3.setZ(0.0);
+            entityStatePdu_3.setEntityLocation(location_3);
+            firePdu_1a.setTargetEntityID(entityID_3);
+            
+            System.out.println("FRIENDLY unit: " + entityStatePdu_3.getEntityType() + "\n");
+            System.out.println("ID: " + entityStatePdu_3.getEntityID() + "\n");            
+            System.out.println("Initial Location: " + entityStatePdu_3.getEntityLocation() + "\n********\n");            
+            Thread.sleep(4000);
+                        
+            // TODO how should we customize this munition?  what are key parameters for your simulation? 
+            // more is needed here by scenario authors...
+           
+        
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
     }
                  
     /**
@@ -207,6 +300,8 @@ public class RomeroSimulationProgram
               int     simulationLoopCount = 0;        // variable, initialized at 0
               boolean simulationComplete = false;     // sentinel variable as termination condition, are we done yet?
         
+        int countImpactE2 = 0;
+        int countImpactE3 = 0;
         // TODO reset Clock Time for today's date and timestamp to zero, providing consistent outputs for each simulation run
         String timeMessage = "Simulation time " + simulationTimeSeconds + " at LocalDateTime " + LocalDateTime.now();
         disChannel.sendCommentPdu(simulationTimeSeconds, DisChannel.COMMENTPDU_TIME, timeMessage);
@@ -222,7 +317,18 @@ public class RomeroSimulationProgram
             // =============================================================================================
             // * your own simulation code starts here! *****************************************************
             // =============================================================================================
+            Random random = new Random();
+            double randomX = 0 + (950 - 0) * random.nextDouble();
+            double randomY = 0 + (750 - 0) * random.nextDouble();
             
+            double radius = 200.0;            
+            
+            Vector3Double targetLocation = new Vector3Double();
+            targetLocation.setX(randomX);
+            targetLocation.setY(randomY);
+            targetLocation.setZ(0.0);            
+            firePdu_1a.setLocationInWorldCoordinates(targetLocation);
+                                    
             //  are there any other variables to modify at the beginning of your loop?
             
             // are your reading any DIS PDUs from the network?  check for them here
@@ -230,14 +336,38 @@ public class RomeroSimulationProgram
             // compute a track, update an ESPDU, whatever it is that your model is doing...
             
             // Where is my entity?  Insert changes in position; this sample only changes X position.
-            entityStatePdu_1.getEntityLocation().setX(entityStatePdu_1.getEntityLocation().getX() + 1.0); // 1m per timestep
+            entityStatePdu_2.getEntityLocation().setX(entityStatePdu_2.getEntityLocation().getX() - 100.0); // 1m per timestep
+            entityStatePdu_2.getEntityLocation().setY(entityStatePdu_2.getEntityLocation().getY() + 10.0); // 1m per timestep
+
+            entityStatePdu_3.getEntityLocation().setX(entityStatePdu_3.getEntityLocation().getX() + 100.0); // 1m per timestep
+            entityStatePdu_3.getEntityLocation().setY(entityStatePdu_3.getEntityLocation().getY() + 10.0); // 1m per timestep       
+            
+            double distanceToImpact2 = calculateDistance(targetLocation, entityStatePdu_2.getEntityLocation());
+            double distanceToImpact3 = calculateDistance(targetLocation, entityStatePdu_3.getEntityLocation());            
+
+            System.out.println ("... Unit position is: " + entityStatePdu_2.getEntityLocation().getX() + ", " + entityStatePdu_2.getEntityLocation().getY());
+            System.out.println ("... Unit position is: " + entityStatePdu_3.getEntityLocation().getX() + ", " + entityStatePdu_3.getEntityLocation().getY());
+            
+            System.out.println("Firing at: " + targetLocation);   
+            
+            if (distanceToImpact2 <= radius) {
+                System.out.println("-----> Entity #2 HITTED!!!");
+                countImpactE2++;
+            } else if (distanceToImpact3 <= radius) {
+                System.out.println("-----> Entity #3 HITTED!!!");
+                countImpactE3++;
+            } else {
+                System.out.println("No impacts detected!!");
+            }
+            
+            Thread.sleep(1500);
             
             // decide whether to fire, and then update the firePdu.  Hmmm, you might want a target to shoot at!
             
             // etc. etc. your code goes here for your simulation of interest
                 
             // something happens between my simulation entities, la de da de da...
-            System.out.println ("... My simulation just did something, no really...");
+            //System.out.println ("... My simulation just did something, no really...");
             System.out.flush(); // make sure this arrives to user even if other threads somehow become deadlocked
             
             
@@ -288,9 +418,16 @@ public class RomeroSimulationProgram
                     
         }   // end of simulation loop, continue until done
         // ===================================================================================================// ===================================================================================================// ===================================================================================================// ===================================================================================================
-
+        
         narrativeMessage2 = "runSimulation() completed successfully"; // all done, so tell everyone else on the channel
         // TODO better javadoc needs to be autogenerated for VariableRecordType enumerations
+        
+        System.out.println("==========================");
+        System.out.println("Last Location for Entity #2: " + entityStatePdu_2.getEntityLocation());
+        System.out.println("Last Location for Entity #3: " + entityStatePdu_3.getEntityLocation());
+        System.out.println("Total impacts to Entity #2: " + countImpactE2);
+        System.out.println("Total impacts to Entity #3: " + countImpactE3);
+        
         disChannel.sendCommentPdu(DisChannel.COMMENTPDU_NARRATIVE, narrativeMessage1, narrativeMessage2, narrativeMessage3);
         System.out.println ("... [final=completion CommentPdu successfully sent for simulation]");
         
@@ -350,6 +487,13 @@ public class RomeroSimulationProgram
             System.exit(-1);
         }
     }
+    
+    public double calculateDistance (Vector3Double loc1, Vector3Double loc2) {
+        double dx = loc2.getX() - loc1.getX();
+        double dy = loc2.getY() - loc1.getY();
+        double dz = loc2.getZ() - loc1.getZ();
+        return Math.sqrt(dx * dx + dy * dy + dz * dz);
+    }
 
     /**
      * Get simple descriptor (such as parent class name) for this network interface, used in trace statements
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework3/Romero/Shot.png b/assignments/src/MV3500Cohort2024JulySeptember/homework3/Romero/Shot.png
new file mode 100644
index 0000000000000000000000000000000000000000..7384dd156e786c6ccebbb93bc313e0c0cfd3ffed
Binary files /dev/null and b/assignments/src/MV3500Cohort2024JulySeptember/homework3/Romero/Shot.png differ
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework3/Romero/Shot1.png b/assignments/src/MV3500Cohort2024JulySeptember/homework3/Romero/Shot1.png
new file mode 100644
index 0000000000000000000000000000000000000000..891f32a96140cee2603cf77ed6823d5d2038d28f
Binary files /dev/null and b/assignments/src/MV3500Cohort2024JulySeptember/homework3/Romero/Shot1.png differ
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework3/Timberlake/README.md b/assignments/src/MV3500Cohort2024JulySeptember/homework3/Timberlake/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..9485c5b8f3f88186bd7db9cd76479b633cb33a90
--- /dev/null
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework3/Timberlake/README.md
@@ -0,0 +1,27 @@
+## Homework 3: Example Simulation Recording using OpenDIS Network Streams
+
+<!-- Viewable at https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/blob/master/assignments/src/MV3500Cohort2024JulySeptember/homework3/README.md -->
+
+### Assignment
+
+1. Adapt the functionality for [OpenDIS ExampleSimulationProgram](../../../../examples/src/OpenDis7Examples/ExampleSimulationProgram.java), modifying provided code
+2. Experiment with the enumeration values that set up each entity and PDU.  What works for you?  What makes sense for your future work?
+    I added movement to the simulation.
+3. Adapt or replace the UML diagrams to describe what you have going on.
+4. Record, save and replay your result stream using [PduRecorder](https://savage.nps.edu/opendis7-java/javadoc/edu/nps/moves/dis7/utilities/stream/PduRecorder.html) or [Wireshark](https://www.wireshark.org)
+   * see local [assignments/src/pduLog](../../../pduLog) subdirectory for latest opendis log files
+   * Coming soon, we will also (again have) [X3D-Edit](https://savage.nps.edu/X3D-Edit) for DIS stream recording/replay
+5. Observe good-practice conventions in the [assignments README](../../../README.md) and [current-course README](../README.md) instructions.
+
+This assignment  presents a Problem Prototyping opportunity.
+While some minimal functionality is expected, the general outline of
+a networking problem and proposed solution holds great interest.
+Think of it as warmup preparation for your future work.
+
+
+What I implemented in Assignment 3: 
+
+-Set munitionDescriptor warhead to HE Fragmentation with a Proximity Fuse 
+-Set warhead range to 1000 feet 
+-Sent fire PDU (entity 1 firing at entity 2) every other turn
+
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework3/Timberlake/TimberlakeSimulationProgram.java b/assignments/src/MV3500Cohort2024JulySeptember/homework3/Timberlake/TimberlakeSimulationProgram.java
index 5db3b3b3103da5afb0073e1c986356e3109ab744..0e0d47e7e7394252418628c76845c74c97f163bc 100644
--- a/assignments/src/MV3500Cohort2024JulySeptember/homework3/Timberlake/TimberlakeSimulationProgram.java
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework3/Timberlake/TimberlakeSimulationProgram.java
@@ -13,6 +13,7 @@ import edu.nps.moves.dis7.pdus.*;
 import edu.nps.moves.dis7.utilities.DisChannel;
 import edu.nps.moves.dis7.utilities.PduFactory;
 import java.time.LocalDateTime;
+import java.util.Random;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -64,6 +65,11 @@ public class TimberlakeSimulationProgram {
     /** MunitionDescriptor for these weapons */
     protected MunitionDescriptor munitionDescriptor1;
     
+    /** TODO DetonationPdu for entity 1 second weapon (if any) */
+    protected DetonationPdu            DetonationPdu_1a;
+    /** TODO DetonationPdu for entity 1 second weapon (if any) */
+    protected DetonationPdu            DetonationPdu_1b;
+   
     // hey programmer, what other state do you want?  this is a good place to declare it...
     
     /**
@@ -157,8 +163,11 @@ public class TimberlakeSimulationProgram {
         firePdu_1b          = pduFactory.makeFirePdu();
         
         munitionDescriptor1 = new MunitionDescriptor();
-
         
+        DetonationPdu_1a    = pduFactory.makeDetonationPdu();
+        DetonationPdu_1b    = pduFactory.makeDetonationPdu();
+
+        DetonationPdu_1a.setSourceEntityID(entityID_1);
         // Your model setup: define participants.  who's who in this zoo?
         // Assuming you keep track of entity objects...  here is some support for for Entity 1.
         
@@ -183,13 +192,18 @@ public class TimberlakeSimulationProgram {
         entityStatePdu_2.setForceId(ForceID.OPPOSING);
         entityStatePdu_2.setEntityType(new _002Triton()); // note import statement above
         entityStatePdu_2.setMarking("Entity #2");
-
+        
+        Random random = new Random();
+        int randX = random.nextInt(10);
+        int randY = random.nextInt(10);
+        entityStatePdu_2.getEntityLocation().setX(randX);
+        entityStatePdu_2.getEntityLocation().setY(randY);
         // TODO how should we customize this munition?  what are key parameters for your simulation? 
         // more is needed here by scenario authors...
         // munitionDescriptor1.setQuantity(1);
         // firePdu_1a.setDescriptor(munitionDescriptor1).setRange(1000.0f);
         
-        // Jack Added
+        // Jack Added ******* HIGHLIGHT, THEN CTRL-[SPACE] TO SEE OPTIONS!! ******
         munitionDescriptor1.setQuantity(1);
         munitionDescriptor1.setWarhead(MunitionDescriptorWarhead.HE_BLAST_FRAGMENTATION); 
         munitionDescriptor1.setFuse(MunitionDescriptorFuse.PROXIMITY); 
@@ -242,14 +256,57 @@ public class TimberlakeSimulationProgram {
             // =============================================================================================
             // * your own simulation code starts here! *****************************************************
             // =============================================================================================
-            
+
             if (simulationLoopCount % 2 == 0) {  // Fire every 3 loops
                 //firePdu_1a.setEventID(new EventIdentifier(1, 1, simulationLoopCount)); 
                 // Send the Fire PDU
+                DetonationPdu_1a.setLocationInWorldCoordinates(entityStatePdu_2.getEntityLocation());  // Set detonation at target's location
                 disChannel.sendSinglePdu(simulationTimeSeconds, firePdu_1a);
+                disChannel.sendSinglePdu(simulationTimeSeconds, DetonationPdu_1a);
+
                 System.out.println("******** Fire PDU sent at simulation loop: " + simulationLoopCount + " ********");
             }
             
+            Vector3Double badGuyLocation = entityStatePdu_2.getEntityLocation();
+            //Boolean badGuyStatus = entityStatePdu_2.isEntityDamageStatusPdu();
+            Vector3Double goodGuyLocation = entityStatePdu_1.getEntityLocation();
+            System.out.println("Friendly Location: " + goodGuyLocation);
+            System.out.println("Enemy Location: " + badGuyLocation);
+            //System.out.println("Enemy Status: " + badGuyStatus);
+            
+            Vector3Double detonationLocation = DetonationPdu_1a.getLocationInWorldCoordinates();
+
+            double distance = Math.sqrt(
+                Math.pow(detonationLocation.getX() - badGuyLocation.getX(), 2) +
+                Math.pow(detonationLocation.getY() - badGuyLocation.getY(), 2) +
+                Math.pow(detonationLocation.getZ() - badGuyLocation.getZ(), 2)
+            );
+
+            System.out.println("Distance between detonation and target: " + distance);
+           
+            
+            if (DetonationPdu_1a != null) {
+                System.out.println("Detonation PDU generated for firePdu_1a.");
+            } else {
+                System.out.println("Detonation PDU NOT generated for firePdu_1a.");
+            }
+            
+            if (firePdu_1a.getTargetEntityID().equals(entityStatePdu_2.getEntityID())) {
+                System.out.println("FirePdu targets entityStatePdu_2.");
+            } else {
+                System.out.println("FirePdu is not targeting entityStatePdu_2.");
+            }
+            
+            if (DetonationPdu_1a.getTargetEntityID().equals(entityStatePdu_2.getEntityID())) {
+                System.out.println("Detonation occurred and targeted entityStatePdu_2.");
+            } else {
+                System.out.println("Detonation DID NOT occur at entityStatePdu_2.");
+            }
+            if (entityStatePdu_2.isEntityDamageStatusPdu()) {
+                System.out.println("entityStatePdu_2 is damaged by the detonation.");
+            } else {
+                System.out.println("entityStatePdu_2 NOT damaged by the detonation.");
+            }    
             //  are there any other variables to modify at the beginning of your loop?
             
             // are your reading any DIS PDUs from the network?  check for them here
diff --git a/examples/nbproject/project.xml b/examples/nbproject/project.xml
index d7c8e3fd3bc7ee7e746750956a36a82fa1034338..bd4589c403c0307b9edb0d25126b2a5fe03ae4bf 100644
--- a/examples/nbproject/project.xml
+++ b/examples/nbproject/project.xml
@@ -4,6 +4,7 @@
     <configuration>
         <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
             <name>Networked Graphics MV3500 examples</name>
+            <explicit-platform explicit-source-supported="true"/>
             <source-roots>
                 <root id="src.dir"/>
                 <root id="src.src.dir"/>
diff --git a/examples/src/ViskitOpenDis7Examples/viskitProject.xml b/examples/src/ViskitOpenDis7Examples/viskitProject.xml
index dceef140ca16d4e6429c495d8a560bbdaaea9ade..16ae0dd6c2bf553fd03c5c990e84d683c11d94af 100644
--- a/examples/src/ViskitOpenDis7Examples/viskitProject.xml
+++ b/examples/src/ViskitOpenDis7Examples/viskitProject.xml
@@ -9,7 +9,4 @@
   </BuildDirectory>
   <DistDirectory name="dist" />
   <LibDirectory name="lib" />
-  <Cached />
-  <extraClassPaths>
-  </extraClassPaths>
 </ViskitProject>