• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Source's custom OT game engine (TypeScriptFTW)

when does this release? can I contribute? im quite good at typescript but im fucking lazy id never build something like this XD
would love to see this bigbig
For now it's a private project as I've had to write and design everything myself.

I could release part of the C++ base if more people with C++ experience would like to contribute as there are some functions that are difficult to design and so forth.

Currently I'm working on implementing Destination spells and struggling with getting them just perfect, if this is something you'd like to try helping out with.
I got Dragon's fireballs just right, but Demon/Orshabaal's GFBs are slightly off (Cip engine):
Ajt6qAH.png


TSS
FYP1mN0.png


My formula is if (abs(orig_x) + abs(orig_y) > spell.ShapeParam3) { continue; } where orig_x/y is the relative offsets before plotting actual coords.
I tried using radius, but that made it even worse.
I tried reverse engineering the Cip engine, but the only mention of radius is: radius != 0.

Anyways, don't worry if you can't help, I'm used to working on my own, if you'd like to help and are able to help that's great, but either way I'm enjoying the journey, you know :)
 
Last edited:
For now it's a private project as I've had to write and design everything myself.

I could release part of the C++ base if more people with C++ experience would like to contribute as there are some functions that are difficult to design and so forth.

Currently I'm working on implementing Destination spells and struggling with getting them just perfect, if this is something you'd like to try helping out with.
I got Dragon's fireballs just right, but Demon/Orshabaal's GFBs are slightly off (Cip engine):
Ajt6qAH.png


TSS
FYP1mN0.png


My formula is if (abs(orig_x) + abs(orig_y) > spell.ShapeParam3) { continue; } where orig_x/y is the relative offsets before plotting actual coords.
I tried using radius, but that made it even worse.
I tried reverse engineering the Cip engine, but the only mention of radius is: radius != 0.

Anyways, don't worry if you can't help, I'm used to working on my own, if you'd like to help and are able to help that's great, but either way I'm enjoying the journey, you know :)
Great project, I'm watching this to evolve in a decent source and client.
It would be nice to release some usable versions and let the people look for bugs.
Congrats.

PD: I wonder on what version of Tibia are you working. It seems to be old school watching your screenshots.
 
Great project, I'm watching this to evolve in a decent source and client.
It would be nice to release some usable versions and let the people look for bugs.
Congrats.

PD: I wonder on what version of Tibia are you working. It seems to be old school watching your screenshots.
Thank you. I host the server from time to time for people, if they want, to look for bugs and try the server out.
It's version 7.72/7.7. Version 7.6 is also accepted, but some sprites will be missing if 7.7 object files are not used.
The server file data (objects.srv, mon/.mon, moveuse.dat, map/.sec, etc) is all the original 7.7 server data, so I'm basically writing my own cip server/clone using all the original server data, with some additions and potential for tweaks, like the cast system, where you can control certain monster behaviors yourself, etc.

Btw, solved the circle spell shape:

I tried asking chatGPT for advice, but its answers were pretty bad, it started making hollow circles and other bad patterns that it thought would output the circle I was looking for, in fact it told me "this will output [...]", but every single time it generated code whose output was anything between different to very different from the original shape. It even suggested using the mathematical function sin to generate the pattern, which made the "circle" more like the night sky, just a bunch of scattered dots.

It was right about one thing though, I had to use the euclidean distance for computation (which I had already tried), but I had to experiment and discover another hidden (strange and arbitrary) factor which made the spells now look like the original cip circle shapes.
 
Thank you. I host the server from time to time for people, if they want, to look for bugs and try the server out.
It's version 7.72/7.7. Version 7.6 is also accepted, but some sprites will be missing if 7.7 object files are not used.
The server file data (objects.srv, mon/.mon, moveuse.dat, map/.sec, etc) is all the original 7.7 server data, so I'm basically writing my own cip server/clone using all the original server data, with some additions and potential for tweaks, like the cast system, where you can control certain monster behaviors yourself, etc.
I hope that you can finish the project, it's the most interesting thing I saw in years here. Don't let the trolls disturb you and good luck, if this ends in a open source project I would be pleased to try it.
 
Update since the 20th of April:
  • All spell shapes have been implemented and (hopefully) perfected.
  • Fixed worldlight (easy to fix, but worth showing off, not many people will probably know just how dark it gets!).
  • Experience is given when a monster dies. The experience is distributed based on damage to all attackers and are removed when a monster is healed (seems flawless in practice).
  • Tons of bug fixes.

