void plat_delayedinit(entity this)
{
plat_link(this);
- plat_spawn_inside_trigger(this); // the "start moving" trigger
+ // Q3 uses only a truth check of .targetname to decide whether to spawn a trigger
+ if (!Q3COMPAT_COMMON || this.targetname == "")
+ plat_spawn_inside_trigger(this); // the "start moving" trigger
}
float plat_send(entity this, entity to, float sf)
spawnfunc(func_plat)
{
- if (this.spawnflags & CRUSH)
+ if (q3compat)
+ {
+ this.spawnflags = 0; // Q3 plats have no spawnflags
+ if (!this.dmg) this.dmg = 2;
+ }
+ else if (this.spawnflags & CRUSH)
{
this.dmg = 10000;
}
- if (this.dmg && (this.message == ""))
+ if (this.dmg && (this.message == ""))
{
this.message = "was squished";
}
- if (this.dmg && (this.message2 == ""))
+ if (this.dmg && (this.message2 == ""))
{
this.message2 = "was squished by";
}
this.noise1 = "plats/plat2.wav";
}
- if (this.sounds == 2)
+ if (this.sounds == 2 || q3compat)
{
+ // Plats in Q3 always have sounds (they're hard coded in Q3 engine)
this.noise = "plats/medplat1.wav";
this.noise1 = "plats/medplat2.wav";
}
if (this.sound2)
this.noise1 = this.sound2;
+ if (q3compat)
+ {
+ // CPMA adds these fields for overriding the Q3 default sounds
+ string s = GetField_fullspawndata(this, "sound_start", true);
+ string e = GetField_fullspawndata(this, "sound_end", true);
+
+ if (s)
+ this.noise = strzone(s);
+ else
+ {
+ // PK3s supporting Q3A sometimes include custom sounds at Q3 default paths
+ s = "sound/movers/plats/pt1_strt.wav";
+ if (FindFileInMapPack(s))
+ this.noise = s;
+ }
+
+ if (e)
+ this.noise1 = strzone(e);
+ else
+ {
+ e = "sound/movers/plats/pt1_end.wav";
+ if (FindFileInMapPack(e))
+ this.noise1 = e;
+ }
+ }
+
if(this.noise && this.noise != "")
{
precache_sound(this.noise);
setblocked(this, plat_crush);
- if (!this.speed) this.speed = 150;
- if (!this.lip) this.lip = 16;
+ if (!this.speed) this.speed = q3compat ? 200 : 150;
+ if (!this.lip) this.lip = q3compat ? 8 : 16;
if (!this.height) this.height = this.size.z - this.lip;
this.pos1 = this.origin;
set_movetype(this, MOVETYPE_PUSH);
this.move_time = time;
- plat_spawn_inside_trigger(this);
+ if (!Q3COMPAT_COMMON || this.targetname == "")
+ plat_spawn_inside_trigger(this);
}
if(sf & SF_TRIGGER_RESET)