EQ TLP - Mischief (Free Trade / Random Loot)

Pharone

Trakanon Raider
1,136
1,007
Exhibit A for Reason number 2 for why people won't invite rando rogues into groups: they don't care if they contribute much, don't care if they suck and certainly aren't going to try to help the team. They've given up on all of that before the finish the char select screen, and it's your responsibility to carry them from there.
Meh... it's a game. I shall lose zero sleep over you calling me a rando rogue. Just saying. There's a million things in life more important than EQ.
 

Secrets

ResetEra Staff Member
1,874
1,879
64 bit also opens up the possibility of more race/class combos. I seriously doubt they'll add anymore classes at this point, but I think new races and/or combos are definitely on the table.
There's no reason you couldn't add another class, race, or deity in a 32-bit application. EQ could have done this years ago. There's probably just simply too much code you'd have to change in a reasonable amount of time, and doing so is error prone when you don't have a team of engineers working with quality assurance, artists, designers, etc - plus bean counters would have to see a reasonable return on investment for having developers spend time that way.

Technical explanation below:
You can still use int64 in a 32-bit program, it is the same as doing char bitmask[8] and making helper functions to compare classes or races.

EQ has had int64 health in a 32-bit application for many years now, because the keyword doesn't care what arch it is running under.

64-bit only means you have a 8-byte pointer type, and can address allocations of memory up to 0xFFFFFFFFFFFFFFFF (8 bytes), instead of 0xFFFFFFFF (4 bytes), as well as the instruction set supporting better ways of handling floating point math, intrinsics that natively parallelize instructions through the instruction set, and other optimizations that EQ will likely never utilize.

The only reason to do this is the reason outlined in JChan's post; they are simply running out of addressable memory for the application, even with a 4GB ceiling - and this is commonplace for most 00's-10's games that want to push graphic fidelity and utilize modern GPUs, but cannot because the textures and other addressable elements required to store data are simply too small.

The other issue which will likely follow is an upgrade of DX9 -> DX11/12, but that would require a complete rewrite of their graphical engine because of their heavy usage of the fixed function pipeline versus shaders that drive the game's integration. It's why DX9 was a simple upgrade for EQ, but DX10/11/12 is 'out of reach' for most teams that have downsized their staff but still use in-house engines. So seeing Daybreak do this, unless it's already done for them, is likely out of the question and this is the next best option.

The reason for the above comment is that EQ has historically 'gotten away' with tricks that allow them to bypass the need for that graphics engine / directx api rewrite. DX7/8/9 are 'pretty much' interchangeable... if all you use is the fixed function graphical pipeline. However, you're missing out on modern optimizations like texture pooling, caching, and other GPU-offloaded tasks such as render call batching. EQ doesn't suffer as a result of not using those.

However, they hit a roadblock with graphics fidelity and memory - if there's too many different assets loaded 'on-demand' and they run out of addressable memory (GPU or otherwise, it doesn't matter if the application cannot tell the GPU where it resides in memory), they cannot work around this without converting the entire application to use a 64-bit address space.

This is, of course, a workaround - it will still require users to have more memory to run the game. Thankfully most have 8GB of ram or more in 2021, as Windows 10 simply requires that to run these days. And whatever you can't put in physical memory, putting the game's assets into the paging file ('swap file', if you would) becomes a viable option, and the OS will natively handle putting the assets it can't store in physical memory into swap memory as the game can address that memory, even if it's on the disk drive temporarily.

I think it's a brilliant solution, personally, and it's the one I would pick if I was in their situation. In fact, I am actually in a situation like that right now in my professional day to day, and I'm doing it alone - at least Daybreak has a team doing it with them, I'm doing it alone!

EQ doesn't require a demanding GPU currently, it's a bit heavy on draw calls at most. So they can use the DX9 solution for now, and maybe stuff a lead or two in a room together, or hire external talent to write that graphics upgrade, and in the meantime, the game won't crash due to out of memory - it may just be 'laggy' for those with 6GB or less RAM on Windows 10.
 
  • 1Like
Reactions: 1 user

Rajaah

Honorable Member
<Gold Donor>
11,252
14,931
I think a War Wizard would be awesome. I'd love to be on a team to theory craft one up.

Yeah. I don't know if any devs still read this board, but if so, hit up me and Fight Fight and let's do some theory crafting. I'll draft up spell/ability/AA list ideas fo' free, pro bono.