All spell shapes:

Darkness after 23:00 o'clock:
B9byGRo.png


Fixed Warlock shooting 5x fire fields instead of 1x (other monsters seem to shoot the right size):

As you can see in the first GIF, monsters are not walking on elemental fields even though they're immune. This is something I discovered just a few days ago and am working on it, I had many bugs to fix so I prioritized others first.

Full changelog:
  • Monsters no longer cast spells when health == 0.
  • Actually fixed "Bear is trapped" bug, verified this time.
  • Monsters cast potentially all the spells at once like they do on Cip engine.
  • Monsters are now immune to certain spells/damage/elemental types.
  • Fixed player (viewer) being attacked instead of the monster that's being casted.
  • Fixed segfault when multiple monsters die.
  • Monsters killing castviewed monster after player (viewer) is gone.
  • NoLifeDrain flag is now being parsed (accidental typo in my code "NoLifedrain").
  • Improved elemental immunities, colors and hitpoint/mana message.
  • Monster self healing now updates health while castviewing.
  • "You lose x hitpoints" message shouldn't fire when damage value is negative (healing).
  • Added correct magic effects and colors for different monster types and spell elements (last ones were wrong?).
  • Whispers for both players and monsters implemented (monsters don't whisper, even if they have #W in there).
  • Monsters without an article damaging you should say "by name" not "by name" with two spaces.
  • Implemented exp tracking and giving out exp on creature death (damageDistribution).
  • Created and perfected shape of the func castDestinationSpell (circle spells).
  • Can shoot UH rune on all players and SD runes on all non-self players.
  • Monsters no longer walks off roofs.
  • Fixed worldlight at time 23:00 (much darker).
  • Added AngleSpells.
  • Fixed so spells doesn't trigger in PZ tiles.
  • Fixed monsters spamming spells each step target is making (partially it seems, it's still or has become an issue again).
  • Spells no longer cast on Unthrow tiles.
  • Field magic (monsters cast and internal function to remove/add fields) implemented.
  • Fixed world2.deleteItem() inaccurately deleting item and decrementing groundCount.
  • Fixed handleItemsExpire not accounting for creatures stackpos when deleting item and not decrementing/incrementing Avoid and Unpass and Elements.
  • Fixed warlock fire fields should shoot 5x fields.
  • Added Origin spells
  • Added tile.elements += element in world.addItem()
  • Health and mana can now be > 65535 up to 0xFFFFFFFF and beyond (sll)
  • Fixed gameGetPlayers offsets (bottom and right side of screen not being shown).
  • Fixed gameMoveObject offsets.
  • Monsters are healing again.
  • Monsters are doing Victim spells again (bug).
  • Improved/fixed updateWorldLight().
  • Other bugs.

Full server feature list so far:
  • Multicore map loading
  • Automatic map reloading
  • Original Zanera/Cip map and files including objects.srv, monster spells, attack and defense, etc
  • Cast system (including monsters and controlling monster behaviors)
  • Most monster damage spells (incl. distance attacks) with 100% cip engine formulaes and %chance
  • 100% cip engine physical damage and defense/armor formulaes
  • 100% cip engine randomized spawning algorithm
  • Auto respawn when monsters die
  • 100% accurate monster item inventories, amounts and lootchances
  • 100% accurate certain monster behaviors: random walking (including timing/delay), casting certain spells when random walking, only turning every 2 seconds unless moving, turning before spellcasting (even if no spells are cast)
  • Item movement (not in/out to/of inventory)
  • A* Pathfinding for player (follow) and monster (chase/distance)
  • Monster fleeing and keep distance behavior
  • Monster spell immunities, spell colors and effects
  • Walk with time delay (cannot speedhack)
  • Attack with time delay
  • Full alevo command to create items ("alevo 3031 100", 'alevo "gold coin" 100')
  • /m command to spawn arbitrary monsters
  • Full alani command ("alani -5,-5,-5", "alani 32000,32000,7", "alani thais")
  • High performance XTEA and RSA encryption/decryption
  • Server keeps track of player IPs and uses TCP_NODELAY aka Leatrix latency fix on server side
  • Items decay and server keeps track of whether tile is Unpassable/Avoidable or not
  • Builtin IRC bot

Summary of performance and language advantages:
  • You can write pretty much anything in either a scripting language or C++, it's your choice; great to prototype using scripting language, then replace with C++ if necessary for performance later on
  • Same or better getCreatures performance compared with TFS (initial benchmarks indicates better performance than TFS)
  • Same or better activated monster CPU usage* (with or without spells) including A* pathfinding cost compared with TFS (*using TFS 1.4.2 with OTRS data pack and real map)
  • So far very good performance with large amount of monster spells, much better performance than Cip engine (haven't tested TFS), however there's no canShoot(...) function implemented yet, so it's possible that function is going to be costly

Summary of performance and language disadvantages:
  • No general/generic server multithreading
  • Many minor issues/missing features (the language is a work in development) that needs to be worked around when developing
  • Code is a bit messy. Two different world-classes for example
 
Last edited:
Quick update since Saturday evening:

Improved A* and all other forms of pathfinding by including elemental immunities and "KickBoxes" (ignores Avoid tile flag) flags.
In other words monsters immune to say fire will now step on fire fields, monsters that aren't won't, same with e.g. parcels, poison fields and energy fields.

Solved another important and medium-easy (took many hours to figure out) bug:
Distance monsters stopped turning and casting spells when target moves around adjacent to the monster (i.e. no monster movement is triggered).

Here it's solved:

Solving this required checking if the current "monster behavior function" event was completed before creating a new one, functionality that's not directly implemented through any method, but was pretty trivial to implement.

A couple of points I forgot to mention about language advantages:
  • You can do some pretty cool stuff with Lambdas/anonymous functions if you wish to, like call an anonymous function as a scheduled event with any arbitrary delay attached to it. Anonymous functions are also way easier on the eye and your hands to type out in this language compared to say C++.
  • You can raise exceptions to create a stack trace which shows you an entire trace of the function calls that was involved eventually leading to an exception being raised. Exceptions are automatically raised when stuff goes wrong, as long as the code is not written in C/C++ (if you try writing to the nth+1 element of a std::vector your program is going to crash just like any other C/C++ program. but trying to write to a nth+1 non-C/C++ or "TypeScript" array will just raise an exception).
  • Bonus: You can also use, as I have, Valgrind to trace down segfaults, memory leaks and performance issues on Linux with ease.
 
Last edited:
Update since 8th of May:

Monsters no longer attack in PZ

Conditions implemented; paralyze and haste

Invisibility + fixed casting involved with viewing an invisible creature

Outfits (the hardest one to implement for sure) + cancels invisibility

Surprise feature for a future stream: jungle mode (all nearby monsters attack random monsters based on Cip engine strategies) when castviewing and informs viewer of what new monster is being targeted

In addition to these gifs here's some main fixes:
  • Implemented all 4 monster strategies for targeting monsters (distance, lowest health, most damage, random)
  • Runes have been moved into BP and all EQ including weapons load stats, so the new giant sword item has the appropriate 46:22 stats. You also instakill all monsters with SDs now (except in aimtraining mode)
  • Distance monsters now random walk, including the ones in the corner (the ones in the corner needed a bug fix)
  • More than half of the monster spells has been implemented now, the ones remaining rely on more conditions development like drunkenness

Full list of fixes:
  • Monsters now keep casting spells even when player runs back and forth adjacent to the monster
  • Monsters should only cast spells up to once each second now
  • DistanceMonsters only has 2 sec delay when player is dist <=1 + cornered now
  • Melee monsters now shoots spells also when continueWalking
  • No more casting angle and origin damage spells when randWalking
  • Monster healing doesn't have 2 sec delay; regular 1 sec delay now
  • Monsters now go into randWalk mode when player is in pz
  • Distance monsters now randomSteps
  • Un-hardcoded the IRCbot (parameters like channels, username and password in config)
  • When dead ignore all packets except for logout packet
  • You are dead message upon onDeath
  • Fixed occasional segfault in onDeath (exp distribution)
  • basecreature::changeTarget() with all 4 strategies
  • Avoid tiles no longer ignored when Avoid item is not MagicField or moveable
  • Infinite loop in onDeath caused by cr.attackTarget(0) in the middle of iteration
  • Inventory items dropped when castviewing again
  • Corner distance monsters (4 + 4 tiles away) now "distanceRandWalk"s like they should
  • Started implementing conditions; haste and paralyze implemented
  • Invisibility implemented
  • loadInventoryStats()
  • Invisible creatures appears and sends steps for castviewers
  • Changing outfits implemented
 
How do you plan to create and manage accounts for this server? It will be compatible with any acc maker?
 
How do you plan to create and manage accounts for this server? It will be compatible with any acc maker?
Hey. There are no accounts for now. It's just a test server. Everyone are GMs and can enable/disable their GM status to fight with/test monsters out. It's a neat little server to play with to test things with many built-in functions to test things, but it's far from ready for production purposes.
I can create websites, in fact the server has a built-in webserver with a tiny little page that displays some server stats:
xDuH90J.png


Not the best demonstration of my website development skills, but yeah, making an AAC won't be an issue, but doing so is far down the line, first we'll need to be able to store and load players to begin with :)
There is also no SQL connection yet. Only a SQLite database used to keep track of quiz points through IRC on stream.
No event system, so you won't fall down holes, you can't rope yourself up, no fishing, no quests, etc.
No player spells, no regeneration, no vocations, no NPCs, and so on.
So there's a long way to go for full server functionality. I'm guessing we're about halfway there or so from nothing.
But it's fully possible that this server will never be completed. I'm not looking forward to parsing player data, NPCs and moveuse.dat.
It's just a fun little project for now, teaching myself C/C++ and having something interesting to work on.
 
Update since 25th of May:

Major changes:
  • There were some client debugs sending monsters on wrong floors still, this should be fully fixed now (no more errors in the logs about it in 3 weeks)
  • Not really major, but perhaps interesting: Monsters now get armor bonus from armor items they're spawned with
  • Elemental damage conditions (from monsters throwing field runes, not from stepping on field on map yet), poison damage algorithm, poison damage from melee attacks by poisonous monsters and drunkedness implemented (everything should be 100% like real tibia; same delays between poison/fire/energy, same level of drunkedness with same probability to make a drunked step, etc) - this means all spells and difficult conditions to implement has been implemented :)
  • Summons added and perfected to behave just like real tibia (a lot of work)
  • Discovered an issue in spawning algorithm, it should now actually be 100% like real tibia. I hadn't observed real tibia algorithm close enough: most "blockable" conditions should not prevent further tiles from being explored, only the Unthrowable condition should, so now I have two separate arrays, one for exploring tiles, and one for result tiles which should be selected for spawning which is a completely "clean" tile (no Avoid, no Unpass, no monsters on the tile, no elemental damage on the tile, etc).

Summons implemented:

Summons gets "lost" like real tibia when they have been too far away from master and reacts with random movement when damaged (they also re-unite with master when a new target appears):

Summons are killed when they're too far away from master like on real tibia:

Here's one of my first attempts at trying to perfect summon movement (should stand diagonally to master or 2 steps away):

Here's the actual movement/behavior perfected:

Here's the respawn algorithm perfected to work just like real tibia (tested this both with cip files and my server that e.g. orshabaal will not summon demons on fire fields if it's not within 2 sqm of clean tiles):

