The key to a nostalgic gms-like experience in my opinion lies mostly in subtle details, here are some common ones that I find most nostalgic servers are lacking.
Scripted Portal SFX
When entering scripted portals, by default there's no portal sound played, to play the sound you need to send a packet to the player. In v62, the packet is showSpecialEffect(7) (showSpecialEffect is the commonly used name for the packet in odinms, yours might differ), if you're using a different version, yours might differ, just play around with the value and you should find it +- 3. Now, to access the packet in your portal script, you need to make a script method, you can either place it in AbstractPlayerInteraction if you believe you'll use it for NPC's too (this is useful if you have a portal that opens an NPC prompt, you can then use cm.playPortalSound();) or just place it in your PortalPlayerInteraction if you're more likely to only use it for portals.
Now to call the method, simply call pi.playPortalSound(); in your portal scriptCode:public void playPortalSound() {
c.getSession().write(MaplePacketCreator.showSpecialEffect(7));
}
Random Spawnpoints
In gms, at least for lower versions, when taking the Victoria Island Cab, you'd be warped to a random point in the map, most cab scripts by default do not randomize the spawnpoint, and you'll always be warped to the exact same spot. To properly get a random spawnpoint, we need a method that shuffles the available spawnpoints in the destination map and returns it. Some sources already have a method to do this in MapleMap.java, but when I was adding this to v.62, xiuzsource did not. If you don't have it already, insert this in MapleMap.java
Spoiler:
Now, to call this method, you can either do it like this
but as you can see, it's quite the mouthful for every time you want to call it, so I prefer to add a method so that we can call it throughCode:cm.getPlayer().changeMap(maps[destination], cm.getClient().getChannelServer().getMapFactory().getMap(maps[destination]).getRandomSpawnpoint());
to do so, we add a method in npcconversationmanager.javaCode:cm.warpRandomSpawnpoint(maps[destination]);
GMS-like Teleport RocksCode:public void warpRandomSpawnpoint(int id) {
c.getPlayer().changeMap(id,getClient().getChannelServer().getMapFactory().getMap(id).getRandomSpawnpoint());
}
This one is a bit too long to give a proper explanation, but to break it down; I found that teleport rocks weren't working properly, Normal Teleport rocks could be used to travel cross-continent (not gms-like), there were also some issues with VIP rocks iirc. This is based on Moople's telerocks (which weren't working properly) but adjusted for v62, you can easily make it work for v83.
Spoiler:

