Commit Graph
100 Commits
Author SHA1 Message Date
Pasi Kallinen 6fd51c29ef Unify Bag of Holding item loss chance 2020-02-09 18:39:46 +02:00
Pasi Kallinen 39032d2fac Fix the selection param unify 2020-02-09 14:47:41 +02:00
Pasi Kallinen e182ff428b Unify lua setting wallprop 2020-02-09 14:30:11 +02:00
Pasi Kallinen ced327fdf5 Unify some exported lua script params 2020-02-09 13:44:04 +02:00
Pasi Kallinen 1e915a9a52 Unify revealing hiding monsters for mvm attacks
Whether the monster-vs-monster hits or misses, hiders
are revealed the same way. Unify that part of the code.

Use git show --patience to have a better view of the changes.
2020-02-08 23:41:36 +02:00
Pasi Kallinen df137029c0 Unify finding room pos for some features 2020-02-08 19:47:36 +02:00
Pasi Kallinen 0f16a48aaf Unify (un)locking boxes in inventory 2020-02-08 18:56:40 +02:00
Pasi Kallinen 58677b9e95 Unify inventory letter value for sortloot 2020-02-08 18:42:06 +02:00
Pasi Kallinen 7eb20c9e7a Unify multishot class bonus code 2020-02-08 18:04:54 +02:00
Pasi Kallinen 0323eecbfe Unify finding a queen bee 2020-02-08 17:35:52 +02:00
Pasi Kallinen c585c65042 Add some stair helper functions 2020-02-08 17:08:26 +02:00
Pasi Kallinen 9e4319824d Fix digging through iron bars from adjacent pit
It was possible to create a pit on top of iron bars, by first creating
a pit next to the bars, going down into the pit, and then digging sideways
towards the bars. This did not destroy the iron bars.
2020-02-08 17:08:17 +02:00
Pasi Kallinen c2e8703fe0 Unify breamm and breamu
Monster vs monster breath attacks were using nearly the same code
as monster vs hero - unify the code
2020-02-08 14:19:17 +02:00
Pasi Kallinen 7ca4ae7c4b YAFM tweak 2020-02-07 23:44:06 +02:00
Pasi Kallinen 4943fe23b3 YAFM when sitting on a towel
(via xNetHack)
2020-02-07 23:16:23 +02:00
Pasi Kallinen a9c41d2ae0 YAFM when restoring a game while hallu
(via xNetHack)
2020-02-07 23:08:18 +02:00
Pasi Kallinen eed37c9a84 Allow #wizgenesis quantity in the prompt
The #wizgenesis command can also accept a quantity in the input prompt,
previously it only accepted a command repeat prefix.

(via UnNetHack, originally from NetHack4)
2020-02-07 19:11:18 +02:00
Pasi Kallinen b12ea03d11 Allow monsters to rummage through containers 2020-02-02 11:05:43 +02:00
Pasi Kallinen dcdb8d437b Dehardcode sanctum temple secret door 2020-02-01 21:30:50 +02:00
Pasi Kallinen bb1925a957 Dehardcode wizard1 morgue secret door 2020-02-01 20:20:25 +02:00
Pasi Kallinen 33cd6befe0 Dehardcode minefill
Instead of hardcoding the minefill levels in the core,
allow defining fill levels for a dungeon branch in the dungeon.lua
2020-02-01 18:31:39 +02:00
Pasi Kallinen d44c83d45f Allow applying royal jelly on an egg
Royal jelly applied on an egg will change a killer bee egg to
a queen bee egg. Cursed jelly will kill the egg, uncursed and blessed
will revive it. Blessed jelly will also make the creature think
you're the parent.

Original patch was by Kenneth Call
2020-01-31 10:39:40 +02:00
Pasi Kallinen c03b6db884 Fix quest text mistake 2020-01-29 17:25:16 +02:00
Pasi Kallinen 0500f54742 Use nh_getenv just in case 2020-01-27 18:03:42 +02:00
Pasi Kallinen 4add2cdc54 Doc copypaste error 2020-01-27 10:20:31 +02:00
Pasi Kallinen 1783b9de3e Doc and sample config for MSDOS video resolution 2020-01-27 10:13:48 +02:00
Pasi Kallinen aa7f098af1 Cloud wish should block vision 2020-01-26 14:33:11 +02:00
Pasi Kallinen ae843bc10a Allow wizmode wishing for cloud terrain 2020-01-26 14:05:11 +02:00
Pasi Kallinen 2ba3fa9240 Fix warning on nonexistent quest.lua text
Cavemen don't have goal_alt message - before lua, that one
fell through into goal_next message, but now it tried to
load the "common" message. Add ability to define message fallbacks,
and make goal_next the fallback for goal_alt.

Also prevent issuing quest.lua errors twice.
2020-01-19 14:09:16 +02:00
Pasi Kallinen f4ab235b81 Prevent accessing outside the mons array
Fix another out-of-bounds error
Monster trying to decide if a tin could cure stoning looking at
a special or empty tin would do acidic(&mons[-1])
2020-01-16 10:14:16 -05:00
Pasi Kallinen 5e307335c3 Add missing NULLs to lua function reg array 2020-01-07 08:44:36 +02:00
Pasi Kallinen f83dede8e5 Fixes for degenerate RNG
Assume a degenerate RNG that always returns the same number.
With these fixes, the game starts and is almost playable.
There are still some places that will go into infinite loop, eg.
the mines level generation.
2020-01-06 11:48:19 +02:00
Pasi Kallinen cedc757e16 Unify random light state for rooms or level 2020-01-05 13:31:24 +02:00
Pasi Kallinen 1db0a5dda0 Fix unused param warning 2020-01-04 17:26:53 +02:00
Pasi Kallinen 1d312ee3fe Add some player lua methods
Adds u.clear_inventory() and u.giveobj(new.obj("rock")) and some other minor stuff.
2020-01-04 16:55:53 +02:00
Pasi Kallinen a018930964 Update map glyph when placing obj on map via lua 2020-01-04 11:35:17 +02:00
Pasi Kallinen 7e07cef197 Lua struct obj improvements
If the core frees the obj struct referred by lua, don't free it,
just mark it as OBJ_LUAFREE - lua will free it in gc once all
the references to it are gone.
2020-01-01 13:25:59 +02:00
Pasi Kallinen 2dda1c43b2 Fix heap-use-after-free when rewielding partial stack 2019-12-29 17:28:15 +02:00
Pasi Kallinen 4c82594193 Fix another out-of-bounds error
Monster trying to decide if a tin could cure stoning looking at
a special or empty tin would do acidic(&mons[-1])
2019-12-29 16:36:54 +02:00
Pasi Kallinen 6d8d3a9557 Add lua object references
Whenever a lua script references a core struct obj, increment a counter
in the obj struct. Core code will not free the obj, if there are any
lua references pointing to it, just makes it free-floating.
When lua script ends, the lua gc will free the free-floating objects.

Also exposes u.inventory to lua.

Breaks save and bones compat.
2019-12-26 19:15:24 +02:00
Pasi Kallinen fc0596d529 Fix Qt compile 2019-12-23 17:24:41 +02:00
Pasi Kallinen 370cfad85a Fix X11 compile 2019-12-23 16:45:25 +02:00
Pasi Kallinen 2c3be8ebe1 Prevent accessing outside the mons array 2019-12-20 15:19:14 +02:00
Pasi Kallinen 98cb3ff161 Prevent fuzzer using wizloadlua and wizloaddes
Otherwise the fuzzer will enter a nonexistent file name, and stop.
2019-12-20 13:48:39 +02:00
Pasi Kallinen b24f4c5929 Expose traps to lua 2019-12-15 18:16:41 +02:00
Pasi Kallinen 1d9ba3e212 Expose objects array to lua 2019-12-12 13:39:20 +02:00
Pasi Kallinen 027024d27f More wish parser tests 2019-12-12 07:58:06 +02:00
Pasi Kallinen 7043e2134a Lua NetHack obj bindings 2019-12-11 20:10:59 +02:00
Pasi Kallinen 2cb46c4153 Initialize object containment field
This is 3.7 bug caused by the lua implementation, so no fixes entry.
2019-12-08 11:53:01 +02:00
Pasi Kallinen f8a1059a87 Read lua files more efficiently
... replacing horribly hacky loop.
2019-11-29 21:49:03 +02:00
Pasi Kallinen ddd8b7d9a5 Remove vestiges of quest text data file 2019-11-25 16:30:54 +02:00
Pasi Kallinen b66bcc2f5a Fix lua quest data output types
...so the texts are given exactly the same way as they were given previously.
2019-11-25 09:21:37 +02:00
Pasi Kallinen 8b7aea7dee Merge branch 'paxed-quest-lua' into NetHack-3.7 2019-11-25 07:30:51 +02:00
Pasi Kallinen 350371e030 Don't remove dungeon.lua with make spotless 2019-11-24 19:39:31 +02:00
Pasi Kallinen 8b87013fba Move quest texts to lua 2019-11-24 17:41:39 +02:00
Pasi Kallinen 3afbcb76f5 Minor msdos cross compile improvements 2019-11-23 23:40:25 +02:00
Pasi Kallinen acf48fa305 Fix the lua integration parts marked for review
Also, explicitly allow traps of type "random".
2019-11-23 17:42:14 +02:00
Pasi Kallinen 5cad6a15dc More hallu monsters 2019-11-22 09:24:19 +02:00
Pasi Kallinen cb4d350424 Fix unnecessary string copy 2019-11-20 21:20:35 +02:00
Pasi Kallinen a338f8bd88 Fix wizmakemap calling mklev twice 2019-11-20 21:08:35 +02:00
Pasi Kallinen 791657f4e6 Fix memory leaks in lua integration 2019-11-20 20:09:16 +02:00
Pasi Kallinen 786a90415e Fix some memory leaks 2019-11-19 17:31:50 +02:00
Pasi Kallinen 65ccd1d89e Fix double DLB definition in linux hints file 2019-11-18 09:16:51 +02:00
Pasi Kallinen c2f7fb7d84 Fix heap-use-after-free
bcsign was used on a freed obj
2019-11-11 18:46:19 +02:00
Pasi Kallinen a6b752e6f1 Lua: Default dungeon and level chance is 100 2019-11-10 17:36:59 +02:00
Pasi Kallinen 32f2fdb135 Remove leftover level compiler header 2019-11-07 19:40:41 +02:00
Pasi Kallinen 6f5a50a538 Move and remove test files 2019-11-07 19:32:36 +02:00
Pasi Kallinen 4e438e0146 Use lua_tointeger instead of lua_tonumber 2019-11-07 19:28:58 +02:00
Pasi Kallinen 468ba1071d Remove the hints file change for extra warnings 2019-11-07 18:45:42 +02:00
Pasi Kallinen 6dca5e0a49 Fix couple warnings
Alloc failure is already handled.
2019-11-07 18:13:48 +02:00
Pasi Kallinen 1908017e27 Fixes typo 2019-11-07 11:23:28 +02:00
Pasi Kallinen 9cd9280276 Lua: remove dgn_comp, use lua instead 2019-11-06 18:45:10 +02:00
Pasi Kallinen fd55d9118e Use lua for special level files
Game is playable, and should compile on linux and Windows.
Assumes you have a lua 5.3 library available.

Removes level compiler and associated files.
Replaces special level des-files with lua scripts.
Exposes some NetHack internals to lua:
 - des-table with commands to create special levels
 - nh-table with NetHack core commands
 - nhc-table with some constants
 - u-table with some player-specific data (u-struct)
 - selection userdata

Adds some rudimentary tests.

Adds new extended command #wizloadlua to run a specific script,
and #wizloaddes to run a specific level-creation script.

nhlib.lua is loaded for every lua script.

Download and untar lua:
  mkdir lib
  cd lib
  curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz
  tar zxf lua-5.3.5.tar.gz

Then make nethack normally.
2019-11-06 18:43:20 +02:00
Pasi Kallinen efbef0f22c Fix unleashable message given for non-leashed monster 2019-11-04 18:58:22 +02:00
Pasi Kallinen 4c9f4dbbd9 Prevent leashing monsters with no extremities
... and also unsolid monsters.
2019-11-02 11:40:37 +02:00
Pasi Kallinen 54024f2015 Fix pet polyed to long worm staying leashed
Long worms cannot be leashed, but polymorphing a leashed pet
into a long worm kept it leashed.
2019-11-01 19:05:48 +02:00
Pasi Kallinen d201d302b7 Fix wizmakemap leaving genocided monsters on map
If a genocided monster was in "limbo" (migrating to the same level),
wizmakemap put it back on map.
2019-10-26 19:58:02 +03:00
Pasi Kallinen f200397689 Fix monster triggering land mine accessing deleted trap
mintrap -> thitm -> mondied -> relobj -> mdrop_obj ->
flooreffects -> deltrap

after calling thitm, the mintrap code was trying to access the trap.
2019-10-13 20:52:38 +03:00
Pasi Kallinen 346ebbce10 Fix launched object accessing a deleted trap
In launch_obj, the code first got the trap, then called ohitmon
(which can delete the trap by doing mondied -> fill_pit ->
flooreffects -> deltrap), then after that used the trap variable.
2019-10-13 20:40:58 +03:00
Pasi Kallinen 1f7095e226 Fix addressing deleted trap when helping monster out of a pit
Move reward_untrap before fill_pit, as the trap may get deleted.
2019-10-13 19:58:27 +03:00
Pasi Kallinen 9e9ee59ca7 Fix hero hiding under a statue shattered by land mine
Trigger a land mine while being polymorphed into a monster that
automatically hides (eg. scorpion). Have the statue on the land mine
shatter and all items on that square scatter away. Avoid falling
into the pit left by the land mine.
2019-10-13 19:30:32 +03:00
Pasi Kallinen 46adb312e7 Fix priests and shopkeepers moving on other monsters 2019-10-11 20:24:17 +03:00
Pasi Kallinen ab30c3d79d Fix vault guard impossible
... when the guard is angry, and he's in the vault or in his corridor,
you're not in the vault nor in his corridor, and the level is full
so the guard cannot relocate.
2019-10-11 20:11:28 +03:00
Pasi Kallinen 02b9368dba Fix fired iron ball sanity error
When hero was punished and swallowed, and fired the attached
iron ball from a quiver, thrownobj was not cleared.
2019-10-11 20:02:06 +03:00
Pasi Kallinen e92445810f Fix ball and chain sanity
Scatter did not consider the ball or chain, and moved them around, causing
ball and chain sanity error.

One way to trigger was being punished, with chain on a land mine and having
a monster trigger the mine. Now the chain will shatter, unpunishing the hero.
2019-10-08 19:47:51 +03:00
Pasi Kallinen 6426e61860 Prevent a possible impossible when guard relocated a monster 2019-09-06 22:09:03 +03:00
Pasi Kallinen 2562144503 Make sure the correct luckstone is the prize
The first generated luckstone is marked as the prize in mines' end.
Make sure we generate the intended one first, before any other
(possibly randomly generated) luckstones.
2019-05-25 19:15:56 +03:00
Pasi Kallinen 217671e00f Remove built-in speaker support
The changes to amiga, mac and msdos builds are untested.
2019-05-11 11:10:00 +03:00
Pasi Kallinen c4b286be8f Fix merge mistake 2019-05-09 20:27:33 +03:00
Pasi Kallinen 60f1b7e35b Fix compiling without DLB 2019-05-09 19:44:34 +03:00
Pasi Kallinen fdb2c91723 Fix X11 compilation 2019-05-09 10:23:29 +03:00
Pasi Kallinen bed2c2307e Fix monster trapped state being wrong
When cloning a monster, clear the clone trapped and hiding states.
When splitting a monster (eg. a black pudding), the clone could
be placed on a trap, so do mintrap.
When removing a monster from the map, clear the trapped state.
2019-05-05 22:58:27 +03:00
Pasi Kallinen f55e9ddd7c Fix impossible if monster cannot be relocated from tele region 2019-05-05 22:30:20 +03:00
Pasi Kallinen f303fd2872 Database fixes
Merge barbed devil entry to already existing one.
Replace spaces in the beginning of lines with tabs.
2019-05-01 13:38:57 +03:00
Pasi Kallinen f17cfc977b Add the missing int param 2019-04-29 20:45:18 +03:00
Pasi Kallinen 1a4223faac Unify code for cure self spell 2019-04-29 18:50:08 +03:00
Pasi Kallinen be40ff3104 Cursor targeting help improvement
Based on feedback from users, explicitly show that m/M keys cycle
to next/previous monster, and so on.
2019-03-29 16:33:54 +02:00
Pasi Kallinen f68cb08304 Zero an array
Valgrind complained about accessing uninitialised memory
2019-03-24 13:03:22 +02:00
Pasi Kallinen 9f1ae0fe74 Fix making fake leash object with leashmon set
When farlooking at a leash glyph on a map, the fake object should never
have leashmon set. This happened when a mimic was on the same spot
and was mimicing a corpse or statue, due to leashmon and corpsenm
using the same field.
2019-02-01 18:19:04 +02:00
Pasi Kallinen adacde80e7 Fix logic error in stuck_in_wall 2019-02-01 13:38:21 +02:00