I think the "jack of all trades" type class really got popularized with Skyrim. Seemed like everybody played a battle-mage type character in that game.

War Wizard, Battlemage, War Mage, Mageknight are all possible titles. Not sure if they'd use leather/chain/plate, depends on how much the devs want them to lean in the tank direction or the DPS direction. Would most likely go with chain to keep them in line with Ranger/Rogue. The main challenge would be setting them apart from the Ranger class.
 
  • 1Like
Reactions: 1 user

Cyni

Lord Nagafen Raider
549
192
Just make it a melee proc based class that has DD spells you can apply to your weapon. Maybe give a group buff that does the same for all melee or something.

Cold-DD slows enemies by X%, Fire-DD applies a low level dot, etc.
 
  • 1Like
Reactions: 1 user

Rajaah

Honorable Member
<Gold Donor>
11,252
14,931
Let ogres be wizards...

Time for lunch.

I'm thinking gyros

I'd definitely say Ogres should be included on the race list for Battlemage. It's fun to go with strong-yet-dumb races for SK and Shaman so it'd be the same here, and evil/big races being able to play Battlemage would also be a way to set the class apart from Ranger.

From "more battle, less mage" to "more mage, less battle"

Ogre
Troll
Dark Elf

Barbarian
Human
Gnome

For starters. Once you let Ogres use wiz/mage abilities the door is pretty much open for everyone, even Dorfs.
 
  • 1Like
Reactions: 1 user

Rajaah

Honorable Member
<Gold Donor>
11,252
14,931
Just make it a melee proc based class that has DD spells you can apply to your weapon. Maybe give a group buff that does the same for all melee or something.

Cold-DD slows enemies by X%, Fire-DD applies a low level dot, etc.

I was thinking about having it be proc-based or enchant-based. Though Rangers already have abilities like that, and if you make a melee version, it's close to what Rogues already have with poisons.

However I think you can get pretty inventive with this class, from proc enchants to miniature mage pets.
 
  • 1Like
Reactions: 1 user

Tuco

I got Tuco'd!
<Gold Donor>
45,420
73,489
Yeah. I don't know if any devs still read this board, but if so, hit up me and Fight Fight and let's do some theory crafting. I'll draft up spell/ability/AA list ideas fo' free, pro bono.

I think the "jack of all trades" type class really got popularized with Skyrim. Seemed like everybody played a battle-mage type character in that game.

War Wizard, Battlemage, War Mage, Mageknight are all possible titles. Not sure if they'd use leather/chain/plate, depends on how much the devs want them to lean in the tank direction or the DPS direction. Would most likely go with chain to keep them in line with Ranger/Rogue. The main challenge would be setting them apart from the Ranger class.
2021 bards are battlemages with how strong heir dots are.

I don't know what a battlemage would look like that isn't already conflicting with existing classes.
 

LachiusTZ

Rogue Deathwalker Box
<Silver Donator>
14,472
27,162
Just open all races to all classes.

Make class armor all races.

Let people figure the rest out.

Maybe your ogre monk can't finish the epic quest because of whatever reason.

Who gives a shit. Not like any EQ players expect customer service at this point anyway.
 

Secrets

ResetEra Staff Member
1,874
1,879
Just open all races to all classes.

Make class armor all races.

Let people figure the rest out.

Maybe your ogre monk can't finish the epic quest because of whatever reason.

Who gives a shit. Not like any EQ players expect customer service at this point anyway.

Gnome Monks can finally be a dream realized!

1636136885132.png
 

Fight

Ahn'Qiraj Raider
4,568
5,373
Here is a start. It needs a lot of work.

In general, I would say races that could be Wizards, Mages, or Shadow Knights would qualify for the Battle Mage. That gives you a pretty unique and fun list of races that can play the class.

Next, I think you are right that it should be a Cloth, Leather, Chain class. It should be a 1H weapon and Shield focused class.

It could fill the role of a tank in a pinch, but it should do it through reactive rune mitigation more than AC/HPs.

