Jump to content
Tero

Thanks for keeping RO alive + Tero's wacky modding adventures

Recommended Posts

I just wanted to stop in to say thanks to the Dev team for continuing to support this great game after all these years.  RO was a very important game to me in my youth and to see that the community is still active after all this time is amazing.  

 

Back in the old days, I always considered running my own server, but I only finally bit the bullet on it recently.  I never suspected that the entire server backend would be open-source!  As such, I modded the bejeezus out of it.

 

For starters, my server is PRE-RE, however, I backported almost all of the new content from Renewal into it.  Here is my Doram character in Malangdo.

 

Modding1.png.870b6b32fa3f9c28a5e8ceb23f4312ac.png

 

It's actually pretty easy to pull renewal content into PRE-RE, since they use the same server backend.  To pull renewal enemies into pre-re is as simple as grabbing them from db/re's mob-db and mob-skill-db and pulling them into pre-re's mob-db / mob-skill-db.  Of course, renewal enemies have slightly different stats, in particular their "max attack" is their "matk" value and their def and mdef values are usually way too high, but that's easily fixed with SDE.  Ditto for items and cards, using item-db.  As far as the maps are concerned, they're already all in the game, they just don't have warps, so you just need to grab the npc/warps files from renewal and pull them into pre-re.  Many renewal dungeons are instances, so you can either pull the instance into pre-re, or do what I did and turn the instance dungeons into normal dungeon floors by adding warps and recreating their mob tables.

 

As for the Doram, it's fairly easy to add them too, I'll probably make a post explaining how to do it at some point.  The main thing you have to do is remove your service_korea folder from your prere grf file, which will allow the one from renewal that allows the creation of Doram to be used instead.  Then there's a flag in the server settings somewhere that you have to modify so the server won't reject character creation requests for Doram.  I'll write up something on this later.

 

The biggest thing I added by far is the ability to rebirth as Super Novice, Star Gladiator, Soul Linker, Ninja, Gunslinger, and Summoner.  It always annoyed me that the classes added after the first 12 never got the ability to rebirth, so I did it myself.  It's not possible (or at least I can't figure out how to do it) to add new classes to the game since class sprites are hardcoded in the client file, so instead the way I did this is that when you rebirth as one of the new classes, it unlocks a new "quest skill" which is a pre-requisite for their transcendent abilities.  The game also checks to see if you have this skill when it determines if you are transcendent (say, for equipping transcendent only armor or getting the 25% max hp / sp bonuses), and it also uses it to force you to the transcendent exp tables.  I'd love to share the code for this, but there's so many code changes that it probably can't be done without me just zipping up my entire codebase, which is also somewhat out of date.  By I encourage other intrepid coders to experiment!

 

A reborn Ninja's new skill tree.  Note the presence of a few Kagerou skills, despite the fact that he is a still a Ninja.  The "reborn" skill in the bottom left is the new quest skill that makes this possible.

Modding2.png.46524c0507b4c146c4aef6a5985f7472.png

 

For Ninja / Gunslinger / Star Gladiator / Soul Linker, they get a few skills from their next job as transcendent skills, with many alterations (for example, Soul Linker gains Espa and Eswhoo, but they don't require spirit energy to use, since it's not available.  In exchange they have much less power).  Summoner gets his post level 100 skills as transcendent skills, since the max level cap is 99.  Super Novice gets to become Expanded Super Novice.  I also added the ability for Novices to use bows, which required me to make a custom animation for this.  The dream of Bow Super Novice is finally real!

Modding5.png.b14d0c6d18fecfe97713c29bac74190b.png

 

Beyond this, I also added like a hundred new pets.  They all have custom portraits and speech lines.  I put up a guide on how to add custom pets elsewhere on the forum if you want to do this.

 

This poor Lunatic is NOT ready for what's about to happen.

Modding3.png.af7e0bf5fd3cb9c773959963d15947bf.png

 

And then I manually rebalanced the effect of every card in the game and manually tweaked the exp and drop rates of almost every monster in the game.  My server is technically 10x, but the beginning feels like 5x or so, while the late game feels more like 20x, because lategame monsters give more exp.  I also fixed a ton of bugs and made a number of enhancements, for example if you use the whodrops command, it now shows exact matches first, so if you do "whodrops boots" you actually see slotted boots now!

Modding4.png.b163ab3eb86db019be8e8070a6d38ffd.png

 

At this point, there's probably some room for debate as to whether or not this game is still Ragnarok Online or something else entirely, but I'm having fun with it.  The only problem is that now my regular job seems boring by comparison.  Having complete control over the codebase for one of the best games of all time is pretty much impossible to top.  Oh well.  Everyone reaches the pinnacle of their career sooner or later.

 

I'm sorry if this sounded like a giant advertisement.  Actually, my server will probably never be open to the general public.  However, where my code is easily distributable I'll probably make some of it available.  I've already put up a couple topics sharing some of the files I've written, and I'll probably try to put up a few more once everything is adequately tested (I've also crashed my server about a hundred times already).  

  • Upvote 4
  • MVP 1
  • Like 1
Link to comment
Share on other sites

7 hours ago, sapitosucio said:

I demand to know what happened to that little Lunatic.

Atroce hit him with Pulse Strike for about 3500 damage.  Poor bunny.

Modding8.png.8480a7b15e737daa88c2181774b025dc.png

 

A couple other things I forgot to mention before.

 

I also created two completely new enemies.  RO has official pet art + accessories for two new pets, Scatleton and Skelion, who don't exist in the mob-db at all (they have sprites, but their entries are just stubs), thus they cannot exist as pets.  So I created them myself.

 

Scatleton is a sneaky kitty, his AI is a mix of Frilldora and Matyr, and he stalks people around Niflheim

Modding6.png.3cef7622e773f13933aa92fa8681b1cd.png

 

Skelion is a miniboss in Niflheim's first area.  His Scatleton mob is cute but deadly.  Both of them drop some Doram-related stuff as well as their taming items and accessories.

Modding7.png.1ad215c2c4bc633713bcb8522b7e92e2.png

 

The Bathory pet is a pretty good one, she uses Energy Drain, which I changed so that when a pet uses it, it heals your SP a little.  Hunter Fly's Blood Drain also does this, but with HP.  I can share the code for this one as this is quite simple.  The change is in skill.cpp.  Just find and replace the case statements for BLOODRAIN and ENERGYDRAIN with these.  You could easily add a similar effect to any skill using the "if src-type == BL_PET" part of the code.

case NPC_BLOODDRAIN:
	{
		int heal = (int)skill_attack((skill_id == NPC_BLOODDRAIN) ? BF_WEAPON : BF_MAGIC,
			src, src, bl, skill_id, skill_lv, tick, flag);
		if (heal > 0) {
			if (src->type == BL_PET) {
				// pet heals owner instead of itself
				clif_skill_nodamage(NULL, (struct block_list*)((TBL_PET*)src)->master, AL_HEAL, heal, 1);
				status_heal((struct block_list*)((TBL_PET*)src)->master, heal, 0, 0);
			}
			else {
				clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1);
				status_heal(src, heal, 0, 0);
			}
		}
	}
	break;

	case NPC_ENERGYDRAIN:
	{
		int heal = (int)skill_attack((skill_id == NPC_BLOODDRAIN) ? BF_WEAPON : BF_MAGIC,
			src, src, bl, skill_id, skill_lv, tick, flag);
		if (heal > 0) {
			if (src->type == BL_PET) {
				// pet heals owner instead of itself
				//clif_skill_nodamage(NULL, (struct block_list*)((TBL_PET*)src)->master, AL_HEAL, 0, 1);
				status_heal((struct block_list*)((TBL_PET*)src)->master, 0, heal / 15, 2);
			}
			else {
				clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1);
				status_heal(src, heal, 0, 0);
			}
		}
	}

 

The one I like the best though is Moonlight Flower.  She attacks with Mammonite, which drains YOUR money!  I specifically added a check to this skill to drain your cash if it used by a pet, because I think this is hilarious.

Modding9.png.7a5d2c65bd112d11d280ffb70f017956.png

She also eats Topaz and constantly praises how wealthy and handsome you are.  What a gold-digger!  You get what you pay for, though, she's strong.

 

I also reimplemented most of the missing Sograt Desert maps.  This is easy as they are still in the game, they just have their warps commented out in npc/pre-re/warps/fields/morroc_fild.txt.  I moved the Sograt Exclusion Zone map to where Sograt Desert 17 was (Phreeoni's old map).  It also now has proper exits rather than trapping you on that map.  Exiting to the bottom right leads to the Satan Morroc Maps.

Modding10.png.e92806c15d612603a8665634a6e6bb6e.png

 

The method to access the new world is also changed on my server, the dimensional gorge on Morroc field 22 now leads to the Bifrost bridge, because I think this makes sense lorewise.  After you cross the bifrost bridge you come to bifrost tower, which eventually exits to Splendide.  This is relevant because on my server, you cannot teleport to any town or dungeon unless you've already been there, so it's quite a trek to Splendide.  Satan Morroc himself is at Flame Basin, which lies past Manuk, probably the farthest point in the game from where you start.  Oh, and don't think you'll just warp to Thor Camp via the cats, I disabled that.

 

I also kiboshed the Battlegrounds, as I always thought the battlegrounds equipment was far too strong for PVP.  If you want to fight other players, you'll have to farm Hydra and Thara Frog cards like we all had to back in the old days.  Similarly, a lot of the new equipment like the Elemental Sword has been nerfed to be more in line with the PRE-RE equipment in terms of power.  All of the guild-dungeon exclusive enemies have new spawn locations too.

Edited by Tero
More stuff.
  • Upvote 1
Link to comment
Share on other sites

My cat is finally rebirthed!  I can't believe nothing broke!  He even got the correct number of status points and everything.  I'm the king of scripting.

 

Back to Toy Factory for me.

Modding11.png.9e2cd22c2c10d0aeac56fb4b099d9e43.png

 

Now I can learn the cat's (originally) post level-100 skills.

Modding12.png.94340d6d0ca8704cc7947df6b7f23544.png

 

Besides all the new content, my server also has a boatload of skill tweaks (this is part of why I don't just share my code directly, there's hundreds of changes most people probably won't want).  For example, the first skill in each of the cat skill trees can now level to 10 instead of 5, to give you more options in terms of how you spend your points pre-rebirth.

Modding13.png.cd41921c78e33d39904df397e62b1e3a.png

The initial skills for Summoner are also buffed, particularly the nearly-useless Bite and Scratch.  These are both worthless 200% damage skills initially, that you would literally never use once you have anything else.  I tweaked it so that they now have 100 + <your base level> * 10 % attack, (only *5 for scratch).  Bite also has a chance to Stun and does more damage to weakened targets, making them very viable at high levels, with the caveat that Bite is a melee skill with cast time, so unless you have uninterruptable cast, a ton of flee, or tons of cast speed reduction you're going to get hit out of it a lot.  At any rate, I think this is interesting because this now means you could go healer cat and have a fairly viable form of offense that requires no further skill point investment, though obviously the loss of the range from Picky Peck is an issue.

 

Soul Attack is also now a 5-level skill which functions similarly to a mastery skill, and enables long range attack at maximum level.  This is a fairly substantial nerf, but mastery skills on my server work like they do in the newest version of the game, where they increase your atk rather than final damage, so they're not worthless.

Modding14.png.d1afb55c7e7ed9aa77c83348a2e83bef.png

 

Summoner also has, initially, probably the single most broken skill in the game in Silvervine Root Twist.  This is a ranged skill with instant cast that completely freezes the enemy's movement with 100% success rate for 10+ seconds.  I shouldn't need to tell you how ludicrously busted this is on a character that has powerful ranged attacks.  The second you learn this skill, you are essentially completely invincible to almost all normal mobs.  I was able to waltz into area 30+ levels above me with no issues by just grabbing anyone who looked at me funny.  I have no clue who looked at this skill and thought this was fine.  Obviously this had to be adjusted.

 

On my server, Silvervine Root Twist has a 1.5 second cast time and about 1/4 the duration (4 sec at max level).  It's still a ludicrously good skill which I think almost any build wants to take, but it no longer completely explodes the game balance.

Modding15.png.2e2fabee27bb68f581f7201615318aed.png

Stop hitting me!  I'm supposed to be invincible!  (Not pictured: my untimely death)

 

On the flip side, Scar of Tarou is greatly buffed, in that the damage over time effect is greater and can work on bosses (albeit at only 25% of the power) if you have Spirit of Life.  With the aid of a powerful tank, Scar of Tarou can handle almost all your DPS needs, so that could be another interesting option for support cat.  The only issue is that its power scales with STR instead of DEX, as it does in the base game, so if you have no STR it will be weak.

 

Speaking of, I've even tweaked the way the stats work slightly.  For example, every time you get 10 VIT, you now get a point of DEF.  I always thought it worked this way initially, but apparently it never did.  Well, now that I have absolute power, I can make it work however I want.  Actually, every stat gives you some kind of bonus for every 10 points now.

 

The sky's the limit in terms of what you can do with this game.  I've tried to generally stick to (my interpretation of) the general balancing of the game prior to the battlegrounds update, since I wanted to make the game what I think it might have become if Renewal had never existed, but you could take it in pretty much any direction you want.  This game really is a modder's dream come true.

Edited by Tero
  • Upvote 1
Link to comment
Share on other sites

I've been fiddling a lot with skills lately.

 

For starters, I've been playing Sage.  Sage has always felt like a bit of an underwhelming class to me.  A big part of this is that it gets very few new damage spells.  So I made a new one.

Modding16.png.e38c9a015b5cb7bd8c315d1b07e3bfbe.png

Poison Splash is basically just Poison-element Fire Ball, it does AOE Magic Poison damage and can also inflict the Poison status.  On my server, Poison does extra damage against Neutral (I think this makes sense, since Assassins use it and the main targets that are Neutral are players), so this spell is quite useful against Ridewords and the like.  I also think it works well for Sage since Sage is intended to be a PVP-focused Mage and this is a pretty decent PVP spell.  That said, you have to watch out because a number of enemies can cast this spell against you!

 

I also buffed Professor's Memorize skill, which I've renamed to Lecture.  Like the Summoner Buffs, it now also applies this buff to all party members on the screen.  I think this makes thematic sense with the class being called "Professor" but doing no actual teaching previously.  It was also a move which, in my opinion, didn't have a ton of utility for Professor, as they tend to either use fast-casting spells or autocast, but has a ton of potentially interesting utility for other characters and enhances the "Support Sage" playstyle.

Modding17.png.c4cdee80168d8c327b6f2ca6838595e2.png

 

Beyond this, something I think is super cool is that I've added some cards that allow you to cast previously enemy-only skills.  For example, here my Paladin has the Dark Priest Card, which allows you to cast Soul Strike of Darkness.

Modding18.png.1fd324683b645087624b49a6adf28a31.png

It even has a proper description in the skill window and everything.

Modding19.png.6a729d7e72207ef5af29bc5f72bf7f7a.png

This was surprisingly painless to pull off.  You need to add entries for the enemy spells (in this case NPC_DARKSTRIKE) to skilldescript.lub and skillinfolist.lub (these are in the GRF file under skillinfoz), and add entries for the spell in skill-cast-db and skill-require-db and that's about it, then just have the card script look something like "skill "NPC_DARKSTRIKE", 5;" and you're good to go.

I have cards like this for Grand Darkness, Darkness Jupitel, Blood Drain, and Energy Drain, but none of them are easy to get your hands on.  Still, it's cool to have more options for dealing Darkness damage.

 

I also almost completely reworked Endless Tower.  For starters, I moved it.  It was originally accessed via Alberta, like far too much of the game (like 8 different towns are accessed through there), so it's now where Misty Forest Labyrinth used to be at Bifrost Field 1.  The condition where you have to wait a week between attempts is also now gone, you can now play it as much as you like, but creating the instance costs 500k Zeny.

The difficulty of the tower has also been rebalanced.  Previously, it was kind of ludicrous, forcing you to fight many of the hardest bosses in the game, like Ifrit and Beelzebub.  You now generally fight the low to mid tier bosses, with a number of bosses who didn't previously appear in the tower, like Gopinich, Boitata, and Stormy Knight making an appearance.

 

I also tweaked the enemies that spawn on pretty much every floor.  There's generally less of them, and they're themed based on various locations in the game.  For example, can you identify the map that this floor is based on?

Modding20.png.62a930c046286a1101dffd57e8e03d38.png

I also gave Endless Tower a huge music buff, in that it now plays the previously unused track 168 (well, this is used for Lasanga dungeon in Renewal, but that map isn't in Pre-Re), which I think fits perfectly with this dungeon.  If you ever want to edit which songs play where, this is very easily done by editing mp3nametable.txt, which is in root folder of one of your GRF files.  (I also restored Track 67, which currently doesn't play anywhere, it now plays on the maps north of Yuno).

 

There are also kafras and shops within Endless Tower (though the Kafras only allow you to use the storage. no saving), to somewhat mitigate how absurdly many items you tend to get here.  Additionally, when you clear floors 25, 50, 75, and 99, the warp in the first room is replaced with a new warp that takes you to the appropriate floor (the concept of the Ashes is removed).  Overall, I think this makes this dungeon a lot more fun.

  • Upvote 1
  • MVP 1
Link to comment
Share on other sites

A small update this time, but something I'm quite pleased with.

 

Meet Pere!  Players of Renewal might recognize Pere from Jitterbug of Nightmare, which I recently implemented on my server.  (Which, as mentioned above, is PRE-RE, I've been porting all of Renewal's content to it).

Pere1.png.ea996710610f08f05134c18f49f30b83.png

Pere is quite special.  Besides being super cute, she can also serve as your ensemble partner!

Pere2.png.57ff313584615ee5da19159f4a536737.png

There are two Peres that you can get as pets, one dances and one plays the guitar, and whichever one you are, you need the other one.

Someone on my server has been complaining since day 1 about the necessity of being joined at the hip with a Bard and I think this is a good compromise that preserves the intent of the ensemble skills while also making them a little more accessible.

 

If you want to add this functionality to your server, it's actually pretty easy from a coding perspective.  You just have to find the method "skill_check_condition_castbegin" in skill.cpp, then find this code:

	else if(inf2[INF2_ISENSEMBLE]) {
	    if (skill_check_pc_partner(sd, skill_id, &skill_lv, 1, 0) < 1 && !(sc && sc->data[SC_KVASIR_SONATA])) {
		    clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
		    return false;
	    }
	}

And replace it with this:

	else if(inf2[INF2_ISENSEMBLE]) {
		// check to see if we have the ensemble pet
		bool ensemblepet = false;
		if (sd && sd->pd) {
			if ((sd->status.class_ == JOB_BARD || sd->status.class_ == JOB_CLOWN) && sd->pd->pet.class_ == 3069 && sd->pd->pet.intimate > PET_INTIMATE_LOYAL) {
				ensemblepet = true;
			}
			if ((sd->status.class_ == JOB_DANCER || sd->status.class_ == JOB_GYPSY) && sd->pd->pet.class_ == 3070 && sd->pd->pet.intimate > PET_INTIMATE_LOYAL) {
				ensemblepet = true;
			}
		}
		if (!ensemblepet && skill_check_pc_partner(sd, skill_id, &skill_lv, 1, 0) < 1 && !(sc && sc->data[SC_KVASIR_SONATA])) {
		    clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
		    return false;
	    }
	}

Of course, you also have to pull everything from Jitterbug of Nightmare into PRE-RE, then implement the Peres as custom pets, but at least the coding part is simple!  (alternatively, you could just use a different pet, like maybe a Rocker or something, you can just change the id number it looks for in the pet.class_ part).

  • Upvote 2
Link to comment
Share on other sites

To no one's real surprise, it didn't take long after I learned how to make new skills for me to go mad with power.

 

Something that's always bothered me is that some classes barely have more skills to take than they have skill points.  The two worst offenders are Thief and Archer, who have 51 and 50 total points of skills respectively.  If you max your first job, you get 49 job points, which leaves you with only 2 / 1 skill levels not to take.  This is pretty dumb and effectively gives you no freedom in how you build these classes.  So these were the first ones to address.

 

For Thief, they now have two new skills, Gouge and Reprieve, both of which are passives.

NewSkiils1.png.2faccae1c39210bd35df4c9e7df9311c.png

Gouge is a 10-level skill that gives you a chance to inflict Bleeding when regular attacking with a dagger-class weapon, or when using Back Stab.  When it came to thief, I feel like the idea behind the class is to use a lot of auto-attacks, so I wanted a new offensive skill that fit with that playstyle.  I don't think I'd usually take this on Sin, but I guess it could be useful to double dagger Sin.

Reprieve is a 5-level skill that allows you to get a little bit of HP recovery while Hidden / Cloaked / Chase Walking.  The recovery isn't much, and the requirement to take Hiding level 10 is steep, but it can add up over time, particularly with Cloaking.  I think this skill is pretty good, but you'll have to give up one of the other skills to get it.

 

Speaking of Bleeding, it's a bit annoying to attack with because by default, there's no indicator when a target has been successfully hit by it.  Maybe my client is just out of date, but I added one anyway.  Now, when you bleed a target, they do this.

NewSkiils2.png.79673687334914578be9fafb5c9004ec.png

 

If you want this functionality in your server, it's quite easy to add.  Just find this in skill.cpp

		case SC_BLEEDING:
		case SC_BURNING:
			tick_time = status_get_sc_interval(type);
			val4 = tick - tick_time; // Remaining time
			break;

Remove the "case SC_Bleeding" line, then insert this below:

		case SC_BLEEDING:
			tick_time = status_get_sc_interval(type);
			val4 = tick - tick_time; // Remaining time
			clif_emotion(bl, ET_HUK);
			break;

I also added something similar for Crystalize as well, as that also didn't have any kind of visual display.

 

Moving on to Archer, it also has two new skills.

NewSkiils3.png.d3a3f1c89bf6c6187f16a11ad9277884.png

Bullseye is a 10-level skill that increases your crit rate and damage.  This is an awesome skill, on a class that would almost never use it.  I guess if you're building for some kind of high-aspd auto-Blitz Beat build you could take it, but generally I just liked the idea behind it.

Organization is a 5-level skill that increases the amount you can carry before you're considered to be overweight by 5% per level.  On the other hand, this is a skill I really want on a low-STR character like Archer.

 

These skills bring Thief and Archer up to having 66 and 65 skill levels available.  Much better!  Now, the lowest is actually Merchant at 61.  So I also gave Merchant one new skill in Lucky Pennies, which adds a small chance to find a bit of Zeny after killing an enemy, similar to the Cramp card.  It probably won't offset the money you're burning on Mammo, but at least it's something.  Super Novice can also learn all 5 of these skills.

 

But of course I wasn't done there.  Hunter also has much the same problem as Archer where it just doesn't have enough skills to take,  Technically it has 82, but the vast majority of these are irrelevant trap skills that no one ever uses.  So I made a couple tweaks.  For starters, Blitz Beat now has 10 levels.  I've done this with a few skills, and it's generally the case that at level 10, the skill is a little better than it used to be at level 5, but of course you have to spend 5 more points on it.  In Blitz Beat's case, at level 10, it now hits 6 times (it used to hit 5 times at level 5), and the chance of auto-blitz beat improves.  You'll want to max it, too, because Falcon Assault now relies on Blitz Beat's level for its damage calculation (Falcon Assault is essentially a max-level Blitz Beat that does bonus damage and ignores your defense).  I'm incredibly wary of buffing Falcon Assault because it was a gamebreaker in the past, but there are more cards that can defend against it now (the "MISC" defense type defends against Falcon attacks).

 

Hunter also gets a totally new attacking skill in Tranquilizer.  This is an active skill that fires an arrow and has a chance to inflict Sleep.  It's not too powerful and requires a fair bit of SP, but I imagine this could be useful in PVP.

NewSkills4.png.54bdf02a0639e412c7f95649db4dedf6.png

It requires you to know the Sandman Trap, so that at least gives you a little incentive to take the trap skills.

 

Gypsy and Minstrel also have a new passive skill that gives them a buff to their perfect dodge while dancing, and Throw Arrow / Melody Strike are also more powerful while Dancing.  Generally, I want Dancing to feel a bit more useful, particularly when soloing, as these classes tend to just build for Arrow Vulcan and not much else.

 

However, the granddaddy of all changes was to the Star Gladiator class, which is almost a completely different character now.

NewSkills5.png.a229449629465ac57d543edfd13ac165.png

The biggest issue with Star Gladiator is that my server has rebirth for all classes, and Star Gladiator gets SJ_Document as a rebirth skill.  SJ_Document allows you to reset your target maps and mobs nearly for free (on my server it requires a 2-carat diamond to use), which is cool but causes a bunch of problems.  See, the thing with Star Gladiator is that the skills for the Sun, Moon, and Stars are all almost identical.  This kind of makes sense initially, as the idea is that the fact that you basically get 3 copies of those skills gives you redundancy, since those choices are permanent.  However, once they become impermanent, there's now no real reason to bother having 3 copies.  You can just focus on one of the three, and reset whenever you want to target something else.  As such, I pretty much completely redesigned all of the skills so that the Sun, Moon, and Star skills are all different from each other.

The Comfort Skills are the only ones that were originally appreciably different from each other, so they are untouched.

For the Warmth Skills, Warmth of the Sun is now a self-target heal, and Warmth of the Stars is now self-target Assumptio (Warmth of the Moon remains as the barrier effect).

NewSkills6.png.cad5357172cf548f0ace680633800100.png

For the anger skills, the Sun remains untouched in increasing your damage.  Moon now increases your damage resistance, and Stars gives you extra critical chance.

For the blessing skills, Sun remains untouched as extra exp.  Moon gives you extra drop rate (albeit, not much extra as drop rate is very centralizing), and Stars gives you bad status resistance.

Finally, Star Gladiator also has a bunch of new skills.  Taekwon Mastery is a passive that increases the chance to activate Taekwon Kicks.  You also need it to take SG_DEVIL.  Vision of the Sun, Moon, and Stars is a transcendent passive that counteracts SG_DEVIL, and if levelled to max, you gain permanent intravision (which lets you see hidden targets).  Memory of the Sun, Moon, and Stars lets you warp to the map you set as your special map from anywhere (if used on the map itself, it acts like teleport level 1).  Wrath of the Sun, Moon, and Stars is a strong debuff to attack speed and defense that you can use on any of your target mobs, and it's one of the only debuffs in the game that does work on bosses.  Finally, there are 3 powerful new Magic attacks, Power of the Sun, Moon, and Stars.  These are strong, uninterruptable spells, but they can only be used on the appropriate Map, or against the appropriate Target (ie, you can use Power of the Moon against any enemy on the Moon map, or against the Target of the Moon, on any map).  Besides being strong, these also inflict status effects, Burning for Sun, Crystallize for Moon, and Paralyze for Star.  Of course, the caveat is that this requires you to take at least some Int if you want them to do any real damage.

NewSkills7.png.03a4771bff3667b67bdf0d4a11a8471e.png

(Why is it always poor lunatics getting obliterated by powerful attacks?)

 

At any rate, I think this class is vastly more interesting now.

 

The last rework is to Blacksmith.  Skill-wise, Blacksmith isn't very changed, other than that Hammer Fall can now go to level 10.  The bigger issue with Blacksmith is forging, specifically, the fact that there's no reason to ever bother with it.  The weapons the Blacksmith can forge have no slots (and cannot have slots, the game stores the forging information in the card slots), and the bonuses given from forging are small, so they're pretty much always outclassed by stuff you can find easily.  The latter issue is somewhat easily solved, I simply increased the power of the materials the Blacksmith can add to weapons.  Star Crumb now also gives a little bit of crit bonus, and if the Blacksmith is a ranker Blacksmith, their weapons also give a small Aspd bonus.  This is enough to make the top-end weapons they can forge at least somewhat viable.

But what about the others?  Blacksmiths can forge a ton of different weapons, but even with the buffs, these are all totally worthless.  Ragnarok makes weaker weapons viable by giving them higher numbers of slots, but since all Blacksmith weapons are unslotted, the strongest ones are obviously the best.  So I came up with an inventive solution for this.

 

Weapons forged by Blacksmiths now have unique, card-like bonuses, which differ by weapon.  It achieves this by having the Blacksmith forge the previously unused double underscore version of weapons (such as knife__), which now have bonus scripts attached to them.  For example, a knife forged by a blacksmith now gives 5 Agi and 5 Dex.

NewSkills8.png.cd96fc4ebec74deeeae1f02eb6b9e6ea.png

(I know what you're thinking, but this isn't instantly the best weapon to hold while making potions or whatever.  Lunatic cards give 2 luk, so with a 4 slot weapon you can get 8 luk.  It's a decent option until something better is available, though).

Meanwhile, a Trident gives +50% bonus damage to Fish enemies.  This would be good to use with Wind element!

NewSkills9.png.1a4c3de6b4a7ef2b54385e9171b7b751.png

They're all different, save for the top end weapons, which have no bonuses, since they're already the most powerful.  I don't think any of the weapons you can forge have "best in class" power, but they're now things that could definitely be useful before the very best equipment is available.  It's at least much more interesting to fool around with now.

 

Wow, this was long.  Much of this is relevant to my super secret project which I'm still working on, but that's still a long way from being finished.

Modding21.png.b5da6ab5633635f4b4d9757d8489dc75.png

I don't think we're in Kansas anymore, Toto...

Edited by Tero
  • Upvote 2
Link to comment
Share on other sites

On 11/23/2022 at 2:25 PM, Tero said:

A small update this time, but something I'm quite pleased with.

 

Meet Pere!  Players of Renewal might recognize Pere from Jitterbug of Nightmare, which I recently implemented on my server.  (Which, as mentioned above, is PRE-RE, I've been porting all of Renewal's content to it).

Pere1.png.ea996710610f08f05134c18f49f30b83.png

Pere is quite special.  Besides being super cute, she can also serve as your ensemble partner!

Pere2.png.57ff313584615ee5da19159f4a536737.png

There are two Peres that you can get as pets, one dances and one plays the guitar, and whichever one you are, you need the other one.

Someone on my server has been complaining since day 1 about the necessity of being joined at the hip with a Bard and I think this is a good compromise that preserves the intent of the ensemble skills while also making them a little more accessible.

 

If you want to add this functionality to your server, it's actually pretty easy from a coding perspective.  You just have to find the method "skill_check_condition_castbegin" in skill.cpp, then find this code:

	else if(inf2[INF2_ISENSEMBLE]) {
	    if (skill_check_pc_partner(sd, skill_id, &skill_lv, 1, 0) < 1 && !(sc && sc->data[SC_KVASIR_SONATA])) {
		    clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
		    return false;
	    }
	}

And replace it with this:

	else if(inf2[INF2_ISENSEMBLE]) {
		// check to see if we have the ensemble pet
		bool ensemblepet = false;
		if (sd && sd->pd) {
			if ((sd->status.class_ == JOB_BARD || sd->status.class_ == JOB_CLOWN) && sd->pd->pet.class_ == 3069 && sd->pd->pet.intimate > PET_INTIMATE_LOYAL) {
				ensemblepet = true;
			}
			if ((sd->status.class_ == JOB_DANCER || sd->status.class_ == JOB_GYPSY) && sd->pd->pet.class_ == 3070 && sd->pd->pet.intimate > PET_INTIMATE_LOYAL) {
				ensemblepet = true;
			}
		}
		if (!ensemblepet && skill_check_pc_partner(sd, skill_id, &skill_lv, 1, 0) < 1 && !(sc && sc->data[SC_KVASIR_SONATA])) {
		    clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
		    return false;
	    }
	}

Of course, you also have to pull everything from Jitterbug of Nightmare into PRE-RE, then implement the Peres as custom pets, but at least the coding part is simple!  (alternatively, you could just use a different pet, like maybe a Rocker or something, you can just change the id number it looks for in the pet.class_ part).

Really cool. Where do you get those pet images and how do you put them on the client?

Link to comment
Share on other sites

I put up a guide on how to make a custom pet in another part of the forum which goes over everything about making them in a lot of detail.

The short version is that you need to modify petinfo.lub, which is stored inside the datainfo folder (you can just search for it with GRF editor).  Of course, you need to add the new illustration to the GRF file as well.  If you want to make the pets talk, that's also in the GRF file, in pettalktable.xml.  The thread explains more about how to modify these.

 

As for the images, I'd love to say there's an easy way to get these, but there's not really.  I just search for the pet I want to make on Google, and if there's a good piece of fanart, I use that, if not, I meticulously edit the card art.  In some cases I even have to redraw parts of the art that are cut off, for example in the picture above the card art actually cuts off Pere's fingers on one hand so I had to draw them, luckily the resolution is low so you can't tell.  Of course, if you're not a crazy person you could just use one of their sprites or something, which I did for a couple monsters whose card art wasn't suitable.

  • Upvote 1
  • Love 1
Link to comment
Share on other sites

1 hour ago, Tero said:

I put up a guide on how to make a custom pet in another part of the forum which goes over everything about making them in a lot of detail.

The short version is that you need to modify petinfo.lub, which is stored inside the datainfo folder (you can just search for it with GRF editor).  Of course, you need to add the new illustration to the GRF file as well.  If you want to make the pets talk, that's also in the GRF file, in pettalktable.xml.  The thread explains more about how to modify these.

 

As for the images, I'd love to say there's an easy way to get these, but there's not really.  I just search for the pet I want to make on Google, and if there's a good piece of fanart, I use that, if not, I meticulously edit the card art.  In some cases I even have to redraw parts of the art that are cut off, for example in the picture above the card art actually cuts off Pere's fingers on one hand so I had to draw them, luckily the resolution is low so you can't tell.  Of course, if you're not a crazy person you could just use one of their sprites or something, which I did for a couple monsters whose card art wasn't suitable.

Ohh. There's that, I didn't check earlier, but I'll look into this. Thank you. 

Link to comment
Share on other sites

I've been sick for the last week, which is lame, but it means I basically had nothing to do but work on RO, so I can actually show off my secret project a little earlier than expected.  It's a massive new expansion to the game that adds about 65 new maps.

 

It all begins with this NPC in Morroc:

ThePast1.png.8b67ffc451192b81cee10555743253d1.png

He tells you about Satan Morroc, which is kind of important because fighting him is quite different on my server.  

 

Next, you have to go ALL the way to the end of the New World to find Satan Morroc and kill him (or rather, be alive and on the map when he dies).  Moro_Vol is where Dicastes would normally be.

ThePast2.png.1ba680460e8155fd71097c0b85b43106.png

 

We then return to the old man to learn of a secret mission.  It turns out the old man is actually a very aged version of Thanatos, who sealed Morroc orriginally.  Unfortunately, Satan Morroc will revive endlessly, so if we want to get rid of him for good, we would have to travel back in time to the past and kill Morroc the wizard, before he ever became Satan Morroc.

ThePast3.png.d94c7a856203a01de9a8eb91ddc56919.png

As part of this mission, we have to be reborn again.  Assuming you're already max base / job level, we are converted back into a novice (albeit, a very special novice), and we're whisked off to the past.

ThePast4.png.fa713b448503a182ec064e943e1207d3.png

If this place looks different, it's because we're actually in the world from the Alpha!

ThePast5.png.e8c7c1413e417b2e57effb57ce79a4bc.png

There's a lot to know about the past maps.  For starters, you're stuck here for a while.  You can't return to the present until base level 80 (you're warned about this ahead of time), not even Warp Portal, Guild Recall, or the Marriage skills will get you out.  The Past maps have a special map flag, and if you try to warp between two maps that don't have the same setting for that flag, it doesn't let you.

 

Secondly, the monsters here are much tougher.  All monsters in the past do double damage and take only half.  This is also handled via a mapflag.

A Poring does 28 damage?!  Better get Vit!

ThePast6.png.d1e304235ce084c496a9f4a70cc98a99.png

 

However, it's not all bad, you're stronger too.  As a second transcendent character, which are called Time Travelers, you have the standard increased HP and SP totals (which go beyond even what Transcendent characters get), but you also get some new bonuses.  Your second job can gain 10 more levels (this is why jobs with low skill point totals needed more skills), which also means more job bonuses.  Everyone also gets one new skill (which you learn for free upon becoming a Time Traveller) called Time Slip, which gives you 2 seconds of total invincibility and can break out of control effects.  However, it has a 5 minute cooldown.  Perfect for a quick escape when a Lunatic hits you for over half your HP in one hit!  This must be revenge for all the Lunatics I murdered in the present.

ThePast7.png.3482d896f8d17d567e40c0e095232a14.png

 

There's all kinds of new stuff in the past.  There's about 15 new bosses and a ton of new enemies.  Most of the dungeons are from the alpha, but a few are areas I didn't use previously, like Orc's Memory, which becomes the past version of Orc Dungeon.

 

You can visit Glast Heim before it got destroyed, which I think is cool.

ThePast8.png.6ab19e865dff0d897689438687e98d4f.png

This area uses the elemental knight enemies, which apparently are from Puzzle and Dragons.  I actually created the Wind Knight by heavily editing the Stone Knight, as there wasn't a Wind Knight initially.

 

You can visit the first ever Kafra, back when it was just a lowly inn (it's located roughly near where Aldebaran would be on the map, which I think is a fun little touch as Kafra headquarters is there).

ThePast9.png.704bbff5b88731014a9e0cc9d5a98d9b.png

 

You can visit the future site of Gonryun and talk to the kid who turns people into Soul Linkers (on my server, he's in Gonryun).  He can trade you some headgears.

ThePast10.png.65b8f242c867f5f2e1718e660b029ade.png

 

You can head to the desert town that will eventually be called Morroc and hear the original, undestroyed version of the Morroc town theme!  So nostalgic!

ThePast11.png.b91ac5c80ae50e3b5affca521b30743e.png

 

And of course, you can fight your way through Morroc's fortress to reach Temple of the Demon God and defeat Morroc once and for all.  He's actually a 2-stage battle, where you fight his younger form first before fighting Despair God Morroc.

ThePast12.png.2886f51db85f125aced3eff8cb8c80d1.png

 

Some of the new enemies drop cards that you can use to gain access to some of the third-class skills (generally the weaker, non-class defining ones), like this one that lets you use Axe Boomerang.

Thank the gods!  An attack skill that doesn't cost money to use!

ThePast13.png.193735cf6d90959015b045ce16999c44.png

 

Of course, there's all kinds of cool new equipment too.  One of my favourites is a scythe called the Soul Eater that lets you cast Soul Breaker.

Casting Soul Breaker with a Scythe is actually the sickest thing ever.

ThePast14.png.1d5a4b13fc55defb686aa6cc1ee60f56.png

 

There's way too much to possibly go over.  While nowhere near the size of the present map, the past maps probably add around 15% more content to the game.  Plus, it's just super cool to be able to run around the areas from the Alpha.  I've had this idea cooking up in my head ever since I saw the game's original intro video, which showcased the alpha maps.  Combined with the fact that I had been considering adding Despair God Morroc into the game, it just made too much sense to do it this way.

 

Programming-wise, this was not a particularly complicated change, it was just a ton of map editing, scripting, and database entries.  None of the past maps came with warps, of course, so I had to make all of those, as well as all of the NPCs, and all of the stats for the new enemies, none of whom existed in any database.

 

You might be wondering why I decided to add another rebirth instead of just adding in the third jobs.  While that certainly would have been possible, I feel like there's just no way to balance the third jobs within PRE-RE.  Pretty much the entire reason Renewal exists is to drastically revamp the game so that third classes can exist, otherwise they'd just one-shot everything in PRE-RE and have way too much health and stats for anything to be a threat to them.  The brilliance of transcendence is that it adds a lot more playtime for a fairly small increase in total power.  Plus, if I did keep you at a high level, the past maps would have to contain purely endgame-level enemies.  This way, they can have the regular enemies, closer to what they might have had originally, but it still provides a challenge.  Plus, not all of the classes have another job available, like Summoner for example.

 

You might also be wondering why everything in the past does double damage.  This is mainly so that it's still challenging.  When you rebirth the first time, the game becomes easier, because you have better stats and equipment but the enemies don't become any harder until you venture into the hardest dungeons, like Odin's Temple and Thanatos Tower, which you probably won't visit before you rebirth.  I've done a ton of tweaking of the transcendent exp curves to try to stop transcendent characters from feeling trivial to level, but it's still definitely a little on the easy side.  Playing in the past is interesting because it's actually harder than playing the game the first time, you really have to use all the tools at your disposal to avoid becoming Lunatic chow.  If you never made good equipment for first-job characters, now's the time to do so.

 

Of course, I'm sure there's still a ton of bugs to fix and balancing to do, but this will probably be the last major thing I add to the game (granted, I've said that before).  There does eventually come a point where the game just has enough stuff.  Now I should actually probably spend some time playing it instead of just scripting stuff all the time.

Edited by Tero
  • Upvote 1
Link to comment
Share on other sites

Been on a little bit of a break after all the work I did on RO recently, but I've been filling in a bit of content here and there.

 

For starters, I finally got marriage working.  The custom marriage script that came with my distribution had a few bugs.  I'm not sure if they are fixed in the latest version, but I've included the fixed version in this post.   Here's the happy couple.  (Not pictured their previous 6 divorces while I debugged the script)

Wedding.png.cdea370725f939ae68d4c1c5c3231ca6.png

In order for this to work, the wedding rings need to be marked as married partner tradeable, which they weren't initially in my distribution (this is bit flag 511 in item-trade.txt).  Also, for some reason, the Tuxedo was marked as an etc item, I restored it to being an equippable item as it was before.

I've also been adding some new stuff here and there.  For starters, there's now a new dungeon in Jawaii called the Tunnel of Love.  It's accessed via this NPC in Jawaii.

TunnelOfLove1.png.3833132f74d998bd060230a1194a2163.png

This place is pretty unique.  For starters, he won't even let you in if you don't have your wedding ring equipped, and if you take it off in the dungeon you get warped out (this is achieved via an unequip script on the wedding ring, which only activates on this particular map).  The map itself is a reskinned version of Beach Cave North, but it plays track 172, which I think fits well with it.

TunnelOfLove2.png.c2d53f74b89da1798d5a88fa17b638d5.png

There are a couple new enemies here and a new boss, but it also has a lot of pairs of enemies like Poporing and Marin, and Bongun and Munak.  The boss is a fairly unique one called The Lovers, which consists of two boss-like entities who have comparable power.  The female is the "main boss", if you defeat her they both die, and the male enemy is the summon, but she will only summon him on spawn and never resummons him if he dies.  As long as he's alive, he tries to heal her and cast buffs on her, so you kind of want to target him first, but she starts using NPC_POWERUP once he goes down (this uses the same check on number of living slaves that bosses typically use to respawn their summons).  They drop a couple different things, but the real prize is the Lovers' Ring, a slotted accessory that gives an incredible +2 to all stats, making it easily the best accessory in the game.  The catch is that it only works if you're also equipping your wedding ring in the other slot, which significantly limits its power.  Actually, pretty much everything unique you can get in here is connected to the wedding ring in some way.  I mainly wanted a way to make wearing the wedding ring kinda viable.  Obviously, under normal circumstances you just keep it in your inventory and only swap to it when you want to use the wedding skills, but I think this gives you some fun options if you'd prefer to keep it equipped.  This also means that for characters who are single, the fact that they can't come to this dungeon isn't a big deal.

 

I also added a boss based on Red Scar from Ragnarok 2 to the Cave Dungeon in the past.

Modding22.png.759b1a6d72c921fafa2ebc7d31c4e231.png

This area bares some resemblance to where you fight him in RO2 and RO2 takes place in the past compared to RO1, so I thought it was a fun little touch.  He's quite an easy boss, not much more powerful than GTB, which makes sense because he was one of RO2's earliest bosses and this area is one of the first you can access in the past.  I also don't know if I ever talked about the Humanoid Chimera pet.  She's the hardest pet to get in the entire game (she requires killing T_W_O, who is close to Satan Morroc in power), but her pet skill is that she can give you Soul Link.  This actually uses a completely new skill called "SL_OMNI" which calls all of the other soul link spells depending on the target's class.

 

You might be wondering how I created these new bosses.  Actually, it was very easy.  You can probably tell that they're using the sprites of existing enemies, namely Succubus, Incubus, and Desert Wolf.  RO has a file in the System subfolder under the client folder (this is also where iteminfo.lub) is located that the game uses to dynamically apply certain sprite effects to various enemies.  They use this to create quite a number of the enemies in the game.

 

The file is monster_size_effect_sak_new.lub.  It's quite easy to understand and modify, the entries in the list are just the Monster IDs, then there's a list of effects to apply to them.  For Red Scar, his effects look like this.

    [2546] = {
        MonsterSize = 1.5,
        MonsterEff = { EFFECT.EF_GREEN99_3, EFFECT.EF_GREEN99_5, EFFECT.EF_GREEN99_6, EFFECT.EF_REDLIGHTBODY }
    },

So what this does is it takes Desert Wolf's sprite, makes it 1.5x the size, then applies 4 effects to it.  The first 3 create the "boss aura", while the last colours him red.  And presto!  It's a vaguely new enemy sprite!

 

In terms of things that weren't so simple, there's also this place.

EndlessSands.png.028290ec87daf2a1ec86c2ae21fc0e8a.png

This is the Endless Sands dungeon, which is found in the past.  Unlike other things I added, this is a totally new map that I made from scratch.  It's not fancy or anything, it's mostly just some bumpy terrain with some cacti and a sand texture, but I like it.  This dungeon is also a maze, where each screen has multiple exits but only one leads forward.  The Pixy Porings also appear here, and they have pretty good stuff, though they're pretty strong for porings.

 

Should you make it to the exit, you can reach Valhalla!  It's actually just the Lasagna field maps, but I think it looks kind of heavenly.

Valhalla.png.00aca633909ad576201246076b8b54f5.png

This is the most dangerous area in the entire game.  There's a ton of new enemies and gear here, but the enemies have comparable power to Odin's Tower and since this is in the past all enemies deal double damage and take only half.  Defeating the Wish Maiden (who actually uses a different sprite that's from a newer version of the game) will not be easy.  You're probably going to want at least a couple boss cards before you come here.

 

I feel like I'm probably mostly done with PVE content now, the next big thing I'll have to figure out is all the PVP stuff.  The amount of stuff to fiddle with never ends.

marriage.txt

Edited by Tero
  • Upvote 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...