Angband Forums

Angband Forums (http://angband.oook.cz/forum/index.php)
-   Development (http://angband.oook.cz/forum/forumdisplay.php?f=10)
-   -   back porting O-variants? (http://angband.oook.cz/forum/showthread.php?t=8966)

wobbly June 23, 2018 18:26

back porting O-variants?
 
So I've decided to stop thinking about making a variant & start poking around in the code. The plan is to rebuild O, FA & sang from modern V as 1st stand-alones then spliced together (so you'll be able to play sang on the FA maps or toggle on the different monster lists). So the obvious problem is I don't know how to code. This means how far I get depends on how much copy & pasting I can get away with. Anyway got plenty of spare time, so will take a look. Also as Nick is still around of course it'll also depend on his current plans for O & FA.

Anyway for now I'm just opening this thread so I can ramble, ask questions & people can comment. Some plans: keep rune id (perhaps togglable with classic id). Vanilla curses & traps. O-drops hopefully with a toggle for better drop rates. FA monster names where applicable. Most things I think will default to V just for ease of coding.

Gwarl June 23, 2018 20:43

Sounds awesome, I think a lot of people have talked about doing something like this but now it is your thread and your responsibility. :)

Derakon June 23, 2018 20:54

Good luck! You're looking at a fair amount of work, especially I suspect for Sangband.

Pete Mack June 23, 2018 21:41

It's a massive undertaking. V has changed enormously: file names, variable names, functions, data structures, you name it. And then there are all the additions and refactorings. And I don't think diff3 will work very well.

Philip June 24, 2018 00:43

If you manage to recreate even just one of those variants (I'd expect O to be least-bad, because you don't need to mess with skills or with wilderness) on a modern V base, you'll have done a great thing. Best of luck!

Derakon June 24, 2018 01:00

O is definitely the one I'd start with, since the main changes are in how combat works and what item stats are. Combat rules are fairly localized within the game code, and item stats can be changed without any code at all.

Plus, S uses O-style combat (I forget if NPP does as well), so you'd want to build it on top of O anyway.

Nick June 24, 2018 01:28

First, my plans. I had none for O (and have never been involved with S). For FA, at some stage I was going to take current Vanilla, and build a new version of FA on top of it, roughly as you are talking about. The things I consider core for that are the dungeons and wilderness, and the First Age bits of monsters, artifacts, ego items and races. Many other aspects - monster AI, classes, specialties, even combat system - I am undecided on.

In fact, while I have imported some things into V from O/FA (cone-shaped breaths, for example), they have mostly not come in unchanged. Most of the new features I have brought into V (eg traps, ID, curses) are informed by O/FA, but I have tried to rethink them rather than slavishly copy.

Now, obviously, you can do this however you want. My suggestion would be to keep updating your codebase to keep it in line with current V, so at every stage it's current Angband plus your changes.

Note that the file lib/gamedata/world.txt has a list of all the dungeon levels, which I planned expand to give an FA style world map. There is a level structure in game-world.h which has up and down fields, which will need north, east, south and west added.

This has rambled a bit, and there is more I could say, but I'll stop here. Good luck!

Nick June 24, 2018 04:23

Also, I should have said, don't feel constrained by anything I may be planning to do. Do what interests you. My track record indicates I'll end up stealing bits of it :)

Pete Mack June 24, 2018 05:57

One last thing: If you do this, make sure to use (git) source control right from the start. It makes it much easier to bring in other closely related variants thereafter, via headless merge.

wobbly June 24, 2018 13:44

I think I'll start with bringing across the monster list from O & trying to get things like bronze dragons working. Maybe I'll wait for a stable class feature release, that way it'll have necromancers, druids & shield bash there.

wobbly June 24, 2018 14:15

Quote:

Originally Posted by Pete Mack (Post 130894)
One last thing: If you do this, make sure to use (git) source control right from the start. It makes it much easier to bring in other closely related variants thereafter, via headless merge.

yeah I'll have to lookup how to use github. If anyone can point me to a good guide?

Philip June 24, 2018 15:14

It will be neat to have a straight-up O clone. However, there were parts of the O monster list that didn't really work great, so it would be nice to have a difficult monster list variant which builds on the O monster list but changes some aspects.

Personally, I think the removal of confusion as an element that can be breathed and cause direct damage was a good thing for the game. Bronze dragons, more than any other type of dragon, were either bags of XP and loot, or your worst nightmare. Just like light and dark can inflict blindness, sound and chaos should be able to inflict confusion. There is no need for a pure blindness breath.

I do think (re)implementing the various metallic dragons would be cool. They could be given some of the more esoteric elements that currently only have hounds and vortices. I can imagine bronze, silver, and platinum (er, mithril?) dragons getting force, inertia, and gravity breaths respectively. A time dragon seems undesirable, except as a unique (the answer to one of Gollum's riddles). I suppose I should make my own variant, or at least my own edit files at some point.

wobbly June 24, 2018 21:11

I had considered giving them nexus & making them deeper. Vanilla Stat Scramble is temporary now I think. Though it'd be nice to at least keep the little bronze dragon flys. we'll see, there are options.

Gwarl June 24, 2018 21:13

Off-topic but CPB/FCPB has inertia-breathing silver dragons :) if silver = inertia were canonical that would be cool. I won't change my silver dragons because I did them first.

I am happy with gold/silver/bronze for our metallic dragons though and am trying to come up with things for purple and yellow dragons to breathe.

wobbly June 24, 2018 21:15

Quote:

Originally Posted by Gwarl (Post 130910)
Off-topic but CPB/FCPB has inertia-breathing silver dragons :) if silver = inertia were canonical that would be cool. I won't change my silver dragons because I did them first.

I am happy with gold/silver/bronze for our metallic dragons though and am trying to come up with things for purple and yellow dragons to breathe.

yellow could be sulfur. Fire/poison for CPB?

Edit:Purple: steam?, toxic waste?

Edit:Also fine with silver being inertia. Will probably look at getting it closer to the original 1st

wobbly June 24, 2018 21:37

I'm also considering adding listen (partial telepathy from perception) from Sil to at least the rogue & ranger, which would mean puting the old perception stat back in I think. Maybe reverting traps, maybe not.

Edit: I'm thinking no racial/class xp penalties. The help files say high elfs & dunadans are the best beginner options after all. Maybe humans get a bonus to keep their stick & the numbers for xp are tweaked accordingly. I think I'll have the xp penalties in an earlier version to be original true, then take them out.

Edit: Status effects I'd like to use the old system & tweak as necessary. We'll see how hard that is to do

Philip June 24, 2018 22:14

No XP penalties puts you in line with O, FA, the cutting edge of V, and in S experience works differently for different races, but the same amount will mean roughly the same thing to each race. Removing the penalties puts you in very good company. Giving humans an XP bonus as their special ability also seems reasonable, though giving them an extra specialty point seems like an option if you get around to reimplementing (and perhaps fixing) those.

Listen sounds like a fun mechanic, would really help differentiate stealthy gameplay from early on. On rangers, it feels like perhaps the kind of thing that could be applied as a temporary buff from spells (call it Tracking or something), just to give the rogue an edge with avoidance. The main issue I see here is that it would rely somewhat on monsters having a stealth stat, which they do not currently as far as I can tell.

wobbly June 24, 2018 22:24

I assume they have an "alertness" for the stealth mechanic. I was thinking of borrowing that till the individual numbers could be addressed.

Philip June 24, 2018 22:27

Yeah, that should work pretty well. Not sure what alertness values are like on NO_SLEEP monsters and there are going to be a couple edge cases, but it should work well enough for testing at least.

wobbly June 24, 2018 22:37

An idea that occurs to me is that making the dungeon 50 levels deep instead of implementing & fixing shafts might be the right direction anyway. Plenty of play in 50 levels

Edit:Alternatively 100 levels & every staircase a shaft if people are attached to the numbers :)

Philip June 24, 2018 22:49

If the dungeon has 50 levels, probably best to make it so that clvl=dlvl is a good rough guide to where you should be for beginners (in V this works roughly until dlvl 30 or so). This means not just dividing each depth value by 2, and would require flattening out the curve a bit, but I feel like you don't want players at clvl 5 when they hit dlvl 5 (formerly known as 10) on account of the large numbers of tough pack monsters, horrible felines, and crows of durthang.

wobbly June 24, 2018 23:23

Quote:

Originally Posted by Philip (Post 130913)
No XP penalties puts you in line with O, FA, the cutting edge of V, and in S experience works differently for different races, but the same amount will mean roughly the same thing to each race. Removing the penalties puts you in very good company. Giving humans an XP bonus as their special ability also seems reasonable, though giving them an extra specialty point seems like an option if you get around to reimplementing (and perhaps fixing) those.

I had thought about changing some of the old specialties. Maybe vanillas bonus to power from device skill is a specialty. Maybe unlight needs listen. Maybe listen is a specialty. Maybe putting the old specialties back in is more work then it's worth.

Philip June 24, 2018 23:45