RacesArmorWeapon SkillsKey Abilities
Dark ElfCloth1H BluntReactive Runes: Chance to proc when damage is received
DrakkinLeather1H SlashingStrong & Unique Weapon Proc Buffs
EruditeChainPiercingSelf Teleportation: To zones and more predicable Shadowstep lines that gain or lose agro
FroglokShieldsSpell Eater Lines: Mitigate incoming spells and gain mana
GnomeHand to HandTelekinesis: Pull party members or Mobs to you
High ElfThrowingTemporary Pets (swarm pets) that fill different roles other than just damage
HumanFire Nukes: Add damage over time and Agro
IksarIce Nukes: Add slows, snares, or roots
OgreElectrical Nukes: Make mobs vulnerable to Group members nukes or jump to additional mobs
TrollSilence, lessens a mobs chance to cast, do periodic abilities, or proc
 
  • 1EyeRoll
  • 1Like
Reactions: 1 users

Secrets

ResetEra Staff Member
1,874
1,879
Here is a start. It needs a lot of work.

In general, I would say races that could be Wizards, Mages, or Shadow Knights would qualify for the Battle Mage. That gives you a pretty unique and fun list of races that can play the class.

Next, I think you are right that it should be a Cloth, Leather, Chain class. It should be a 1H weapon and Shield focused class.

It could fill the role of a tank in a pinch, but it should do it through reactive rune mitigation more than AC/HPs.

RacesArmorWeapon SkillsKey Abilities
Dark ElfCloth1H BluntReactive Runes: Chance to proc when damage is received
DrakkinLeather1H SlashingStrong & Unique Weapon Proc Buffs
EruditeChainPiercingSelf Teleportation: To zones and more predicable Shadowstep lines that gain or lose agro
FroglokShieldsSpell Eater Lines: Mitigate incoming spells and gain mana
GnomeHand to HandTelekinesis: Pull party members or Mobs to you
High ElfThrowingTemporary Pets (swarm pets) that fill different roles other than just damage
HumanFire Nukes: Add damage over time and Agro
IksarIce Nukes: Add slows, snares, or roots
OgreElectrical Nukes: Make mobs vulnerable to Group members nukes or jump to additional mobs
TrollSilence, lessens a mobs chance to cast, do periodic abilities, or proc

I could probably add a new class using the framework I did for Classless 3.0 on the RoF2 client. This class concept was actually very similar to the Wizard idea we had for the dungeon crawl server we did prior to classless 2.0. Adding mitigation would have been a great addition to its toolkit. That's what Kinetic Barrier was, I think. A toggle stance for mitigation (but without threat)

1636150685572.png



I already have the ability to limit gear/spells based on data incoming from the server, and I've been dying to implement better tooltips using the overrides I already have in place.

Might play around with this idea and see if I could put it on an emu server just for a proof of concept to see if it could be done.

Also, here's a list of custom 'effects' we had for Edge's Insanity -> Classless3.
They were all reused/shared between server iterations and could be applied individually, or alongside another effect.

#define SE_SmartHeal 500 //

#define SE_SwapHealth 501

#define SE_SwapPosition 502

#define SE_SummonMultipleUndead 503

#define SE_Lifetap 504

#define SE_Lifeburn 505

#define SE_MeleeTaunt 506

#define SE_SumCorpsePet 507

#define SE_PetsMoveToTarget 508

#define SE_PetSkillAttack 509

#define SE_PetSpellAttack 510

#define SE_Vacuum 511

#define SE_Pull 512

#define SE_Toggle 513

#define SE_AugmentItem 514

#define SE_TogglePvP 515

#define SE_SumClone 516

#define SE_Seppuku 517

#define SE_EdgeTaunt 518 // implemented - Taunt

#define SE_Tracking 519 // clientsided

#define SE_EdgeDoubleAttack 520

#define SE_AugmentBias 521

#define SE_AugmentHighest 522

#define SE_Lockpicking 523

#define SE_RootImmunity 524

#define SE_SnareImmunity 525

#define SE_MezImmunity 526

#define SE_Mastermind 527

#define SE_FactionReset 528

#define SE_RaceChange 529

#define SE_DoubleRegen 530

#define SE_ItemGraphic 531

#define SE_DoAttack 532

#define SE_BlockSelfHealing 533

#define SE_BlockHealingOverTime 534

#define SE_NegateRegen 535

#define SE_PositionBehind 536

#define SE_SummonServerGroup 537

Here's the clientsided tooltips for each:

case 514:
sprintf(szTemp, "Remove Augment from Item");
strcat(szBuff, szTemp);
break;
case 500:
sprintf(szTemp, "Smart Heal: ");
strcat(szBuff, szTemp);
SlotValueCalculate(szBuff, pSpell, i, 1);
break;
case 501:
sprintf(szTemp, "Caster Swaps Health with Target");
strcat(szBuff, szTemp);
break;
case 502:
sprintf(szTemp, "Castewr Swaps Position with Target");
strcat(szBuff, szTemp);
break;
case 503:
sprintf(szTemp, "Spawn Missing Pets and Heal Pets/Caster");
strcat(szBuff, szTemp);
break;
case 504:
sprintf(szTemp, "Damage is restored as Health");
strcat(szBuff, szTemp);
break;
case 505:
sprintf(szTemp, "Deals damage equal to your lifeforce");
strcat(szBuff, szTemp);
break;
case 506:
sprintf(szTemp, "Taunt and Deal Primary Hand Damage");
strcat(szBuff, szTemp);
break;
case 518:
sprintf(szTemp, "Taunt");
strcat(szBuff, szTemp);
break;
case 507:
sprintf(szTemp, "Reanimate Corpse as Pet");
strcat(szBuff, szTemp);
break;
case 508:
sprintf(szTemp, "Teleport Pets to Target");
strcat(szBuff, szTemp);
break;
case 509:
sprintf(szTemp, "Pet Uses Skill on Caster's Target: %s", GetSkillNameFromID(pSpell->Base));
strcat(szBuff, szTemp);
break;
case 510:
sprintf(szTemp, "Pet Uses Spell on Caster's Target: %s", GetSpellByID(pSpell->Base) ? GetSpellByID(pSpell->Base)->Name : "NONE");
strcat(szBuff, szTemp);
break;
case 511:
sprintf(szTemp, "Pull in Nearby Enemies to Target");
strcat(szBuff, szTemp);
break;
case 512:
sprintf(szTemp, "Pull Target to Caster");
strcat(szBuff, szTemp);
break;
case 513:
sprintf(szTemp, "Can Be Toggled by Clicking the Spell Gem again.");
strcat(szBuff, szTemp);
break;
case 515:
sprintf(szTemp, "Toggles your PVP flag.");
strcat(szBuff, szTemp);
break;
case 516:
sprintf(szTemp, "Create a Clone of your Target as a Pet - CANNOT Be Used on Targets of Greater Strength.");
strcat(szBuff, szTemp);
break;
case 517:
sprintf(szTemp, "Instantly Kills the Caster");
strcat(szBuff, szTemp);
break;
case 519:
sprintf(szTemp, "While Scribed in your Spell Book, Displays Names of Creatures on the Map. Range: ");
SlotValueCalculate(szTemp, pSpell, i, 1);
strcat(szBuff, szTemp);
break;
case 520:
sprintf(szTemp, "While Scribed and Memorized, Increases Double Attack Chance by: ");
SlotValueCalculate(szTemp, pSpell, i, 1);
strcat(szBuff, szTemp);
break;
case 521:
sprintf(szTemp, "Removes an Augment from an Item with a Greater Bias to its Highest Stat");
SlotValueCalculate(szTemp, pSpell, i, 1);
strcat(szBuff, szTemp);
break;
case 522:
sprintf(szTemp, "Removes a Highest Stat Augment from an Item");
SlotValueCalculate(szTemp, pSpell, i, 1);
strcat(szBuff, szTemp);
break;
case 523:
sprintf(szTemp, "While Scribed in your Spell Book, Allows for the Use of Lockpicks on Locked Doors. Requires Lockpick Item");
strcat(szBuff, szTemp);
break;
case 524:
sprintf(szTemp, "Grants immunity to Root effects.");
strcat(szBuff, szTemp);
break;
case 525:
sprintf(szTemp, "Grants immunity to Snare effects.");
strcat(szBuff, szTemp);
break;
case 526:
sprintf(szTemp, "Grants immunity to Mez and Charm effects.");
strcat(szBuff, szTemp);
break;
case 527:
sprintf(szTemp, "Grants the Mastermind Effect. Anti-Mitigation becomes a value of 0, and your pets have their Power doubled.");
strcat(szBuff, szTemp);
break;
case 528:
sprintf(szTemp, "Clears the Faction of your Character completely, making all NPCs forget about your Deeds and Misdeeds.");
strcat(szBuff, szTemp);
break;
case 529:
sprintf(szTemp, "Changes your Race permanently to ID: ");
SlotValueCalculate(szTemp, pSpell, i, 1);
strcat(szBuff, szTemp);
break;
case 530:
sprintf(szTemp, "Doubles your natural HP Regeneration.");
strcat(szBuff, szTemp);
break;
case 531:
sprintf(szTemp, "Sends an item graphic at your target.");
strcat(szBuff, szTemp);
break;
case 532:
sprintf(szTemp, "Frenzy effect. Drains current endurance and returns it as extra attacks.");
strcat(szBuff, szTemp);
break;
case 533:
sprintf(szTemp, "You feel dizzy, and can't see your spells landing...");
strcat(szBuff, szTemp);
break;
case 534:
sprintf(szTemp, "You feel dizzy, and some of your power fizzles out if not done immediately...");
strcat(szBuff, szTemp);
break;
case 535:
sprintf(szTemp, "Your wounds, they will not heal.");
strcat(szBuff, szTemp);
break;
case 536:
sprintf(szTemp, "Caster is shadowstepped behind their target.");
strcat(szBuff, szTemp);
break;
case 537:
sprintf(szTemp, "If you are your group's leader, this ability will summon everyone to your location instantly no matter where they are.");
strcat(szBuff, szTemp);
break;