Here's a demo of being drunk + paralyze and the experience of encountering a Bazir in the wild if you were to survive for more than a second without a dwarven ring:

Full list:
  • loadInventoryStats set armor, defense and attack at the beginning
  • Monsters now calls loadInventoryStats() to increase armor if they wear items
  • Fixed castview debugs (issue with new gameGetPlayers conditionZ)
  • Fixed continueWalking stopping for players when chasing a monster that stands still
  • Burning damage has been implemented
  • Energy damage has been implemented as well
  • And poison damage with poison algorithm + fire/energy/poison max damage prioritization
  • Poison monsters does poison damage when they melee
  • Fire/Energy/Poison damage is no longer rescheduled for each new attack
  • Implemented drunkedness + walk delay happens even with failed movement
  • Monsters no longer shoot spells at you from a different floor, lol
  • Fixed monsters staring at targets on a different floor
  • Fixed creatrures immediately randWalking when target moves
  • Fixed monsters shouldn't cast haste or outfit when randWalking
  • Fixed monsters shouldn't get drunk
  • Fixed soulfire and electrify
  • Implemented alito mas res and made commands up to 4 words
  • Monsters should have attackstance 2 and cr.defense is now used in calculatePhysicalDamage when attack is false
  • Monsters now sends actor effect id, e.g. ferumbras heals with special effect id, and heal effect is only added to damage when creature is player
  • Fixed monsters sometimes not casting spells
  • Implemented summoning; they attack same target and chase master now; actually seems just like real tibia now
  • Monsters immune to related elements no longer gets afflicted by the conditions
  • Summons onDeath/logout duplicate world2.removeCreature issue fixed
  • LootRate in config
  • Spells has been moved to monsters class
  • Changed onTalk commands to remove command from msgsplit/msglen
  • All onTalk functions should have their offsets fixed
  • Cannot /watch yourself (segfault)
  • No more "You are poisoned" spam
  • No more actor effect unless spell is healing or has target
  • Monsters should no longer target invisible creatures & other invis fixes incl creatureKnown add/remove
  • Healing (partial health) now removes the right amount of experience (0)
  • Maybe fixed iteration in onDeath
  • Summons, both with /m and summon spell, does not bypass walls
  • Players can summon ally monsters
  • Summons gives half of the exp gained to their master
  • Summons can now be targeted and does not automatically target summons of same master
  • No longer rotating cast to summons
  • changeTarget (jungle mode targeting) should now be flawless
  • changeTarget off by 1 made re-targetting sometimes happen when it shouldn't
  • Monsters fail to randWalk because of not isGM() condition in changeTarget
  • Summons chases masters exactly the same way as real tibia
  • Fixed infinite loop when using alito mas res
  • Fixed spawning algorithm, should be flawless now
  • Clear summons when logging into saved character
  • Casted creature wasn't activated anymore when casted due to code changes

I'll be trying to livestream tomorrow beginning anywhere between 4 AM to 4 PM GMT depending on my sleep schedule streaming until at least 10 PM if you'd like to catch me there:
 
Last edited:
Update since June 19:

I fixed the following pretty soon after my livestream on June 20th.
  • Castviewed creature should always activate now even with no monster around
  • Monsters on all activated floors should enter jungle mode and attack nearby monsters
  • Enemy monsters should switch target if they target us and we're GMs
  • Renamed spawnCreature to spawnMonster
  • Also clear castviewers for saved player character with viewers
  • Monsters now immediately switch target after target is dead if casttarget is nearby
  • Monsters also sets target and activates on spawn if caster is around
  • Monsters randWalks now when there's no valid targets around
  • Fixed dog attacking creatures again
  • Delay fixed for monsters after findCrossNearbyTiles walk -> A* right after
  • Fixed elements bug in snakepit

Then I took a break for around a week chilling and working on other projects, among others my discord server (chat GPT and moderation bot) and done RL stuff.

Now since yesterday or the day before I've been working on adding NPCs.
Here's what I've got so far:
  • Loading NPC files, spawning NPCs and have them walk around
  • NPCs keeps range/radius when randWalking
  • NPCs NDB files are loaded and inserted into NPC files in runtime
What's still missing here is all NPC "Behaviour" data, i.e. text responses and so on.
This probably won't be finished as a whole until more things are added to the engine, however text responses might be added soon.

NPCs in Fibula, Eddy and Dermot:
UvJ3RtO.png


Quentin in Thais walking around in PZ (had to whitelist NPCs for walking in PZ unlike monsters):
Xl7I68e.png


Grof, The Guard trapped in Thais showing that NPCs won't leave their radius (or home position by radius):
wOgEWj1.png


There's also this funky little NPC that I didn't know existed:
9aINNlm.png


Oh, and I almost forgot, here's a recording of us liveviewing the NPC Quentin:

So there's some minimal progress with regards to NPCs, but the only thing left to do now is add NPC text behaviour, and this is going to be a lot of work.
To be honest I don't really know where to start. I have RE'd cip engine and copied all the necessary structs, but I don't fully understand how the system works yet, specifically how to save things like various conditions and actions like deleting items, giving items, etc, what the "left" and "right" parameter of TNode is, etc.
But as usual I'll probably figure it out with time.

What's the actual % left to have a working engine?
Well, define working engine. It's working as it is. If you mean a full engine with full real map working like it should then about 40-50% remaining liberally estimated.
The reason being that implementing things like NPCs and MoveUse.dat, map saving, loading from 2 sources and refreshing tiles, etc, is probably going to be a lot of work. There are also unfixed bugs in addition to many missing features (no working channels, etc).
This doesn't necessarily translate into 50% of the amount of time left or 2+ years. It just means there is a lot left.
I will say that the engine probably won't be finished this year, that's all I can really say.
 