For what it's worth, very few of the classes had meaningful decisions to make when choosing specialties. I can't think of any class which, if you want to play a non-gimmick build as effectively as possible, would seriously be considering any abilities outside of a pool of 5 or so, counting the warrior. The only decisions a player tends to make are "this will let me survive the early game more reliably, but will become useless with time, is it worth it?". Some abilities you effectively have to take for your class to be worthwhile (Soul Siphon comes to mind).

I think you're right that reimplementing the old specialties is not worth it. I do think that the thing specialties represented, that there were different ways you could build your character, should be preserved. But the old specialties never did a great job of that anyway, and their effects were too unclear to make the decisions meaningful.

Pete Mack June 25, 2018 06:56

Getting confusion to work properly (It doesn't in V, I agree) is a nice task, and should be trivial to merge back into the features branch. It's a good experience in learning git (and source control in general.) Getting the monster list to work is a bigger deal, but again will not conflict with the features branch
If you can automate that (and the object list, etc.), you will have an invaluable tool for updating older *bands to the V codebase.
Edit: "merge" and "conflict" are technical terms relating to version control. Doing the monster list first is an excellent idea so you aren't learning git and C simultaneously.

wobbly June 25, 2018 11:39

I think my preference for a status effect system would be 2 tier. Full debuff on failed save, a minor 1-3 turn debuff with save and only appropriate enemies immune. So if a sleep staff fails their speed would drop a little for a couple of turns. Try & reduce the punishment for failing. Maybe things are less likely to cast disorientated (minor confuse).

Well seems I have a loose plan of:

1. Monster list & arising issues
2. O-items and spell list
3. O-combat mechanics
4. Get feedback on what's missing for an O-like feel

Somewhere in there I'll look at status effects & there's plenty of cleanup work missing in that list.

wobbly June 27, 2018 17:02

Quote:

Originally Posted by Philip (Post 130921)
I think you're right that reimplementing the old specialties is not worth it. I do think that the thing specialties represented, that there were different ways you could build your character, should be preserved. But the old specialties never did a great job of that anyway, and their effects were too unclear to make the decisions meaningful.

I think this sums up my own view as well. Something will replace it down the track after core game play like O-combat comes in. Current thought is to start with what it needs to cover & work from there. The main criteria I'm leaning towards is subclass. Warrior specialties need to cover weapon specialists, bookless paladin, bookless ranger (archer), bookless rogue, device warrior (for petty dwarf/gnome) etc. This also gives a rough power level. The bonuses need to be roughly what a stealthy race warrior needs to be a tankier spell-less version of the rogue.

wobbly June 27, 2018 17:19

Quick (easy to be quick when you die) play of the old version with a dwarf warrior. Some thoughts:

Levels smaller but uglier then V - I think size matters for feel/danger density/teleports. Plan is to look into how shrinkable V dungeon layout is.

?recall more expensive. Not guaranteed in shop - my recall scroll burnt not long before death. This should be a real risk, however recall should always be avaliable in shops. I think I'll guarantee a much smaller no. of Vs guaranteed consumables.

Dry drop rate - I enjoyed this for the early game. I believe it becomes an issue in the transition to middle game? Plan is to set a point where the early game should end & the game becomes more generous.

_slow moster - mostly failing against giant fleas. I consider that unacceptable. Insects will likely be flagged "weak willed" or similar. Hound packs will probably follow.

Giant fleas bash door (do they in V). This will go unless someone gives me a compelling case for it to stay.

Edit: Status effects being generally reliable against "animal" may be a reasonable pattern:

1. The game already has "animal" coded in
2. Easy enough to telegraph to players(at least ones who read the help file or forum)
3. Status effects have useful place against early fast kitties, packs or animal pits. With wands for the lone kitties. Staves for pack

Edit 2: I think I'm settled on a plan for status effects.

Base: As in the old O (will need to look at what the bonuses for casters was & how that'll work)
Natural:Penalty equivelent to x monster levels (high level hounds are still high level)
Unique:Bonus=Natural penalty, cancelling out for natural unique
Power ties to device skill using Vs +dam on devices
Fail:Minor 1-3 turn debuff unless immune. Bonus to landing full status effect while under minor debuff.

So if I can work out how to code that I'll get a version for testing.

wobbly June 29, 2018 15:53

So O-combat is in attack.c? Where is the equivelent in V?

wobbly June 30, 2018 23:04

Quote:

Originally Posted by Philip (Post 130913)
Listen sounds like a fun mechanic, would really help differentiate stealthy gameplay from early on. On rangers, it feels like perhaps the kind of thing that could be applied as a temporary buff from spells (call it Tracking or something), just to give the rogue an edge with avoidance. The main issue I see here is that it would rely somewhat on monsters having a stealth stat, which they do not currently as far as I can tell.

So one possibility here would be to link it straight off the perception skill with a minimum cut-off then tweak the no.'s that way hobbit rogue gets it first -> rangers & other rogues later -> elf/hobbit/.. warriors/mages/priests last. Everything else needs perception on gear.

Comparing the old monster.txt to the new monster.txt & monster_base.txt it looks like the format is basically the same written differently. Amusingly someone changed it into a more readable form, making this more of a pain. :)
Anyway looks easy enough to transfer over other then time-wise. I'll just use placeholders for now on some monsters. Bronze dragons will likely breathe force for now. Shrug. If that works they can stay that way.

Nick June 30, 2018 23:47

Quote:

Originally Posted by wobbly (Post 131090)
So O-combat is in attack.c? Where is the equivelent in V?

It's player-attack.c in V. The big things to watch for are the difference in applying to-deadliness instead of to-dam, how slays/brands work, and how criticals work.

Quote:

Originally Posted by wobbly (Post 131181)
Comparing the old monster.txt to the new monster.txt & monster_base.txt it looks like the format is basically the same written differently. Amusingly someone changed it into a more readable form, making this more of a pain. :)

