Alternate suggestion: shops only restock when you increase your maximum depth, regardless of how much time you spend in the dungeon. Contents remain random as current. If you don't find what you want, tough cookies, do without; you're not getting new stuff until you go back into the dungeon to do another, deeper, level.
Specifically regarding the Black Market, I feel that it spawning large stacks of potions/scrolls is arguably a bug. Single potions of Healing/Speed/Life/etc. are not a big deal, because you have to consciously spend time townscumming to take advantage of them. The only item type that should show up in stacks in the Black Market is ammo...and even then, with the quiver, if you see a single powerful arrow/bolt/shot, you might be tempted to buy it. So maybe one simple patch would be to declare that the Black Market only stocks in quantities of 1.
But honestly I feel like the town is in a pretty good state right now. Shopping isn't very interesting, but shopping isn't what the game is about, so that's fine. The Black Market's a little out of line, but that's readily fixable.
Preparation for 4.1 release
Collapse
X
-
Pickup with 'g'? Did you get to choose between the ring and the other item you had dropped, or was it just "g, crash"?Leave a comment:
-
well, just a vague thought,
let's imagine a new system, related to the level feeling, that triggers when a certain amount of the initially spanwed entities are dead / identified (mobs/items); "you feel there is not much left on this level".
if you get this message, and you walk down the stairs, the market restocks.
this creates a new, artificial, time measuring system independent of turns. you go to the dungeon, you do "a full level", and this allows you to buy stock. Assuming, that you manage to bring back enough loot.Leave a comment:
-
Pile integrity failure at obj-pile.c:219
Guilty object
=============
Name: Teleportation
I was blind & had just teleported (from a ring of teleportation). I removed the ring which dropped as my inventory was full. Dropped an item to make room for it. Picked the ring back up (I'm still blind). Game crashes.Leave a comment:
-
well, just a vague thought,
let's imagine a new system, related to the level feeling, that triggers when a certain amount of the initially spanwed entities are dead / identified (mobs/items); "you feel there is not much left on this level".
if you get this message, and you walk down the stairs, the market restocks.
this creates a new, artificial, time measuring system independent of turns. you go to the dungeon, you do "a full level", and this allows you to buy stock. Assuming, that you manage to bring back enough loot.
consumables ought to cost MUCH more, but be available more often. im specifically thinking CCW at 600gp each, CSW 200, CLW 30. Phase as well should cost more.
I'm keen on keeping the detect scrolls cheaper, but again, limited to a certain amount per "level". Even SHunger should cost more ... food that doesn't have carry weight?
Forget about stores selling high magic items. No more black market, lower substantially the value of egos. You are basically showing up to a hovel with a GOLD STUDDED CROWN and the poor guy can barely feed himself, he can't give you 30k gold and not even find a buyer for a thing like that.
Also a maximum spend per level from merchants would do great. Maybe just get store credit?
The idea is that loot should be valuable, and you WANT to find loot to sell, so you can get consumables that you NEED to progress.
But don't randomize whether a CSW is on sale, or if they have RLL. And don't make it so one day is 3 CCW, the next is 30 CCW.
Also, as you have seen, some BM items just break the game. Stat potions, wands of TO ...
And the major heal items should NEVER, ever be on sale. It's ridiculous that i can find a stack of 12 !Life which is the most rare potion in the game and a major tool to win the final encounter, on sale for peanuts, with no risk on my part.
Same for Ban, MBan, *Heal, ESP ..
(i would raise the low-mid level gold drops a bit)Leave a comment:
-
Had the same bug for =Escaping.
I would like you to consider a full overhaul of the selling mechanic. Make it again a part of the game, including carrying loot. Rebalance prices of everything, specially consumables. Remove the restock trick and make a fixed amount of consumables available ... but always. Think of it as ironman-lite.Of course if you have improvements to suggest for when no-selling is turned off, that's a different matter.
Leave a comment:
-
I've put on a cursed shield and can see on the C screen that it makes me vulnerable to fire, but again, I haven't learned the rune. I feel like the "burning up" and "chilled to the bone" curses should probably just be apparent on wielding because they're difficult to discover. (I'm not sure they really work that well as curses at all, to be honest, since I'm never really conscious of their effects during gameplay. Ditto for steelskin.)
Maybe all curse runes should just be learned immediately on wielding apart from those that have timer effects? (And maybe anti-teleportation, since that's quite a good 'gotcha' to discover when you're trying to phase away from something nasty.) Curse identification is still a bit of an annoying faff at the moment because a lot of them are tricky to ID-by-use so you end up wasting a lot of ID scrolls or inventory space on items you're only carrying to ID their curse runes.Leave a comment:
-
Had the same bug for =Escaping.
I would like you to consider a full overhaul of the selling mechanic. Make it again a part of the game, including carrying loot. Rebalance prices of everything, specially consumables. Remove the restock trick and make a fixed amount of consumables available ... but always. Think of it as ironman-lite.Leave a comment:
-
When I put on a ring with the cowardice curse, I get the "You are too afraid to attack" message if I try to hit anything, but the rune for the curse isn't learned and it stays unidentified. (Still playing 6ba537e at the moment.)Leave a comment:
-
Hey, it has plenty of value over the standard whip! After all, buying it identifies the rune of Slay Troll so you don't mistake it for anything useful in future.
Though after the monster changes are done I would still like to campaign for combining Slay Orc, Slay Troll and Slay Giant into one umbrella slay category that might then have some minor utility.Leave a comment:
-
New builds up on the nightlies page, some notable changes:- The level generation crash bug is fixed (completely, I hope - let me know if it is recurring), thanks to some awesome debugging by kandrc
- Innate abilities like Half-Troll's regeneration imply knowledge of the relevant rune at birth
- Runes are now learnt on selling as well as buying
- Donating to shops in a no-selling game is now allowed wherever selling would be in a selling game, so you can give your sword {??} to the weaponsmith and learn all about it. If this is proving too easy, I'll make donating only possible to the Black Market
Please let me know how all this plays.Leave a comment:
-
-
Something still looks amiss with ego pricing... Just visited the town in 6ba537e and found the temple selling both a Whip (+5,+5) and a Whip of Slay Troll (+5,+5) for the exact same price of 696.Leave a comment:
-
-
Here are a stack trace showing the level generation bug. It occurs when placing special rooms in cave_generate(). This trace shows the failure while placing a vault, but I've also seen it while placing pits. Looks like there might be a bad test for special room placement?
To reproduce efficiently, I commented out the checks for stairs (grep for "I see no"), then you can run up and down the dungeon very quickly.
Code:angband: cave-square.c:472: square_istrap: Assertion `square_in_bounds(c, y, x)' failed. Program received signal SIGABRT, Aborted. 0x0000007fb7c77528 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54 54 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. (gdb) bt #0 0x0000007fb7c77528 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54 #1 0x0000007fb7c789e0 in __GI_abort () at abort.c:89 #2 0x0000007fb7c70c04 in __assert_fail_base ( fmt=0x7fb7d5d0c0 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x5231f8 "square_in_bounds(c, y, x)", file=file@entry=0x5231e8 "cave-square.c", line=line@entry=472, function=function@entry=0x5234e8 <__PRETTY_FUNCTION__.9481> "square_istrap") at assert.c:92 #3 0x0000007fb7c70cac in __GI___assert_fail ( assertion=0x5231f8 "square_in_bounds(c, y, x)", file=0x5231e8 "cave-square.c", line=472, function=0x5234e8 <__PRETTY_FUNCTION__.9481> "square_istrap") at assert.c:101 #4 0x0000000000408468 in square_istrap (c=0xaf1e18, y=67, x=99) at cave-square.c:472 #5 0x00000000004c53d8 in square_trap_flag (c=0xaf1e18, y=67, x=99, flag=2) at trap.c:90 #6 0x0000000000409514 in square_isplayertrap (c=0xaf1e18, y=67, x=99) at cave-square.c:712 #7 0x0000000000408c18 in square_isempty (c=0xaf1e18, y=67, x=99) at cave-square.c:570 #8 0x000000000043d580 in vault_monsters (c=0xaf1e18, y1=66, x1=100, depth=50, num=2) at gen-util.c:734 #9 0x0000000000435a70 in build_room_template (c=0xaf1e18, y0=60, x0=100, ymax=10, xmax=17, doors=3, data=0x7b0448 '#' <repeats 18 times>, ".x.#9x.#.x9#.x.##...#...#...#...##123#321#123#321#%", '.' <repeats 15 times>, "%%", '.' <repeats 15 times>, "%#321#123#321#123##...#...#...#...##.x.#9x.#.x9#.x.", '#' <repeats 18 times>, tval=0) at gen-room.c:1010 #10 0x0000000000435d80 in build_room_template_type (c=0xaf1e18, y0=66, x0=198, typ=1, rating=1) at gen-room.c:1074 #11 0x0000000000439f24 in build_template (c=0xaf1e18, y0=66, x0=198, rating=1) at gen-room.c:2388 #12 0x000000000043bbb8 in room_build (c=0xaf1e18, by0=0, bx0=0, profile=..., finds_own_space=true) at gen-room.c:2994 #13 0x000000000042d3a4 in modified_chunk (depth=49, height=66, width=198) at gen-cave.c:1680 #14 0x000000000042da9c in modified_gen (p=0x798228) at gen-cave.c:1783 #15 0x00000000004279b0 in cave_generate (c=0x5738e0 <cave>, p=0x798228) at generate.c:864 #16 0x000000000042542c in run_game_loop () at game-world.c:999 #17 0x00000000004d62e4 in play_game (new_game=false) at ui-game.c:434 #18 0x000000000051b640 in main (argc=1, argv=0x7ffffff448) at main.c:524 (gdb) up #1 0x0000007fb7c789e0 in __GI_abort () at abort.c:89 89 abort.c: No such file or directory. (gdb) #2 0x0000007fb7c70c04 in __assert_fail_base ( fmt=0x7fb7d5d0c0 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x5231f8 "square_in_bounds(c, y, x)", file=file@entry=0x5231e8 "cave-square.c", line=line@entry=472, function=function@entry=0x5234e8 <__PRETTY_FUNCTION__.9481> "square_istrap") at assert.c:92 92 assert.c: No such file or directory. (gdb) #3 0x0000007fb7c70cac in __GI___assert_fail ( assertion=0x5231f8 "square_in_bounds(c, y, x)", file=0x5231e8 "cave-square.c", line=472, function=0x5234e8 <__PRETTY_FUNCTION__.9481> "square_istrap") at assert.c:101 101 in assert.c (gdb) #4 0x0000000000408468 in square_istrap (c=0xaf1e18, y=67, x=99) at cave-square.c:472 472 assert(square_in_bounds(c, y, x)); (gdb) print *c $1 = {name = 0x0, created_at = 1, depth = 49, feeling = 0 '\000', obj_rating = 593, mon_rating = 48477, good_item = false, height = 66, width = 198, feeling_squares = 0, feat_count = 0x994c18, squares = 0x96c5e8, noise = {grids = 0xa99408}, scent = {grids = 0xa99628}, objects = 0xb4f7a8, obj_max = 127, monsters = 0xb4fbb8, mon_max = 50, mon_cnt = 49, mon_current = -1} (gdb)
Leave a comment:
Leave a comment: