]> git.pond.sub.org Git - empserver/commitdiff
Write planes fixed on game start to disk properly
authorMarkus Armbruster <armbru@pond.sub.org>
Tue, 29 Apr 2008 18:38:10 +0000 (20:38 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Tue, 29 Apr 2008 18:38:10 +0000 (20:38 +0200)
When fixing planes stuck in the air, we fixed them only in memory, so
when a fixed plane wasn't written to disk for other reasons before the
next game start, it had to be fixed again.

Change pln_zap_transient_flags() to write them out.

src/lib/common/ef_verify.c

index fb677145fb54d9d98009695612a23d5b90b01124..62c5cab27d95e4f095cac11e5882ce7d7eef3505 100644 (file)
@@ -169,19 +169,24 @@ pln_zap_transient_flags(void)
 {
     int i;
     struct plnstr *pp;
+    int dirty = 0;
 
     /* laziness: assumes plane file is EFF_MEM */
     for (i = 0; (pp = getplanep(i)) != NULL; i++) {
        if (pp->pln_flags & PLN_LAUNCHED
            && (plchr[pp->pln_type].pl_flags & (P_M | P_O)) != P_O) {
            pp->pln_flags &= ~PLN_LAUNCHED;
-           verify_fail(EF_PLANE, i, NULL, 0, "stuck in the air (patched)");
+           /* FIXME missile should be destroyed instead */
+           dirty = 1;
+           verify_fail(EF_PLANE, i, NULL, 0, "stuck in the air (fixed)");
            /*
             * Can't putplane() here, because pln_prewrite() crashes
             * without a valid player.
             */
        }
     }
+    if (dirty)
+       ef_flush(EF_PLANE);     /* pretty wasteful */
 }
 
 int