Yeah, that was mostly me. Easier for players, harder for maintainers :)

wobbly July 3, 2018 04:15

Some progress. Got a super rough racial list, mostly placeholders so I can test & see how the numbers change things. I went with a compromise on xp penalties: 100% base race, 110% strong race, 125% high elf... About 1/10 of the way through a 1st pass on the monster list. The 1st list is going to be a massive mishmash of things while I test every gimmick I can think of to learn what everything does. I'll try & get iconic O monsters to spawn more regularly then visitors at least & do a more authentic list when the mechanics look more similar.

Some weirdness. Capitalization is inconsistent (monster are lower-case, but they are capitalized in friends: ) . However the game wants to spit the dummy if I use Desc instead of desc, figures. Seems almost every non-unique humanoid is marked as male. Puzzled as to the reason, so started removing the flag to see if anything breaks.

Edit: I saw nothing on silver jelly to make it do what it does. Somewhere else? Lighting code?
Edit2: I tried using the kobold shaman(not in O) as mini-boss kobolds & they still mob-gen in pits. I assume that's sets elsewhere?

wobbly July 4, 2018 09:17

Hmm so worked out what doesn't work. I'm going to have to convert the old list by hand unless someone has a better suggestion? V and O have a non-linear relationship between AC.

At depth 1:approx. 1.5x
Depth 10: 2 - 2.5x
50:3-3.5x
90+:3x

Morgoth's hp doubled. Most of the other big guys it's about 1.33x

wobbly July 9, 2018 11:37

From player attack.c:

/* Power competes against armor */
return randint0(chance) >= (ac * 2 / 3);

I can't find ac used anywhere else, was this just a hack to scale all of the monsters at once or is ac used somewhere else? It's (*2/3) not in O but it lines up the ACs for the bottom part of the monster list. Maybe this is good news? Maybe I can use Vanilla ACs & just adjust the top half of the list?

Pete Mack July 9, 2018 15:29

@wobbly--i don't know when that was added. It was certainly present in 3.0

wobbly July 13, 2018 13:52

Ok worked it out. I'm using FAs monster list for now. I've converted the format to V & stripped out the monster mana. I'll add them in to a V list 10 dlvls at a time & remove broken flags & spells. Bronze worms will be flagged BR_WALL for now. Vs hydra will come across, I'll make them rare & see if that'll mostly spawn them in pits. All the humans will likely be replaced with Vs version because they're already flagged. Compos's silver worm (breathe inertia) will come across & a bunch of things with tails (like giant salamander, young+ dragons) will gain a tail-slap in melee. I'll just keep a pure copy before I add anything in.

wobbly July 13, 2018 16:02

After feedback on whether to keep any of the following;
  • N:260:Woe
  • N:261:Aggravation
  • N:262:Weakness
  • N:263:Stupidity
  • N:302: DOOM
  • N:322:Curse Armor
  • N:323:Curse Weapon
  • N:333:*Identify* (reconverted to id all runes)
  • N:368:Elemental Attacks(this was broken in FA, don't know about O)
  • N:395:Ruination
  • N:396:Weakness
  • etc

with vanilla id. I'm keeping Vs mouse ring. It's a nice design

Edit: Also a good candidate monster to drop ?recall
Edit2: Perhaps healers & master rogues? Maybe master rogue should leave level when it steals? Is there an easy way to do that?

Derakon July 13, 2018 16:23

Quote:

Originally Posted by wobbly (Post 131899)
After feedback on whether to keep any of the following;
  • N:260:Woe
  • N:261:Aggravation
  • N:262:Weakness
  • N:263:Stupidity
  • N:302: DOOM
  • N:322:Curse Armor
  • N:323:Curse Weapon
  • N:333:*Identify* (reconverted to id all runes)
  • N:368:Elemental Attacks(this was broken in FA, don't know about O)
  • N:395:Ruination
  • N:396:Weakness
  • etc

with vanilla id.

Unequivocally bad equipment and consumables make ID-by-use too risky to attempt. That's why modern Vanilla's cursed gear is mixed-blessing instead. I'd leave the bad gear out. *Identify* and Elemental Attacks might possibly be worth keeping. The use case for *Identify* is a little odd -- you'd want to use it on an item with a lot of unknown runes, I guess. Elemental Attacks I assume brands your melee with an element? That used to be on Vanilla's Rings of Acid/Fire/etc. and was removed because it made certain weapons (particularly the Glaive of Pain) much too powerful.

Quote:

Edit2: Perhaps healers & master rogues? Maybe master rogue should leave level when it steals? Is there an easy way to do that?
You can find the code that handles the EAT_GOLD hit effect, and change it to invoke the Banishment effect on the monster after gold is stolen. I believe this simply amounts to deleting the monster from the level.

Nick July 14, 2018 00:37

Quote:

Originally Posted by wobbly (Post 131899)
After feedback on whether to keep any of the following;
  • N:260:Woe
  • N:261:Aggravation
  • N:262:Weakness
  • N:263:Stupidity
  • N:302: DOOM

If you're talking about O, and keeping V-style curses, ditch them. FA jewellery works kind of like randarts, so you'd have to decide whether to do that or not; the simple way would be just to keep V jewellery.

wobbly July 16, 2018 18:23

I'll use Vs for now & just remove a few that don't fit.

I think I have a clearer idea what I'll do with the specialties. Nick swapped rogue & ranger hps. Instead I'll bring back athletics and you can choose to have hps on either. So with athletics paladin hps=old warrior rogue/ranger=old paladin, but that'll be a choice vs a spell realm. Rogues will pick necromancy for the old assassin & I'll use blackguards. So will need something to differentiate bookless paladins and warriors. Rogues and rangers still have natural niches.

wobbly July 16, 2018 21:40

So Sangs combat code seems to be Os with a bunch of extra stuff. So I'll see if I can bring bits of stuff from that across even if I don't use it. It's got a bunch of stuff for bookless paladin at the least

wobbly July 17, 2018 14:57

Worked out how V calculates blows. Just need to know what "effective weight" means in O. Not that familiar with how blows are meant to work here.

Edit:I think effective just enforces minimum and it doesn't care about class?

wobbly July 20, 2018 09:49

Ok I'm going to put something up once:

4.1.3 is up
I get the O-combat code to work

both of those are probably sometime between now & the end of the year. :)

Most of the O-code looks self-explanatory, unfortunately it seems to call some functions not in Vs version. Some I can just remove for now, black breathe for instance. What I need to find is stuff like add_dice. By coincidence I noticed v4 adds dice for crits? Not sure, I've grabbed the code but v4 combat doesn't look very readable, not to me anyway.

Maddened Weasel has the territorial flag which is also in Sil (maybe NPP too?). Not sure if it's the same one but I suspect I'll need to work out how to put that back if I don't want that hunting down the little mages.

wobbly July 28, 2018 10:02

Quote:

Originally Posted by wobbly (Post 131701)
From player attack.c:

/* Power competes against armor */
return randint0(chance) >= (ac * 2 / 3);

I can't find ac used anywhere else, was this just a hack to scale all of the monsters at once or is ac used somewhere else? It's (*2/3) not in O but it lines up the ACs for the bottom part of the monster list. Maybe this is good news? Maybe I can use Vanilla ACs & just adjust the top half of the list?

So I think when Derakon goes mumble, mumble 70% accuracy. This is here to make someone's life easier. Mine in fact. I'll change O-AC to match rather then the other way round

wobbly August 26, 2018 18:35

Note to self. There's a bunch of stuff that's easy to find where it's moved to by looking where the old documentation moved.


All times are GMT +1. The time now is 01:43.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, vBulletin Solutions Inc.