mirror of
https://gitlab.com/2009scape/rt4-client.git
synced 2026-08-01 14:39:16 -06:00
290 lines
12 KiB
Java
290 lines
12 KiB
Java
package rt4;
|
|
|
|
import org.openrs2.deob.annotation.OriginalArg;
|
|
import org.openrs2.deob.annotation.OriginalMember;
|
|
import org.openrs2.deob.annotation.Pc;
|
|
|
|
public class AreaSoundManager {
|
|
@OriginalMember(owner = "client!he", name = "ab", descriptor = "Lclient!sc;")
|
|
public static final HashTable playerSounds = new HashTable(16);
|
|
|
|
@OriginalMember(owner = "client!ab", name = "n", descriptor = "Lclient!ih;")
|
|
public static final LinkedList locSounds = new LinkedList();
|
|
|
|
@OriginalMember(owner = "client!ma", name = "x", descriptor = "Lclient!ih;")
|
|
public static final LinkedList npcSounds = new LinkedList();
|
|
|
|
@OriginalMember(owner = "client!wc", name = "a", descriptor = "(Lclient!e;I)V")
|
|
public static void remove(@OriginalArg(0) Player player) {
|
|
@Pc(10) AreaSound areaSound = (AreaSound) playerSounds.get(player.username.encode37());
|
|
if (areaSound == null) {
|
|
return;
|
|
}
|
|
if (areaSound.primaryStream != null) {
|
|
client.soundStream.removeSubStream(areaSound.primaryStream);
|
|
areaSound.primaryStream = null;
|
|
}
|
|
areaSound.unlink();
|
|
}
|
|
|
|
@OriginalMember(owner = "client!jh", name = "a", descriptor = "(IZLclient!pb;ILclient!km;IILclient!e;)V")
|
|
public static void add(@OriginalArg(0) int z, @OriginalArg(2) LocType loc, @OriginalArg(3) int arg2, @OriginalArg(4) Npc npc, @OriginalArg(5) int x, @OriginalArg(6) int level, @OriginalArg(7) Player player) {
|
|
@Pc(13) AreaSound sound = new AreaSound();
|
|
sound.minZFine = z * 128;
|
|
sound.minXFine = x * 128;
|
|
sound.level = level;
|
|
if (loc != null) {
|
|
sound.sounds = loc.bgsounds;
|
|
sound.radius = loc.bgsoundrange * 128;
|
|
sound.maxInterval = loc.bgsoundmax;
|
|
sound.locType = loc;
|
|
sound.sound = loc.bgsound;
|
|
sound.minInterval = loc.bgsoundmin;
|
|
@Pc(57) int local57 = loc.width;
|
|
@Pc(60) int local60 = loc.length;
|
|
if (arg2 == 1 || arg2 == 3) {
|
|
local57 = loc.length;
|
|
local60 = loc.width;
|
|
}
|
|
sound.maxZFine = (local60 + z) * 128;
|
|
sound.maxXFine = (x + local57) * 128;
|
|
if (loc.multiLocs != null) {
|
|
sound.multiLocOrNpc = true;
|
|
sound.update();
|
|
}
|
|
if (sound.sounds != null) {
|
|
sound.remainingLoops = sound.minInterval + (int) (Math.random() * (double) (sound.maxInterval - sound.minInterval));
|
|
}
|
|
locSounds.addTail(sound);
|
|
} else if (npc != null) {
|
|
sound.npc = npc;
|
|
@Pc(138) NpcType npcType = npc.type;
|
|
if (npcType.multiNpcs != null) {
|
|
sound.multiLocOrNpc = true;
|
|
npcType = npcType.getMultiNpc();
|
|
}
|
|
if (npcType != null) {
|
|
sound.maxZFine = (npcType.size + z) * 128;
|
|
sound.maxXFine = (npcType.size + x) * 128;
|
|
sound.sound = Npc.getSound(npc);
|
|
sound.radius = npcType.soundRadius * 128;
|
|
}
|
|
npcSounds.addTail(sound);
|
|
} else if (player != null) {
|
|
sound.player = player;
|
|
sound.maxXFine = (player.getSize() + x) * 128;
|
|
sound.maxZFine = (player.getSize() + z) * 128;
|
|
sound.sound = Player.getSound(player);
|
|
sound.radius = player.soundRadius * 128;
|
|
playerSounds.put(sound, player.username.encode37());
|
|
}
|
|
}
|
|
|
|
@OriginalMember(owner = "client!hc", name = "a", descriptor = "(Lclient!km;Z)V")
|
|
public static void remove(@OriginalArg(0) Npc npc) {
|
|
for (@Pc(13) AreaSound areaSound = (AreaSound) npcSounds.head(); areaSound != null; areaSound = (AreaSound) npcSounds.next()) {
|
|
if (npc == areaSound.npc) {
|
|
if (areaSound.primaryStream != null) {
|
|
client.soundStream.removeSubStream(areaSound.primaryStream);
|
|
areaSound.primaryStream = null;
|
|
}
|
|
areaSound.unlink();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
@OriginalMember(owner = "client!ih", name = "a", descriptor = "(IIIII)V")
|
|
public static void redraw(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) {
|
|
@Pc(6) AreaSound areaSound;
|
|
for (areaSound = (AreaSound) locSounds.head(); areaSound != null; areaSound = (AreaSound) locSounds.next()) {
|
|
redraw(arg1, areaSound, arg3, arg0, arg2);
|
|
}
|
|
@Pc(37) byte movementSpeed;
|
|
@Pc(42) BasType basType;
|
|
@Pc(141) int sound;
|
|
for (areaSound = (AreaSound) npcSounds.head(); areaSound != null; areaSound = (AreaSound) npcSounds.next()) {
|
|
movementSpeed = 1;
|
|
basType = areaSound.npc.getBasType();
|
|
if (basType.idleAnimationId == areaSound.npc.movementSeqId) {
|
|
movementSpeed = 0;
|
|
} else if (basType.runAnimationId == areaSound.npc.movementSeqId || basType.runAnimationId2 == areaSound.npc.movementSeqId || basType.runAnimationId4 == areaSound.npc.movementSeqId || basType.runAnimationId3 == areaSound.npc.movementSeqId) {
|
|
movementSpeed = 2;
|
|
} else if (basType.anInt1062 == areaSound.npc.movementSeqId || basType.anInt1042 == areaSound.npc.movementSeqId || areaSound.npc.movementSeqId == basType.anInt1048 || basType.anInt1066 == areaSound.npc.movementSeqId) {
|
|
movementSpeed = 3;
|
|
}
|
|
if (areaSound.movementSpeed != movementSpeed) {
|
|
sound = Npc.getSound(areaSound.npc);
|
|
if (sound != areaSound.sound) {
|
|
if (areaSound.primaryStream != null) {
|
|
client.soundStream.removeSubStream(areaSound.primaryStream);
|
|
areaSound.primaryStream = null;
|
|
}
|
|
areaSound.sound = sound;
|
|
}
|
|
areaSound.movementSpeed = movementSpeed;
|
|
}
|
|
areaSound.minXFine = areaSound.npc.xFine;
|
|
areaSound.maxXFine = areaSound.npc.xFine + areaSound.npc.getSize() * 64;
|
|
areaSound.minZFine = areaSound.npc.zFine;
|
|
areaSound.maxZFine = areaSound.npc.zFine + areaSound.npc.getSize() * 64;
|
|
redraw(arg1, areaSound, arg3, arg0, arg2);
|
|
}
|
|
for (areaSound = (AreaSound) playerSounds.head(); areaSound != null; areaSound = (AreaSound) playerSounds.next()) {
|
|
movementSpeed = 1;
|
|
basType = areaSound.player.getBasType();
|
|
if (areaSound.player.movementSeqId == basType.idleAnimationId) {
|
|
movementSpeed = 0;
|
|
} else if (areaSound.player.movementSeqId == basType.runAnimationId || areaSound.player.movementSeqId == basType.runAnimationId2 || areaSound.player.movementSeqId == basType.runAnimationId4 || basType.runAnimationId3 == areaSound.player.movementSeqId) {
|
|
movementSpeed = 2;
|
|
} else if (basType.anInt1062 == areaSound.player.movementSeqId || areaSound.player.movementSeqId == basType.anInt1042 || areaSound.player.movementSeqId == basType.anInt1048 || areaSound.player.movementSeqId == basType.anInt1066) {
|
|
movementSpeed = 3;
|
|
}
|
|
if (areaSound.movementSpeed != movementSpeed) {
|
|
sound = Player.getSound(areaSound.player);
|
|
if (areaSound.sound != sound) {
|
|
if (areaSound.primaryStream != null) {
|
|
client.soundStream.removeSubStream(areaSound.primaryStream);
|
|
areaSound.primaryStream = null;
|
|
}
|
|
areaSound.sound = sound;
|
|
}
|
|
areaSound.movementSpeed = movementSpeed;
|
|
}
|
|
areaSound.minXFine = areaSound.player.xFine;
|
|
areaSound.maxXFine = areaSound.player.xFine + areaSound.player.getSize() * 64;
|
|
areaSound.minZFine = areaSound.player.zFine;
|
|
areaSound.maxZFine = areaSound.player.zFine + areaSound.player.getSize() * 64;
|
|
redraw(arg1, areaSound, arg3, arg0, arg2);
|
|
}
|
|
}
|
|
|
|
@OriginalMember(owner = "client!je", name = "k", descriptor = "(I)V")
|
|
public static void updateMulti() {
|
|
@Pc(6) AreaSound areaSound;
|
|
for (areaSound = (AreaSound) locSounds.head(); areaSound != null; areaSound = (AreaSound) locSounds.next()) {
|
|
if (areaSound.multiLocOrNpc) {
|
|
areaSound.update();
|
|
}
|
|
}
|
|
for (areaSound = (AreaSound) npcSounds.head(); areaSound != null; areaSound = (AreaSound) npcSounds.next()) {
|
|
if (areaSound.multiLocOrNpc) {
|
|
areaSound.update();
|
|
}
|
|
}
|
|
}
|
|
|
|
@OriginalMember(owner = "client!ra", name = "a", descriptor = "(ILclient!pb;BII)V")
|
|
public static void remove(@OriginalArg(0) int x, @OriginalArg(1) LocType locType, @OriginalArg(3) int z, @OriginalArg(4) int level) {
|
|
for (@Pc(10) AreaSound areaSound = (AreaSound) locSounds.head(); areaSound != null; areaSound = (AreaSound) locSounds.next()) {
|
|
if (level == areaSound.level && areaSound.minXFine == x * 128 && areaSound.minZFine == z * 128 && locType.id == areaSound.locType.id) {
|
|
if (areaSound.primaryStream != null) {
|
|
client.soundStream.removeSubStream(areaSound.primaryStream);
|
|
areaSound.primaryStream = null;
|
|
}
|
|
if (areaSound.secondaryStream != null) {
|
|
client.soundStream.removeSubStream(areaSound.secondaryStream);
|
|
areaSound.secondaryStream = null;
|
|
}
|
|
areaSound.unlink();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
@OriginalMember(owner = "client!vd", name = "a", descriptor = "(BZ)V")
|
|
public static void clear(@OriginalArg(1) boolean pathingEntities) {
|
|
@Pc(14) AreaSound areaSound;
|
|
for (areaSound = (AreaSound) locSounds.head(); areaSound != null; areaSound = (AreaSound) locSounds.next()) {
|
|
if (areaSound.primaryStream != null) {
|
|
client.soundStream.removeSubStream(areaSound.primaryStream);
|
|
areaSound.primaryStream = null;
|
|
}
|
|
if (areaSound.secondaryStream != null) {
|
|
client.soundStream.removeSubStream(areaSound.secondaryStream);
|
|
areaSound.secondaryStream = null;
|
|
}
|
|
areaSound.unlink();
|
|
}
|
|
if (!pathingEntities) {
|
|
return;
|
|
}
|
|
for (areaSound = (AreaSound) npcSounds.head(); areaSound != null; areaSound = (AreaSound) npcSounds.next()) {
|
|
if (areaSound.primaryStream != null) {
|
|
client.soundStream.removeSubStream(areaSound.primaryStream);
|
|
areaSound.primaryStream = null;
|
|
}
|
|
areaSound.unlink();
|
|
}
|
|
for (areaSound = (AreaSound) playerSounds.head(); areaSound != null; areaSound = (AreaSound) playerSounds.next()) {
|
|
if (areaSound.primaryStream != null) {
|
|
client.soundStream.removeSubStream(areaSound.primaryStream);
|
|
areaSound.primaryStream = null;
|
|
}
|
|
areaSound.unlink();
|
|
}
|
|
}
|
|
|
|
@OriginalMember(owner = "client!lk", name = "a", descriptor = "(ILclient!fl;IIII)V")
|
|
public static void redraw(@OriginalArg(0) int x, @OriginalArg(1) AreaSound areaSound, @OriginalArg(2) int level, @OriginalArg(3) int loops, @OriginalArg(4) int z) {
|
|
if (areaSound.sound == -1 && areaSound.sounds == null) {
|
|
return;
|
|
}
|
|
@Pc(20) int distance = 0;
|
|
if (areaSound.maxXFine < x) {
|
|
distance = x - areaSound.maxXFine;
|
|
} else if (areaSound.minXFine > x) {
|
|
distance = areaSound.minXFine - x;
|
|
}
|
|
if (areaSound.maxZFine < z) {
|
|
distance += z - areaSound.maxZFine;
|
|
} else if (z < areaSound.minZFine) {
|
|
distance += areaSound.minZFine - z;
|
|
}
|
|
if (areaSound.radius == 0 || areaSound.radius < distance - 64 || Preferences.ambientSoundsVolume == 0 || level != areaSound.level) {
|
|
if (areaSound.primaryStream != null) {
|
|
client.soundStream.removeSubStream(areaSound.primaryStream);
|
|
areaSound.primaryStream = null;
|
|
}
|
|
if (areaSound.secondaryStream != null) {
|
|
client.soundStream.removeSubStream(areaSound.secondaryStream);
|
|
areaSound.secondaryStream = null;
|
|
}
|
|
return;
|
|
}
|
|
distance -= 64;
|
|
if (distance < 0) {
|
|
distance = 0;
|
|
}
|
|
@Pc(134) int volume = (areaSound.radius - distance) * Preferences.ambientSoundsVolume / areaSound.radius;
|
|
if (areaSound.primaryStream != null) {
|
|
areaSound.primaryStream.setVolume(volume);
|
|
} else if (areaSound.sound >= 0) {
|
|
@Pc(150) SynthSound synthSound = SynthSound.create(client.js5Archive4, areaSound.sound, 0);
|
|
if (synthSound != null) {
|
|
@Pc(158) PcmSound pcmSound = synthSound.toPcmSound().resample(client.resampler);
|
|
@Pc(163) SoundPcmStream stream = SoundPcmStream.create(pcmSound, volume);
|
|
stream.setLoops(-1);
|
|
client.soundStream.addSubStream(stream);
|
|
areaSound.primaryStream = stream;
|
|
}
|
|
}
|
|
if (areaSound.secondaryStream != null) {
|
|
areaSound.secondaryStream.setVolume(volume);
|
|
if (!areaSound.secondaryStream.isLinked()) {
|
|
areaSound.secondaryStream = null;
|
|
}
|
|
} else if (areaSound.sounds != null && (areaSound.remainingLoops -= loops) <= 0) {
|
|
@Pc(219) int index = (int) ((double) areaSound.sounds.length * Math.random());
|
|
@Pc(227) SynthSound synthSound = SynthSound.create(client.js5Archive4, areaSound.sounds[index], 0);
|
|
if (synthSound != null) {
|
|
@Pc(236) PcmSound pcmSound = synthSound.toPcmSound().resample(client.resampler);
|
|
@Pc(241) SoundPcmStream stream = SoundPcmStream.create(pcmSound, volume);
|
|
stream.setLoops(0);
|
|
client.soundStream.addSubStream(stream);
|
|
areaSound.remainingLoops = (int) ((double) (areaSound.maxInterval - areaSound.minInterval) * Math.random()) + areaSound.minInterval;
|
|
areaSound.secondaryStream = stream;
|
|
}
|
|
}
|
|
}
|
|
}
|