It wouldn't take much to get this working on emu, though I think Daybreak would take a while to do it without massive hacks like I did to workaround client limitations.
 
Last edited:
  • 1Like
Reactions: 1 user

Secrets

ResetEra Staff Member
1,874
1,879
S Secrets

Why do they mention their servers?
If I had to guess, they may be storing collision data or caching data on the serverside that they really shouldn't be needing to. I don't know, I am not Daybreak Games and I don't have insight on how they cache stuff, or manage memory on the server side. Only limited information from shared client libraries that contain partial functions.

In theory, they could run out of memory if they keep a single 32-bit process online for extended periods of time for the same reason the client can run out of memory.

EQEmu used to work around this for most servers by killing the 32-bit zone processes after the zone 'sleeps'. But EQEmu is largely 64-bit servers already as the Perl 64-bit compatibility issue was worked around.
 

Greyman

Trakanon Raider
621
768
I'd like to see something that heals by doing damage. Like disciple or bloodmage from Vanguard or early Rift Inquisicar builds.

Rift Chloromancer was a cool and unique class

Exactly. He just admits he's lazy and doesn't care to contribute. All he's interested in is getting easy shit

Reminder that Prathun confirmed that the "separate" loot table is just a myth that Rogues made up, to be fair most groups are mainly concerned about xp gains but if you invite a Rogue there's a good chance your split and the end of the night will be somewhat lighter than usual.

 

Madmartigan

Trakanon Raider
76
1,043
I haven't seen much of a presence of Greed is Good on the server anymore, anyone know if a ton of people quit or something?
 

Madmartigan

Trakanon Raider
76
1,043
I'm not actually, I am in a guild called Hoosker Doos which is made up primarily of many current/former members of Triton and is quite small (max we have in raid nights is 15 people including boxes).

I only ask because I have a theory that can probably be discarded or perhaps substantiated. I'll just lend out my theory which comes from more anecdotal observation then "inside information" but here it goes.

My theory is a little over a week ago a ton of Greed is Good cashed out all their plat/gear for krono in preparation for next TLP/whatever. I can only imagine a combination of the keying with no longer really being able to scalp people on prices of high end loot because of the bazaar made a lot of people begin to lose interest. Perhaps some DPS race losses against The Faceless was the tipping point and many people had enough and after the 44M in plat was distributed amongst the guild on 10/25 - many people went to the bazaar to cash out. This mass cash out caused krono prices to go from 40K to 110K in just 3 days.

Whatever the cause I figured 10 days after the fact the market would at least get somewhat back to normal. For a week now krono prices have been almost completely stable hovering around 90k consistently. The spike of course caused many of the top end Luclin items up for sale to be bought or taken down (I admit myself liquiding some krono to a barterer at 110k to buy a couple pieces I was saving for). Despite krono prices stabilizing, and there being much more time to farm top end Luclin raid mobs, prices of top end raid items are still 2-3x what they were the first 2 weeks of Luclin and the availability of the top end items is literally 4-5 times less than what were consistently up for sale in the first 2 weeks of Luclin.

For me this is all indicative of a fallout in Greed is Good. You still have a handful of Frank's crew selling items for 500k-1Mpp, but the prior flood of raid items you would regularly see the market filled with at competitive prices no longer exists.