Last edited:
Update since 7th of July:

  • Done basic parsing of NPC files. Everything should be parsed, but there are still minor bugs here and there, and the structures/design may or may not be appropriate for all the data (I'm confused how to parse the %1 type data). The parsing is very basic and contains no error checks xd
  • Basic NPC behaviour beyond walking; responds to hi, bye, leaving, walking around, keyword searches, and tracks topic among other data.

Demo:

Full list of commits:
  • NPCs leaves/says bye when player moves far enough away
  • NPCs no longer responds to multiple hi's
  • NPCs only responds to ADDRESS or BUSY if already talking to someone
  • NDBs are now loaded again
  • NPC topic is reset when not set in actions
  • NPCs with GoStrength <= 1 no longer moves
  • NPC topic is respected when there's no lineinput
  • NPCs prioritize longer matches over shorter matches (crossbow > bow)
  • NPCs responds to text, topic is checked, "actions" (not funcs) are done
  • NPCs turns to Interlocutor at greeting and when player moves around

Oh, and I forgot to both add this to the commit and to the demo, but NPCs also have a basic queue system...
That's all simple stuff though, hard part is the parsing, making the functions work, and buying/selling multiple items.

If I'm lucky maybe I'm about halfway through implementing NPCs.
More likely though there is quite a bit of work yet to implement functions and buying/selling multiple items.
Not to mention we haven't even added the functionality to move items to and from EQ slots and containers yet :)
So this is probably going to be challenging times for me...

While on that topic, I'm going to try out sharing my patreon here for anyone who may want to support this project:

If anyone subscribes I will be adding special content (screenshots, videos, etc) on patreon not published here.
Patreon subscribers will also be able to request features and specific content such as asking me to demonstrate or explain how something works, higher tiers gets higher prioritization.
Completely optional, but thought I'd add it in there as an option.

Have a good weekend everyone. 🌞
 
Back again with another update (since 21st of July).

Main changes:
  • Many more NPC improvements incl. timeout system and a long delay before moving after leaving the NPC
  • Fixed monster targeting: was using an old bad system that only works for a single player where the monster immediately targets the player that makes a move, now monsters looks for a new target in their activity loop ("onThink") instead and only acquires a new target if it has no target and/or the LoseTarget condition has been met.
  • Summon improvements
  • Respawns are now split into individual units (1 respawn for each monster)
  • Player questvalues has been implemented and NPCs checks questvalues

Multiple items with itemcount conditions in NPC scripts
xSuCSF1.png


NPCs parses any number no matter how large with a cap of 500 like with real tibia
N8u2hiF.png


NPCs uses itemcount conditions to determine which script to use, the one with "a hatchet", or the one with "%A hatchets"
wfrU4aN.png


NPCs multiple output system with a dynamic delay

Targeting system improved/perfected + respawn improvement part 1

Targeting system improved/perfected + respawn improvement part 2

Targeting system improved/perfected + respawn improvement part 3

I forgot to mention this last update: this was a funny bug, which you may have seen on OTs before with Oracle walking around; some NPCs were moving around as they were assigned movespeed 1 even when they shouldn't

Full changelog:
  • Slightly improved LoseTarget-related condition
  • NPCs aren't re-activated everytime a creature moves nearby
  • Switched from movement based targetting to changeTarget()
  • changeTarget() in activeLoop and return if no target found
  • Summons follows master again after target is killed and regular monsters keeps active
  • Monsters spawned immediately activate if any targets nearby
  • Summon lostness does not apply to players' summons
  • Summons should no longer attack when 1 screen away from master
  • Fixed changeTarget; strategy 1, improved canMoveTowards condition etc
  • Monsters sidesteps in activeLoop instead of automatically when master moves
  • Summons cannot target themselves anymore
  • Fixed issue in continueWalking (delayed walking)
  • NPC "leaves" when player logs out
  • Respawns are split into individual units per single monster
  • NPC Multiple items + multiple items conditions
  • Fixed allFloors condition in gameGetCreatures()
  • Fixed Nah'bob not talking to us (bad if conditions in condition iteration)
  • Questvalues are checked in NPCs conditions (so Nah'bob no longer talks to us)
  • Improved NPC Queue (among other things memorizes the greeting used by the player)
  • NPC multiple outputstrings
  • NPC talking system (multiple outputstrings with delay)
  • NPC timeout system

As usual, if you'd like more insight into the development of this server, consider becoming a Patreon supporter.
In addition to the unique insight you'll find on the Patreon page (after the first Patreon supporter joins) you'll also get a voting right in determining what features to prioritize implementing in the server and 10 minutes of OT support per $5 pledged each month.
 
Last edited:
Time for another update (since 5th of Aug, 15 days).

There won't be any pictures this time since I've moved development over to my desktop computer which is much faster, and I've decided to start streaming more, so you can catch me over at
and https://www.youtube.com/@SourceChan instead.
I will still be posting updates here every 14 days, but no more pictures unless I change my mind (maybe one once in a while).

Main changes:
  • Added loadPlayerData (loads usr/ files) which currently loads everything except for inventory and depots
  • Fixed a bug with walking with non-GM player speed, ESPECIALLY diagonal movement, now it feels just like Cip engine
  • NPCs sets player questvalues in talk-scripts
  • Other bug fixes, internal, and minor changes

Full changelogs:
  • originaloutfit and currentoutfit over outfittype and outfitcolors
  • SetQuestValue
  • Improvements related to NPCLeave etc
  • Fixed creaturesKnown for players appearing (after changing gameGetPlayers offsets many commits ago)
  • Fixed creatures being deactivated with castviewer around
  • /rotate no longer casts npcs
  • Added loadPlayerData and creature::loadSkills(): everything up to and including questvalues are being parsed
  • Improved and sort of fixed creatureWalk (caching next player step)
  • Diagonal steps has delay factor 2, not 3
  • Commented out elif players.count(...) -> ... code in parseLoginPacket
  • Questvalues moved to cppplayer
  • Changed monsters, creatures, etc key datatype from uint to unsigned long long
  • Disable /reset (clear all characters)

I might be streaming again tomorrow, and might activate my microphone (no promises), so stay tuned.
I've also started sharing my screen including showing code and my terminal for those who are interested in the development of the server.
For those who have paid attention the language of my server is no longer a secret.

Cheers ✌️
 
Time for the next update since Aug 20.

There's been a bunch of major updates this version:
  • Player skills including percentage is shown and stored
  • Skills go up for attacks and shielding if there's a shield present using the same bloodcount as Cip engine and there's level and skill advances when it reaches 100%
  • Pathfinding improvement
  • Items can now be moved from and into inventory and containers!
  • Item push item by stackpos algorithm, including pushing items in and out of house walls etc (showing that stackpos is calculated right) and creatures stack position


Full git logs:
  • Improved calculatePhysicalDamage (checks skills, weapontype and/or shield) and loadInventory()
  • Fixed depos inventory bug (depos is now also parsed as a key; for those that don't know there were depot boxes inside player inventory due to a bug with parsing)
  • Fixed monster damage (stats were reset in loadInventory)
  • More parsing improvements
  • Fixed NPCs with radius 0 should not move and reverse GoStrength > 1
  • Minor bug fixes (set creature.health = creature.healthmax = 0 at init)
  • Calculated all exp, magic and skill percentiles
  • Added skill training and level advancements
  • Kinda respects PZ and not targetting NPCs now
  • Reschedule chase target if player walks away
  • Attacks are only cancelled when a creature that was actively targetting that creature when it died dies
  • No more broken delay for trying to walk inside walls
  • Fixed walking inside creatures
  • Increased creature activation distance by 3x3 sqm
  • Fixed attack-movement priority (approacher gets first attack)
  • Fixed spawning algorithm spawning through walls
  • ExpRate, SkillRate, MagicRate
  • Fixed walkDirs recursive call event bug + reduced walkdir to single step
  • Fixed issue with pathfinding (totalCost)
  • Fixed /s monster attacking summoner at spawn
  • Fixed shouldn't be able to gain exp by dying lol :D
  • Autowalk should only cache one step at a time
  • Monsters should cast healing spells when they have no targets
  • Fixed shielding factors in calculateSkillCount a little
  • Replaced unsigned long long pos with Position in handleItemsExpire to eventually support moving items back and to inventory
  • Rewrote world2.moveItem() and added world2.getObject() to now be able to move items in and out of inventory and containers + move creatures and items as usual ofc
  • Fixed stack in world.moveItems and some minor improvements

Sorry for not following up on the livestreaming as scheduled, there might be more of that in the future.

Have a good one!
 
Very nice!

Reading your change list, just come to my mind the questions, considering that it is a brand-new project
are you using any unit/integration tests on this project?
are you following any architecture guidelines, such as clean architecture or similar?

Keep working, it looks very promising!
 
Back
Top