More head-scratching. I've added output to Aircraft.nextCUTLevel(), to see if my previous concerns was valid, namelt a potential failure to execute
FM.cut(k, i, actor)
I have output before and after, and they are consistent, as shown in the snippet of log.lst output supplied below.
protected void nextCUTLevel(String s, int i, Actor actor)
{
FM.dryFriction = 1.0F;
debugprintln("Detected NCL in " + s + "..");
if(this == World.getPlayerAircraft() && !World.cur().diffCur.Vulnerability)
return;
int j = s.length() - 1;
HierMesh hiermesh = hierMesh();
String s1 = s;
boolean flag = s.charAt(j - 2) == '_' && Character.toUpperCase(s.charAt(j - 1)) == 'D' && Character.isDigit(s.charAt(j));
if(!flag && !hiermesh.isChunkVisible(s1))
return;
int k = part(s);
System.out.println("nextCutLevel pre: cutFM(" + k + ", " + i + ", " + actor + ")");
if(cutFM(k, i, actor))
{
FM.cut(k, i, actor); //FlightModelMain.class, for parts 0 - 43, sets various states as well
System.out.println("nextCutLevel pst: cutFM(" + k + ", " + i + ", " + actor + ")");
netPutCut(k, i, actor);
if(FM.isPlayers() && this != actor && (actor instanceof Aircraft) && ((Aircraft)actor).isNetPlayer() && i == 2 && !FM.isSentWingNote() && !FM.isSentBuryNote() && (k == 34 || k == 37 || k == 33 || k == 36))
{
Chat.sendLogRnd(3, "gore_sawwing", (Aircraft)actor, this);
FM.setSentWingNote(true);
}
}
}
Here in log.lst we see the output seeming to show correctly WingRIn (part #36) being cut. I imagine that the "actor" here is me because I'm the instigator of the event. Later when the B-24 crashed actorland was the instigator, and after that the actor was the B-24 for subsequent cutting away of parts.
[2025-03-29 16:00:29.330] dT: 25 nextCutLevel pre: cutFM(36, 0, com.maddox.il2.objects.air.KI_84_IC@e27)
[2025-03-29 16:00:29.330] dT: 0 cutFM() partNames[36]: WingRIn
[2025-03-29 16:00:29.330] dT: 0 java.lang.Exception: Aircraft.cut() method call!
[2025-03-29 16:00:29.330] dT: 0 at com.maddox.il2.objects.air.Aircraft.cut(Aircraft.java:220)
[2025-03-29 16:00:29.330] dT: 0 at com.maddox.il2.objects.air.Aircraft.cutFM(Aircraft.java:853)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.il2.objects.air.B_24.cutFM(B_24.java:762)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.il2.objects.air.B_24J100.cutFM(B_24J100.java:90)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.il2.objects.air.Aircraft.nextCUTLevel(Aircraft.java:989)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.il2.objects.air.Aircraft.nextDMGLevel(Aircraft.java:931)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.il2.objects.air.Aircraft.nextDMGLevels(Aircraft.java:972)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.il2.objects.air.Aircraft.msgCollision(Aircraft.java:1740)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.il2.engine.MsgCollision.invokeListener(MsgCollision.java:72)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.rts.Message._send(Message.java:1217)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.rts.Message.sendToObject(Message.java:1158)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.rts.Message.sendTo(Message.java:1134)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.rts.Message.trySend(Message.java:1115)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.rts.Time.loopMessages(Time.java:252)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.rts.RTSConf.loopMsgs(RTSConf.java:101)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.il2.game.MainWin3D.loopApp(MainWin3D.java:131)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.il2.game.Main.exec(Main.java:422)
[2025-03-29 16:00:29.331] dT: 0 at com.maddox.il2.game.GameWin3D.main(GameWin3D.java:235)
[2025-03-29 16:00:29.332] dT: 0 nextCutLevel pst: cutFM(36, 0, com.maddox.il2.objects.air.KI_84_IC@e27)
I guess I'll have to probe elsewhere to see where the fault lies. Anyone have a good suggestion on where to insert a stack trace call?