Compare commits

...

8232 Commits

Author SHA1 Message Date
Zeno Rogue 7af403490a fixed the bug with smart range 2024-05-31 19:18:08 +02:00
Zeno Rogue 2314eaba29 fixed non-enterable characters 2024-05-29 14:22:44 +02:00
Zeno Rogue 5d34760290 v13.0l 2024-05-29 13:58:21 +02:00
Zeno Rogue 50d70097cb fixup to another fix 2024-05-29 13:52:12 +02:00
Zeno Rogue c16c064b21 fixed loading used model 2024-05-29 13:52:02 +02:00
Zeno Rogue 448397ab1d fixed Orb Energy orb desc and Air charges 2024-05-29 13:51:53 +02:00
Zeno Rogue b482dabb84 fixed crashes when apply_settings_light with no cgip 2024-05-29 13:51:35 +02:00
Zeno Rogue 478be692de do not exit on sfc if save not even loaded 2024-05-29 13:51:20 +02:00
Zeno Rogue dda979ad14 delayed start in config file 2024-05-29 13:51:09 +02:00
Zeno Rogue 9485495e48 v13.0k 2024-05-28 20:21:45 +02:00
Zeno Rogue d4a610c2b6 fixed orb change display 2024-05-28 20:21:07 +02:00
Zeno Rogue 003ca36ee5 fixed backward incompatible color reading from config 2024-05-28 20:20:56 +02:00
Zeno Rogue 9752cdede1 fixed symbol changed enable archimedean unexpectedly 2024-05-28 20:20:28 +02:00
Zeno Rogue fbd2cc6b9d v13.0j 2024-05-28 19:35:48 +02:00
Zeno Rogue 5324d3d068 fixed parameters in VR 2024-05-28 18:55:22 +02:00
Zeno Rogue d34070f709 fixed atomic 2024-05-28 17:18:39 +02:00
Zeno Rogue 5d576c3344 display charge count for all orbs, and activation costs for frog-like orbs 2024-05-28 15:45:31 +02:00
Zeno Rogue c6c040eead testing in menu_format 2024-05-28 15:35:42 +02:00
Zeno Rogue aec2463f2f more explanation to menu format 2024-05-28 15:26:45 +02:00
Zeno Rogue ba44e111ca fixed string_parameter editors forgetting the edited text 2024-05-28 15:26:10 +02:00
Zeno Rogue 43d1fd3db8 known keynames for all F1-F10 2024-05-28 15:15:41 +02:00
Zeno Rogue 727ae8a260 gametime available in formulas 2024-05-28 15:09:18 +02:00
Zeno Rogue 99bc842c57 generalized show_turns to menu_format 2024-05-28 15:09:00 +02:00
Zeno Rogue a9d6def718 string parameters are now correctly editable 2024-05-28 15:08:30 +02:00
Zeno Rogue 0d5723dd69 config:: pre reactions 2024-05-28 15:07:29 +02:00
Zeno Rogue ab0ca74328 fixed the font file name, also fixed the problem in rawdisplaystr 2024-05-28 13:41:30 +02:00
Zeno Rogue e66f071521
Merge pull request #378 from jlmjlm/fakemob-font
Make fake-mobile fail cleanly if font missing.
2024-05-28 13:36:01 +02:00
Zeno Rogue b7bfe746cb updated the font name in fake-mobile 2024-05-28 13:34:42 +02:00
Zeno Rogue 093044ba83 Orb of Luck now removes the blue bug bias 2024-05-28 13:33:19 +02:00
Zeno Rogue 3c29b987ce fixup to shape pattern 2024-05-28 13:08:08 +02:00
Zeno Rogue a755f26075 make exception text available for parse errors 2024-05-28 13:05:55 +02:00
Zeno Rogue c1bacb0695 catch exception in case if failed to convert 2024-05-28 13:05:07 +02:00
Zeno Rogue e2c81eeae7 size of the world in arcm now can be pressed just like in geom_exp 2024-05-28 13:04:52 +02:00
Zeno Rogue fcc3cae938 fixed the shape pattern for converted tilings 2024-05-28 13:04:24 +02:00
Zeno Rogue 3b3e9e2de6 fixed arb::convert to take 'step' into account, not only 'next' 2024-05-28 13:02:12 +02:00
Zeno Rogue 5901d9598d faster joystick intiialization 2024-05-28 11:59:03 +02:00
Zeno Rogue 6bf198946c chainspilling lava slimes 2024-05-28 11:58:41 +02:00
Zeno Rogue a3261b21da throw color parse error if wrong length 2024-05-27 22:24:20 +02:00
Zeno Rogue 3da7e4c020 removed debug spam 2024-05-27 20:29:31 +02:00
Zeno Rogue ce09e4910e display smaller mouseover help if there is too much text 2024-05-27 15:54:12 +02:00
Zeno Rogue 95d7ffee08 provided some more help to bool parameters 2024-05-27 15:53:59 +02:00
Zeno Rogue 82a7077019 in bool dialog items, display help text as mouseover 2024-05-27 15:53:37 +02:00
Zeno Rogue 1cc90a6f76 added help to some bool parameters 2024-05-27 15:21:57 +02:00
Zeno Rogue 1323ec446a fixed a crash when changing 3D always 2024-05-27 15:21:44 +02:00
Zeno Rogue 8db11dc683 bool dialogs 2024-05-27 15:21:31 +02:00
Zeno Rogue 502469a54a innerwall is now a param 2024-05-27 14:38:29 +02:00
Zeno Rogue 0df75589ca phi now available in formulas 2024-05-27 14:20:54 +02:00
Zeno Rogue 358554d60e sides and shape now available in color formula 2024-05-27 14:20:54 +02:00
Zeno Rogue c594aea40e windmap and cdata available in color formula 2024-05-27 14:20:54 +02:00
Zeno Rogue 03c549b010 hsv color definition 2024-05-27 14:20:54 +02:00
Zeno Rogue 937a291485 atan2 function in parser 2024-05-27 14:20:54 +02:00
Zeno Rogue 0e09775669 clamp function 2024-05-27 14:20:54 +02:00
Zeno Rogue 5c03f9c7fe fixed wallif 2024-05-27 14:20:54 +02:00
Zeno Rogue 8321751cb0 'single color' now works better with live canvas 2024-05-27 14:20:54 +02:00
Zeno Rogue bfacda7207 ccolor:: live_canvas feature 2024-05-27 14:20:54 +02:00
Zeno Rogue 4f761c70cb Wax walls in Canvas now not only in 3D 2024-05-27 14:20:53 +02:00
Zeno Rogue 3ca75bec8e parsecolortable 2024-05-27 14:20:53 +02:00
Zeno Rogue 54443e365d argcolor now uses parsecolor 2024-05-27 14:20:53 +02:00
Zeno Rogue 6ca2051c96 bugfix in parsecolor 2024-05-27 14:20:53 +02:00
Zeno Rogue e5e89c4800 all color names are now accepted in parsecolor 2024-05-27 14:20:53 +02:00
Zeno Rogue bb6df35bf2 moved wallif to parsecolor from general parse 2024-05-27 14:20:53 +02:00
Zeno Rogue ba05c94d7b parse color: fixed color formula doc 2024-05-27 14:20:53 +02:00
Zeno Rogue 90c7f6e927 fixed 'formula' pattern to use RGB correctly 2024-05-27 14:20:53 +02:00
Zeno Rogue e6417951de fixed rgb color passing 2024-05-27 14:20:53 +02:00
Zeno Rogue f823a53f84 fixed hex color parsing 2024-05-27 14:20:53 +02:00
Zeno Rogue 83575d9d7d color parser 2024-05-27 14:20:53 +02:00
Zeno Rogue d381caba1f better a/b anim pars 2024-05-27 14:20:53 +02:00
Zeno Rogue 78cd26f456 fixed char_paremeter edit_option, added edit_option for string_parameters, improved warning for lack of edit_option 2024-05-27 14:20:53 +02:00
Zeno Rogue 96be05484a tau can be now used in formulas 2024-05-27 14:20:53 +02:00
Zeno Rogue 4d57041c9f angles now can be given in quarterturns 2024-05-27 14:20:53 +02:00
Zeno Rogue 5022b76d75 use turncount, framecount and illegal_moves in formulas 2024-05-27 14:20:53 +02:00
Zeno Rogue 8caf343390 track illegal moves 2024-05-27 14:20:53 +02:00
Zeno Rogue 203c11f6e1 fixed used_model parameter 2024-05-27 14:20:53 +02:00
Zeno Rogue 322b21e999 hardcore now can use a formula 2024-05-27 14:20:53 +02:00
Zeno Rogue f445d02707 specialized exceptions for param errors 2024-05-27 02:18:22 +02:00
Zeno Rogue 888a34dea6 fixed unused lambda capture 2024-05-26 23:26:49 +02:00
Zeno Rogue a20158ab65 fixed overzealous override 2024-05-26 23:22:40 +02:00
Zeno Rogue a703448144 added missing override 2024-05-26 23:20:50 +02:00
Zeno Rogue 480916e4db added missing split_string to repo 2024-05-26 23:19:19 +02:00
Zeno Rogue 998a74800c colortables are now saved correctly 2024-05-26 21:15:26 +02:00
Zeno Rogue f4796a10f4 config:: provided custom_reset 2024-05-26 20:57:32 +02:00
Zeno Rogue aa4bf4d818 removed set_default method from parameters 2024-05-26 20:55:39 +02:00
Zeno Rogue ff8bb20a55 config:: custom parameters now have custom_do_save 2024-05-26 20:51:33 +02:00
Zeno Rogue 57691737f0 fixed rwalls not being set in nilrider 2024-05-26 20:42:47 +02:00
Zeno Rogue a4b9b9b0a5 ccolor::which is now a parameter 2024-05-26 20:38:31 +02:00
Zeno Rogue 1c74774bfa refactored the parameter (saver/setting) system 2024-05-26 20:22:29 +02:00
Zeno Rogue a80a73458a fixed product rendering 2024-05-25 22:46:47 +02:00
Zeno Rogue d7bde6f175 fixup to CR 2024-05-25 12:04:11 +02:00
Zeno Rogue 9f711627f1 export to_square 2024-05-25 11:46:53 +02:00
Zeno Rogue 89763be7d2 when drawing circle_around_center, be more precise, and also use POLY_FORCEWIDE 2024-05-25 11:46:37 +02:00
Zeno Rogue 03b89f053b do not draw Safety in high-qual screenshots 2024-05-25 11:46:11 +02:00
Zeno Rogue 441f825566 export achievement data 2024-05-25 11:45:47 +02:00
Zeno Rogue f2d8b4d95e Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2024-05-24 20:58:32 +02:00
Zeno Rogue 73dbccbb0e made Bringris, Nil Rider, and Relative Hell compile after changes 2024-05-24 20:57:53 +02:00
Jacob Mandelson efc2ce90e0 Make fake-mobile fail cleanly if font missing. 2024-05-16 19:33:24 -07:00
Zeno Rogue 7b3d2c2626
Merge pull request #377 from jlmjlm/prune_tab
Prune table of new land candidates.
2024-05-16 22:04:51 +02:00
Zeno Rogue 126f45a714
Merge pull request #376 from jlmjlm/nows1
Remove trailing whitespace from system.cpp
2024-05-16 21:56:25 +02:00
Jacob Mandelson 11837d9614 Check for having pruned all land candidates. 2024-05-16 12:46:06 -07:00
Zeno Rogue 64569f1818 debug removed 2024-05-16 21:42:49 +02:00
Jacob Mandelson cd2152ffad Prune table of getNewLand() candidates. 2024-05-16 12:41:19 -07:00
Zeno Rogue eee39b0340 fixed fake-mobile 2024-05-16 21:21:42 +02:00
Zeno Rogue 937c830571 fixed model orientation for spiral 2024-05-16 21:21:14 +02:00
Zeno Rogue 4ec627b1a1 fixed errors about underlying_map uninitialized 2024-05-16 21:21:14 +02:00
Zeno Rogue 1a70e54e24 hopefully fixed yet another C++20 bug 2024-05-16 21:21:13 +02:00
Zeno Rogue a70a9dc663 fixed a bug causing not compiling in C++20 2024-05-16 21:21:13 +02:00
Zeno Rogue 879549ca5d fixed 'race angle' setting: no crash, rotates immediately 2024-05-16 21:21:13 +02:00
Zeno Rogue 7982ea0e58 Removed references to private/daily.cpp and private/hypersteam.cpp. Also removed HAVE_ACHIEVEMENTS as it was redundant to CAP_ACHIEVE 2024-05-16 21:21:13 +02:00
Zeno Rogue 7b99248c06
Merge pull request #374 from jlmjlm/time2
Fix minor menu glitches.
2024-05-16 20:28:22 +02:00
Zeno Rogue dc136cc937
Merge pull request #375 from jlmjlm/time5
Make option to show turns on the main screen.
2024-05-16 20:27:16 +02:00
Jacob Mandelson 3f78c11e6c Remove trailing whitespace from system.cpp 2024-05-16 09:13:48 -07:00
Jacob Mandelson 1dd4da5135 Make option to show turns on the main screen.
"Liberal" version that shows the turncount unguarded by
nomenukey and ISMOBILE.  Hopefully this means that it'll
display properly on mobile, outside the map region's "DRAG" area.
But this display mode is only used by the mobile builds which I
don't have toolchains for, so can't test it.  :(
2024-05-16 08:31:45 -07:00
Jacob Mandelson 601274e67a Fix minor menu glitches.
Currently, if CAP_TOUR is not set then "(v) menu" is displayed
unconditionally, because the "else" statement which suppresses its
display when nomenukey is set is guarded by CAP_TOUR.  That "else"
statement is moved outside the guard.

Currently, the "timeline" -- containing the elapsed time, turn count,
and YASC code -- is not displayed if cheats are active, because it's
replaced by a cheats count line.  Since these lines don't conflict
and the timeline contains useful information, changed to display both.
2024-05-16 07:12:28 -07:00
Zeno Rogue 7581ba887b 13.0i 2024-05-10 20:40:54 +02:00
Zeno Rogue 6b03aca3c0 threecolor now uses its own ctab, not nestcolors 2024-05-10 19:34:01 +02:00
Zeno Rogue 80df589bd2 reverted numlock on MAC 2024-05-10 19:29:14 +02:00
Zeno Rogue 159b47e72a full_rotate_camera no longer reacts to val==0 2024-05-10 19:29:01 +02:00
Zeno Rogue 9a33e63f53 unflipped mine_zero_display 2024-05-10 19:28:47 +02:00
Zeno Rogue 10184f9087 edit minefield colors in minefield config 2024-05-10 19:28:26 +02:00
Zeno Rogue 6b0dd547bd fixed rosebush/crystal world interaction 2024-05-10 19:10:44 +02:00
Zeno Rogue 542e2520c1 changed the guarding in Power landscape 2024-05-10 18:52:23 +02:00
Zeno Rogue f2d81746a7 fixed crash on adding/deleting colors to colortables 2024-05-10 18:37:05 +02:00
Zeno Rogue a130fbbc50 display Compass beason on radar 2024-05-09 21:10:53 +02:00
Zeno Rogue 2097fde609 display Orb of Yendor beacon on radar 2024-05-09 21:07:44 +02:00
Zeno Rogue bc5e1d78c9 always checkTide 2024-05-09 20:44:25 +02:00
Zeno Rogue e324ae07f3 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2024-05-09 20:42:43 +02:00
Zeno Rogue 215be1ea17
Merge pull request #372 from jlmjlm/tidefix2
Check tide before drawing cells.
2024-05-09 20:42:03 +02:00
Zeno Rogue 53461e6c5a removed yendor debug 2024-05-09 20:21:55 +02:00
Zeno Rogue 7a81b6b0de version 13.0h 2024-05-09 10:50:02 +02:00
Zeno Rogue 723422e137 disable custom_land_list in princess 2024-05-09 10:44:37 +02:00
Zeno Rogue 50881f519f do not count achievements if custom_land_list is used 2024-05-09 10:44:37 +02:00
Zeno Rogue df67249ec0 fixup to distance 534 2024-05-09 10:44:37 +02:00
Zeno Rogue 0a9714e657 cleanup of LB_ constants 2024-05-09 10:44:37 +02:00
Zeno Rogue 5eb7cfc17a LB_PRINCESS instead of magic value 36 2024-05-09 10:44:37 +02:00
Zeno Rogue 000bfd4b97 fixed a bug in celldistance_534 2024-05-09 10:44:37 +02:00
Zeno Rogue 0b0ad4abe3 made bfs in 3D always know nearby cells even if gmatrix not known 2024-05-09 10:44:37 +02:00
Zeno Rogue 305d546ae1 fixed the Yendor beacon to appear in the correct place (usually on the boundary, not the closest visible tile) 2024-05-09 10:44:37 +02:00
Zeno Rogue c369c08bc9 fixed CR3 generated in CR2 layout 2024-05-09 10:44:37 +02:00
Zeno Rogue 52f9cc820b fixed CR2 generated in CR3/CR4 layouts 2024-05-09 10:44:37 +02:00
Zeno Rogue 4c81c0cc5d fixed single wrong tile of the first land when safetying in landscape etc 2024-05-09 10:44:37 +02:00
Zeno Rogue 51ecd882e1 Orb of Summoning now works on deep water, shallow water, and Camelot moat tiles 2024-05-09 10:44:37 +02:00
Zeno Rogue 9ba9797068 fixed CLI -picload 2024-05-09 10:44:37 +02:00
Zeno Rogue ba972ea8d8 more settings for minefield graphics 2024-05-09 10:44:37 +02:00
Zeno Rogue e4b0ebbd89 removed Haunted and Elemental from the landscape mode 2024-05-09 10:44:37 +02:00
Zeno Rogue 35ddcf6fe1 stone gargoyles and statues are now non-blocking for missiles 2024-05-09 10:44:37 +02:00
Zeno Rogue 7c2aca91a4 Orb of Earth now cancels Invisibility only if it is doing something 2024-05-09 10:44:37 +02:00
Zeno Rogue 43702b82a1 clear boats from removed Orbs of Water 2024-05-09 10:44:37 +02:00
Zeno Rogue 43a3e8f030 color change in rogueviz 2024-05-09 10:44:37 +02:00
Zeno Rogue ce825db2c0 redone the canvas coloring system 2024-05-09 10:44:37 +02:00
Zeno Rogue b8a7e6e093 line patterns easier to reach 2024-05-05 17:09:34 +02:00
Zeno Rogue 962efb3152 new linepattern 'wall highlight' 2024-05-05 17:09:13 +02:00
Zeno Rogue 84666ade8c fixed a crash setting landscape_div to 0 2024-05-05 15:19:52 +02:00
Zeno Rogue 9aa15f96e1 fixed a crash with irregular spherical maps 2024-05-05 15:11:07 +02:00
Zeno Rogue bc22d17a16 fixed a possible crash with bad Steam data 2024-05-05 15:10:45 +02:00
Zeno Rogue d9a03ab1d3 renamed tehora to Tehora Rogue in credits 2024-05-05 14:59:07 +02:00
Zeno Rogue 5ae3bc02d1 rogueviz:: dhrg:: removed %Lf 2024-04-28 02:49:53 +02:00
Zeno Rogue aafced83aa rogueviz:: dhrg:: Ld to lld 2024-04-28 02:49:24 +02:00
Zeno Rogue 33aacfa289 disabled simple test 2024-04-28 02:40:43 +02:00
Zeno Rogue d074606cae rogueviz:: sag:: Ld to lld 2024-04-28 02:36:42 +02:00
Zeno Rogue 6aecf921bf rogueviz:: dhrg:: Lf to llf 2024-04-28 02:35:49 +02:00
Zeno Rogue fa99e83019 added the Discord link to README 2024-04-28 02:34:39 +02:00
Zeno Rogue 1003808999 removed badges from README 2024-04-28 02:34:32 +02:00
Zeno Rogue 5085853fb4 removed Emscripten CI 2024-04-28 02:26:24 +02:00
Zeno Rogue 9372ecb8f8 github_ci:: removed Android CI for now 2024-04-28 02:25:27 +02:00
Zeno Rogue 690b2164db github_ci: disabled macos-latest 2024-04-28 02:18:18 +02:00
Zeno Rogue 16e3daeab5 rogueviz:: dhrg:: fixed format 2024-04-28 02:16:28 +02:00
Zeno Rogue 0a16e53561 rogueviz:: fixed missing virtual destructor in model 2024-04-28 02:13:42 +02:00
Zeno Rogue 443be1acda rogueviz:: dhrg:: fixed warning on %p 2024-04-28 02:11:14 +02:00
Zeno Rogue ba9c41bed2 rogueviz:: dhrg:: fixed incorrect initialization 2024-04-28 02:10:22 +02:00
Zeno Rogue 329ad76c3c rogueviz:: dhrg:: fixed VLA 2024-04-28 02:09:19 +02:00
Zeno Rogue de20daf708 rogueviz:: undef IF_ macros 2024-04-28 02:04:40 +02:00
Zeno Rogue f229c489cd rogueviz:: antidesitter:: fixed uninitialized variable 2024-04-28 02:03:13 +02:00
Zeno Rogue 1e3347590b rogueviz:: sag:: fixed unini variable 2024-04-28 02:01:30 +02:00
Zeno Rogue fd1960191e rogueviz:: fixed pedantic error in embedded-chess 2024-04-28 01:52:20 +02:00
Zeno Rogue 942fd9dafb rogueviz::dhrg:: fixed VLA 2024-04-28 01:47:50 +02:00
Zeno Rogue f1e91a1614 rogueviz::dhr:: fixed unused result 2024-04-28 01:46:47 +02:00
Zeno Rogue e71ddf1140 rogueviz::som:: string cannot be constexpr 2024-04-28 01:46:13 +02:00
Zeno Rogue a0ba84d70c Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2024-04-28 01:41:46 +02:00
Zeno Rogue 404b964f28 fixed unused-result error 2024-04-28 01:41:25 +02:00
Jacob Mandelson b56d2d21bf Check tide before drawing cells. 2024-04-22 15:48:08 -07:00
Zeno Rogue 27fb2d92d7
Merge pull request #370 from jlmjlm/build1
Fix the build.
2024-04-22 18:44:02 +02:00
Zeno Rogue ec9be47a83
Merge pull request #371 from jlmjlm/geom_wmark
Show weapon watermark with geometric xbow.
2024-04-22 18:42:57 +02:00
Jacob Mandelson 14519dc258 Show weapon watermark with geometric xbow. 2024-04-22 09:26:29 -07:00
Jacob Mandelson c3ef9c2733 Include the GCC compiler's install too. 2024-04-20 15:29:31 -07:00
Jacob Mandelson c29517b5b0 Fix the build.
Explain how to install the required dev libraries for Windows.
Update C++ std to use from C++11 to C++14.
Put the MSYS2 SDL include dir in the include files path.
2024-04-20 15:13:01 -07:00
Zeno Rogue e91c11ffb7
Merge pull request #368 from jlmjlm/srfix3
Record asteroids_generated and asteroid_orbs_generated in the saveline.
2024-04-17 11:53:03 +02:00
Zeno Rogue 7d3d3a0869
Merge pull request #369 from Tokarak/pr-mac-build
Fix Mac Build
2024-04-17 11:51:56 +02:00
Tokarak d0d4b24f91 Update README.md with up-to-date build info 2024-04-17 10:27:02 +01:00
Tokarak 2659d08b78 Add message about using glew and libpng to Makefile 2024-04-17 10:23:40 +01:00
Tokarak 45db9977a0 Fix SDL include from sdl_gfx
Resolves #332; for MacOS only.
2024-04-17 10:16:55 +01:00
Tokarak aa78aacdf3 Update MacOS Makefile comments to match README
Also fix an unintentially modified Linux comment in parrent commit
2024-04-17 08:49:17 +01:00
Tokarak fd128d24c6 Fix MacOS-silicon compile
Use the right Homebrew prefix — not hard-coded any more.
2024-04-16 17:09:59 +01:00
Jacob Mandelson d756224f8d Record asteroids_generated and asteroid_orbs_generated in the saveline. 2024-04-13 15:43:44 -07:00
Zeno Rogue fbea2d91ce 13.0g 2024-04-09 02:52:01 +02:00
Zeno Rogue d4f449d994 since the Aether users now see adjacent items in water, they can also pick them up 2024-04-09 02:42:25 +02:00
Zeno Rogue 9807b1b3ba simplified the boat logic 2024-04-09 02:34:30 +02:00
Zeno Rogue 4d761385ac a new pseudopept pattern in Binary4 and Ternary 2024-04-08 19:14:01 +02:00
Zeno Rogue 05b6cdea3e fixed a bug ion Ternary emeraldval 2024-04-08 19:13:48 +02:00
Zeno Rogue 10646933db fixed the West Wall being not inaccessible from some lands 2024-04-08 00:58:34 +02:00
Zeno Rogue 521b452436 auto-pause game when it loses focus 2024-04-08 00:45:20 +02:00
Zeno Rogue 0323e4100e fixed the key being generated on ivy 2024-04-08 00:45:03 +02:00
Zeno Rogue 0708c0e2bc fixed a possible crash when using Orb of Space on Orb of Safety 2024-04-07 23:48:49 +02:00
Zeno Rogue b7db56812e fixed a possible freeze in Ocean in the chaos modes 2024-04-07 23:37:28 +02:00
Zeno Rogue 7fc90f116b fixed a possible crash after killing 400 mutants 2024-04-07 23:37:00 +02:00
Zeno Rogue 824fa9a732 push an exploding barrel on a mine now causes an explosion 2024-04-07 23:36:06 +02:00
Zeno Rogue 92603dddcc fixed pressing numpad keys with numpad on acting both as moves and quick-keys 2024-04-07 23:35:33 +02:00
Zeno Rogue 32d329d81e fixed a possible crash when generating YASC message 2024-04-07 23:35:08 +02:00
Zeno Rogue b9608dcd4c save the Halloween stuff 2024-04-06 18:36:14 +02:00
Zeno Rogue 977bd8ca9d ls:: cursed walls 2024-04-06 18:33:29 +02:00
Zeno Rogue 869c63cb88 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2024-04-06 11:48:06 +02:00
Zeno Rogue 5377147b1a new land structure, CR2-like 2024-04-06 11:45:51 +02:00
Zeno Rogue e83d38e267 new land structure: excessive crossing walls 2024-04-06 10:36:51 +02:00
Zeno Rogue 1fc02631c8 fixed CR4 still appearing in 'landscape' land structure, and when disabled via custom land list 2024-04-06 09:50:41 +02:00
Zeno Rogue edff317759
Merge pull request #367 from jlmjlm/srfix2
Record fuel collected and space rocks killed.
2024-03-28 17:47:58 +01:00
Jacob Mandelson b8de8155da Record fuel collected and space rocks killed. 2024-03-27 21:07:20 -07:00
Zeno Rogue 9bc4e21f10 13.0f 2024-03-27 23:52:22 +01:00
Zeno Rogue a328568ee5 new messages on Orb of Phasing, Slaying, and Weakness 2024-03-27 23:52:22 +01:00
Zeno Rogue 494fc4ec11 more accurate messages on dice pushing 2024-03-27 23:52:22 +01:00
Zeno Rogue 6f7e5b4d6a load_mode_data error checking 2024-03-27 23:52:22 +01:00
Zeno Rogue ccea416237 when loading save, load full mode data including custom lands 2024-03-27 23:52:22 +01:00
Zeno Rogue 4a908273d0 irregular maps no longer save a different modeline every time due to floating point precision 2024-03-27 23:52:22 +01:00
Zeno Rogue 5efacd787d save_cheats option, also fixed buffer overflow 2024-03-27 23:52:22 +01:00
Zeno Rogue b07987b2f4 removed debug displayed by irregular 2024-03-27 23:52:22 +01:00
Zeno Rogue 84ada5184f Space Rock monsters now drop treasure only if in Space Rock land 2024-03-27 23:52:22 +01:00
Zeno Rogue 14b68f0b64 ineligible starting land also if land is not in game 2024-03-27 23:52:22 +01:00
Zeno Rogue 960485ec8e autocheat now circumvents the lock on the Princess Challenge 2024-03-27 23:52:22 +01:00
Zeno Rogue e032e619c0 do not crash if no New Sealand is available 2024-03-27 23:52:22 +01:00
Zeno Rogue 57f6fb5f71 in countHyperstones, two variants of Mirror are counted once 2024-03-27 23:52:22 +01:00
Zeno Rogue d2cd6fa2c1 Princess Quest now marked as 'ingame' when in Princess Challenge 2024-03-27 23:52:22 +01:00
Zeno Rogue 8a407f4505 specially generated lands now respect Unlocked and LandIngame rules 2024-03-27 23:52:22 +01:00
Zeno Rogue 6abb82174e fixed some more crashes related to SDL2 (e.g., right-click in shmup) 2024-03-27 16:28:37 +01:00
Zeno Rogue dea9fea67f mention custom mode in watermark 2024-03-24 21:41:52 +01:00
Zeno Rogue d618b10889 fixed crashes in 'shift to target' option 2024-03-24 21:22:58 +01:00
Zeno Rogue d250abf1a4 added Pasu4 to the credits 2024-03-24 20:43:46 +01:00
Zeno Rogue 89563ebde9 in 3D, rosebushes now blink if they are close to going off 2024-03-24 20:03:02 +01:00
Zeno Rogue 445c240c79 rosebushes now show up on the radar 2024-03-24 20:02:31 +01:00
Zeno Rogue 15b711e099 if you are in water (and have no Fish), you can now see Orbs of Fish and Aether in adjacent water tiles, and also you can move there and pick them up 2024-03-24 19:29:44 +01:00
Zeno Rogue 8002f42d71 added AntiRogue to knight names 2024-03-24 19:28:02 +01:00
Zeno Rogue 79f2940683 crossbow bolt now ignore rose restrictions on attack 2024-03-24 19:12:42 +01:00
Zeno Rogue 0ec4e46bf0 SDL2 bugfix to shmup and game_keys_scroll 2024-03-24 13:15:58 +01:00
Zeno Rogue c55550de57 13.0d 2024-03-24 12:18:40 +01:00
Zeno Rogue 886a7ff43e fixed on older compiler 2024-03-24 11:36:22 +01:00
Zeno Rogue deb207e4c3 load_mode_data now resets creature scale in shmup 2024-03-24 11:15:33 +01:00
Zeno Rogue 819d815d59 mode now includes specialland, creature_scale and global_boundary_ratio parameters 2024-03-24 11:15:13 +01:00
Zeno Rogue b20288557e specialland now has param 2024-03-24 11:14:49 +01:00
Zeno Rogue 4a8eb08340 fixed face_the_player in VR 2024-03-24 11:14:28 +01:00
Zeno Rogue 007a111eab compass/Yendor targets now should be displayed in VR 2024-03-24 11:14:05 +01:00
Zeno Rogue 65e9f68bc7 disable achievements on custom land list 2024-03-24 00:56:15 +01:00
Zeno Rogue 3e30a7ded1 test command in custom land list 2024-03-24 00:51:20 +01:00
Zeno Rogue 5f8d250940 refactored gen_landvisited 2024-03-24 00:51:00 +01:00
Zeno Rogue dee90f8d7c creature_scale saved to modedata 2024-03-24 00:41:36 +01:00
Zeno Rogue d43b19625e scale now always can be changed, but cheater flag is set in shmup 2024-03-24 00:39:02 +01:00
Zeno Rogue f32a2708b4 do not call auto_creator when loading valid irregular save 2024-03-24 00:30:50 +01:00
Zeno Rogue be27fc0fce protect save_map_bin and load_map_bin from possible lacking base 2024-03-24 00:30:04 +01:00
Zeno Rogue 61720cec5e nicer plain floorshapes in IRREGULAR maps 2024-03-24 00:29:45 +01:00
Zeno Rogue 7cf1643c5d ls:: removed debug from landscape 2024-03-23 23:48:48 +01:00
Zeno Rogue 3791daf9e3 map editor now can save irregular maps (also should save modes too) 2024-03-23 21:21:16 +01:00
Zeno Rogue e9941d29d3 hstream_exception now can contain explanation 2024-03-23 21:19:04 +01:00
Zeno Rogue afd4a3f4e3 custom mode manager and custom welcome messages 2024-03-22 01:22:34 +01:00
Zeno Rogue 66a79fe2cd ls:: no 'better_mirror' in Patched Chaos, Total Chaos, or Landscape 2024-03-21 22:51:13 +01:00
Zeno Rogue 350963852c landscape structure is now based on BCC honeycomb 2024-03-21 22:50:42 +01:00
Zeno Rogue a650fe7faf YASC codes work better if killed on a 10+ tile 2024-03-21 22:49:50 +01:00
Zeno Rogue fdf83820f2 ls:: landscape land structure 2024-03-21 20:15:45 +01:00
Zeno Rogue 6b723977dd in grid mode, don't try to draw greatwall lines outside of normal geometry pure/bitruncated 2024-03-21 19:40:07 +01:00
Zeno Rogue 1b3aecc10c better pseudohept in INVERSE tilings 2024-03-21 19:35:22 +01:00
Zeno Rogue e762da439c fixed the lack of non-trapdoors in Zebra 435 2024-03-21 19:17:12 +01:00
Zeno Rogue 7f023b2459 better Emerald in Octagon chamfered 2024-03-21 19:13:05 +01:00
Zeno Rogue 2a9ae3071d fixed Emerald Mine and Vineyard generating very bad in {n,oo} and binary tiling 2024-03-21 19:07:15 +01:00
Zeno Rogue de21375f40 clear more walls when generating Wild West in high GP 2024-03-21 18:56:12 +01:00
Zeno Rogue 7bc2715a43 debug_voronoi works in horo too 2024-03-21 18:44:28 +01:00
Zeno Rogue 04c15fc9c6 mapfontscale setting 2024-03-21 18:44:19 +01:00
Zeno Rogue 9430c26970 fixed a crash when running away from Clearing in single-land mode. 2024-03-21 18:19:28 +01:00
Zeno Rogue 616607dc8e hv:: fixed troll nests 2024-03-19 19:58:45 +01:00
Zeno Rogue 86f5a040c9 fixed dice hints over different heights 2024-03-19 19:36:28 +01:00
Zeno Rogue 37b498203c item movement animations for Orb of Space and Curse of Repulsion 2024-03-19 19:25:08 +01:00
Zeno Rogue 77a4bb4160 items moved by Orb of Water, Magnetism, and Winter are now animated 2024-03-19 19:19:23 +01:00
Zeno Rogue 5bdade94b6 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2024-03-19 18:54:04 +01:00
Zeno Rogue 0b526cbdfb rulegen:: no crash if no giver 2024-03-19 18:53:37 +01:00
Zeno Rogue a82d9b2266 rulegen:: optimize in 2D, also debug information during optimize is toggleable 2024-03-19 18:53:09 +01:00
Zeno Rogue 0e018df878 Void Beasts are now pulled by Orb of Air 2024-03-19 18:52:16 +01:00
Zeno Rogue 1c5709a3c9 slight change to Charged/Grounded wall temperature 2024-03-19 18:50:52 +01:00
Zeno Rogue c230e03a0a trees etc are now mentioned as blockers in YASC messages 2024-03-19 18:39:09 +01:00
Zeno Rogue b71cd1e44d
Merge pull request #365 from jlmjlm/ec-elec
Change some walls' electrical properties.
2024-03-14 20:41:21 +01:00
Zeno Rogue ef936d7b0e Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2024-03-14 20:39:34 +01:00
Zeno Rogue 97f8c5ed72 CA does not count for hyperstones 2024-03-14 20:27:01 +01:00
Zeno Rogue 94bf06f7dc custom:: disable/enable all option, and don't srestart the game when customizing 2024-03-14 20:20:33 +01:00
Zeno Rogue 261800d765 Cellular Automaton now works when enabled in land_list 2024-03-14 20:20:01 +01:00
Zeno Rogue 2b2cc4e8a9 in getNewLand, do not freeze if no land is valid 2024-03-14 20:19:27 +01:00
Zeno Rogue cbccf4936d Asteroids now has some gameplay in non-shmup 2024-03-14 19:52:22 +01:00
Zeno Rogue 68f5ad6e92 custom: Wild West now enablable 2024-03-14 19:38:26 +01:00
Zeno Rogue 9f44f98b0a fixup to Halloween 2024-03-14 19:37:24 +01:00
Zeno Rogue 5bb4b69c23 fixup to Halloween 2024-03-14 19:36:21 +01:00
Zeno Rogue 9cc370a2d2 enabling Halloween in infinite geometries now produces something that makes sense 2024-03-14 19:34:51 +01:00
Zeno Rogue 26e61783b2 in getNewLand, both laMirrorOld and laMirror are now options, so both are supported in custom land list 2024-03-14 19:31:19 +01:00
Zeno Rogue d0d354b53a removed debug from intra 2024-03-14 19:29:36 +01:00
Zeno Rogue 78a1615c6c nicer boundaries used for archimedean 2024-03-14 19:29:10 +01:00
Zeno Rogue 125b271889 hooks for do_draw 2024-03-14 19:28:44 +01:00
Zeno Rogue c85b4d2f2b save/load mode data, via CLI 2024-03-14 19:28:33 +01:00
Zeno Rogue 424186b10d horodisk_from and randomwalk_size saved to save_mode_data 2024-03-14 19:27:50 +01:00
Zeno Rogue 4421143ae5 customize land mode 2024-03-14 19:27:08 +01:00
Jacob Mandelson ee293310b6 Consider red rock & rubble to electrically insulate. 2024-03-11 18:41:41 -07:00
Jacob Mandelson a40e72f1d8 Mark trees as grounded walls. 2024-03-11 18:41:33 -07:00
Jacob Mandelson 3bd67f466a Remove trees and red rock from conductive walls. 2024-03-11 18:41:26 -07:00
Zeno Rogue ddb9fbd58e
Merge pull request #363 from jlmjlm/save-xbow-reload
Record the ranged weapons' state in the savefile
2024-02-28 15:25:35 +01:00
Zeno Rogue b152bac377
Merge pull request #362 from jlmjlm/save_fa-so-fg
Track more missing game state in saves.
2024-02-28 15:25:26 +01:00
Jacob Mandelson a626ede2bf Record the amount of revolver ammunition in save file. 2024-02-27 21:31:57 -08:00
Jacob Mandelson 1f2692a4fb Record crossbow reload time in savefile. 2024-02-26 17:18:57 -08:00
Jacob Mandelson e31c9dc263 Record moFriendlyGhost kills in savefile. 2024-02-24 16:36:48 -08:00
Jacob Mandelson 7d04b0c717 Record snake oil in savefile. 2024-02-24 16:36:40 -08:00
Jacob Mandelson 0f84812d15 Track fatigue across save/load. 2024-02-24 16:36:33 -08:00
Jacob Mandelson 80f90dec52 Remove spurious semicolon. 2024-02-24 16:36:16 -08:00
Zeno Rogue e840e39ba0 13.0c 2024-02-24 09:56:30 +01:00
Zeno Rogue fa9c2da41d fixed tide/lava help counters 2024-02-24 09:53:31 +01:00
Zeno Rogue f291bbb1d1 fixed a bug with rusalka-cursing the first tile when you shoot 2024-02-24 09:47:53 +01:00
Zeno Rogue 2de61962f9 special YASC message for pinches 2024-02-24 03:19:38 +01:00
Zeno Rogue 43fc692b47 in YASC messages, 'on the Round Table' replaced by 'being polite' 2024-02-24 03:13:48 +01:00
Zeno Rogue 87ac19febe in YASC messages, mention the knights blocking the way, and also mention their names 2024-02-24 03:13:15 +01:00
Zeno Rogue 2379228ab4 display yasc message in gameover 2024-02-24 03:00:42 +01:00
Zeno Rogue 5aac5fd2a3 missing override added 2024-02-23 01:38:32 +01:00
Zeno Rogue 46eaee44ef 13.0b 2024-02-23 01:35:48 +01:00
Zeno Rogue 21d3f8bec4 IFINGAME is now undefined 2024-02-23 01:35:35 +01:00
Zeno Rogue c2d06dc05b missed offside parameters 2024-02-23 01:35:17 +01:00
Zeno Rogue 21a782cd28 improved in/on messages, also for Brownian III 2024-02-23 01:22:30 +01:00
Zeno Rogue bf512e39ce YASC messages in shmup 2024-02-23 01:09:22 +01:00
Zeno Rogue de5ddc3034 YASC messages in hardcore mode 2024-02-23 00:48:17 +01:00
Zeno Rogue b4b00baa5e apply_chaos removed baby tortoise move since we are using moveItem 2024-02-23 00:40:13 +01:00
Zeno Rogue 648dd67dc7 fixed Curse of Repulsion to use moveItem 2024-02-23 00:39:48 +01:00
Zeno Rogue 30f6fbc16c added A human to credits 2024-02-23 00:39:27 +01:00
Zeno Rogue 00b5fe3a22 save the YASC messages in save file, and display them in score list; also auto-width and zoom 2024-02-23 00:39:12 +01:00
Zeno Rogue 55493cc364 shmup:: boat can go thru non-adjacent using Orb of Warp 2024-02-23 00:37:41 +01:00
Zeno Rogue 3b1918535f fixed Orb of Chaos not calling moveItem 2024-02-22 21:08:39 +01:00
Zeno Rogue 650108bad3 gp:: goldberg x/y limit is now based on what the engine allows 2024-02-22 20:42:17 +01:00
Zeno Rogue 79e74e8d53 gp:: 'dual of current' no longer can circumvent the limits 2024-02-22 20:41:54 +01:00
Zeno Rogue 3ed43b8c7d fixed a freeze when computing distance in INVERSE 2024-02-22 20:30:35 +01:00
Zeno Rogue 5508fb7183 fixed sizes_known returning true incorrectly in INVERSE 2024-02-22 20:30:06 +01:00
Zeno Rogue 6c682510bc fixed the Yard bug 2024-02-22 20:21:08 +01:00
Zeno Rogue 6d9f7e791b Trollheim does not generate adjacent non-unlocked troll lands 2024-02-22 18:59:08 +01:00
Zeno Rogue e343ed9c3f alternative land unlock rules when monster/item requested is not available due to geometry etc 2024-02-22 18:57:41 +01:00
Zeno Rogue 8af2a43f5e fixed a crash with too large band 2024-02-22 18:41:52 +01:00
Zeno Rogue e33f26d51f opening inventory mode when you can just shoot should be fixed 2024-02-22 18:16:27 +01:00
Zeno Rogue 60980bcb8b bow:: rusalka curses now work 2024-02-22 18:11:12 +01:00
Zeno Rogue bcc026173e fixed tricking Pikemen with a bow 2024-02-22 18:03:50 +01:00
Zeno Rogue d86f70886d bow:: while rosed, you can now only shoot when this kills a monster at point blank in the rose direction 2024-02-22 17:49:45 +01:00
Zeno Rogue 2a7e2e96ca fixed crashes when e.g. entering 'ma' as a value 2024-02-22 17:29:58 +01:00
Zeno Rogue a91f74c86c fixed a crash bug when editing custom_settings 2024-02-22 17:21:57 +01:00
Zeno Rogue 285c71e10f yasc messages 2024-02-22 17:12:49 +01:00
Zeno Rogue a28c62416f restarting a race now resets pause counter 2024-02-22 16:47:20 +01:00
Zeno Rogue bfd1945d7b classified kills[moNone] 2024-02-22 12:33:49 +01:00
Zeno Rogue f271ba6b4d Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2024-02-22 12:30:33 +01:00
Zeno Rogue f87a7c5f1c
Merge pull request #361 from jlmjlm/save-wtkill
Record World Turtle kills.
2024-02-22 12:30:13 +01:00
Zeno Rogue 9ce5c63708 new projection: polar coordinates 2024-02-22 01:16:43 +01:00
Jacob Mandelson 56c8838101 Record World Turtle kills. 2024-02-21 11:23:08 -08:00
Zeno Rogue 9a590ecc42 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2024-02-21 10:25:29 +01:00
Zeno Rogue eb1488b24f rogueviz:: updated reverb to compile 2024-02-21 10:24:46 +01:00
Zeno Rogue 26328f5493
Merge pull request #359 from jlmjlm/tidefix1
Calculate tidalsize before using it in mouseovers.
2024-02-19 14:22:49 +01:00
Zeno Rogue 52081a916a
Merge pull request #360 from jlmjlm/oofishfix
Record Orb of Fish in savefile.
2024-02-19 14:22:00 +01:00
Jacob Mandelson 08a774dfd4 Record Orb of Fish in savefile. 2024-02-17 20:50:10 -08:00
Jacob Mandelson acd88377a9 Calculate tidalsize before using it in mouseovers.
This way the game doesn't immediately crash when restoring a save
in tidal areas.
2024-02-14 11:13:16 -08:00
Zeno Rogue 51f59cc2fa version 13.0a 2024-01-13 09:03:12 +01:00
Zeno Rogue 5f552799e5 added fisheye_alpha to hyper.h 2024-01-13 09:02:57 +01:00
Zeno Rogue f883322ecd new Princess message 2024-01-13 08:56:41 +01:00
Zeno Rogue 8c06e184c8 added a message for not caring about roses 2024-01-11 17:51:18 +01:00
Zeno Rogue b8a5c7528b crossbow leaderboards should be fixed 2024-01-11 17:26:45 +01:00
Zeno Rogue 11aa7d5216 fixed button placement on Android once more 2024-01-11 17:23:01 +01:00
Zeno Rogue 0ea461fa7e fixed constant name 2024-01-11 17:22:20 +01:00
Zeno Rogue bdd2b5e9fd bow:: fixed mirrors in fire mode 2024-01-11 17:01:46 +01:00
Zeno Rogue 8ce805372d savemem:: larger allh array 2024-01-11 15:23:18 +01:00
Zeno Rogue 072041db06 savemem:: make sure it is not the same altmap 2024-01-11 15:23:05 +01:00
Zeno Rogue 4c6c44cc26 variant fisheye projection 2024-01-07 12:52:50 +01:00
Zeno Rogue 31471fc6c5 The bump_to_shoot flag now actually works 2024-01-07 12:52:11 +01:00
Zeno Rogue 7ad46d8e80 fixed tides in shmup and when scrolling 2024-01-07 09:33:29 +01:00
Zeno Rogue 34ab44d1e1 dipping rule no longer affects Tiger's Eyes 2024-01-07 09:23:14 +01:00
Zeno Rogue 66a3a3df6c screenshots centered 2024-01-07 09:13:44 +01:00
Zeno Rogue 0c34e9fd34 'cylidrical' stereo mode 2024-01-07 09:13:31 +01:00
Zeno Rogue cb8a3f5424 fixed changing the high-FOV mode to reset shaders 2024-01-07 09:09:18 +01:00
Zeno Rogue fc808d448b fixed FOV menu to automatically change its upper bound on high-fov modes 2024-01-07 09:08:44 +01:00
Zeno Rogue 7ad955dcff fixed two-eye rendering in stereo modes which should not cause that 2024-01-07 09:07:54 +01:00
Zeno Rogue 17b84bb4fb hyperroid updated to 13.0 2023-12-30 08:27:47 +01:00
Zeno Rogue 902986d473 vertical sliders work on Android 2023-12-30 08:10:52 +01:00
Zeno Rogue 9bc978ce16 added some CAP_ guards so Android compiles 2023-12-30 08:10:34 +01:00
Zeno Rogue 6f81743488 Android:: prevent android buttons from being too close from the center 2023-12-30 08:10:07 +01:00
Zeno Rogue f4607b63f4 moved game_keys_scroll so that it exists on Android 2023-12-30 08:08:33 +01:00
Zeno Rogue 6e3be8a92c version 13.0 2023-12-27 17:45:09 +01:00
Zeno Rogue 02efdec4b7 export daily::historical 2023-12-27 16:32:47 +01:00
Zeno Rogue 18247ec98f rogueviz:: made gobot compile without video 2023-12-27 16:32:36 +01:00
Zeno Rogue eb4b7177f3 rogueviz:: extra projection 2023-12-27 16:28:08 +01:00
Zeno Rogue 517f4af193 small fixes to gentrans 2023-12-27 16:27:05 +01:00
Zeno Rogue 2f1bb092b8 rogueviz:: list of portal scenes in portal collection 2023-12-27 16:25:33 +01:00
Zeno Rogue ffda562f7c geom3:: fixed Sol, NIH and SolN embeddings being always displayed as legal 2023-12-27 10:58:55 +01:00
Zeno Rogue c5a4cc2255 bow:: geometric crossbow can now hit monsters on the edge of vision 2023-12-27 10:50:01 +01:00
Zeno Rogue dbc51d2f94 bow:: fixed the geometric crossbow not hitting monsters inside walls 2023-12-27 10:45:24 +01:00
Zeno Rogue 3da65f4cd5 translation update: CZ 13.0 included and some fixes 2023-12-27 10:40:04 +01:00
Zeno Rogue 0c7aa7cbe3 fixed NUMLEADER in hyper.h 2023-12-27 10:23:26 +01:00
Zeno Rogue 79527688cf ls:: fixed Caribbean in ideal Voronoi 2023-12-22 11:30:09 +01:00
Zeno Rogue 364a563423 fixed the name displayed on mouseover for slime 2023-12-22 01:14:41 +01:00
Zeno Rogue a6b30fa564 fixed checkmove giving wrong answer when bow::fire_mode is active 2023-12-22 01:07:12 +01:00
Zeno Rogue eb3406d7dc fixed the bug where tides may move on orb use 2023-12-22 00:51:07 +01:00
Zeno Rogue 95ed035180 fixed typo in PL translation 2023-12-22 00:28:29 +01:00
Zeno Rogue 3d01ce808f bow:: disabled blade-only achievements 2023-12-22 00:28:11 +01:00
Zeno Rogue 558b8d7aff crossbow achievements 2023-12-21 19:51:05 +01:00
Zeno Rogue 0de012923a pressing ESC key while in fire mode now disables the fire mode 2023-12-21 19:50:01 +01:00
Zeno Rogue 7a352ccf43 in eligibility, mark that leaderboards are separate 2023-12-17 22:03:35 +01:00
Zeno Rogue 98831aff7e
Merge pull request #353 from jlmjlm/fproof_key
Make the Key fireproof.
2023-12-17 17:58:50 +01:00
Zeno Rogue 17c254e2b4
Merge pull request #352 from jlmjlm/gal21b
Make tortoise if first 21/21 tile created in > 100 turns.
2023-12-17 17:58:10 +01:00
Zeno Rogue 4fbce2ae5a a debug function added 2023-12-17 17:47:05 +01:00
Zeno Rogue cdc1696929 fixed the drawing of half-vines and mirror walls in spatial 2023-12-17 17:46:46 +01:00
Zeno Rogue 2fc42cb114 ls:: in Voronoi, made Rlyeh and Temple appear, and Haunted and Free Fall are now unavailable 2023-12-17 17:43:59 +01:00
Zeno Rogue 73884482aa using -lands option no longer enforces cheat mode 2023-12-17 17:42:47 +01:00
Zeno Rogue 8c57e8b746 in achievement eligiblity, a message if not in this version 2023-12-17 17:42:28 +01:00
Zeno Rogue f5c5a5f876 ls:: better land compatibility in Voronoi 2023-12-17 17:42:03 +01:00
Jacob Mandelson 12c464eb99 Make the Key fireproof. 2023-12-16 18:31:12 -08:00
Zeno Rogue 8e31c51bc9 achievement eligiblity added to translation 2023-12-15 11:04:47 +01:00
Zeno Rogue 71cbc8e221 achievement eligibility display 2023-12-15 11:00:41 +01:00
Zeno Rogue bce07e5914 hv:: fixed CR2 2023-12-15 11:00:41 +01:00
Zeno Rogue ed8b7d5d1d ls:: fixed Land of Storms in Horodisk and Voronoi 2023-12-15 11:00:41 +01:00
Zeno Rogue 5c24213092 fixed restoring golems in casual 2023-12-15 11:00:41 +01:00
Zeno Rogue a282ac314e shmup:: crossbow bolts now pierce multi-tile monsters 2023-12-15 11:00:41 +01:00
Zeno Rogue 5ab9bf8f11 shmup:: disabled fire-on-mouse 2023-12-15 11:00:41 +01:00
Zeno Rogue 61303fcab6 remove crossbow paths on orb use 2023-12-15 11:00:41 +01:00
Zeno Rogue 517f4a833c changelog/version number update to 12.1z was missing 2023-12-15 11:00:41 +01:00
Jacob Mandelson 27db11064c Make tortoise if first 21/21 tile created in > 100 turns. 2023-12-12 11:53:14 -08:00
Zeno Rogue 062fb577b2 fixed a bug with clicking lists in some dialogs 2023-12-12 20:09:19 +01:00
Zeno Rogue 4338ec2b43 racing:: exception on reading bad ghostmoments 2023-12-12 20:03:59 +01:00
Zeno Rogue cd7af38e2e fixed loading pre-bow character styles (fixes crashes on loading races) 2023-12-12 20:03:42 +01:00
Zeno Rogue 24c196db15 limit setland errors 2023-12-12 20:02:53 +01:00
Zeno Rogue 548e2609ce geom3:: fixed a bug with embedded maps being destroyed on restart 2023-12-12 19:18:26 +01:00
Zeno Rogue d2d6167eb9 updated Polish translation to 13.0 2023-12-03 14:50:06 +01:00
Zeno Rogue 86402cf979 fixup to honeycomb 2023-12-03 14:48:10 +01:00
Zeno Rogue 38825f3a31 added missing honeycombs to translations 2023-12-03 14:30:54 +01:00
Zeno Rogue 560cc91e95 fixed a translation bug with infinite squares 2023-12-03 14:30:08 +01:00
Zeno Rogue ffc06b981f used the same string in some places for easier translation 2023-12-03 14:29:50 +01:00
Zeno Rogue 0cdd6f8d5d hyperweb:: use XLAT1 not XLAT 2023-12-03 14:29:26 +01:00
Zeno Rogue c63969a21b fix typo 2023-12-03 14:29:08 +01:00
Zeno Rogue 7802194248 deconfused translation checker 2023-12-03 14:29:02 +01:00
Zeno Rogue a79a7f63a1 added XLAT in some places where it was missing 2023-12-03 14:28:30 +01:00
Zeno Rogue 928ab73fff menu_item_name_modified to help with translation 2023-12-03 14:10:03 +01:00
Zeno Rogue ac33354358 bow:: fix shooting bolts in blade mode 2023-12-02 21:10:11 +01:00
Zeno Rogue 39ddc3dc33 fix compile bug 2023-12-02 19:34:06 +01:00
Zeno Rogue 68a3d20d83 rug mouseover:: fix incorrect points in perspective; fix points behind eye in perspective; fix reverse Z in non-perspective (VR presumed fine) 2023-12-02 12:27:04 +01:00
Zeno Rogue 6ef4a8a5e9 draw:: fixed drawing mode on quotient spaces 2023-12-02 12:07:23 +01:00
Zeno Rogue 16cb1090e8 reduced CR3 land requirement to 20 in casual 2023-12-02 11:34:51 +01:00
Zeno Rogue 176ea28a24 bow:: mouse_fire_mode 2023-12-02 11:30:51 +01:00
Zeno Rogue 9bebbd8f4e clarified that only direct melee attacks trigger Storms/Flash 2023-12-02 11:05:28 +01:00
Zeno Rogue 4ca8a7e394 the unarmed Princess is now able to use Empathy+Thorns and Empathy+Horns 2023-12-02 11:04:47 +01:00
Zeno Rogue 8946317475 bow:: press 'f' + direction for auto fire at distant enemies in the given direction 2023-12-02 10:37:07 +01:00
Zeno Rogue 9ca0993d6f bulls are now enraged by crossbow shots 2023-12-02 09:32:50 +01:00
Zeno Rogue 2a892012b2 bow:: The warped space distracts you from reloading while staying in place 2023-12-02 09:32:34 +01:00
Zeno Rogue 53b0701d95 ratlings no longer react to useless shoots 2023-12-02 08:47:11 +01:00
Zeno Rogue 439040c90c bow:: bolts do not go through Warped 2023-12-02 08:46:31 +01:00
Zeno Rogue a840b96104 fixed VR demos 2023-12-02 08:27:38 +01:00
Zeno Rogue fe7e122613 ray:: improved ODS 2023-11-30 12:38:30 +01:00
Zeno Rogue 2dccf0d3ab reg3:: fix_stretch now can be disabled to make older recordings work 2023-11-30 12:35:06 +01:00
Zeno Rogue c69bed4d12 intra:: cleaner scale changing 2023-11-30 12:34:41 +01:00
Zeno Rogue c94e927929 intra:: in screenshot, do not call twice 2023-11-30 12:33:49 +01:00
Zeno Rogue 2dd4ef868b export record_frame_id 2023-11-30 12:32:50 +01:00
Zeno Rogue 34d3d67ace cleaned up stereo/high-FOV projections 2023-11-30 12:32:24 +01:00
Zeno Rogue 2add515fbf config:: add_edit accepts key parameter 2023-11-30 12:25:13 +01:00
Zeno Rogue 79165ae014 intra:: fixed product spaces 2023-11-23 22:11:15 +01:00
Zeno Rogue 9d4d085973 equirectangular projection in raycasting 2023-11-23 22:10:59 +01:00
Zeno Rogue 45a9e0c85a 12.1y 2023-10-29 11:05:21 +01:00
Zeno Rogue c336e9d385 crossbow:: geometric lines option 2023-10-29 11:02:58 +01:00
Zeno Rogue 8984cd8cd2 list settings may now be configured to need confirmation to change 2023-10-29 11:00:19 +01:00
Zeno Rogue f76ccef90f clear bow memory 2023-10-29 10:14:18 +01:00
Zeno Rogue 858db697d8 crossbow:: no time passes when shooting while unstable 2023-10-29 10:13:00 +01:00
Zeno Rogue 8185657768 crossbow:: fixed Z-fighting and arrow paths not visible in FPP 2023-10-29 09:57:19 +01:00
Zeno Rogue 0c6d286fa8 crossbow:: shrubs are no longer blocking 2023-10-29 09:23:57 +01:00
Zeno Rogue 76c6195d19 fixed fire_mode not disabling correctly 2023-10-29 09:22:40 +01:00
Zeno Rogue 95dc72a582 mirror:: fixed a but with target_at not cleared 2023-10-29 09:22:11 +01:00
Zeno Rogue c91dc341ae crossbow:: no more mimics attacking in melee, or swinging at mirrors 2023-10-29 09:21:49 +01:00
Zeno Rogue b84e751d96 crossbow:: crossbow moves are no longer considered valid moves for the checkmate rule when the crossbow is not loaded 2023-10-29 08:19:40 +01:00
Zeno Rogue ed9081cfd5 fixup 2023-10-29 08:06:26 +01:00
Zeno Rogue da0bf9a035 crossbow:: changed peek to cpeek just in case 2023-10-29 08:01:43 +01:00
Zeno Rogue 6030402441 crossbow:: changed start message 2023-10-29 08:00:27 +01:00
Zeno Rogue 4b97f300ff crossbow:: in fire mode, no longer display ranged orb icons on mousing 2023-10-29 08:00:19 +01:00
Zeno Rogue 0c0bf1dd84 crossbow:: reverse shoot order 2023-10-29 07:59:44 +01:00
Zeno Rogue 1926fd8434 crossbow:: improved texts 2023-10-29 07:59:19 +01:00
Zeno Rogue 6b8adfde9e crossbow:: fire_mode can now be enabled even while reloading 2023-10-29 07:58:55 +01:00
Zeno Rogue 85fc2773b1 clarify Water Elemental special case 2023-10-29 07:58:00 +01:00
Zeno Rogue 669814efce ambush:: nicer guard_attack message 2023-10-29 07:57:20 +01:00
Zeno Rogue 1f6bee5701 crossbow:: piercing dragons 2023-10-29 07:57:05 +01:00
Zeno Rogue b2c8bb96d6 crossbow:: saving tortoises now possible 2023-10-29 00:06:40 +02:00
Zeno Rogue 87f7b2a593 attacking guarding dogs now wakes up all other existing guarding dogs, and causes a small ambush -- also affects shmup mode and other ranged attacks 2023-10-28 23:44:05 +02:00
Zeno Rogue f7a25ff2d1 fixed crossbow mode not changing legacy_modecode 2023-10-28 23:34:02 +02:00
Zeno Rogue a163c80ba1 crossbow:: graves and Round Table are non-blocking, thruVine is blocking 2023-10-28 23:33:38 +02:00
Zeno Rogue b3b1611f33 v12.1x 2023-10-28 10:04:15 +02:00
Zeno Rogue 89a46a8cd1 more constexpr fixes 2023-10-28 10:04:15 +02:00
Zeno Rogue a50a87f095 another constexpr changed to const in textures.cpp 2023-10-28 10:04:15 +02:00
Zeno Rogue 33060a884c array initializer did not compile on Steam 2023-10-28 10:04:15 +02:00
Zeno Rogue 9caa4daa62 crossbow flags constexpr 2023-10-28 10:04:15 +02:00
Zeno Rogue 8e55cc9ebd movei(nullptr_t) not compiling on OSX Clang 2023-10-28 09:51:27 +02:00
Zeno Rogue 4e134c56b6 crossbow:: constexpr 2023-10-28 09:51:27 +02:00
Zeno Rogue 8129cfd726 crossbow: better mimic bowpaths, mimic bowpaths colored, mimic bowpaths slay mirror spirits 2023-10-28 09:51:27 +02:00
Zeno Rogue 3645a9b85e better optimal shoot counting 2023-10-28 09:51:27 +02:00
Zeno Rogue b0d117e646 crossbow:: checkmate rule 2023-10-28 09:51:27 +02:00
Zeno Rogue 4f82c3eb8e last_bowpath changed to more efficient bowpath_map 2023-10-28 09:51:27 +02:00
Zeno Rogue c36da1985c crossbow:: peace, dual, and non-shmup multiplayer are incompatible 2023-10-28 09:51:27 +02:00
Zeno Rogue e8ecccdf53 crossbow:: explain hedgehogs better 2023-10-28 09:51:27 +02:00
Zeno Rogue 11869c796b crossbow:: disable fire_mode on move 2023-10-28 09:51:27 +02:00
Zeno Rogue a012e6103a crossbow:: do not try shooting on stay 2023-10-28 09:51:27 +02:00
Zeno Rogue ddc7cddb91 side attacks for bows 2023-10-28 09:51:27 +02:00
Zeno Rogue daebe28d4f helpful comment for mirror::mirrors 2023-10-28 09:51:27 +02:00
Zeno Rogue 3ef09bded2 crossbow:: more detailed attack 2023-10-28 09:51:27 +02:00
Zeno Rogue f99a473720 fixed some bug wiht fire mode 2023-10-28 09:51:27 +02:00
Zeno Rogue dd37a1c6c7 crossbow:: change bow color via menu 2023-10-28 09:51:27 +02:00
Zeno Rogue 41e28c34b2 crossbow:: mimics shoot too 2023-10-28 09:51:27 +02:00
Zeno Rogue 9da8206a9f crossbow:: can hit hedgehogs 2023-10-28 09:51:27 +02:00
Zeno Rogue a233d3a7a6 crossbow:: display crossbow in shmup and on mimics 2023-10-28 09:51:27 +02:00
Zeno Rogue 3a35d351c4 crossbow:: crossbow in shmup 2023-10-28 09:51:27 +02:00
Zeno Rogue 079094799d bow changes mode, disables achievements, displayed in rich presence and bottom line 2023-10-28 09:51:27 +02:00
Zeno Rogue 4ddccfed8e system:: applyBoxEnum 2023-10-28 09:51:27 +02:00
Zeno Rogue 44265f6d61 gobot:: sphere 2023-10-28 09:51:27 +02:00
Zeno Rogue ddb06573df crossbow:: weapon selection in menu 2023-10-28 09:51:27 +02:00
Zeno Rogue 1924a03d7a crossbow:: draw crossbow on PC 2023-10-28 09:51:27 +02:00
Zeno Rogue 33d48a76b3 crossbow:: crossbow icon works 2023-10-28 09:51:27 +02:00
Zeno Rogue f3398e70c3 crossbow:: draw crossbow paths 2023-10-28 09:51:27 +02:00
Zeno Rogue c81e2bf7e8 crossbow:: crossbow colors 2023-10-28 09:51:27 +02:00
Zeno Rogue e5458c5f80 crossbow:: shapes 2023-10-28 09:51:27 +02:00
Zeno Rogue e6a4d987bb first version of crossbow 2023-10-28 09:51:27 +02:00
Zeno Rogue f8fb7d5950 locations:: null movei 2023-10-28 09:51:27 +02:00
Zeno Rogue 7e46b4b5bb config:: set_value_to for enum settings 2023-10-28 09:51:27 +02:00
Zeno Rogue 845237c756
Merge pull request #343 from Quuxplusone/constexpr
Change `static const` to `static constexpr` wherever possible
2023-10-19 12:31:56 +02:00
Zeno Rogue 9f5b13dfab
Merge pull request #348 from jlmjlm/undead_frghst
Flag moFriendlyGhost as non-living.
2023-10-19 12:31:13 +02:00
Zeno Rogue 63b6576eb6
Merge pull request #349 from jlmjlm/nosemi-postfunc
Remove semicolons from after } that close functons.
2023-10-19 12:30:48 +02:00
Jacob Mandelson db72295775 Remove semicolons from after } that close functons. 2023-10-16 21:02:54 -07:00
Jacob Mandelson 36bdc5d3f0 Flag moFriendlyGhost as non-living. 2023-10-16 20:53:24 -07:00
Zeno Rogue 5fb0099fbb v12.1w 2023-10-05 14:15:01 +02:00
Zeno Rogue ff19ceb438 modelcolor taken into account in sphere mdDisk alpha <= 1 2023-10-05 13:58:13 +02:00
Zeno Rogue 99f4b8698b fixed relative_matrix_recursive in some geoms 2023-10-05 13:55:12 +02:00
Zeno Rogue 67a77befb9 Prairie fixup 2023-10-05 13:55:00 +02:00
Zeno Rogue 1c0bf5def3 ls:: Prairie in Horodisk 2023-10-05 13:53:24 +02:00
Zeno Rogue 0ab6974cd9 fixed Hives missing in Voronoi 2023-10-05 13:10:48 +02:00
Zeno Rogue fb1f3d8f13 fixed some tiles pre-marked as mines in Minefield next to Ivory Tower in Voronoi LS 2023-10-05 12:10:34 +02:00
Zeno Rogue 72029b3fbe setland_randomwalk now takes cheat dest list into account 2023-10-05 11:51:01 +02:00
Zeno Rogue c63eebc15f fixed burial mounds not appearing in chaos/h/v land structures 2023-10-05 11:48:43 +02:00
Zeno Rogue b9d8aaee13 reverted the unintentional change which caused holes to appear in the platforms on Ivory Tower 2023-10-05 11:43:02 +02:00
Zeno Rogue ef93305313 ls:: randomwalk_size parameter added 2023-09-22 12:55:17 +02:00
Zeno Rogue fb5e4d25bb ls:: horocyclic variant of Warped Coast 2023-09-22 12:50:39 +02:00
Zeno Rogue 2c171f7be4 also made laElementalWall available 2023-09-22 12:37:30 +02:00
Zeno Rogue 64a89e732f horocycle-based Elemental Plains 2023-09-22 12:36:27 +02:00
Zeno Rogue 7b3532a594 ls:: fixed dragons not appearing in hv 2023-09-22 12:18:09 +02:00
Zeno Rogue 70b7e24e96 ls:: fixed roses not appearing in horodisk 2023-09-22 12:13:22 +02:00
Zeno Rogue 9326220310 fixed some lands not appearing in horodisk (Caribbean, Kraken, Whirlpool, Rlyeh, Temple, Haunted) 2023-09-22 12:13:06 +02:00
Zeno Rogue c2f1f4371c fixed land generation becoming glitched in standard modes when Lost Mountain or Clearing becomes unlocked 2023-09-22 11:58:56 +02:00
Zeno Rogue 9e4c883001 v12.1u 2023-09-20 23:13:46 +02:00
Zeno Rogue eeb6373338 hive is valid 2023-09-19 08:00:15 +02:00
Zeno Rogue 6db4adb91c ls:: fixed hole in H/V Ivory Tower (still a hole in Dungeon but not available anyway) 2023-09-19 07:51:13 +02:00
Zeno Rogue ec4b02d754 ls:: Hive in H/V 2023-09-18 15:41:53 +02:00
Zeno Rogue d4247e7b13 ls:: (reverse) ivory tower joins the game again in H/V 2023-09-18 14:34:46 +02:00
Zeno Rogue a74cdeeacc ls:: Galapagos now works and is fun in H/V 2023-09-18 13:02:17 +02:00
Zeno Rogue 2239d72bc8 ls:: better Brown island in h/v (but still not correct so not officially in list) 2023-09-18 12:12:13 +02:00
Zeno Rogue 4d680e13c4 dice help no longer drawn in high-quality screenshots 2023-09-18 12:07:29 +02:00
Zeno Rogue 23423e4016 ls:: fixed Ocean and some other lands generating errors when restarted in Safety in h/v mode 2023-09-18 12:07:05 +02:00
Zeno Rogue 7a7af2a536 ls:: fixed Safety in Ocean/Lost Memory/Space Rocks/Eclectic destroying land generation everywhere 2023-09-18 11:26:46 +02:00
Zeno Rogue 9fbc73025e ls:: fixed the generation of various lands in horodisk/voronoi 2023-09-18 11:24:45 +02:00
Zeno Rogue 66ea0804cf ls:: more careful incompatibility handling in voronoi 2023-09-18 11:10:41 +02:00
Zeno Rogue cab3cfe2f9 ls:: fixed some land validity rules 2023-09-18 11:09:35 +02:00
Zeno Rogue f62fcc12fc ls:: horodisk mode now has a parameter controlling perfection vs density 2023-09-18 11:09:06 +02:00
Zeno Rogue 9031b32cf4 ls:: fixed Krakens not appearing in hv_structure 2023-09-18 10:58:15 +02:00
Zeno Rogue 5076343223 12.1t 2023-09-15 08:13:12 +02:00
Zeno Rogue dd5e9dbc6e ls:: fixed Camelot in horodisk_structure 2023-09-14 21:15:00 +02:00
Zeno Rogue 1d4dac0a50 fixed voronoi crash on clearmemory -- might need better fix 2023-09-14 17:46:11 +02:00
Zeno Rogue 4aa707f197 renamed horodisk_la* to hv_la* 2023-09-14 17:37:37 +02:00
Zeno Rogue 3670be5700 debug_voronoi option 2023-09-14 17:36:31 +02:00
Zeno Rogue 78b75baf3a ls:: clearmemory clears horodisk_last_land 2023-09-14 17:36:19 +02:00
Zeno Rogue b617bc12a7 hprint:: added index_pointer_int 2023-09-14 17:36:07 +02:00
Zeno Rogue 6e695b5262 ls:: in voronoi, more varied relative distances on cross 2023-09-14 17:26:08 +02:00
Zeno Rogue 2668841e5a ls:: in voronoi, eliminate bugs when new root goes through known area 2023-09-14 17:25:55 +02:00
Zeno Rogue 283fe020fc added Dylan to credits 2023-09-14 16:38:43 +02:00
Zeno Rogue e1a78fe1ac ls:: fixed weird trees in ideal Voronoi 2023-09-14 16:29:06 +02:00
Zeno Rogue f9b8551529 ls:: firstland now taken into account in Voronoi 2023-09-14 16:20:51 +02:00
Zeno Rogue 8ac3bb29ab ls:: fixed frog park in hv 2023-09-14 15:51:36 +02:00
Zeno Rogue 8568f6489c get_child, right_child, left_child 2023-09-14 15:07:13 +02:00
Zeno Rogue 49ca18aef3 more specific 'cannot load parameter' 2023-09-14 15:07:01 +02:00
Zeno Rogue 3b341bb34b better -L option 2023-09-14 15:06:49 +02:00
Zeno Rogue 77e5efa28f ideal Voronoi implemented 2023-09-14 15:06:39 +02:00
Zeno Rogue 50e5cc2c5a ls:: horodisk implemented 2023-09-14 11:41:51 +02:00
Zeno Rogue 0293680ea1 horodisk land structure 2023-09-14 11:38:39 +02:00
Zeno Rogue f3d28c9105 fixed a crash on projection changing 2023-09-14 09:49:13 +02:00
Arthur O'Dwyer 62629f3e70 Change `static const` to `static constexpr` wherever possible
Since we require C++11, most of these consts can be constexpr.

Two `static const ld` remain non-compile-time-evaluable because
they depend on the runtime `log` function. One `static const cld`
remains non-compile-time because `std::complex<T>` doesn't become
constexpr until C++14.
2023-08-23 09:47:28 -08:00
Zeno Rogue b70b339f52 removed unused variable buf2 in mobile.cpp 2023-08-22 22:38:11 +02:00
Zeno Rogue 529e27ea2f gobot:: Discord bot token set via env variable 2023-08-22 20:20:46 +02:00
Zeno Rogue c89d98e832 rogueviz::som::adjusted to the new dialog system 2023-08-22 20:12:34 +02:00
Zeno Rogue 089db20356 play this track / quit Nil Rider in Nil Rider selection 2023-08-22 20:11:46 +02:00
Zeno Rogue 572866b67a rogueviz:: rv_keep 2023-08-22 20:06:52 +02:00
Zeno Rogue b2668e4cf5 gobot:: disk-gp and bring-gp 2023-08-22 20:06:38 +02:00
Zeno Rogue 01ede9681e gobot:: lighter owner marks 2023-08-22 20:06:28 +02:00
Zeno Rogue bb22d363c8 improved dhrg::logistic 2023-08-22 20:03:17 +02:00
Zeno Rogue fd1be4beb8
Merge pull request #341 from Quuxplusone/override
Consistently apply `override` (and not `virtual`) to overriding virtuals
2023-08-22 19:56:17 +02:00
Zeno Rogue 04f31aa637
Merge pull request #340 from Quuxplusone/format-sprintf
Avoid sprintf, in favor of hr::format and snprintf
2023-08-22 19:54:52 +02:00
Arthur O'Dwyer 28880f2985 Consistently apply `override` (and not `virtual`) to overriding virtuals
Three functions were missing `override`, triggering `-Wsuggest-override` on Clang.
Many functions had redundant `virtual ... override`.
2023-08-21 10:23:48 -07:00
Arthur O'Dwyer 10d0ed8900 Eliminate calls to `sprintf`
Apple Xcode has started giving `-Wdeprecated-declarations` warnings
for `sprintf`, and suggesting that people migrate to `snprintf` instead.
This is silly, but the warnings are spam and need to be silenced
somehow. Migrating to `snprintf` and/or `hr::format` is the path of
least resistance.
2023-08-21 10:18:44 -07:00
Arthur O'Dwyer ced3bbcad4 Qualify calls to `format`
C++20 introduces `std::format` and we `using namespace std`,
so some of these would be ambiguous in C++20.
2023-08-21 10:18:44 -07:00
Zeno Rogue a250a4d430 version 12.s 2023-08-16 10:49:39 +02:00
Zeno Rogue c1584e9ece added some missing 'override' 2023-08-16 10:36:16 +02:00
Zeno Rogue e3357c9b26 added missing override in hyper_function.h 2023-08-16 10:27:27 +02:00
Zeno Rogue 29d50a9f21 fix ori() setting in multi::two_focus 2023-08-16 10:25:57 +02:00
Zeno Rogue 0b2aee0b40 fixup hyper.h was not pushed 2023-08-16 09:54:48 +02:00
Zeno Rogue 4b5a1621e8 also fixed the use normalize_flat in celldrawer 2023-08-16 09:35:38 +02:00
Zeno Rogue 6a9ed169eb fixed normalize_flat in emb_none -- this fixes centering in multiplayer 2023-08-16 09:33:25 +02:00
Zeno Rogue 838b34762e animation rug angle fixes 2023-08-15 20:35:29 +02:00
Zeno Rogue 18d042b9eb fixed a crash when changing sight range while in rug 2023-08-15 20:29:09 +02:00
Zeno Rogue 0e1d7c024e dialog:: display crosshair when changing crosshair 2023-08-15 20:28:36 +02:00
Zeno Rogue 73e98644d3 fixed crash on kill setting change 2023-08-15 20:28:06 +02:00
Zeno Rogue 9e999ef30f cell count is now displayed while editing range/detail; range is now editable in 3D even if smart range is on 2023-08-15 19:53:29 +02:00
Zeno Rogue b7f55e9f87 made -d:param display side dialog 2023-08-15 17:54:12 +02:00
Zeno Rogue 01748ac77b more elegant matrix display 2023-08-15 17:25:00 +02:00
Zeno Rogue 610d64d22a dialog:: more intuitive rotation hotkeys 2023-08-15 17:08:41 +02:00
Zeno Rogue a5ada45164 dialog:: isitem now knows diMatrixItems 2023-08-15 17:08:25 +02:00
Zeno Rogue 442a7d3c74 fixed matrix_setting::show_edit_option to display dim 2023-08-15 17:08:12 +02:00
Zeno Rogue b123900b52 fixed camera angle: aura and shader projection 2023-08-15 16:01:38 +02:00
Zeno Rogue 37d558944e fixed bandspin explorable to use band, not Joukowsky Inverted 2023-08-15 15:49:47 +02:00
Zeno Rogue 56b5d52534 start animations were too fast 2023-08-15 15:49:25 +02:00
Zeno Rogue 42c47d0388 fixed bandshift to work with mori correctly 2023-08-15 15:49:10 +02:00
Zeno Rogue 36607319fd fixed models::rotation parameter name 2023-08-15 15:45:54 +02:00
Zeno Rogue f37c4ba165 fixed band boundary 2023-08-15 15:45:43 +02:00
Zeno Rogue b9eac3f6ae fixed addInfo to addHelp in matrix_dialog 2023-08-15 15:39:00 +02:00
Zeno Rogue 933361d394 config:: list_setting::show_edit_option won't crash if value is illegal 2023-08-15 15:28:25 +02:00
Zeno Rogue 83b49caa5f fixed multiply transmatrix * trans23 2023-08-15 15:20:46 +02:00
Zeno Rogue f2f62cf296 fixed sides in Euclidean hemisphere 2023-08-15 15:20:29 +02:00
Zeno Rogue 27bedb19ed fixed a bug which caused the screen to disappear on switch-to-fpp 2023-08-15 15:19:50 +02:00
Zeno Rogue 27b572a44a fix mdBall 2023-08-15 14:39:52 +02:00
Zeno Rogue cfa01d878c draw boundary correctly in hemisphere Euclidean 2023-08-15 14:33:53 +02:00
Zeno Rogue 937da384e7 better ring drawing in hyperboloid/hemisphere 2023-08-15 14:29:42 +02:00
Zeno Rogue f3a0855df2 queuecurve_reuse 2023-08-15 14:28:38 +02:00
Zeno Rogue e22c34b343 hemisphere in spherical 2023-08-15 14:21:19 +02:00
Zeno Rogue b018582f44 fixed mdHyperboloid in spherical geometry 2023-08-15 11:00:43 +02:00
Zeno Rogue ccb5068964 fixed draw_boundary in hyperbolic geometry in mdHemisphere and mdHyperboloid 2023-08-15 10:56:39 +02:00
Zeno Rogue 63fc2c9c92 fixed get_side 2023-08-15 10:55:01 +02:00
Zeno Rogue 53324a9eeb dialog:: made editNumber return number_dialog 2023-08-15 10:54:36 +02:00
Zeno Rogue 1b76ab495e config:: added set_cld back 2023-08-15 10:54:17 +02:00
Zeno Rogue 97be7618e6 gobot:: scores on screenshot 2023-08-14 21:17:06 +02:00
Zeno Rogue 74f1a93dc3 save_geometry now saves disksize and diskshape 2023-08-14 21:10:44 +02:00
Zeno Rogue 246034f4cb gobot:: csc command 2023-08-14 20:36:09 +02:00
Zeno Rogue 260c30c218 gobot:: last move marker 2023-08-14 20:35:58 +02:00
Zeno Rogue 394f8052b4 oauto now takes shot 2023-08-14 20:24:05 +02:00
Zeno Rogue 44e9c3e317 gobot:: clear uninitialized indices on init_go_board 2023-08-14 20:23:54 +02:00
Zeno Rogue 000726f450 gobot:: call init_go_board not init_go 2023-08-14 20:15:42 +02:00
Zeno Rogue 535d86a1c8 gobot:: fix uninitialized variable 2023-08-14 20:15:31 +02:00
Zeno Rogue a70940b3ee gobot:: clear the board in init_go_board 2023-08-14 20:15:18 +02:00
Zeno Rogue 590d8021c6 rogueviz:: use_brm only for closed_manifold, not bounded 2023-08-14 20:14:17 +02:00
Zeno Rogue 07857e612a rogueviz adjusted to the changes 2023-08-14 20:13:52 +02:00
Zeno Rogue beb679ccab dual_angle now also matrix 2023-08-14 18:11:48 +02:00
Zeno Rogue 67d38feabd camera_angle now uses matrix dialog 2023-08-14 18:08:28 +02:00
Zeno Rogue 3e1228b7c7 dialog:: in 2D matrix dialog, show degree unit, and do not negate 2023-08-14 17:44:22 +02:00
Zeno Rogue dff8db44b0 rotate immediately when editing models::rotation 2023-08-14 17:42:15 +02:00
Zeno Rogue 757579fb18 matrix dialog now used for models::rotation 2023-08-14 17:02:34 +02:00
Zeno Rogue 3eb2813667 extra_options and reaction now work in matrix dialog 2023-08-14 16:59:46 +02:00
Zeno Rogue cb05649732 pconf.ball now a matrix (but not implemented draw_boundary yet) 2023-08-14 16:18:44 +02:00
Zeno Rogue 3069dbd316 moved the constructor of projection_configuration to models 2023-08-14 13:49:07 +02:00
Zeno Rogue a7cf3c4d1c renaming also applied to drawing.cpp 2023-08-14 13:28:48 +02:00
Zeno Rogue e4562be1f5 nicer edit dialog for mori 2023-08-14 11:25:29 +02:00
Zeno Rogue d9d92bfd84 scr_to_ori functions applied in shifted bands 2023-08-14 11:25:09 +02:00
Zeno Rogue b98ac1c487 models:: fix to halfplane 2023-08-14 11:24:29 +02:00
Zeno Rogue 6806a0e7e3 renamed apply_ori to more intuitive scr_to_ori, also invert the matrix 2023-08-14 11:08:37 +02:00
Zeno Rogue ea193d23b1 dialog:: made dialog matrix more intuitive for anims::movement_angle 2023-08-14 10:52:17 +02:00
Zeno Rogue 9ab2b2bbd8 dialog:: mouse control in matrix dialog 2023-08-14 04:50:13 +02:00
Zeno Rogue 3a3317d0be dialog:: fixed crash in editingDetail 2023-08-14 04:37:01 +02:00
Zeno Rogue e666faba31 dialog:: new options for matrix dialog 2023-08-14 04:36:39 +02:00
Zeno Rogue 392d3c075f dialog:: fixed 3D matrix viz 2023-08-14 04:36:23 +02:00
Zeno Rogue c9a9a38188 dialog:: cleaned string dialog 2023-08-14 04:36:14 +02:00
Zeno Rogue f50964d576 CLI option -d:param 2023-08-13 13:54:08 +02:00
Zeno Rogue 22636060dc no more pop when number dialog calls another 2023-08-13 13:45:25 +02:00
Zeno Rogue b4e280c43f modernized animation parameters 2023-08-13 13:38:36 +02:00
Zeno Rogue dc95d4c3e6 anim:: removed obsolete skiprope_rotation, joukowsky_rotation and ballangle_rotation 2023-08-13 13:37:20 +02:00
Zeno Rogue d8f64b62ac enum settings are now animatable, and option names are recognized 2023-08-13 13:34:14 +02:00
Zeno Rogue 5cc7a4e527 matrix editor and saver are now transmatrix, not trans23 2023-08-10 14:38:59 +02:00
Zeno Rogue fe6d7abec2 improved matrix parser 2023-08-09 14:35:47 +02:00
Zeno Rogue f212f6173b commandline:: replaced legacy rotation with -sview 2023-08-09 14:35:18 +02:00
Zeno Rogue 8a124f6890 dialog:: removed debug from visualize_matrix 2023-08-09 14:23:10 +02:00
Zeno Rogue 563d16c9c1 hyper.h was missing for trans23 use 2023-08-09 14:22:51 +02:00
Zeno Rogue 4668321e4e dialog:: more fixes 2023-08-09 14:22:32 +02:00
Zeno Rogue b6f13b953b more OOP-style standard dialogs 2023-08-09 14:01:24 +02:00
Zeno Rogue 4d4874f7ac dialog:: visualize matrix items 2023-08-09 09:07:53 +02:00
Zeno Rogue 234a691ab6 more parameter improvements and fixes 2023-08-09 01:11:44 +02:00
Zeno Rogue 5057f10358 improved parameter animation 2023-08-09 01:01:32 +02:00
Zeno Rogue a13ba9bdbe param_matrix 2023-08-08 17:20:39 +02:00
Zeno Rogue c914bf86e0 fixed units in matrix parser 2023-08-08 16:30:27 +02:00
Zeno Rogue e658a471da ray:: want_use as param_i 2023-08-08 16:28:13 +02:00
Zeno Rogue a088d46e6d config:: made it work in c++14 2023-08-08 16:28:04 +02:00
Zeno Rogue 1554caa7b4 rotations are now represented as matrices, not angles 2023-08-08 16:27:52 +02:00
Zeno Rogue c896b3ecd6 bringris:: more solid lps 2023-08-08 12:12:19 +02:00
Zeno Rogue debdcae057 bringris:: fix quit 2023-08-08 12:06:25 +02:00
Zeno Rogue 22947c7fd1 ads:: do not load earth textures if already loaded 2023-08-08 12:05:33 +02:00
Zeno Rogue 522436ba96 ads:: more solid lps use 2023-08-08 12:05:18 +02:00
Zeno Rogue 4ca3d41ad5 config:: added some more param_b's 2023-08-08 12:04:19 +02:00
Zeno Rogue 7a09ab2cb0 fixes to savers 2023-08-08 12:01:36 +02:00
Zeno Rogue c42a06772b adjusted nilrider and bringris to improved lps 2023-08-08 11:50:55 +02:00
Zeno Rogue 4c59d87a34 fixed param_custom in models 2023-08-08 11:49:49 +02:00
Zeno Rogue fb3b526ae6 simplified lps 2023-08-08 11:47:08 +02:00
Zeno Rogue 301236d154 ultimate nil Christoffel formulas in model 2023-08-07 20:48:55 +02:00
Zeno Rogue d2c601834a nil Christoffel formulas in model 2023-08-07 20:46:45 +02:00
Zeno Rogue 097ded1bd0 fix for nil model-changed christoffel 2023-08-07 20:04:17 +02:00
Zeno Rogue 07aa843f18 nilrider:: fixup to default settings 2023-08-07 17:59:50 +02:00
Zeno Rogue 0cdbb0f8f4 fixup default whichCanvas is 0 2023-08-07 17:59:30 +02:00
Zeno Rogue b31ceaf3df nilrider:: adjust to collection 2023-08-07 17:16:44 +02:00
Zeno Rogue 108f4fb437 bringris:: adjust to collection 2023-08-07 17:16:17 +02:00
Zeno Rogue 38baf6605a ads:: use lps 2023-08-07 17:15:50 +02:00
Zeno Rogue 861543b9e5 config:: lps_add_enum 2023-08-07 17:15:21 +02:00
Zeno Rogue 1211de5603 config:: char settings 2023-08-07 17:14:39 +02:00
Zeno Rogue bcc86e7b30 nilrider:: using the lps system 2023-08-06 22:17:20 +02:00
Zeno Rogue 9e46638733 added some values as params 2023-08-06 22:16:29 +02:00
Zeno Rogue ec5e774613 config:: lps fixup 2023-08-06 22:13:57 +02:00
Zeno Rogue c75f7b9cd4 config:: color_setting fixup 2023-08-06 22:13:48 +02:00
Zeno Rogue 919725eabb config:: new setting type color_setting 2023-08-06 22:07:08 +02:00
Zeno Rogue 9ecd621fe8 config:: local_parameter_set 2023-08-06 22:06:39 +02:00
Zeno Rogue 56be838b40 gobot:: -go-video command 2023-08-06 12:04:30 +02:00
Zeno Rogue 32911e2b67 gobot:: improved save/load 2023-08-06 12:04:18 +02:00
Zeno Rogue 4b61d63ef5 gobot:: import/export feature 2023-08-06 11:58:16 +02:00
Zeno Rogue a830fa73b3 gobot:: ko rule checking 2023-08-06 11:58:06 +02:00
Zeno Rogue 0167e284cc gobot:: better own information 2023-08-06 11:57:48 +02:00
Zeno Rogue 9a9ecd3c8c gobot: change geometry 2023-08-06 11:57:06 +02:00
Zeno Rogue 286f98fb49 gobot: upgraded from aegis to dpp 2023-08-06 11:53:44 +02:00
Zeno Rogue 2c0afce4ca gobot: CAP_THREAD not CAP_THREADS 2023-08-06 11:52:09 +02:00
Zeno Rogue dfb3626568 used separate keyconfigs in bringris, nilrider and ads 2023-08-06 11:51:43 +02:00
Zeno Rogue 34574ad050 multi:: can now use separate key configurations for separate games in collection 2023-08-06 11:48:48 +02:00
Zeno Rogue 0168e4c7a8 hooks_control added 2023-08-06 11:47:21 +02:00
Zeno Rogue 92cf27a056 version 12.1r 2023-07-21 09:34:51 +02:00
Zeno Rogue ac336f7035 fixed some bugs with anisotropic mdDisk 2023-07-21 09:29:49 +02:00
Zeno Rogue aebcabb99c tes:: fixed a bug with apeirogonal tiles 2023-07-21 09:28:20 +02:00
Zeno Rogue 754e774bcf in adj_minefield_cells_full, change forCellIdEx to forCellIdCM 2023-07-11 17:35:54 +02:00
Zeno Rogue c6ccee56f9 representation experiments 2023-06-21 15:10:42 +02:00
Zeno Rogue 554e9c5cfc kz for array 2023-06-21 15:09:46 +02:00
Zeno Rogue a041016446 CLI -center-vertex to center on vertex; still needs i=2 to rotate the camera 2023-06-10 11:07:49 +02:00
Zeno Rogue f972170869 fixed hat-animations for spectre 2023-06-10 11:06:13 +02:00
Zeno Rogue e218b0b19f pipes for anisotropic geometries 2023-06-10 11:05:57 +02:00
Zeno Rogue 901521631f inverse_exp_newton 2023-06-10 11:05:13 +02:00
Zeno Rogue 41fda7545e new param fake_multiple 2023-06-10 10:35:27 +02:00
Zeno Rogue aa729c912c fixed stereo_alpha in some geometries 2023-06-10 10:35:09 +02:00
Zeno Rogue 59dd09173a fixed the combinations of Archimedean, fake, and embedding 2023-06-10 10:33:42 +02:00
Zeno Rogue e68cd6736e changelog for 12.1q 2023-05-31 02:19:00 +02:00
Zeno Rogue 31976a1994 12.1q 2023-05-31 02:11:14 +02:00
Zeno Rogue 51fc7b6573 improved hat_param desc 2023-05-31 02:10:31 +02:00
Zeno Rogue 965996b3fb retitled hat parameter 2023-05-31 02:09:27 +02:00
Zeno Rogue 5054b12b93 one more fix for plain floors 2023-05-30 18:44:03 +02:00
Zeno Rogue 61610282ca correct ordering of plain floors when z-ordering cannot be trusted in SVG or with alpha 2023-05-30 18:44:03 +02:00
Zeno Rogue 2153626309 patterns2:: 'big triangular grid' should now work in meuclid 2023-05-30 18:44:03 +02:00
Zeno Rogue 03b0a80be0 patterns2:: pattern 'L' to show mastery 2023-05-30 18:44:03 +02:00
Zeno Rogue 3850d8dbeb 3D floors now should work in SVG 2023-05-30 18:44:03 +02:00
Zeno Rogue 20546133c3 Berger sphere should now work correctly in subdivided 2023-05-30 18:44:03 +02:00
Zeno Rogue e069a2cd46 default_flooralpha and plainfloors 2023-05-30 18:44:03 +02:00
Zeno Rogue d587f29a91 Aperiodic Spectre tiling 2023-05-30 18:44:03 +02:00
Zeno Rogue 3e8dd6f549 arcm:: fixed a stupid bug 2023-05-30 18:44:03 +02:00
Zeno Rogue 3fdd6d4967 a new option for pseudohedral 2023-05-30 18:44:03 +02:00
Zeno Rogue 09a43c5646 cview sets playermoved to false 2023-05-23 20:21:36 +02:00
Zeno Rogue 6aed2c58e8 auxiliary function atmod 2023-05-23 20:21:20 +02:00
Zeno Rogue b808d78e7f auxiliary functions adjmod and iadjmod 2023-05-23 20:20:55 +02:00
Zeno Rogue c6b27c5b27 fixed Archimedean embeddings 2023-05-23 11:46:05 +02:00
Zeno Rogue da687e8874 12.1p 2023-05-19 01:35:05 +02:00
Zeno Rogue d179976281 rogueviz:: embedded-chess:: added CAP_VIDEO guards 2023-05-19 01:35:05 +02:00
Zeno Rogue bde2025ce3 rogueviz:: embedded-chess:: fixed default hmul 2023-05-19 01:35:05 +02:00
Zeno Rogue 9658950e6a set_char_by_name 2023-05-19 01:18:02 +02:00
Zeno Rogue a5e327f67f rogueviz:: embedded-chess:: disable reversal, it is general now 2023-05-19 01:09:21 +02:00
Zeno Rogue ccf9abc2b6 automatic reversal in swapmatrix when wallheight changes 2023-05-19 01:09:02 +02:00
Zeno Rogue d1d06b9941 rogueviz:: embedded-chess improvements 2023-05-19 01:07:48 +02:00
Zeno Rogue 02d1fbd1e7 made embedded-chess more accessible 2023-05-18 14:18:46 +02:00
Zeno Rogue 949ee1b382 fixed bucketer 2023-05-18 13:58:02 +02:00
Zeno Rogue 2d74cfe6c4 euclid::in() returns false for experimental (this is for visualizing other connections) 2023-05-18 13:22:12 +02:00
Zeno Rogue f2cb72aaeb findfont debug only with DF_INIT 2023-05-15 19:36:10 +02:00
Zeno Rogue 24cd670de0 improvement to fontconfig support 2023-05-15 19:33:32 +02:00
Zeno Rogue c03e9cfeb4
Merge pull request #300 from dulsi/master
Add optional fontconfig support.
2023-05-15 19:16:18 +02:00
Zeno Rogue d9f01c67d1 added the 3D models for embedded-chess 2023-05-15 02:50:41 +02:00
Zeno Rogue 4bcd23af08 rogueviz:: embedded-chess added 2023-05-15 02:50:41 +02:00
Zeno Rogue 71d49b7198 rogueviz:: rename nodes via color file 2023-05-15 02:50:41 +02:00
Zeno Rogue 1f834d3def popScreenAll in presentation -slide command 2023-05-15 02:50:41 +02:00
Zeno Rogue 9932a034fc improvements to objmodels: better debugging, better performance on geometry change 2023-05-15 02:50:41 +02:00
Zeno Rogue c95395f574 rogueviz::smoothcam:: export some functions 2023-05-15 02:50:41 +02:00
Zeno Rogue 494a65d16e config:: semidirect_rendering as parameter 2023-05-15 02:50:41 +02:00
Zeno Rogue 1359784e65 forced_center_down parameter 2023-05-15 02:50:41 +02:00
Zeno Rogue fd3cc72508 added bucket_scale to fix bucketing problems 2023-05-15 02:50:41 +02:00
Zeno Rogue a70e799081 raycaster:: should now work in plane embedded as Solv 2023-05-15 02:50:41 +02:00
Zeno Rogue a9d76c861c vnear_default and vfar_default are now changeable 2023-05-15 02:50:41 +02:00
Zeno Rogue 56916e8bc6 better console output in -animvideo 2023-05-15 02:50:41 +02:00
Zeno Rogue b76db976f0 periodwidth parameter 2023-05-15 02:50:41 +02:00
Zeno Rogue 60d7d1da7e sky:: fixed stars 2023-05-15 02:50:41 +02:00
Zeno Rogue e6738f6c20 semidirect rendering 2023-05-15 02:50:41 +02:00
Zeno Rogue 2e1e14c1a2 config:: set_cld function 2023-05-15 02:50:41 +02:00
Zeno Rogue f22abb7def embeddings:: fixed with center_z 2023-05-15 02:50:41 +02:00
Zeno Rogue c77a5cef22 embeddings:: removed height_limit for Clifford torus since it seems buggy 2023-05-15 02:50:41 +02:00
Zeno Rogue a0aeb6f792 rogueviz::smoothcam:: fixes for some geometries 2023-05-15 02:50:41 +02:00
Zeno Rogue 37fa49aab8 rogueviz::smoothcam:: fixed the angle unit to be degrees indeed 2023-05-15 02:50:41 +02:00
Zeno Rogue 17fc76c0eb rogueviz::smoothcam:: should now work with mirroring 2023-05-15 02:50:41 +02:00
Zeno Rogue d5064db846 rogueviz::smoothcam:: spinEdge_full called if needed 2023-05-15 02:50:41 +02:00
Zeno Rogue fccf07a07d spinEdge_full function 2023-05-15 02:50:41 +02:00
Zeno Rogue 542ce23b76 smoothcam:: smoothcam_param added 2023-05-15 02:50:41 +02:00
Zeno Rogue 97c24d7dfe smoothcam:: export functions for append, save and load animation 2023-05-15 02:50:41 +02:00
Zeno Rogue 58a1b085c7 smoothcam:: moved to namespace rogueviz 2023-05-15 02:50:41 +02:00
Zeno Rogue 3692ef68b9 placeSidewalls now set PPR::TRANSPARENT_WALL priority for walls with alpha 2023-05-15 02:50:41 +02:00
Zeno Rogue 894252caf2 sky:: draw_ceiling should not be restricted to non-sphere 2023-05-15 02:50:41 +02:00
Zeno Rogue 07c6a596e0 better wall shading in EuclidSquare embeddings 2023-05-15 02:50:41 +02:00
Zeno Rogue 227b4a15f7 sky:: simple_sky 2023-05-15 02:50:41 +02:00
Zeno Rogue 882fecf792 sky:: fixed for changed depth 2023-05-15 02:50:41 +02:00
Zeno Rogue a6c3ea03e4 embeddings:: fixed swapmatrix_iview for center_z changes 2023-05-15 02:50:41 +02:00
Zeno Rogue cca6b1b721 embeddings:: fixed a typo in emb_same_in_same::actual_to_base 2023-05-15 02:50:41 +02:00
Zeno Rogue 043fc38dc6 made euc_in_hyp scalable 2023-05-15 02:50:41 +02:00
Zeno Rogue cad46dc16f gp:: fixed wrong gp_adj on embedded 2023-05-01 15:46:42 +02:00
Zeno Rogue f9a951a2d1 hooks added for draw_ceiling 2023-04-27 22:49:15 +02:00
Zeno Rogue 9c462b2334 prevented crashes while using incorrect gpside 2023-04-27 22:48:58 +02:00
Zeno Rogue f9b0dcf8a0 fixed some crashes on out_of_bounds 2023-04-27 22:48:36 +02:00
Zeno Rogue 557166c561 embeddings:: fixed LAKE, SHALLOW, HELLSPIKE and BOTTOM to no longer exhibit extra sgn 2023-04-27 22:48:13 +02:00
Zeno Rogue 3541a39119 added hooks for generate_floorshapes 2023-04-27 22:47:50 +02:00
Zeno Rogue 7dc21f32de changed some prepare_basics to require_basics 2023-04-27 22:47:32 +02:00
Zeno Rogue 8ede45cb12 embeddings:: break cylinder feature 2023-04-27 22:46:31 +02:00
Zeno Rogue b49a52d6af changing Euclid scale now applies settings 'light' 2023-04-27 22:46:07 +02:00
Zeno Rogue d4e71b78c6 rogueviz:: use CAP_PORTALS 2023-04-15 01:30:05 +02:00
Zeno Rogue 3f1dc8a4c4 introduced new CAP, CAP_PORTALS 2023-04-15 01:30:05 +02:00
Zeno Rogue 0410f54d43 rogueviz:: added some guards 2023-04-15 01:30:05 +02:00
Zeno Rogue 782b6ab4f8 mousexs and mouseys variables in formulae 2023-04-15 01:29:59 +02:00
Zeno Rogue 921ec7ff8d removed debug message 2023-04-15 01:29:59 +02:00
Zeno Rogue 6a1601becf CAP_HOLDKEYS guard added 2023-04-15 01:29:59 +02:00
Zeno Rogue a8b75c317a mymake:: improved the web compilation 2023-04-15 01:29:59 +02:00
Zeno Rogue 9f85af3068 prevent current_linewidth from causing extra GL calls 2023-04-15 01:29:59 +02:00
Zeno Rogue f57157435e fixed a bug in rel_log 2023-04-15 01:29:59 +02:00
Zeno Rogue 0c473559f3 fixed get_value to be exported by hyperweb 2023-04-15 01:29:59 +02:00
Zeno Rogue e63feddb7c added MAXMDIM guards in various places 2023-04-15 01:29:59 +02:00
Zeno Rogue 804c3897b8 number of step reported in crystal::build_shortest_path 2023-04-15 01:29:59 +02:00
Zeno Rogue 70842eb6e9 fixup to minimize improve 2023-04-15 01:15:35 +02:00
Zeno Rogue 1271c9162a embeddings:: fixed for MAXMDIM == 3 2023-04-15 01:15:15 +02:00
Zeno Rogue d389a40bd9 removed unused variables 2023-04-15 01:14:56 +02:00
Zeno Rogue 5a4f6595e1 improved performance with MINIMIZE_GL_CALLS 2023-04-15 01:14:29 +02:00
Zeno Rogue 9832285260 fixed a warning on array indexed by char 2023-04-15 01:13:49 +02:00
Zeno Rogue 31cce8aa2c added addsaver to be exported without CAP_CONFIG 2023-04-15 01:13:31 +02:00
Zeno Rogue b5343d5696 fixed dice for MDIM==3 2023-04-15 01:13:05 +02:00
Zeno Rogue 79cde326af aperiodic-hat:: fixed a warning 2023-04-13 16:26:05 +02:00
Zeno Rogue a02cfe2062 fixed a possible crash in aperiodic hat 2023-04-13 16:25:03 +02:00
Zeno Rogue 3ded56524d silenced warnings by replacing \& with \&\& 2023-04-12 01:56:09 +02:00
Zeno Rogue 5b47779028 fixes to nofont.cpp 2023-04-11 18:13:38 +02:00
Zeno Rogue e9c2278e8e embeddings:: virtual destructor added for embedding_method 2023-04-11 17:25:21 +02:00
Zeno Rogue a471025346 guards fixup 2023-04-11 17:14:19 +02:00
Zeno Rogue 3b2c87838d fixup to more guards 2023-04-11 17:10:40 +02:00
Zeno Rogue 8760ac4cfb more guards added 2023-04-11 17:10:04 +02:00
Zeno Rogue 3e81697164 rv:: snow:: snow_not_player parameter 2023-04-11 16:50:07 +02:00
Zeno Rogue 0b6be1caff rv:: smoothcam:: works in isotropic again 2023-04-11 16:49:54 +02:00
Zeno Rogue d5e7f22073 rv:: added some guards 2023-04-11 16:48:57 +02:00
Zeno Rogue e93187a81f rv:: intra-demos improvements 2023-04-11 16:47:58 +02:00
Zeno Rogue decdfc7806 bounded_mine_percentage now configurable via CLI, also renamed to freq in config file 2023-04-11 16:46:18 +02:00
Zeno Rogue dfcfee087d added missing guard for intra 2023-04-11 16:44:22 +02:00
Zeno Rogue 7806f1cb70 boundary drawing improvements 2023-04-11 16:44:11 +02:00
Zeno Rogue 1c2dbcc7d9 fixup to hat_param_imag 2023-04-11 16:43:53 +02:00
Zeno Rogue 2576918b8a added missing override 2023-04-11 16:43:34 +02:00
Zeno Rogue 2a05642198 hat:: hat_param_imag 2023-04-11 16:41:05 +02:00
Zeno Rogue d04a015bd0 hat:: fixed typo 2023-04-04 17:57:05 +02:00
Zeno Rogue 5a33967711 missing push of rogueviz.h 2023-04-01 22:56:33 +02:00
Zeno Rogue f0b52b7034 hat skeleton animation 2023-03-30 11:26:36 +02:00
Zeno Rogue 14aaa7ecea hat:: export get_long_transform 2023-03-30 11:26:05 +02:00
Zeno Rogue 7dbb60d3f8 version 12.1o 2023-03-29 09:35:43 +02:00
Zeno Rogue 25fb183059 fixed regenerate hat in seo 2023-03-29 09:34:18 +02:00
Zeno Rogue f822d5b215 hat:: auto-fill transform levels as needed 2023-03-29 09:10:38 +02:00
Zeno Rogue 0a9141d940 fixed variation not showing 2023-03-29 09:02:41 +02:00
Zeno Rogue d1813b5ad1 fixed hat orientation 2023-03-29 09:02:28 +02:00
Zeno Rogue 8c3b073e0e version 12.1n 2023-03-28 23:43:29 +02:00
Zeno Rogue d4e264bc9b hat:: special welcome message 2023-03-28 23:09:23 +02:00
Zeno Rogue f99e95b914 fixed crashes in Zebra in Hat and some other geometries 2023-03-28 23:09:11 +02:00
Zeno Rogue a9b6452d25 fixed Zebra floor graphics in hat 2023-03-28 23:08:54 +02:00
Zeno Rogue 511ffe8498 fractal geometry 2023-03-28 22:54:46 +02:00
Zeno Rogue 121df0d9c7 fixed Terracotta in Euclidean disk 2023-03-28 22:53:31 +02:00
Zeno Rogue e3a4ca5aa7 hat:: animations:: changed the hat-atoms-colored line 2023-03-28 14:50:31 +02:00
Zeno Rogue 86838ac307 hat:: hat-animations:: shift parameter 2023-03-28 14:36:38 +02:00
Zeno Rogue 1dac5c731b fixed rainbow_color for hue == 6 2023-03-28 14:35:22 +02:00
Zeno Rogue 3baf09be25 more levels of long_transformations 2023-03-28 14:24:33 +02:00
Zeno Rogue 014f88132a fixed auto-orientation to work with adj_memo 2023-03-28 14:24:25 +02:00
Zeno Rogue e906cb985b hat:: interesting value for hat parameter 2023-03-28 14:10:36 +02:00
Zeno Rogue 7e023e8092 square root symbol 2023-03-28 14:10:13 +02:00
Zeno Rogue eaaeac8624 cleaned unused variable in 3d-models 2023-03-28 13:38:57 +02:00
Zeno Rogue 610338329b added the source code of hat animations 2023-03-28 13:32:53 +02:00
Zeno Rogue 3793bb00c3 hat: Frog Park is now OK 2023-03-28 12:48:30 +02:00
Zeno Rogue 06d250e6a5 hat:: Orb of Vaulting now works correctly 2023-03-28 12:47:03 +02:00
Zeno Rogue a0343f6108 hat:: arrow trap graphical lines shown 2023-03-28 12:46:50 +02:00
Zeno Rogue e61321aea3 hat:: full arrow trap lines shown 2023-03-28 12:46:10 +02:00
Zeno Rogue 968dfb1aac hat:: relative_matrix computation 2023-03-28 12:45:50 +02:00
Zeno Rogue e2c5420c96 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2023-03-28 11:11:55 +02:00
Zeno Rogue 17579d8301 hat:: dualpoint now reflects the tiles correctly 2023-03-28 11:11:46 +02:00
Zeno Rogue b085426f2c hat:: memoize adj for speed 2023-03-28 11:11:23 +02:00
Zeno Rogue 342c7c4484
Merge pull request #335 from jlmjlm/aip_text3
Only use 'texture' in editAt guard when CAP_TEXTURE is set.
2023-03-26 12:35:36 +02:00
Zeno Rogue fe4786d768
Merge pull request #336 from jlmjlm/ortroll3
Swap the Red Troll's hair & fur colors.
2023-03-26 12:34:26 +02:00
Zeno Rogue 759de3274a version 12.1m 2023-03-26 09:42:49 +02:00
Zeno Rogue a47dbc5dd5 fixed some crashes in embedding+arb 2023-03-26 00:37:08 +01:00
Zeno Rogue a3c861ec9e hat:: fake now actually appears in menu 2023-03-25 23:43:43 +01:00
Zeno Rogue f8b6b28c75 hat:: fixed crashes when changing hat param with mouse, also works with embedded_plane now 2023-03-25 23:43:26 +01:00
Zeno Rogue d13c939ff6 version 12.1l 2023-03-25 09:31:28 +01:00
Zeno Rogue 314a7af3fd dual_point only in aperiodic 2023-03-25 09:25:16 +01:00
Zeno Rogue cd391412aa do not display relativistic modes in model list 2023-03-25 09:25:06 +01:00
Zeno Rogue 08bf3fe3d6 an option to not display default help 2023-03-25 09:24:47 +01:00
Zeno Rogue 7e79661ce0 dual linepattern now accepts parameter 2023-03-25 00:36:20 +01:00
Zeno Rogue 4c10fd6aae hat:: keep orientation while changing parameter 2023-03-25 00:35:44 +01:00
Zeno Rogue 44454c479a minor fixes to hat parameter 2023-03-24 23:55:24 +01:00
Zeno Rogue defeaf2cc6 hat:: hat parameter 2023-03-24 23:53:13 +01:00
Zeno Rogue 56ca00df82 fixed naming conflict -W3 to -W4 2023-03-24 23:20:31 +01:00
Zeno Rogue fa9365466c hat:: disable horo and use clueless just in case 2023-03-24 23:19:53 +01:00
Zeno Rogue 9fa2ba72fe hat:: better pseudohept 2023-03-24 23:19:32 +01:00
Zeno Rogue 15623fd84d CLI -land-info to list validity for every land 2023-03-24 23:18:30 +01:00
Zeno Rogue a0f91faf67 land_validity for hat 2023-03-24 23:18:16 +01:00
Zeno Rogue 1e68511d46 patched chaos now uses cheatdest_list 2023-03-24 23:17:43 +01:00
Zeno Rogue d3da7dddc9 hat:: Jungle 2023-03-24 23:17:16 +01:00
Zeno Rogue 2ec531e056 hat:: Land of Storms 2023-03-24 23:17:09 +01:00
Zeno Rogue 9d483b1442 hat:: Palace 2023-03-24 23:17:00 +01:00
Zeno Rogue 39dcaa9e15 hat:: removed debug 2023-03-24 23:16:37 +01:00
Zeno Rogue e1ec1ef5b9 hat:: fixed tiles 2023-03-24 23:16:25 +01:00
Zeno Rogue 1a97becdf0 fake geometry for hat 2023-03-24 23:16:03 +01:00
Zeno Rogue 8dfa0efbcf aperiodic hat: formulas for the shape, better centering 2023-03-24 19:12:07 +01:00
Zeno Rogue 8efec97b24 devmods:: included a tool to generate the hat rules 2023-03-24 17:02:01 +01:00
Jacob Mandelson 7470b6996d Swap the Red Troll's hair & fur colors. 2023-03-23 13:30:07 -07:00
Zeno Rogue de0e51412c version 12.1k 2023-03-23 09:38:22 +01:00
Zeno Rogue 3faedc295b min_scale now changed to 1e-6 2023-03-23 09:29:46 +01:00
Zeno Rogue de6f5ba97a patched chaos in aperiodic tilings 2023-03-23 09:29:07 +01:00
Zeno Rogue 3416f09381 fixed a crash in hat reversing 2023-03-23 09:14:06 +01:00
Zeno Rogue bf6220913c no more repetitions in hat minesweeper 2023-03-23 02:04:39 +01:00
Zeno Rogue 9c0ff85a98 alt mine rule for aperiodic 2023-03-23 02:04:15 +01:00
Zeno Rogue 76d432aa9c arb-borders are now also used for aperiodic tilings 2023-03-23 01:37:52 +01:00
Zeno Rogue 426c350a59 conformal square improved on sphere 2023-03-23 01:37:52 +01:00
Zeno Rogue b854f68a88 aperiodic hat tiling 2023-03-23 01:37:52 +01:00
Zeno Rogue acfa454114 aperiodic is now distinct from kite::in 2023-03-23 01:37:52 +01:00
Zeno Rogue 732d80965f fixup: version 2023-03-23 01:37:52 +01:00
Zeno Rogue f9d28371b7 fixup: axial_angle 2023-03-23 01:37:52 +01:00
Zeno Rogue 15540e91e6 fixed a bug in mdBandAny 2023-03-19 12:21:15 +01:00
Zeno Rogue 1b7f4b869e new Conformal Square projection (with transition and shader and Euclidean form) 2023-03-19 12:21:05 +01:00
Zeno Rogue 02f0b1e714 bugfix 2023-03-16 23:18:45 +01:00
Zeno Rogue 4bface6860 removed name nullptr too 2023-03-16 23:18:16 +01:00
Zeno Rogue 2527398a3e availability checks configurable 2023-03-16 23:15:26 +01:00
Zeno Rogue 5986f02025 rogueviz:: adjusted extra-projections to changes 2023-03-16 23:13:55 +01:00
Zeno Rogue a434f3b063 axial angle now can be set for axial models 2023-03-16 23:13:27 +01:00
Zeno Rogue 631e44f871 fixed model flags 2023-03-16 23:12:20 +01:00
Zeno Rogue 2370084b11 two extra projections in RogueViz 2023-03-16 15:18:02 +01:00
Zeno Rogue eb867ecccc fog color is now model color if the projection is not perspective 2023-03-16 14:48:16 +01:00
Zeno Rogue 2a45504580 fixed the shader ID 2023-03-16 14:47:39 +01:00
Zeno Rogue 12a9ba163f more detailed 3D pipes 2023-03-16 14:47:23 +01:00
Zeno Rogue c862a94e46 svg:: make smaller SVG files by not including things out of the region 2023-03-16 14:47:04 +01:00
Zeno Rogue e0e1182d97 added jennlbw to the credits 2023-03-16 14:46:14 +01:00
Zeno Rogue e898c61921 improved glhr debugging 2023-03-16 14:46:05 +01:00
Zeno Rogue b6503f0059 CLI: noplayer now removes the player as the name suggests, and -drawplayer 1 draws the player 2023-03-16 14:45:29 +01:00
Zeno Rogue b8f916df3a more configuration for meridian/parallel patterns 2023-03-16 14:45:11 +01:00
Zeno Rogue 0f9b30f51b draw boundary in fisheye Euclidean 2023-03-16 14:44:44 +01:00
Zeno Rogue ef556185db X symbol from the two-point models is now configurable 2023-03-16 14:44:31 +01:00
Zeno Rogue 7bd5abbdd6 reset shaders on panini/stereo changes 2023-03-16 14:43:29 +01:00
Zeno Rogue 5473c1645c CLI option -grotatei 2023-03-16 14:43:14 +01:00
Zeno Rogue ad90aecee7 fixed crash in edgelen 2023-03-16 14:42:10 +01:00
Zeno Rogue 2a354786e4 new projection: horocyclic equal-area 2023-03-16 14:42:02 +01:00
Zeno Rogue b8059c0528 new linepattern Tri Walls 2023-03-16 14:41:00 +01:00
Zeno Rogue 66671145a9 refactored grid drawing 2023-03-16 14:40:26 +01:00
Jacob Mandelson 9982f88a41 Only use 'texture' in editAt guard when CAP_TEXTURE is set. 2023-03-11 08:27:03 -08:00
Zeno Rogue 999b26e818 embeddings:: NFC, just using more lines 2023-02-21 18:55:07 +01:00
Zeno Rogue fa528e75d2 removed floorshape warnings unless DF_GEOM 2023-02-21 18:54:14 +01:00
Zeno Rogue cf90d4e3c4 fixed a bug causing spinning in VR 2023-02-21 18:53:42 +01:00
Zeno Rogue 16e1e0d516 fixed cell boundaries key 2023-02-21 18:53:01 +01:00
Zeno Rogue b708391dd2 embeddings:: fixed emb_product_embedding::actual_to_intermediate 2023-02-21 18:52:00 +01:00
Zeno Rogue 7aa11a83ec embeddings:: fixed emb_same_in_same::actual_to_logical 2023-02-21 18:51:30 +01:00
Zeno Rogue 19fbb43bab vr:: fixed apply_movement to be geodesic-based not embedded-based in H2.5; also added new eHeadset holonomy_z 2023-02-21 18:50:36 +01:00
Zeno Rogue a07dac637b vr:: spinEdge for embedded 2023-02-21 18:48:19 +01:00
Zeno Rogue fa03b4f275 fixed an error computing distances in bitruncated {5,4} causing crashes 2023-02-21 18:47:43 +01:00
Zeno Rogue 65883a53cf embeddings:: better explained altitudes 2023-02-19 01:00:15 +01:00
Zeno Rogue 5a40534c85 embeddings:: star probability configurable 2023-02-18 19:33:27 +01:00
Zeno Rogue f73660c801 fixed a possible crash when changing -seo options when OpenGL not yet initialized 2023-02-18 19:16:21 +01:00
Zeno Rogue acdac858a3 embedded:: shFloor is now changed to shFullFloor by default; also whichShape has other options 2023-02-18 18:43:30 +01:00
Zeno Rogue a3b815741d fixed the possible crashes when changing settings 2023-02-18 18:32:54 +01:00
Zeno Rogue 5764e46bbe fixed orthogonal_move for euclidean same_in_same 2023-02-18 18:32:37 +01:00
Zeno Rogue 573304faab more detailed 3D depth settings 2023-02-18 18:32:01 +01:00
Zeno Rogue 1eaa6d4dd9 better changing embedded settings 2023-02-18 12:55:33 +01:00
Zeno Rogue e40bd436af racing:: fixed death in racing mode 2023-02-18 12:54:16 +01:00
Zeno Rogue d108f27dcf added some missing CAP_ guards 2023-02-18 12:53:52 +01:00
Zeno Rogue 53483005cf fixed ads compilation line 2023-02-18 12:42:01 +01:00
Zeno Rogue 9bda1ecbf3 rogueviz::smoothcam:: -smoothcam-anim-on 2023-02-15 14:57:57 +01:00
Zeno Rogue 9853de5775 rogueviz:: sag:: -sagfull and dofullsa now accept times as float 2023-02-15 14:57:57 +01:00
Zeno Rogue c53972c4b0 rogueviz:: objmodels:: OO design of the model class 2023-02-15 14:57:57 +01:00
Zeno Rogue f252456578 embeddings:: actually implemented emb_euc_cylinder_sl2 2023-02-15 14:57:57 +01:00
Zeno Rogue 37aa0dadee embeddings:: fixed actual_to_logical and logical_to_actual in emb_same_in_same Euclidean 2023-02-15 14:57:57 +01:00
Zeno Rogue 23f8be380d fixed a bug with configure_cylinder not knowing the correct tessf 2023-02-15 14:57:57 +01:00
Zeno Rogue 7cf7c6b216 embeddings:: 3d model fixes 2023-02-15 14:57:57 +01:00
Zeno Rogue f820f356b1 embeddings:: fixed rotation in swapmatrix_iview 2023-02-15 14:57:57 +01:00
Zeno Rogue ec4ceb5347 embeddings:: fixed items size in euc_in_hyp 2023-02-15 14:57:57 +01:00
Zeno Rogue c5e05bd199 embeddings:: fixed setting changing 2023-02-15 14:57:57 +01:00
Zeno Rogue 1295ea7920 setting eye level now affects vid.tc_camera as it should 2023-02-15 14:57:57 +01:00
Zeno Rogue 03336ecae0 rogueviz:: smoothcam:: debug removed, set last_segment on swapdim hook to recompute 2023-02-15 14:57:57 +01:00
Zeno Rogue 5bdae71879 rogueviz/smoothcam: used swapmatrix_iview and swapmatrix_view 2023-02-10 19:05:47 +01:00
Zeno Rogue 29d1a0c191 never_invert flag, mainly for debugging 2023-02-10 19:05:05 +01:00
Zeno Rogue fb2a3a7931 embeddings:: switching should now keep as much as possible 2023-02-10 19:04:32 +01:00
Zeno Rogue c2070a6fd6 embeddings:: fix euc_in_nil 2023-02-10 19:03:24 +01:00
Zeno Rogue c7de7df6fe rogueviz/smoothcam:: better smoothcam for embedded_plane 2023-02-10 15:37:10 +01:00
Zeno Rogue d0f6a94418 rogueviz/smoothcam:: kz in interpolate 2023-02-10 15:36:11 +01:00
Zeno Rogue 903c654c44 fixup correct order and detailed comment 2023-02-10 15:13:16 +01:00
Zeno Rogue 597d95ccc2 rogueviz/smoothcam:: interpolate factored out 2023-02-10 15:02:25 +01:00
Zeno Rogue 6115e5a96d texture pattern no longer affects map editor pattern 2023-02-05 22:00:29 +01:00
Zeno Rogue b104cc0361 on_dim_change clears where on sphere 2023-02-05 21:59:45 +01:00
Zeno Rogue 7d600ecdfe fixed singletile pattern 2023-02-05 21:59:35 +01:00
Zeno Rogue 472443a6d2 embeddings:: noshadow disables monster shadows 2023-02-05 21:58:56 +01:00
Zeno Rogue 0fd676e6d3 goldberg:: embeddings:: fixes 2023-02-05 21:58:38 +01:00
Zeno Rogue fe6ae71990 version 12.1i 2023-02-05 11:45:57 +01:00
Zeno Rogue 60c041e397 phi cannot be constexpr on some compilers 2023-02-05 11:38:14 +01:00
Zeno Rogue 9fd7d94af2 embeddings:: added missing override 2023-02-05 11:38:14 +01:00
Zeno Rogue c900d6823e set floor col for radar/ASCII 2023-02-05 11:24:19 +01:00
Zeno Rogue e1ed7284dd Euclidean quotient spaces no longer display as quotient OFF, and can be edited while embedded 2023-02-05 11:19:19 +01:00
Zeno Rogue ce90bb6db2 embeddings:: better info about wrong options and how to change them 2023-02-05 11:18:13 +01:00
Zeno Rogue 23e4f90685 embeddings:: reset view option in menu to fix errors 2023-02-05 10:44:36 +01:00
Zeno Rogue b89ba69fd9 local_perspective_used now known better 2023-02-05 10:31:58 +01:00
Zeno Rogue 6a1cb13c11 embeddings:: fixed emb_euc_in_nil 2023-02-05 10:30:11 +01:00
Zeno Rogue 73fc9192ce invert option listed for cylinders 2023-02-05 10:30:00 +01:00
Zeno Rogue 52d38665ae fixed crashes in 3D mode 2023-02-05 10:09:36 +01:00
Zeno Rogue 2d4cb637f2 set_view in product uses inverse_exp 2023-02-04 23:07:43 +01:00
Zeno Rogue e29b28ddb9 embeddings:: fixed default parameters for cylinders 2023-02-04 23:06:38 +01:00
Zeno Rogue e3b87792aa walking mode adds 'make_actual_view' to know whether local_perspective_used 2023-02-04 23:05:49 +01:00
Zeno Rogue e8c03acf07 reverted final_coords for now 2023-02-04 23:01:41 +01:00
Zeno Rogue 2aafe6829c embeddings:: fixed goldberg 2023-02-04 20:16:52 +01:00
Zeno Rogue f9fb1b9e84 fixed a bug generating Dice in some tessellations 2023-02-04 20:03:32 +01:00
Zeno Rogue cd673b2fd2 disabling frustum_culling option now also disables smart-range frustum culling 2023-02-04 19:44:06 +01:00
Zeno Rogue dea0c5cc58 fixed euc::in 2023-02-04 19:42:20 +01:00
Zeno Rogue 334c4715af fix_rotation compactized 2023-02-04 19:41:10 +01:00
Zeno Rogue 2fe39a6613 embeddings:: shmup fixes 2023-02-04 19:40:49 +01:00
Zeno Rogue d67b157904 embeddings:: fixed animation facing in more cylinders 2023-02-04 12:59:51 +01:00
Zeno Rogue d4eb33cd71 embeddings:: fixed radar in hyp_in_solnih 2023-02-04 12:44:33 +01:00
Zeno Rogue a48f255c17 embeddings:: fixed lmirror in hyp_in_solnih 2023-02-04 12:30:53 +01:00
Zeno Rogue 53bc23e280 embeddings: fixed sphere_in_low 2023-02-04 12:30:38 +01:00
Zeno Rogue 3183e10168 embeddings:: fixed product embedding 2023-02-04 12:29:55 +01:00
Zeno Rogue caf5b5dc8e fixed facing during animation in Cylinder -- although does not seem to be the correct fix 2023-02-04 11:56:39 +01:00
Zeno Rogue 01a3f620b0 embeddings:: fixed leg animation in product 2023-02-04 11:50:48 +01:00
Zeno Rogue 5b89cfdecf embeddings:: removed smESL2 method -- smEmbedded works fine now for all non-product embeddings 2023-02-04 11:44:42 +01:00
Zeno Rogue 793ae6fcd9 embeddings:: fixed monster movement animations in euc_in_hyp 2023-02-04 11:28:41 +01:00
Zeno Rogue 3f44c71fea draw_ceiling adds 0 to sky by default 2023-02-04 11:04:07 +01:00
Zeno Rogue db6d9c0245 embeddings:: correct ASCII in euc_in_hyp radar 2023-02-04 10:56:21 +01:00
Zeno Rogue 373c0fe152 embeddings:: fixed snake chaining 2023-02-04 10:19:13 +01:00
Zeno Rogue a14bceb681 embeddings:: simplifications 2023-02-04 10:18:01 +01:00
Zeno Rogue 32491d6425 fixed product (non-embedding) 2023-02-04 09:35:04 +01:00
Zeno Rogue de9149a8cd embeddings:: fixed Makefile 2023-02-04 09:24:06 +01:00
Zeno Rogue 3811eebc8f rogueviz:: darken_a fixed 2023-02-04 09:21:16 +01:00
Zeno Rogue 3e615d3c53 safer face_the_player 2023-02-04 09:17:10 +01:00
Zeno Rogue 4ee2c9faa3 embeddings:: editing euclid_embed parameters no longer edits them back 2023-02-04 09:17:10 +01:00
Zeno Rogue 13a90006b8 fixed remaining zpush to lzpush 2023-02-04 09:17:10 +01:00
Zeno Rogue 21e399648f 3d-models:: yet another fix to make_revolution_cut 2023-02-04 09:17:10 +01:00
Zeno Rogue d868548fa2 embeddings:: fixed xspinpush 2023-02-04 09:17:10 +01:00
Zeno Rogue 8e004230a7 embeddings:: 3d-models:: fixed animate_bird 2023-02-04 09:17:10 +01:00
Zeno Rogue 93ebe337b5 embeddings:: 3d-models:: fixed revolutions cut 2023-02-04 09:17:10 +01:00
Zeno Rogue 6056fce41a embeddings:: better yzspin 2023-02-04 09:17:10 +01:00
Zeno Rogue d8a0023c54 fixed add_texture in 3d models 2023-02-04 09:17:10 +01:00
Zeno Rogue 7ffa2a3806 fixed slime 3D model too high 2023-02-04 09:17:10 +01:00
Zeno Rogue 941379ba2a embeddings:: fixed scalefactor for euc_in_noniso 2023-02-04 09:17:10 +01:00
Zeno Rogue f09b94bfcd fixed the initialization of hpcshape 2023-02-04 09:17:10 +01:00
Zeno Rogue a536a3bc61 fixed missing shadows 2023-02-03 23:44:55 +01:00
Zeno Rogue 43f345234a embeddings:: do not try to display model boundary in perspective 2023-02-03 16:20:26 +01:00
Zeno Rogue 6950e0e1ba embeddings:: fixed vertical_vector 2023-02-03 16:11:13 +01:00
Zeno Rogue 5e0d05f10b embeddings:: fixed set_radar_transform to correctly rotate if eyelevel not 0, and also when euclid_embed_rotate is used 2023-02-03 16:08:11 +01:00
Zeno Rogue 6be7951187 ads:: demo feature (not enablable) 2023-02-03 15:28:48 +01:00
Zeno Rogue 9c04b39ed3 ads:: reverse replay feature 2023-02-03 15:28:37 +01:00
Zeno Rogue bc3b4841b7 makeradar fixes 2023-02-03 02:53:55 +01:00
Zeno Rogue 5f3c638653 fixed radar_transform in product spaces and Z clearing 2023-02-02 19:27:22 +01:00
Zeno Rogue e4c775b986 embeddings:: fixed map over itself in spherical product embedding 2023-02-02 19:26:51 +01:00
Zeno Rogue d305896c96 embedding:: fixed leaving mdGeodesic 2023-02-02 19:07:02 +01:00
Zeno Rogue dc1aa2c4c0 embeddings:: made itls and itl matrices correct in 4x4 2023-02-02 19:06:34 +01:00
Zeno Rogue bccb7b1d5d embeddings:: fixed Clifford torus 2023-02-02 19:06:06 +01:00
Zeno Rogue 637feb315a rogueviz::ads:: screenshot option 2023-01-31 16:40:29 +01:00
Zeno Rogue 8e17338585 rogueviz/ads:: adjusted to changes 2023-01-31 16:40:09 +01:00
Zeno Rogue a84596a355 better isometry in Nil cylinder 2023-01-30 17:16:35 +01:00
Zeno Rogue 0b11c9388b TAU and other constants are now declared as constexpr 2023-01-30 15:37:03 +01:00
Zeno Rogue 9ce2a90c33 embedding: Nil cylinder, also fixed the product cylinder 2023-01-30 15:36:44 +01:00
Zeno Rogue ad93a6db0b triangles in Nil Rider are now rotating 2023-01-30 01:25:40 +01:00
Zeno Rogue 98690c225c new Nil model used in Nil Rider 2023-01-30 01:20:12 +01:00
Zeno Rogue 439850f74c fixup to simple_impossible 2023-01-30 01:02:02 +01:00
Zeno Rogue c21d5373e5 simple-impossible now works with the new model, and also rotates 2023-01-30 00:46:55 +01:00
Zeno Rogue c468c90463 rogueviz/simple-impossible.cpp 2023-01-30 00:46:18 +01:00
Zeno Rogue 395cbf3668 nilv:: the Nil model is now changeable 2023-01-30 00:02:13 +01:00
Zeno Rogue 80c0b4bb0c rogueviz:: adjusted flocking to interface changes 2023-01-29 17:03:53 +01:00
Zeno Rogue b11e270eb5 chasmifyPoly now uses logical coordinates 2023-01-29 17:03:25 +01:00
Zeno Rogue 40ad4f04d2 walk parameters are now prefixed by walk -- eye_level vs eyelevel was confusing 2023-01-29 17:03:12 +01:00
Zeno Rogue ba03d33959 embedding:: a simple general implementation of radar 2023-01-29 16:09:00 +01:00
Zeno Rogue 5c2b206433 final_coords now refers to cgi.emb->logical_to_base 2023-01-29 14:17:41 +01:00
Zeno Rogue a6d53944cd fixup to coordinates 2023-01-29 14:17:03 +01:00
Zeno Rogue c0c6f44c19 moved kleinize from floorshapes to hyperpoint 2023-01-29 14:16:50 +01:00
Zeno Rogue 31a5a9e5c7 floor tiles are now constructed based on logical coordinates 2023-01-29 14:14:58 +01:00
Zeno Rogue 1e6e75c7d4 embeddings:: clarified the meaning of various coordinate systems, both in a comment and in idea 2023-01-29 14:13:30 +01:00
Zeno Rogue ce72e55353 fixup to -seo CLI option 2023-01-29 14:11:56 +01:00
Zeno Rogue 8e577bc2de embeddings:: fixup apply_always3 for CliffordTorus 2023-01-29 14:10:59 +01:00
Zeno Rogue 43b3a13dc4 embeddings:: fixed the ordering 2023-01-29 14:10:41 +01:00
Zeno Rogue 9ca8f20dc3 fixup to nicer apply_always3 2023-01-29 11:56:26 +01:00
Zeno Rogue fd55d4de89 CLI option -seo 2023-01-28 04:08:32 +01:00
Zeno Rogue 3af71864c7 embeddings:: seCylinderSL2 2023-01-28 03:56:08 +01:00
Zeno Rogue c155491ca2 fixup to last 2023-01-28 03:47:33 +01:00
Zeno Rogue 0873fe2088 cleaner apply_always3 2023-01-28 03:47:02 +01:00
Zeno Rogue a45ae2cd21 embeddings:: cylinder_horo 2023-01-27 16:46:54 +01:00
Zeno Rogue d7fe4af1e9 embeddings:: implemented the cylinderHE embedding 2023-01-27 11:16:34 +01:00
Zeno Rogue 9e2059e72b embeddings:: moved functions outside class 2023-01-27 11:15:42 +01:00
Zeno Rogue a73f85c88a fixup to simplified and fixed 2023-01-27 10:18:39 +01:00
Zeno Rogue 9e6e8e02b0 fixup to new embeddings, pointer cgi1 in sky 2023-01-27 10:18:19 +01:00
Zeno Rogue 56f5fee8dd embeddings:: simplified and fixed euc_in_sl2 2023-01-27 10:17:54 +01:00
Zeno Rogue e4239a11a4 embeddings:: emb_euc_cylinder simplified and generalized to hyperbolic 2023-01-27 10:07:40 +01:00
Zeno Rogue 85dffdbeff rewritten the embeddings more nicely 2023-01-27 00:27:10 +01:00
Zeno Rogue 8744420504 new embedding: Euclidean cylinder 2023-01-24 15:17:09 +01:00
Zeno Rogue bab78c8179 fixed configure_product_cylinder 2023-01-24 14:54:19 +01:00
Zeno Rogue 146c075210 removed functions which were moved elsewhere 2023-01-23 22:14:59 +01:00
Zeno Rogue 02e8dec195 12.1h changelog 2023-01-08 16:44:42 +01:00
Zeno Rogue 3013e956b9 12.1h 2023-01-08 16:44:28 +01:00
Zeno Rogue 2d21e9122a fixed list sliders not working correctly when quickmouse is off 2023-01-08 16:20:59 +01:00
Zeno Rogue 8a5e768b51 rogueviz::dhrg::loglik:: max steps 2023-01-08 16:03:20 +01:00
Zeno Rogue 4ff8f4b68a rogueviz::sag:: added CAP_SDL guards 2023-01-08 16:02:32 +01:00
Zeno Rogue b6c257a264 rogueviz:: newconf:: apple default shape 2023-01-08 16:02:02 +01:00
Zeno Rogue a7f95cfe3d SAG shuift_object is now geodesic 2023-01-08 16:00:42 +01:00
Zeno Rogue faee70ec3e radar in euc_in_sl2 (not great) 2023-01-08 15:59:28 +01:00
Zeno Rogue 763a932aca fixed radar in euc_in_sph (no animate), radar in euc_in_product (somewhat), fixed_YZ in euc_in_sph 2023-01-08 15:59:28 +01:00
Zeno Rogue 742355433a shallow water is no longer glitched when the 3D settings are illegal 2023-01-08 15:59:28 +01:00
Zeno Rogue ce93910f0f fixed context help getting stuck in corner stats mode 2023-01-08 15:59:28 +01:00
Zeno Rogue 5f3c58154c fixed Princess using boat 2023-01-08 15:59:28 +01:00
Zeno Rogue 8118ecd4f3 fixed the spin functions in hyp_in_solnih and euc_in_sl2 2023-01-08 15:59:28 +01:00
Zeno Rogue 6259815f7f refactored animation, and should now work in every embedded 2023-01-08 15:59:28 +01:00
Zeno Rogue 5dcddc9365 shift_view functions refactored 2023-01-08 15:59:28 +01:00
Zeno Rogue 5c1ab36b16 auto-configure S2xR embedding for Euclidean cylinder 2023-01-08 15:59:28 +01:00
Zeno Rogue 351ef88df7 improved embedded_space diagnostic help text 2023-01-07 23:21:03 +01:00
Zeno Rogue 4351f99432 fixed shmup in euc_in_nil and euc_in_sl2 2023-01-07 22:51:46 +01:00
Zeno Rogue 8e49baef0e shmup should work in euc_in_product 2023-01-07 22:19:31 +01:00
Zeno Rogue 6d0c0daa40 fixed shmup in euc_in_sph 2023-01-07 21:50:13 +01:00
Zeno Rogue 88ca5c920f fixed treasure rendering in euc_in_sph and euc_vertical 2023-01-07 21:49:04 +01:00
Zeno Rogue 14d6e33768 fixed wolf shape in Clifford torus 2023-01-07 20:40:57 +01:00
Zeno Rogue 64b5c52b80 simplified embedded shift 2023-01-07 19:47:19 +01:00
Zeno Rogue 8136d9b554 fixed camera movement in ESL2 2023-01-07 19:41:42 +01:00
Zeno Rogue f02073a35f fixed fixed_YZ in euc_in_sl2 2023-01-07 18:56:12 +01:00
Zeno Rogue e4839a19b7 fixed the coordinate system naming, and added a comment on these names 2023-01-07 16:52:24 +01:00
Zeno Rogue 8dede9f8a0 fixed bucketing for euc_in_sl2 2023-01-07 12:55:28 +01:00
Zeno Rogue 0e2b9d07ee set correct parameters for euc_in_nil and euc_in_sl2 2023-01-07 12:55:12 +01:00
Zeno Rogue b7a4997509 fixed camera movement in euc_in_sl2 2023-01-07 12:22:14 +01:00
Zeno Rogue 3f2a84be5f refactored get_logical_z 2023-01-07 11:45:40 +01:00
Zeno Rogue 57b762dfe8 fixed shift_view_towards in smLie 2023-01-07 11:44:44 +01:00
Zeno Rogue 63032a42a2 debug removed in lie_exp 2023-01-07 11:44:31 +01:00
Zeno Rogue f5f6bdcf3b euc_in_sl2 (still buggy) 2023-01-07 11:44:13 +01:00
Zeno Rogue dfb73bbdaa fixed the matrix multiplication order in prepare_lta 2023-01-07 11:33:39 +01:00
Zeno Rogue d32b0855a0 kz added for shiftmatrix and shiftpoint 2023-01-06 00:24:58 +01:00
Zeno Rogue 1fc48be781 fixed lta 2023-01-06 00:24:45 +01:00
Zeno Rogue 4b3bfb9932 euc_in_product 2023-01-06 00:09:12 +01:00
Zeno Rogue 28146b13f7 Rug option in 3D settings 2023-01-05 16:57:08 +01:00
Zeno Rogue 3052a9f29b Clifford Torus now attempts something if not a torus 2023-01-05 16:41:23 +01:00
Zeno Rogue 2d5bfc7b5a fixed reset 2023-01-05 16:37:31 +01:00
Zeno Rogue dd01cd9af4 auto-configure Clifford Torus embedding 2023-01-05 16:12:23 +01:00
Zeno Rogue 2182f442d9 more detailed Euclidean embedding parameters 2023-01-05 14:01:23 +01:00
Zeno Rogue 731fcee7ce a and b are now param_f 2023-01-04 23:31:55 +01:00
Zeno Rogue 82ce9914c5 one fixe with lie_exp 2023-01-04 23:31:12 +01:00
Zeno Rogue 601457ebc2 fixed non-shader band with shifts 2023-01-04 23:30:54 +01:00
Zeno Rogue 32546cee4a Clifford torus embedding (needs to be configured manually and on a straight square for now) 2023-01-04 23:30:36 +01:00
Zeno Rogue bc96b7fba9 CLI option -each-random 2023-01-04 23:27:27 +01:00
Zeno Rogue 1dced09f71 min_cells_drawn setting 2023-01-04 23:26:46 +01:00
Zeno Rogue 502e2c6102 fixed a crash when no last 2023-01-04 23:24:52 +01:00
Zeno Rogue a55ed32fa1 adjusted bringris to use mproduct and mhybrid 2023-01-03 20:51:29 +01:00
Zeno Rogue 016b0a95bc fixed a bug in hybrid gp 2023-01-03 20:50:48 +01:00
Zeno Rogue 7d0235b459 fixed in_smart_range for perspective 2022-12-29 21:49:43 +01:00
Zeno Rogue 7068b41d28 fixes to Lie log/exp in SL2 2022-12-29 21:19:08 +01:00
Zeno Rogue 78fb0cca20 fixed apply_perspective to use the actual z to keep z-ordering correct 2022-12-29 20:50:47 +01:00
Zeno Rogue 2999818eaf fixed rotate view 2022-12-29 20:50:17 +01:00
Zeno Rogue 86492d1181 Improved the UI for 'geodesic movement' setting, and also make it work correctly in SL2 and hyperbolic geometries 2022-12-25 12:14:36 +01:00
Zeno Rogue 080e853364 adjusted RogueViz to name changes 2022-12-18 14:06:38 +01:00
Zeno Rogue 176d5b76c1 one more change from 12.1g which was not pushed somehow 2022-12-18 01:12:28 +01:00
Zeno Rogue 868ffba2d4 fixed changelog 2022-12-18 01:11:55 +01:00
Zeno Rogue 978d9d6eda 12.1g 2022-12-18 01:01:13 +01:00
Zeno Rogue 09ae23b310 fixes to product radar 2022-12-18 00:31:41 +01:00
Zeno Rogue 9dee000a6a display error when Euclidean nonisotropic used incorrectly 2022-12-18 00:31:07 +01:00
Zeno Rogue 8ca0ef23fa dialog:: fixed coloring of info items 2022-12-18 00:29:28 +01:00
Zeno Rogue 272523d185 fixed Euler char shown in geom-exp 2022-12-18 00:21:57 +01:00
Zeno Rogue 0bedb56296 better display geometry names in geom-exp 2022-12-18 00:21:50 +01:00
Zeno Rogue 1f3db08ac4 fixed default eye levels 2022-12-18 00:16:49 +01:00
Zeno Rogue 006a325d36 fixed resetview in embedded_plane in product 2022-12-18 00:16:32 +01:00
Zeno Rogue 547c0785ef radar fixes 2022-12-18 00:16:18 +01:00
Zeno Rogue c2dc16f8ca made radar work in new embedded_planes, with some glitches 2022-12-17 23:59:39 +01:00
Zeno Rogue c252e8f51e fixed radar thrashing 2022-12-17 21:39:31 +01:00
Zeno Rogue 9793ebbff8 fixup one more isotropic 2022-12-17 21:29:25 +01:00
Zeno Rogue a5ff327ef3 fixed get_shift_view_embedded_of 2022-12-17 21:29:15 +01:00
Zeno Rogue 22d4a49b68 no, that was wrong, but still renamed 2022-12-17 21:09:20 +01:00
Zeno Rogue 1ac28797de fixed autocentering in same_in_same; also renamed smIsometric to smIsotropic 2022-12-17 21:07:32 +01:00
Zeno Rogue 14ac186fe2 Lower and Much Lower curvature settings are now respecting even if it was hyperbolic anyway 2022-12-17 20:57:08 +01:00
Zeno Rogue 8884fbc11f fixed monster facing displayed in embedded_in product 2022-12-17 20:37:07 +01:00
Zeno Rogue e68c807f68 euc_in_hyp won't be standarized 2022-12-17 20:21:33 +01:00
Zeno Rogue 8e726d1231 fixed the roof (hiding incorrectly) in gproduct 2022-12-17 20:18:49 +01:00
Zeno Rogue 534448967f fixed the roof (hiding incorrectly) in hyp_in_solnih 2022-12-17 20:06:39 +01:00
Zeno Rogue d623593392 fixed the sky in hyp_in_solnih 2022-12-17 19:59:53 +01:00
Zeno Rogue 72c1cf300e fixed binary tiling embedded in product 2022-12-17 19:34:03 +01:00
Zeno Rogue be747b7a44 yet another fix to adjust_eye in nonisotropic space 2022-12-17 19:03:36 +01:00
Zeno Rogue 805cb4dc0c fixed the computation of camera_level in sph_in_low 2022-12-17 18:40:33 +01:00
Zeno Rogue 014b4a8b23 fixed rebase in sph_in_low 2022-12-17 18:36:30 +01:00
Zeno Rogue 0e83580199 fixup to logical_to_actual 2022-12-17 18:36:05 +01:00
Zeno Rogue a3b8cdb149 fixed fix_to_2 and also renamed it to full_fix 2022-12-17 18:13:33 +01:00
Zeno Rogue 8de0f4e2e4 fixup: test removed 2022-12-17 18:00:01 +01:00
Zeno Rogue d5e5e65745 fixed shift_object in embedded 2022-12-17 17:58:55 +01:00
Zeno Rogue 2e0b3c5811 fixed hyp_in_noniso to keep the correct orientation 2022-12-17 17:57:57 +01:00
Zeno Rogue 6b337bc262 shmup:: cspin01 not spin 2022-12-17 17:41:02 +01:00
Zeno Rogue 14fd283dd2 fixed shmup with wall_height < 0 to correctly swap the 'X' coordinate 2022-12-17 17:40:42 +01:00
Zeno Rogue 436f782541 fixed shmup::fix_to_2 2022-12-17 17:38:04 +01:00
Zeno Rogue 5f645f2f25 fixed reset and auto centering 2022-12-17 17:37:26 +01:00
Zeno Rogue b2f9038cd4 fixed default eyepos in sph_in_low 2022-12-17 17:31:05 +01:00
Zeno Rogue 814467082f shift_method gets more possible arguments 2022-12-17 11:47:10 +01:00
Zeno Rogue 5da1b8f88e removed obsolete CLI options -solgeo and -solnogeo 2022-12-17 11:35:46 +01:00
Zeno Rogue 4da63f57dc renamed parallel_transport to shift_object, made it use shift_method, and made it correct for Lie movement 2022-12-17 11:35:28 +01:00
Zeno Rogue e1301e10bd fixup to shift: moved the shift methods to hyperpoint, also removed _auto 2022-12-17 11:16:47 +01:00
Zeno Rogue 70718b2602 switching nisot::geodesic_movement now automatically switches the perspective -- basically, light also moves as chosen 2022-12-16 23:08:54 +01:00
Zeno Rogue 1210de672e fixed shift in nonisotropic embeddings; also you can now choose between geodesic or embed-aware, for both manual and auto camera movement 2022-12-16 23:03:00 +01:00
Zeno Rogue dfbf553608 euc_in_nil has sky errors too 2022-12-16 01:26:28 +01:00
Zeno Rogue 78356114c1 Euclid embed scale editable 2022-12-16 01:26:11 +01:00
Zeno Rogue 4f0d16f9ed faster bt grid rendering, and also works correctly in embedded_plane 2022-12-16 01:05:18 +01:00
Zeno Rogue a525de9759 shmup works in embedded_plane product 2022-12-16 01:00:08 +01:00
Zeno Rogue e1ce20cabe correct map geometry displayed in welcome message, and both displayed in EwG 2022-12-16 00:41:17 +01:00
Zeno Rogue db43ea9de8 fixed sky over irregular map 2022-12-16 00:36:44 +01:00
Zeno Rogue 68b7beb753 simplified a bit 2022-12-15 23:16:49 +01:00
Zeno Rogue d61e498d4b kite-and-dart working correctly in embedded_plane 2022-12-15 23:13:38 +01:00
Zeno Rogue 5edb1dba04 fixup to tes working 2022-12-15 23:13:00 +01:00
Zeno Rogue 16a2aa0f4b removed debug from full-screen dialog display 2022-12-15 23:00:40 +01:00
Zeno Rogue 7195d688d0 also fixed kite-and-dart in standard spatial embedding 2022-12-15 22:58:43 +01:00
Zeno Rogue ad7cbac338 fixed tes in standard spatial embedding 2022-12-15 22:48:29 +01:00
Zeno Rogue 90977aacaf minor style changes 2022-12-15 21:18:39 +01:00
Zeno Rogue 74b59d3331 fixed raycaster in sph_in_low; seems to still need fixing in non-regular 2022-12-15 21:17:08 +01:00
Zeno Rogue 9b91d46f47 list_setting::show_edit_option for very large lists 2022-12-15 21:14:36 +01:00
Zeno Rogue 735db2bcc4 fixed horo_ok to use mhyperbolic 2022-12-15 21:03:36 +01:00
Zeno Rogue 6473ff8b45 sph_in_low function 2022-12-15 21:03:20 +01:00
Zeno Rogue a20ee8e716 fixed the euc_in_noniso function 2022-12-15 19:21:16 +01:00
Zeno Rogue 585ab12e4f reverted sky fixup 2022-12-15 19:20:56 +01:00
Zeno Rogue a67081adf8 fixed slime size 2022-12-15 19:20:49 +01:00
Zeno Rogue e8b93600f7 fixup to last: euc in sol actually works 2022-12-15 19:00:41 +01:00
Zeno Rogue 33380fba89 noniso skies 2022-12-15 18:59:20 +01:00
Zeno Rogue 839beabbc9 vertical_vector in same-in-same 2022-12-15 18:20:13 +01:00
Zeno Rogue 6b262104fd fixed vertical in embedded_plane in noniso 2022-12-15 18:15:26 +01:00
Zeno Rogue 3233ecbfde fixup inverse/flat flags no longer set to true by default 2022-12-15 18:14:09 +01:00
Zeno Rogue 91ac8a600b flat and invert are now separate flags 2022-12-15 13:11:23 +01:00
Zeno Rogue 9498a1de03 more intuitive 3D setting 2022-12-15 12:48:25 +01:00
Zeno Rogue 18cc8cbba3 small fix in euc_in_noniso 2022-12-15 11:43:43 +01:00
Zeno Rogue 10e543a44e binary-like tilings can now be embedded in Solv and variants 2022-12-15 11:43:26 +01:00
Zeno Rogue 7dac26a85a fixed wall shadows in embedded_plane 2022-12-15 10:14:06 +01:00
Zeno Rogue 3b1b263c95 fixed the variants of binary tiling in embedded_plane 2022-12-15 10:03:11 +01:00
Zeno Rogue 4e3c72551a fixed random walls to appear in embedded_plane 2022-12-15 09:59:02 +01:00
Zeno Rogue 62ffefc0cc fixed the binary tiling to use correct straight lines on the vertical edges; also grid lines now work correctly 2022-12-15 09:58:47 +01:00
Zeno Rogue f9552eb74e fixed forward direction 2022-12-13 23:51:28 +01:00
Zeno Rogue d7f7f567f7 fixed mousedist with nonisotropic mouseaim_sensitivity 2022-12-13 23:28:48 +01:00
Zeno Rogue 45d2a2c4bb fixed to point2 instead of hpxy in mousedist and shmup 2022-12-13 23:27:59 +01:00
Zeno Rogue 1b8e2623ac fixup to Nil 2022-12-13 23:27:04 +01:00
Zeno Rogue 4356f41621 other noniso embeddings of Euclidean 2022-12-13 23:26:44 +01:00
Zeno Rogue e9c04e1e77 Sol/NIH geometries now have separate gc constants 2022-12-13 19:46:57 +01:00
Zeno Rogue 557d3206a8 cheatdest_list 2022-12-13 19:05:39 +01:00
Zeno Rogue 39ce564d40 load_from on float also sets the current value 2022-12-13 19:05:04 +01:00
Zeno Rogue f61adc2865 Nil embedding 2022-12-13 19:04:43 +01:00
Zeno Rogue 63b17a605c fixed a graphical glitch when drawing chasms in euc_in_hyp 2022-12-13 12:37:29 +01:00
Zeno Rogue 5477b0e863 rogueviz:: fixed some hotkey bugs in smoothcam 2022-12-11 21:14:06 +01:00
Zeno Rogue 0dd29dd7cf adjusted RogueViz to use the new 3D functions 2022-12-11 21:12:51 +01:00
Zeno Rogue aee6285505 12.1f 2022-12-09 02:49:21 +01:00
Zeno Rogue 8c601bb575 fixed spacedist and worms on sphere 2022-12-09 02:33:15 +01:00
Zeno Rogue 1bb8056e0d fixed eyes on sphere 2022-12-09 02:33:15 +01:00
Zeno Rogue 9b3324b7eb fixed rotational models on sphere 2022-12-09 02:33:15 +01:00
Zeno Rogue 0febf06462 fixed cone graphics on sphere 2022-12-09 02:33:15 +01:00
Zeno Rogue 70421ed506 2.5D: deleteSky 2022-12-09 02:33:15 +01:00
Zeno Rogue 852dc94fad draw_sky disabled now also disables Euclidean sky 2022-12-09 02:33:15 +01:00
Zeno Rogue 0570d3afee cgi_string now record geometry class 2022-12-09 02:33:15 +01:00
Zeno Rogue 07931fcf54 2.5D: improved config 2022-12-09 02:33:15 +01:00
Zeno Rogue 80ab199607 2.5D: automatically reset, delete sky, and reset GL on change embedding (not sure why reset GL is needed...) 2022-12-09 02:33:15 +01:00
Zeno Rogue acaa04dace fixed mouseover selection in embedded sphere 2022-12-09 02:33:15 +01:00
Zeno Rogue fbeac1354d fixed some more reverse levels 2022-12-09 02:33:15 +01:00
Zeno Rogue 69af3ee4e3 embedded_plane:: safer pushing 2022-12-09 02:33:15 +01:00
Zeno Rogue 0c59d626bb disabled Archimedean check in embedded_plane 2022-12-09 02:33:15 +01:00
Zeno Rogue d334062656 fixed some bugs with sphere embedded in product 2022-12-09 02:33:15 +01:00
Zeno Rogue 689f64ed98 setup for sphere embedded in product 2022-12-09 02:33:15 +01:00
Zeno Rogue 107cae8f5c fixed 2D vector art displayed on sphere 2022-12-09 02:33:15 +01:00
Zeno Rogue 2857bc95dc disabled the HYBRID flag, embedded-into-products are not really hybrids 2022-12-09 02:33:15 +01:00
Zeno Rogue 0fd929a53b fixed the computation of cgi.STUFF 2022-12-09 02:33:15 +01:00
Zeno Rogue 08b72c52b3 fixed arcm geometry setting 2022-12-09 02:33:15 +01:00
Zeno Rogue bcbd5808f9 fixed the Ivy placement in embedded_plane 2022-12-09 02:33:15 +01:00
Zeno Rogue ababcdfee8 fixed a potential bug in generate_floorshapes() -- generate the models up to FULL_EDGE, as S6 could exceed S7 2022-12-09 02:33:15 +01:00
Zeno Rogue 2f2e770d64 fixed a possible bug in gldraw -- ioffset instead of offset 2022-12-09 02:33:15 +01:00
Zeno Rogue 49c871cf19 NightStar is now smaller in Euclidean 2022-12-09 02:33:15 +01:00
Zeno Rogue 3e733ae6e9 Big change: spatial_embedding option 2022-12-09 02:33:15 +01:00
Zeno Rogue 90dd9e9866 fixed the underflow of mpdist 2022-12-09 02:33:15 +01:00
Zeno Rogue 41d28b267f fixed make_star with BADMODEL 2022-12-09 02:33:15 +01:00
Zeno Rogue 429ed81293 added finishshape before clone_shape as it could damage the previous shape 2022-12-09 02:33:15 +01:00
Zeno Rogue bf001926c2 refactored the vertical movement functions 2022-12-09 02:33:15 +01:00
Zeno Rogue adfab30c62 fixed a bug with shmup missile levels 2022-12-09 02:33:15 +01:00
Zeno Rogue 8a7b35e3ee 2.5D:: fixed sky colors 2022-12-04 16:42:08 +01:00
Zeno Rogue cfc62c5ee0 Fixed the radar transform computation in 2.5D. The bug also affected fog rendering 2022-12-04 16:30:51 +01:00
Zeno Rogue 9337240d49 inventory:: added missing outlines 2022-12-04 15:35:58 +01:00
Zeno Rogue 0f4cb95adc fixed the missing outlines in displayglyph 2022-12-04 15:35:44 +01:00
Zeno Rogue fcfadf9eaa inv:: correct dialogcolor used 2022-12-04 15:25:48 +01:00
Zeno Rogue 2524fb76d0 dialog:: added constants for all colors used in dialogs (but no settings in menu yet); refactored a bit, fixing minor inconsistencies 2022-12-04 15:24:42 +01:00
Zeno Rogue 31f7db81c7 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2022-12-04 14:49:23 +01:00
Zeno Rogue 2e9ee75dc3 dialog:: lists in help extensions 2022-12-04 14:49:06 +01:00
Zeno Rogue 42f96b768c improvements to sphere flipping 2022-12-04 14:48:12 +01:00
Zeno Rogue 0770a11164 dialog::first_list_fake_key constant 2022-12-04 14:46:50 +01:00
Zeno Rogue 5d13663695 improved the orb text display in OSM for icons 2022-12-04 14:45:55 +01:00
Zeno Rogue 2cb27a165b
Merge pull request #328 from jlmjlm/pof1
Give the Plane of Fire a redder floor than CR4.
2022-12-04 14:00:02 +01:00
Jacob Mandelson 2e3d0ecd7c Give the Plane of Fire a redder floor than CR4. 2022-11-28 19:10:42 -08:00
Zeno Rogue 301dad5d7b sag:: sagsmooth option 2022-11-13 16:22:55 +01:00
Zeno Rogue 9297c94028 in non-perspective modes, draw disk restriction as wireframes instead of solid walls 2022-11-13 16:22:55 +01:00
Zeno Rogue 828c185520 rogueviz:: edit weight gamma via UI 2022-11-13 16:22:55 +01:00
Zeno Rogue 84344e7d5d sag:: fixup to sag_edge 2022-11-13 16:22:55 +01:00
Zeno Rogue 6450f7c8a6 sag:: set RV_INVERSE_WEIGHT flag 2022-11-13 16:22:55 +01:00
Zeno Rogue 97fb10b6f0 sag:: vizsa_len now has a default value which does not invoke division-by-zero bugs 2022-11-13 16:22:55 +01:00
Zeno Rogue 0faf07741c rogueviz:: configure_edge_display can now edit visible_from_hi 2022-11-13 16:22:55 +01:00
Zeno Rogue 67b70ea7fd rogueviz:: an option to show edge weights as labels 2022-11-13 16:22:55 +01:00
Zeno Rogue b7aae63b90 rogueviz:: remove visible_from_help, it just displays a list 2022-11-13 16:22:55 +01:00
Zeno Rogue 06523e063e used cyclefix and raddif in more places; (c)spin90, (c)spin180 and spin180 functions; rephrased M_PI in terms of TAU and x._deg when applicable 2022-11-13 16:22:55 +01:00
Zeno Rogue 563b9c1f74 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2022-11-11 14:57:19 +01:00
Zeno Rogue 612356db7f added missing leastsquare 2022-11-11 14:56:59 +01:00
Zeno Rogue cf75e6f2ab
Merge pull request #323 from jlmjlm/mir-lh
Draw mimics with sword in left hand if PC's sword in left hand.
2022-11-05 16:44:59 +01:00
Zeno Rogue 13b8230238 fixed the date of update 12.1e 2022-11-04 23:59:04 +01:00
Zeno Rogue 6fff924753 version 12.1e 2022-11-04 23:57:51 +01:00
Zeno Rogue 16d142711a fixed #define T spilling 2022-11-04 23:57:51 +01:00
Zeno Rogue 1cbaf36698 added guards to dhrg.h 2022-11-04 23:53:13 +01:00
Zeno Rogue ba009a80b2 intra:: reset raycaster on changes; do not try to change scalefactor automatically 2022-11-04 23:42:48 +01:00
Zeno Rogue af851a1d70 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2022-11-04 23:15:44 +01:00
Zeno Rogue f2785d22a4
Merge pull request #324 from jlmjlm/weburl
Correct URL in help text.
2022-11-04 23:15:29 +01:00
Zeno Rogue 2bab227d4e Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2022-11-04 23:15:11 +01:00
Zeno Rogue e65723002f tactic:: fixed page buttons 2022-11-04 23:15:00 +01:00
Zeno Rogue c65d17063f yendor:: improved layout 2022-11-04 23:15:00 +01:00
Zeno Rogue 266d6fd50d shmup:: fixed Gadflies appearing forever 2022-11-04 23:15:00 +01:00
Zeno Rogue b4302ac6b4 shmup:: count_pauses is now reset to 0, and also not displayed in standard shmup 2022-11-04 23:15:00 +01:00
Zeno Rogue 035532ef26 shmup:: fixed pink tortoises 2022-11-04 23:15:00 +01:00
Zeno Rogue 774c8a9744 shmup:: Bulls now correctly destroy walls they crash into 2022-11-04 23:15:00 +01:00
Zeno Rogue 4daacb7337 shmup:: used curtime correctly instead of ticks; also fixed Flail Guards 2022-11-04 23:15:00 +01:00
Zeno Rogue 622bb9e5f7 when setting Elemental Wall as cheat destination, Elemental Wall itself is no longer picked 2022-11-04 23:15:00 +01:00
Zeno Rogue 320aac6b9a dialog:: larger file dialog, automatically set position 2022-11-04 23:15:00 +01:00
Zeno Rogue 2bc0de05a6 dialog:: search in file dialog 2022-11-04 23:15:00 +01:00
Zeno Rogue 8e1c05d3cf dialog:: refactor hasInfix 2022-11-04 23:15:00 +01:00
Zeno Rogue 0ff46ff143 dialog:: DIALOG_WIDE 2022-11-04 23:14:59 +01:00
Zeno Rogue 3ab4915ff4 dialog:: find_highlight 2022-11-04 23:14:59 +01:00
Zeno Rogue 5c4cf73937
Merge pull request #325 from jlmjlm/acc3
Have ACCONLY3 show all three alternatives.
2022-11-04 23:12:29 +01:00
Jacob Mandelson 383dd421bd Have ACCONLY3 show all three alternatives. 2022-11-04 09:12:08 -07:00
Jacob Mandelson 94d90cf5e0 Correct URL in help text. 2022-11-04 08:06:02 -07:00
Zeno Rogue 1482a7aca2 12.1d 2022-10-27 16:07:14 +02:00
Zeno Rogue 85483d62dd ineligible_starting_land disables achievements 2022-10-27 16:06:39 +02:00
Zeno Rogue cfac1cf3ab made file dialog more intuitive 2022-10-27 16:06:39 +02:00
Zeno Rogue 303d173bf6 mousewheel now works in dialog lists 2022-10-27 16:06:39 +02:00
Zeno Rogue 2d1cff6549 display F4 key name correctly, and 'fake keys' not displayed 2022-10-27 16:06:39 +02:00
Zeno Rogue 7267b3c7ce fixed overview page buttons back 2022-10-27 16:06:39 +02:00
Zeno Rogue fb6e8b72da racing:: limit on pauses 2022-10-27 16:06:39 +02:00
Zeno Rogue 32f876dc4f fixed the ogg files 2022-10-27 16:06:39 +02:00
Zeno Rogue 0639c9c027 intra:: select edge ratio 2022-10-27 16:06:39 +02:00
Zeno Rogue 64a613572a fixed through_wall 2022-10-27 16:06:39 +02:00
Zeno Rogue 18f571b683 default dialog handler now does panning 2022-10-27 16:06:39 +02:00
Zeno Rogue f606174445 fixed point_direction 2022-10-27 16:06:39 +02:00
Zeno Rogue 0c22ab2b4b intra:: allow panning, edit inside walls, and draw the portal to edit 2022-10-27 16:06:39 +02:00
Zeno Rogue 6ef282173f map editor:: building mode 2022-10-27 16:06:39 +02:00
Zeno Rogue 87921fe0f9 special welcome message for portal maps 2022-10-27 16:06:39 +02:00
Zeno Rogue 419837a375 ray::fixed_map changed from raycaster menu 2022-10-27 16:06:39 +02:00
Zeno Rogue 1ac22f4be1 ray:: use mapeditor::map_version to recreate the map 2022-10-27 16:06:39 +02:00
Zeno Rogue 3ce5597cc1 editing map/portals now changes map_version 2022-10-27 16:06:39 +02:00
Zeno Rogue f4282e1118 intra:: create/manage portal maps from the map editor 2022-10-27 16:06:39 +02:00
Zeno Rogue a83228cd15 display some help for portal maps 2022-10-27 16:06:39 +02:00
Zeno Rogue efe7eea3de intra:: an option to set recommended settings 2022-10-27 16:06:39 +02:00
Zeno Rogue 1791190493 intra:: unconnected portals form a list 2022-10-27 16:06:39 +02:00
Zeno Rogue c2acb4f271 intra:: select world for a list, or load another world from a saved map 2022-10-27 16:06:39 +02:00
Zeno Rogue e653f4eaeb shiftclick in mapeditor now deletes stuff 2022-10-27 16:06:39 +02:00
Zeno Rogue 60a3f21b9f compute_cell_color factored out 2022-10-27 16:06:39 +02:00
Zeno Rogue 7ca6eb1658 pure_keys_scroll now available in map settings 2022-10-27 16:06:39 +02:00
Zeno Rogue a71207800b rogueviz::sag::display match A/B parameters 2022-10-27 16:06:39 +02:00
Zeno Rogue 3506ccac13 rogueviz::sag:: loglik_repeat works better now 2022-10-27 16:06:39 +02:00
Zeno Rogue 5cdbca3b21 optimize_sag_loglik for match 2022-10-27 16:06:39 +02:00
Zeno Rogue e011f86671 sag:: an option to generate fake data, mainly for smMatch 2022-10-27 16:06:39 +02:00
Zeno Rogue 5a19fffd8f rogueviz::sag:: smMatch method 2022-10-27 16:06:39 +02:00
Zeno Rogue bb5fa51965 rogueviz::sag:: prepared for further methods 2022-10-27 16:06:39 +02:00
Zeno Rogue d828ff0e7e output_stats may include numiter and temperatures 2022-10-27 16:06:39 +02:00
Zeno Rogue fa7145586f fixup to long long 2022-10-27 16:06:39 +02:00
Zeno Rogue a1695a82d0 rogueviz::sag:: automatically set RT to average values 2022-10-27 16:06:39 +02:00
Zeno Rogue c8a1c8b5d7 rogueviz::sag;: geometry stats 2022-10-27 16:06:39 +02:00
Zeno Rogue 4c30e6051f rogueviz::sag:: Dijkstra edges, save/load distances from file 2022-10-27 16:06:39 +02:00
Zeno Rogue 15d97a8cd1 rogueviz::sag:: angular distances 2022-10-27 16:06:39 +02:00
Zeno Rogue d39623fdd5 rogueviz::sag:: ll fixup 2022-10-27 16:06:39 +02:00
Zeno Rogue fd9d58073a arg:: added argll 2022-10-27 16:06:39 +02:00
Zeno Rogue 7ad4668623 rogueviz::sag:: numiter is now long long 2022-10-27 16:06:39 +02:00
Zeno Rogue e7bebaa79c rogueviz::sag:: conserve memory for sagdist 2022-10-27 16:06:39 +02:00
Zeno Rogue b8b1df01e7 fixed some linewidth issues 2022-10-27 16:06:39 +02:00
Zeno Rogue 472cbe205b renamed display 'recently changed settings' to 'find a setting', also recently changed now use a list widget 2022-10-27 16:06:39 +02:00
Zeno Rogue b89204e616 expansion improved again: auto_extend can be disabled 2022-10-27 16:06:39 +02:00
Zeno Rogue fc2e10739d an option to select max distance is back 2022-10-27 16:06:39 +02:00
Zeno Rogue 8294246449 dialog:: sm::NARROW_LINES 2022-10-27 16:06:39 +02:00
Zeno Rogue caa4ac5bb4 sm::AUTO_VALUES to automatically assign option widths 2022-10-27 16:06:39 +02:00
Zeno Rogue 5c507e58fd invslider fixup 2022-10-27 16:06:39 +02:00
Zeno Rogue 9ab7bfeaae dialog:: list used in models 2022-10-27 16:06:39 +02:00
Zeno Rogue cb4955e397 dialog:: list used in inv 2022-10-27 16:06:39 +02:00
Zeno Rogue 65095edea8 lists in expansion dialog 2022-10-27 16:06:39 +02:00
Zeno Rogue bcadbdbcab rogueviz:: vertex search improvements 2022-10-27 16:06:39 +02:00
Zeno Rogue 29ba4138a4 dialog:: improvements to list dialogs 2022-10-27 16:06:39 +02:00
Zeno Rogue 06f450af22 dialog:: lists keep the mouse better 2022-10-27 16:06:39 +02:00
Zeno Rogue 3408c1119f dialog:: automatically move list_skip 2022-10-27 16:06:39 +02:00
Zeno Rogue 40ca8b8553 rogueviz:: list used in smoothcam 2022-10-27 16:06:39 +02:00
Zeno Rogue bf86077ebf rogueviz:: list used in rogueviz vertex search 2022-10-27 16:06:39 +02:00
Zeno Rogue 6b8c177c33 dialog:: list used in find_setting 2022-10-27 16:06:39 +02:00
Zeno Rogue bbbf2f9cd0 config add_edit accept int keys 2022-10-27 16:06:39 +02:00
Zeno Rogue 0fc2dc2d65 dialog:: list used in mapeditor 2022-10-27 16:06:39 +02:00
Zeno Rogue 10e9c0fabe dialog:: list used in scroes 2022-10-27 16:06:39 +02:00
Zeno Rogue 781d6f0257 dialog:: list used in Yendor 2022-10-27 16:06:39 +02:00
Zeno Rogue 3b5a5c01c5 dialog:: file dialogs now use list 2022-10-27 16:06:39 +02:00
Zeno Rogue 42a1615d0d dialog:: addBoolItem_action now accepts int argument 2022-10-27 16:06:38 +02:00
Zeno Rogue 5ca19a0d9b hotkeys for geometry filters; geometry list is now a list; unfiltered list 2022-10-27 16:06:38 +02:00
Zeno Rogue 72bdd123a2 geom-exp:: 'load from file' appears in the geometry menu 2022-10-27 16:06:38 +02:00
Zeno Rogue 601250f2de dialog:: control lists with mouse 2022-10-27 16:06:38 +02:00
Zeno Rogue 0d2f054d2b dialog:: lists; highlight should now work even if multiple items have the same name 2022-10-27 16:06:38 +02:00
Jacob Mandelson 7e2b8baf2f Draw mimics with sword in left hand if PC's sword in left hand. 2022-10-16 10:02:32 -07:00
Zeno Rogue 93892718c5 CAP_ARCM guards added 2022-10-16 10:31:17 +02:00
Zeno Rogue 49564b2e0e should no longer freeze when maxv/unit or maxv/tank is negative or too large 2022-10-16 09:48:57 +02:00
Zeno Rogue 3c867a7ff0 ads-game:: joystick control 2022-10-16 09:46:04 +02:00
Zeno Rogue 0c38c4ad68 ads-game:: improvements to dS 2022-10-16 09:37:21 +02:00
Zeno Rogue 122ea6dfb4 informed about hidden dependencies in rogueviz/ads/ 2022-10-15 22:58:46 +02:00
Zeno Rogue 875b0159e6 nonisotropic range parameters now work in all perspective modes 2022-10-15 22:58:30 +02:00
Zeno Rogue 9c603c13d4 slr:: slr::range_z parameter 2022-10-15 22:57:37 +02:00
Zeno Rogue e74f2e3c78 ads-game:: improvements to CLI switches 2022-10-15 22:56:42 +02:00
Zeno Rogue 10856a6694 ads-game:: fixes to ghosts 2022-10-15 22:56:27 +02:00
Zeno Rogue 55d4f93873 no copyright line shown if texture not shown due to wrong mode 2022-10-15 22:56:10 +02:00
Zeno Rogue 4e7b95e346 ads-game:: new view modes are now available in the menu 2022-10-15 22:55:33 +02:00
Zeno Rogue 971ce2aade ads-game:: more default settings set in set_config 2022-10-15 22:53:13 +02:00
Zeno Rogue e129ce08c6 ads-game:: print for cross_result 2022-10-15 21:38:36 +02:00
Zeno Rogue 6e1c32787a ads-game:: AdS cross0_cone now takes auto_rotate into account 2022-10-15 21:37:26 +02:00
Zeno Rogue 38fddfa43f ads-game:: past/future cone view 2022-10-15 17:56:15 +02:00
Zeno Rogue 1ace6d4fff ads-game:: switch_replay only while in pause 2022-10-15 14:26:55 +02:00
Zeno Rogue 1d41b80b2a ads-game:: no more crash when trying to restart while in spacetime 2022-10-15 14:26:42 +02:00
Zeno Rogue c6dad6ee99 ads-game:: spacetime functions renamed 2022-10-15 14:26:12 +02:00
Zeno Rogue 17e2a56320 ads-game:: better organized spacetime display 2022-10-15 14:25:31 +02:00
Zeno Rogue 5423eebc2d ads-game:: cleanup nomap 2022-10-15 14:24:56 +02:00
Zeno Rogue 0ddc6c722f ads-game:: duality modes for AdS 2022-10-15 14:23:53 +02:00
Zeno Rogue 9121eb7d72 ads-game:: refactored switch_pause 2022-10-15 14:22:09 +02:00
Zeno Rogue a5a7e8a5fa deSitter projections shown in menu 2022-10-14 01:11:29 +02:00
Zeno Rogue 1cde76c880 fixup to views : filename 2022-10-14 01:09:33 +02:00
Zeno Rogue 970c2acc96 ads-game:: no longer crashes if underlying is not-gNormal hyperbolic 2022-10-14 01:02:36 +02:00
Zeno Rogue 45141a9df0 ads-game:: underlying/spacetime views 2022-10-14 01:01:50 +02:00
Zeno Rogue a7ca4c2902 relativistic projections added 2022-10-14 00:56:48 +02:00
Zeno Rogue 7a6df6f060 fixed GF_NO_FOG 2022-10-14 00:55:34 +02:00
Zeno Rogue e6d0ff8789 perspective of any kind now has Panini 2022-10-14 00:54:51 +02:00
Zeno Rogue d218896b63 sl2:: more projections allowed 2022-10-14 00:54:31 +02:00
Zeno Rogue 7f0bf3b269 anim:: CLI animation record functions now accept 0 which means use the current value 2022-10-11 20:02:20 +02:00
Zeno Rogue 6ac17b31f1 hybrid:: new options for switching 2022-10-11 20:00:51 +02:00
Zeno Rogue f666f51bcd added an option for nonisotropic_weird_transforms 2022-10-11 20:00:33 +02:00
Zeno Rogue c10906d349 fixed 'penrose staircases' in rot spaces 2022-10-11 20:00:13 +02:00
Zeno Rogue 4cdc7db18d curvepoint_first function to loop curves automatically 2022-10-11 19:56:56 +02:00
Zeno Rogue 73c689211f shader flag to use no fog -- useful to display ultra-ideal points 2022-10-11 19:56:37 +02:00
Zeno Rogue 9184532036 ads-game:: replay mode 2022-10-09 13:15:57 +02:00
Zeno Rogue 97a4f13ff8 version 12.c 2022-10-08 02:36:13 +02:00
Zeno Rogue 757660edd0 bringris:: musicvolume editable only if music available 2022-10-08 02:02:55 +02:00
Zeno Rogue 4e0f99f60b added cvoight to credits 2022-10-08 02:02:23 +02:00
Zeno Rogue 2bafda5f18 a comment on why OINF should be divisible by 3 2022-10-08 02:02:03 +02:00
Zeno Rogue 5008609b95 tes;: refactored compute_vertex_valence, also is now able to compute valence in the 'generic' case 2022-10-08 02:01:25 +02:00
Zeno Rogue 60d0d15dab tes:: refactored find_connection 2022-10-08 01:54:30 +02:00
Zeno Rogue d8da9639d0 tes:: split get_adj into two functions, one with connection specified (inlcuding mirror), and one not 2022-10-08 01:53:02 +02:00
Zeno Rogue 29f6bbbe90 tes:: check_football_colorabilty is disabled if valence not known 2022-10-08 00:18:56 +02:00
Zeno Rogue 9284cb237a tes:: mirror without parameter is allowed if only one edge is given 2022-10-07 22:23:07 +02:00
Zeno Rogue 35fa99460b tes:: fixed the bugs with mirrors and apeirogons, and some other bugs 2022-10-07 22:21:46 +02:00
Zeno Rogue 7e28ce278e a sample with mirrors and apeirogons 2022-10-07 22:19:10 +02:00
Zeno Rogue 12316ed631 Version 12.1b 2022-10-06 21:45:11 +02:00
Zeno Rogue b76ab8ebdd rogueviz:: smoothcam:: snapping, side view 2022-10-06 19:40:22 +02:00
Zeno Rogue 2168d5ad4c orbmode in hyper.h included 2022-10-06 18:16:20 +02:00
Zeno Rogue f3427c4968 compute_vertex_valence no longer crashes with -arb-unmirror 0 -- we just ignore vertex valence in this case, we do not use it for now 2022-10-06 14:52:22 +02:00
Zeno Rogue 8b758bded9 arb:: tilings with mirrors can now be loaded with -arb-unmirror 2022-10-06 14:47:48 +02:00
Zeno Rogue 70b5da8178 arb:: debug removed 2022-10-06 14:47:17 +02:00
Zeno Rogue a1cbf8c906 minecolors and distcolors now accept less/more colors in table 2022-10-06 13:47:00 +02:00
Zeno Rogue fe937cf20a color table dialog now allows adding more / removing colors 2022-10-06 13:46:15 +02:00
Zeno Rogue 313666a240 edit unreversed colors easily 2022-10-06 13:37:21 +02:00
Zeno Rogue 03b7804817 mirrored tiles marked on or off 2022-10-06 13:35:56 +02:00
Zeno Rogue 6de6e71bd4 documented width of cell boundaries 2022-10-06 13:23:18 +02:00
Zeno Rogue ddf8ea17e3 choice of orb display style 2022-10-06 13:10:57 +02:00
Zeno Rogue 8bf80dd96c added CrashTuvai to credits (for help with racing achievement bug) 2022-10-06 12:58:21 +02:00
Zeno Rogue 2a5cdf28c8 disable Yendor on racing 2022-10-06 12:57:58 +02:00
Zeno Rogue 6a626007bb racing:: racing menu now shows whether an official track is on 2022-10-06 12:57:47 +02:00
Zeno Rogue 789770da43 racing:: switch modes correctly when loading official track 2022-10-06 12:57:19 +02:00
Zeno Rogue 07ce60c3ef ignore the land structure for the racing achievement 2022-10-06 12:56:50 +02:00
Zeno Rogue 8b6effba1b Orb of Choice now works with Orb of Safety 2022-10-06 12:32:06 +02:00
Zeno Rogue 8aaf06969c global_boundary_ratio option 2022-10-06 12:26:17 +02:00
Zeno Rogue f4cf3440ff debug_tiles is visible in experiments 2022-10-06 12:01:31 +02:00
Zeno Rogue 6c88e9b2c3 debug_tiles improvements: 2 displays more tile information, not displayed in standard except in cheat mode 2022-10-06 11:59:34 +02:00
Zeno Rogue 9004fdeee5 tes mirror tile documented 2022-10-06 11:09:03 +02:00
Zeno Rogue d44e8b6416 tes:: mirror command added 2022-10-06 10:59:57 +02:00
Zeno Rogue bef884c9dc fixed arcm colors for mirrorless 2022-10-06 10:08:21 +02:00
Zeno Rogue 5a9e7e4069 more distinct mirrored colors 2022-10-06 10:08:10 +02:00
Zeno Rogue 3369adfc98 separate color set for mirrored tiles in arb/arcm 2022-10-06 09:57:18 +02:00
Zeno Rogue 30839fdb15 Orb of Sword II now displays reversed 2022-10-06 08:49:26 +02:00
Zeno Rogue f9fdc2ee0a added Jacob Mandelson to the credits 2022-10-06 08:48:00 +02:00
Zeno Rogue 93727e433e
Merge pull request #322 from jlmjlm/hl_ani_dice
Highlight hostile dice if poly_outline is set for highlighting.
2022-10-06 08:44:02 +02:00
Zeno Rogue 06c73ad9fb
Merge pull request #321 from jlmjlm/highlight_langs
Grammar fix to Alt-to-highlight message.
2022-10-06 08:43:22 +02:00
Zeno Rogue 21cbc2d621
Merge pull request #320 from jlmjlm/whos
Flip over worm-head shape used in Orb of Domination.
2022-10-06 08:42:42 +02:00
Jacob Mandelson f2623ff6ab Highlight hostile dice if poly_outline is set for highlighting. 2022-10-05 20:40:15 -07:00
Jacob Mandelson 00c4d2c0a5 Grammar fix to Alt-to-highlight message. 2022-10-05 20:26:17 -07:00
Jacob Mandelson 6b9728b385 Flip over worm-head shape used in Orb of Domination.
Worms get drawn from tail to head, so the shape used for the head
is upside-down.  Hence it should be flipped over when used as the
icon for the Orb of Domination.
2022-10-05 08:43:16 -07:00
Zeno Rogue 1aa4242ace Orb icon updates 2022-10-04 18:14:16 +02:00
Zeno Rogue a3e6d79607
Merge pull request #319 from jlmjlm/v12.1+os
Provide orbs with shapes that hint at their function
2022-10-04 16:23:59 +02:00
Zeno Rogue 6514c8758e that was not a correct fix 2022-09-29 15:25:41 +02:00
Zeno Rogue 5a6444b45a yet another fixup for SCU 2022-09-29 15:23:25 +02:00
Zeno Rogue 0fb4033868 ads-game:: added CAP_VIDEO guard, and made SCU compile work 2022-09-29 15:13:59 +02:00
Zeno Rogue 31318862cb rogueviz:: added CAP_THREAD guard 2022-09-29 15:13:30 +02:00
Zeno Rogue ac088d1d41 laDual and laSnakeNest now appear when legal 2022-09-29 15:13:15 +02:00
Zeno Rogue 1c24daea77 added some guards 2022-09-29 15:12:56 +02:00
Zeno Rogue 628f19a0a0 ads-game:: recenter cheat 2022-09-29 15:05:57 +02:00
Zeno Rogue c4a4b21296 ads-game:: better protection from invalid in ds 2022-09-29 15:04:54 +02:00
Zeno Rogue 171b198cd8 ads-game:: debug removed 2022-09-29 14:27:40 +02:00
Zeno Rogue 9c7f23e16e ads-game:: fixed ds_max_ and ds_tank_ config variables 2022-09-29 14:27:25 +02:00
Zeno Rogue 3518c9abf3 ads-game:: -ds-recenter feature 2022-09-29 14:27:06 +02:00
Zeno Rogue 6fa7cdaf0a ads-game:: fixed the precision issues casuing weird display in dS 2022-09-29 14:26:53 +02:00
Zeno Rogue f161f9bf0a ads-game:: fixed convergent/divergent spirals 2022-09-29 14:25:18 +02:00
Zeno Rogue 80c02c7e38 ads-game:: fixed history view 2022-09-29 14:24:57 +02:00
Zeno Rogue 25997dc6c1 ads-games:: fixes to ds-record 2022-09-29 13:09:21 +02:00
Zeno Rogue 1391a0e47f ads-game:: display resources in corner for now 2022-09-29 12:12:26 +02:00
Zeno Rogue 553bd8f466 ads-game:: do not crash if list missing 2022-09-29 12:12:11 +02:00
Zeno Rogue 01c7ff5bc6 ads-game:: past fixup 2022-09-29 12:12:02 +02:00
Zeno Rogue cc1d2c1b48 ads-game:: footer/copyright shown 2022-09-29 12:11:50 +02:00
Zeno Rogue 3808d93a11 ads-game:: don't display proper time of history ships even though view_proper_times is off 2022-09-29 11:40:21 +02:00
Zeno Rogue 293c271c7f past cones are displayed too, not only future cones 2022-09-29 11:38:54 +02:00
Zeno Rogue b26ce4a067 ads-game:: missile rapidity editable, and also no longer changes when scale changes 2022-09-29 11:22:19 +02:00
Zeno Rogue b8eeec248e ads-game:: fixed some names to Relative Hell 2022-09-29 11:14:27 +02:00
Zeno Rogue 84022c1ab4 ads-game:: restart fixup 2022-09-29 11:14:14 +02:00
Zeno Rogue 6549637f8d ads-game:: fixed ads crash ship 2022-09-29 11:13:35 +02:00
Zeno Rogue b34fbba7b4 ads-game:: do not generate rocks when shooting, so that it is faster 2022-09-29 11:13:24 +02:00
Zeno Rogue 85816ca0bb ads-game:: in ds, all objects have no black boundary to make them easier to recognize 2022-09-29 11:12:49 +02:00
Zeno Rogue 864f6d7899 ads-game:: speeds and acceleration are now given in absolute units (no dep on animperiod) 2022-09-29 11:12:24 +02:00
Zeno Rogue b0ae2774a1 ads-game:: 'pick the game' screen, also dS restarts correctly 2022-09-29 11:10:16 +02:00
Zeno Rogue ef7050aed2 ads-game:: correct sphere flipping 2022-09-29 01:39:57 +02:00
Zeno Rogue 49ce0c1551 ads-game:: better ship shape handling 2022-09-29 01:39:16 +02:00
Zeno Rogue bcd6d772f6 ads-game:: fix texture glitches 2022-09-29 01:13:43 +02:00
Zeno Rogue 0c6d83b702 ads-game:: don't display ship history unless paused 2022-09-29 01:12:46 +02:00
Zeno Rogue 7f8a2f7a49 ads-game:: reduced default texture quality 2022-09-29 01:12:32 +02:00
Zeno Rogue a401a7ed67 ads-game:: sounds 2022-09-29 01:12:08 +02:00
Zeno Rogue a84a9c94dd settings for dS (also are now separate from adS) 2022-09-28 22:10:09 +02:00
Zeno Rogue a775a74bb2 fixed missiles/particles being invisible due to incorrect clockwiseness of shape 2022-09-28 21:28:47 +02:00
Zeno Rogue a3b85103b6 ads-game:: in dS, faster resources, and spin them correctly 2022-09-28 21:27:06 +02:00
Zeno Rogue 0367d9553d ads-game:: display score in dS 2022-09-28 21:26:43 +02:00
Zeno Rogue a9c416ac64 ds-game:: fixed area calculcation 2022-09-28 21:06:56 +02:00
Zeno Rogue 773e73dcc2 ads-game:: priorities (and also main rock) 2022-09-28 21:06:07 +02:00
Zeno Rogue 95b205cce0 ads-game:: resources and crashes in dS 2022-09-28 20:27:11 +02:00
Zeno Rogue ade4f9c030 ads-game:: ds-texture 2022-09-28 19:18:04 +02:00
Zeno Rogue 22a5729d35 ads-game:: dsgame patterns 2022-09-26 13:25:30 +02:00
Zeno Rogue 54e0d85ea7 ds-game:: added the main star, and fixed the precision issues (as long as close to the main star) 2022-09-26 10:53:55 +02:00
Zeno Rogue 4af232e9c1 ads:: future in AdS shown correctly (using light-like geodesics); show future for dS 2022-09-25 22:20:18 +02:00
Zeno Rogue c49b320330 rogueviz:: presentation improvements 2022-09-24 09:14:31 +02:00
Zeno Rogue 40d3c39cf1 rogueviz:: objmodel minor fix 2022-09-24 09:13:38 +02:00
Zeno Rogue 69280c7efe bringris:: adjust to gamescreen no parameter 2022-09-24 09:13:25 +02:00
Zeno Rogue df6dd67fc1 nilrider:: game_keys_scroll 2022-09-24 09:13:00 +02:00
Zeno Rogue e459723836 no rug drawn if nomap 2022-09-24 09:12:34 +02:00
Zeno Rogue 804308c03e old_center 2022-09-24 09:12:23 +02:00
Zeno Rogue 624cac0c80 game_keys_scroll not scroll if ALT is pressed 2022-09-24 09:11:06 +02:00
Zeno Rogue 2e5d9dd626 ystrafe no longer brings walking eye level below 0 2022-09-24 09:10:49 +02:00
Zeno Rogue f33d169fe1 commandline rotate commands set playermoved=false 2022-09-24 09:10:32 +02:00
Zeno Rogue 62fed6129f ads-game:: record a run 2022-09-20 12:36:16 +02:00
Zeno Rogue bdbf4e2935 ads-game:: ds-game more game-y 2022-09-20 12:29:19 +02:00
Zeno Rogue fbf0b487b1 ads-game:: added the de Sitter version 2022-09-19 23:17:27 +02:00
Zeno Rogue 720ccc649c ads-game:: removed some junk 2022-09-19 23:17:00 +02:00
Zeno Rogue 8f086f7bb5 ads-game:: display time for shipstate 2022-09-19 23:16:41 +02:00
Zeno Rogue f375d609c6 ads-game:: refactored read_movement 2022-09-19 23:16:16 +02:00
Zeno Rogue 987c0e6113 ads-game:: refactored set_default_keys 2022-09-19 23:15:27 +02:00
Zeno Rogue 2e99da82ba ads-game:: fix numerical error 2022-09-19 00:12:00 +02:00
Zeno Rogue 4b74fdf7c1 ads-game:: fix spacing 2022-09-19 00:11:48 +02:00
Zeno Rogue 277b1e1fd0 ads-game:: fixed restart 2022-09-18 23:39:04 +02:00
Zeno Rogue bbc57d9b8f ads-game:: improved celldraw priority 2022-09-18 23:36:47 +02:00
Zeno Rogue f46279843d ads-game:: restart bugfix 2022-09-18 23:36:21 +02:00
Zeno Rogue fcd54e3d62 ads-game:: const added 2022-09-18 23:36:04 +02:00
Zeno Rogue 567ef8e7e6 ads-game:: resource expiration 2022-09-18 17:29:01 +02:00
Zeno Rogue a1a65ac612 optimize center in queue 2022-09-18 17:28:48 +02:00
Zeno Rogue 43305ea1cd vctr is now the hyperbolic cell (similar for some variables); also invincibility on start 2022-09-18 17:02:15 +02:00
Zeno Rogue 03a3fd14a0 ads-game:: priority_queue-based rendering 2022-09-18 16:49:08 +02:00
Zeno Rogue 7a7ee1a13f clarified that times in settings are always specified in absolute units 2022-09-18 13:46:47 +02:00
Zeno Rogue 11a059eb60 auto-change-scale functionality 2022-09-18 13:45:45 +02:00
Zeno Rogue b7c15e0978 ads-game:: fuel particles take scale into account 2022-09-18 13:34:47 +02:00
Zeno Rogue 04c43e99e6 ads-game:: performance settings 2022-09-18 13:34:30 +02:00
Zeno Rogue 62996d0d4c missile rapidity and particle settings 2022-09-18 13:14:46 +02:00
Zeno Rogue 707247d297 ads-game:: configurable scale 2022-09-18 13:03:14 +02:00
Zeno Rogue 00b2dc522a better rock generation 2022-09-18 12:58:18 +02:00
Zeno Rogue eefb91501e ads-game:: show the (approximate) future 2022-09-18 11:24:43 +02:00
Zeno Rogue d76b2156f2 ads-game:: further improvements to the menu 2022-09-18 10:26:16 +02:00
Zeno Rogue 29ed17410b ads-game:: more settings 2022-09-18 10:22:25 +02:00
Zeno Rogue 6ea3cc4bcc time_unit and pause_speed settings 2022-09-18 10:22:13 +02:00
Zeno Rogue 11b70006aa ads-game:: easier to invoke menu 2022-09-18 10:21:29 +02:00
Zeno Rogue 8a35e6facb ads-game:: made the game easier to (re)start, also more settings 2022-09-18 10:21:13 +02:00
Zeno Rogue 11fe91fb5a debug removed 2022-09-18 10:19:02 +02:00
Jacob Mandelson 63c68831b2 Fix offsets for the shSmallHammerHead. 2022-09-17 15:21:18 -07:00
Jacob Mandelson d32772fd1e Style fixes for polygons.cpp 2022-09-17 15:08:09 -07:00
Jacob Mandelson d0564026d7 Small style cleanup. 2022-09-17 15:00:54 -07:00
Jacob Mandelson fb3c0e38b7 Restore default args to "at" lambda. 2022-09-17 14:49:10 -07:00
Jacob Mandelson 2939191fa1 Fix default lambda args & extra semicolon. 2022-09-17 14:44:50 -07:00
Jacob Mandelson c7f8cafc28 Use master's mymake.cpp 2022-09-17 14:42:46 -07:00
Jacob Mandelson 71cf4bc678 Merge branch 'orbshapes' into v12.1+os 2022-09-17 14:39:07 -07:00
Jacob Mandelson f10751a7f0 Clean up shLeafIcon. 2022-09-17 14:06:30 -07:00
Jacob Mandelson 4d766655ba More ivy-leaf tweaking. 2022-09-17 13:52:38 -07:00
Jacob Mandelson 41e8466dad Tweaking the ivy leaf. 2022-09-17 13:45:41 -07:00
Jacob Mandelson f7e8818e01 First draft of ivy leaf for Orb Of Nature. 2022-09-17 13:39:11 -07:00
Zeno Rogue fc184640d3 no ship history after game_over 2022-09-17 17:47:31 +02:00
Zeno Rogue 9799ff1ccf ads-game:: view history while paused 2022-09-17 17:34:54 +02:00
Zeno Rogue 37ab1b523d ads-game:: no more fire while paused 2022-09-17 17:34:19 +02:00
Zeno Rogue b75bb20246 missile life starts at 0 2022-09-17 17:34:11 +02:00
Zeno Rogue 21ebbc6ca4 ads-game:: more intuitive pause-scrolling 2022-09-17 16:49:09 +02:00
Zeno Rogue 75902e5fd3 ads-game:: adjust resource positioning to model 2022-09-17 16:47:35 +02:00
Zeno Rogue 22ef01964a ads-game:: model permanently switched to underlying geometry 2022-09-17 16:47:22 +02:00
Zeno Rogue de859c35aa in sl2, sl2 handling of shifts is executed even if model uses bandshift 2022-09-17 16:46:26 +02:00
Zeno Rogue 84a6d2f8f9 hooks_frame is still called when nomap == true 2022-09-17 16:45:43 +02:00
Zeno Rogue 505e9dcbbe ads-game:: better placement of resources 2022-09-17 15:17:37 +02:00
Zeno Rogue 8e23039fc0 ads-game:: better swap 2022-09-17 15:17:08 +02:00
Zeno Rogue 2f672bc4f3 more precise checking whether a rock does not hit a wall (but too expensive to use) 2022-09-17 15:17:01 +02:00
Zeno Rogue fa1f237f37 ads-game:: less expensive 2022-09-17 15:16:26 +02:00
Zeno Rogue b1baf393ba ads-game:: display other frames of reference while paused 2022-09-17 15:16:04 +02:00
Zeno Rogue 38b817187e version 12.1a 2022-09-17 12:17:35 +02:00
Zeno Rogue 3a95b5f8d5 made some item icons larger 2022-09-17 12:11:03 +02:00
Zeno Rogue cb839ed895 items/monsters in your collection have their text brightened if too dark (or the auxiliary orb color is used) 2022-09-17 12:10:44 +02:00
Zeno Rogue f0200ee32c color_diff function 2022-09-17 12:09:46 +02:00
Zeno Rogue 85f214c9a2 fixed the Onyx graphics in inventory 2022-09-17 11:37:25 +02:00
Zeno Rogue 69d0c05628 Orb of Earth no longer marked useless in Wetland 2022-09-17 11:23:13 +02:00
Zeno Rogue db353755d3 symmetric pathdist 2022-09-17 11:21:33 +02:00
Zeno Rogue f0f6ae7514 removed unused references to pathdist from kraken movement 2022-09-17 11:13:36 +02:00
Jacob Mandelson 21a7c4f365 Polish up the tree icon. 2022-09-16 22:12:27 -07:00
Jacob Mandelson 371a324085 Orb of the Woods and part of a tree icon. 2022-09-16 21:59:23 -07:00
Jacob Mandelson 1ad6b7ebe9 Orbs of Air and Empathy. 2022-09-16 19:24:01 -07:00
Zeno Rogue 5af23eab7d fixed Orb of Teleport/Illusion thinking that they are unusable 2022-09-16 22:35:37 +02:00
Jacob Mandelson 22e1799ab3 Clean up the shShield numerics. 2022-09-16 12:49:04 -07:00
Jacob Mandelson ae89d73598 shShield, mk IV. 2022-09-16 12:32:26 -07:00
Jacob Mandelson 9018d32173 Second draft of shShield. 2022-09-16 12:19:49 -07:00
Jacob Mandelson d2c4382e14 First draft of shield shape. 2022-09-16 12:13:20 -07:00
Jacob Mandelson fabf0e3eb0 Clean up the numbers for the small hook. 2022-09-15 16:24:05 -07:00
Jacob Mandelson 048ad9a030 Use a pirate hook in the Orb of Space. 2022-09-15 16:02:27 -07:00
Zeno Rogue b0577deb9a version 12.1 2022-09-15 18:46:31 +02:00
Zeno Rogue ca3cb88399
Merge pull request #318 from tranzystorek-io/desktop-file
Add desktop file
2022-09-15 14:16:19 +02:00
Zeno Rogue 5e8f3b609b
Merge pull request #316 from tranzystorek-io/readme-drop-version
docs: drop version from README
2022-09-15 14:15:48 +02:00
Zeno Rogue 30217ac23b link to format explained 2022-09-15 12:42:23 +02:00
Zeno Rogue 637ca35d62 added albatross and EncodedSpirt to credits 2022-09-15 12:39:28 +02:00
Zeno Rogue 1ec7b0ece1 fixed the compilation with CAP_SDL2 2022-09-15 12:38:56 +02:00
Zeno Rogue 308fcd90aa savefile selection / an option to use no savefile 2022-09-15 12:38:39 +02:00
Zeno Rogue a20063c119 fixed missing 'too far' messages on Frog-like orbs 2022-09-15 12:04:08 +02:00
Zeno Rogue d7e4c25c92 fixed Teleport and Illusion drain Aether etc on mousing 2022-09-15 12:03:26 +02:00
Zeno Rogue 1b4e0bfa79 license specified for the recorded sounds 2022-09-15 11:24:44 +02:00
Jacob Mandelson d0273d3ed6 Heptagon + heptagram for the Orb of Summoning. 2022-09-14 21:32:36 -07:00
Jacob Mandelson df6f9eb86a Single eccentric disk for the Orb of Discord. 2022-09-14 18:23:43 -07:00
Jacob Mandelson 2933b256e0 Use disk segments for Orbs of Vaulting & Phasing. 2022-09-14 18:11:52 -07:00
Zeno Rogue f29f908e05 fixed a crash problem with tes files in 2.5D 2022-09-15 00:19:21 +02:00
Zeno Rogue dbf9b2b325 ray:: max_well_offset anc max_celltype can be increased 2022-09-14 23:38:45 +02:00
Zeno Rogue ce5c1bc369 ray:: fixed missing samples 2022-09-14 23:38:29 +02:00
Zeno Rogue 18113f157f rulegen vs extended football 2022-09-14 22:53:39 +02:00
Zeno Rogue 53537271eb fixed a crash on rulegen for converted tessellations 2022-09-14 22:31:12 +02:00
Zeno Rogue 8715770649 prevented GPU glitches when rendering long bands 2022-09-14 21:56:02 +02:00
Zeno Rogue b6073679b2 tes:: football now works with apeirogons 2022-09-14 21:43:07 +02:00
Zeno Rogue 0084a951e6 tes:: fixed tessellations/affine/affine-square.tes 2022-09-14 21:23:54 +02:00
Zeno Rogue 3f005908c4 shape editor: shift+S also saves in the simpler format 2022-09-14 21:14:44 +02:00
Zeno Rogue 38767cf801 tes:: new options -arb-unmirror and -arb-football 2022-09-14 21:13:55 +02:00
Zeno Rogue 4c27c16931 tes:: throw exception on already connected 2022-09-14 21:13:43 +02:00
Zeno Rogue b87a936a61 tes:: football colorability detected/applied 2022-09-14 21:13:29 +02:00
Zeno Rogue 905c4e3afb rogueviz:: adjusted to patTriOther removal 2022-09-14 18:58:42 +02:00
Zeno Rogue ae7574483e slr:: formula_exp now returns 0 for vel==0 instead of nan 2022-09-14 18:30:12 +02:00
Zeno Rogue db3d710dd4 slr:: in_actual is now exported and also actually works 2022-09-14 18:29:39 +02:00
Zeno Rogue db32bae51e restriced Gray/Green Raider movepatterns to be available only if geosupport_football returns true 2022-09-14 18:10:49 +02:00
Zeno Rogue 6a39ed54c6 expansion dialog now links to line patterns dialog instead of listing some (which was bugged anyway) 2022-09-14 18:03:25 +02:00
Zeno Rogue acc90b80b7 expansion:: dfStart returns 0 if not mod allowed 2022-09-14 18:02:26 +02:00
Zeno Rogue 90669b6bb8 expansion:: mod_allowed export 2022-09-14 18:02:12 +02:00
Zeno Rogue 944f5e30af patDual now does not display edges which are displayed by patTriTree, patTree or patTriRings 2022-09-14 18:01:59 +02:00
Zeno Rogue c637dd4322 line patterns:: 'triangle grid: rings' renamed to 'lines of equal distance' and also work better now 2022-09-14 18:01:26 +02:00
Zeno Rogue f537abf71c line patterns: renamed/recolored some; TriOther removed; fixed the conditions 2022-09-14 17:59:21 +02:00
Zeno Rogue 898a2463c0 remove debug output when loading some tes 2022-09-14 17:26:22 +02:00
Zeno Rogue c3a1f8cc12 tes documentation: explained that a and b can be real 2022-09-14 16:34:14 +02:00
Zeno Rogue 16bf285f15 tes documentaiton: explained deg = pi/180 2022-09-14 16:34:05 +02:00
Zeno Rogue 02e88579f6 standard math operators 2022-09-14 16:23:09 +02:00
Zeno Rogue 142de7cdc5 typo fixed 2022-09-14 16:20:44 +02:00
Zeno Rogue b7a2e87d28 updated tessellation documentation 2022-09-14 16:19:00 +02:00
Zeno Rogue f23c10d1e6 racing:: simplifying some overcomplicated stuff, minor bugfix 2022-09-14 16:18:22 +02:00
Zeno Rogue e393929237 fixed a possible crash in IMAGESAVE when SDL_PNGFormatAlpha(s) returns s 2022-09-14 16:17:53 +02:00
Zeno Rogue d081bfb7ee tessellation doc fixed 2022-09-14 13:58:58 +02:00
Zeno Rogue d279d2098e documentation for TES files added 2022-09-14 13:51:00 +02:00
Marcin Puc 8fb143a742 add desktop file 2022-09-14 09:44:01 +02:00
Jacob Mandelson 92fc237a3e Simplify arithmetic for points in the hourglass shape. 2022-09-13 11:18:59 -07:00
Jacob Mandelson 45207e3ba7 Scale hourglass horizontally. 2022-09-13 11:02:57 -07:00
Jacob Mandelson da822fc4e9 Make into full hourglass. 2022-09-13 10:58:18 -07:00
Jacob Mandelson 360aa921aa Half an hourglass for the Orb of Time. 2022-09-13 10:49:10 -07:00
Zeno Rogue d3b4b880fc fixed a bug in ship centering 2022-09-12 15:00:00 +02:00
Zeno Rogue 818d943827 ads-game:: crash with walls 2022-09-12 14:57:47 +02:00
Zeno Rogue ae0ab132e1 ads-game:: do something about gameover, also spin the ship in handle_crashes 2022-09-12 14:57:37 +02:00
Zeno Rogue 7c87df85ac ads-game:: do not view_proper_times for particles 2022-09-12 14:57:00 +02:00
Zeno Rogue d5251664cb ads-game:: better tank display 2022-09-12 13:20:44 +02:00
Zeno Rogue d4d7842e5a ads-game:: less walls 2022-09-12 13:20:11 +02:00
Zeno Rogue 2f78601f0b ads-game:: fuel/crash particles 2022-09-12 13:20:04 +02:00
Zeno Rogue 7958c095d0 ads-game:: clear rocks near to the starting point 2022-09-12 12:58:05 +02:00
Zeno Rogue cd84dfca4f ads-game:: resources are used 2022-09-12 12:57:52 +02:00
Zeno Rogue 3578ae0631 ads-game:: resources displayed 2022-09-12 12:24:18 +02:00
Zeno Rogue dbcc88b42a ads-game:: renamed Energy to Ammo 2022-09-12 12:23:49 +02:00
Zeno Rogue b056b5c153 shapes used, unique_ptrs, resources generated 2022-09-12 11:49:28 +02:00
Zeno Rogue 9545796a1d ads-game:: new shapes, shape_ship written like other things 2022-09-12 11:48:02 +02:00
Zeno Rogue 2522b16e55 renamed flatresult to cross_result 2022-09-11 13:44:28 +02:00
Zeno Rogue a221244cab renamed rockinfo to ads_object 2022-09-11 13:43:44 +02:00
Zeno Rogue 06832c5371 ads-game:: you can now shoot rocks 2022-09-11 13:42:51 +02:00
Zeno Rogue 4eebc5858e first commit of AdS game 2022-09-11 12:16:50 +02:00
Zeno Rogue ab7ebd3bbc fix to changelog 2022-09-09 14:21:28 +02:00
Zeno Rogue ed7c5d8e69 12.0z 2022-09-09 14:21:14 +02:00
Zeno Rogue b934819ac3 bug fixed: mousing frog-like orbs could mark Aether etc as used; also jumping with Aether=1 is allowed now 2022-09-09 13:34:29 +02:00
Zeno Rogue 92291c437a bug fixed: Space mousing could mark Aether as used 2022-09-09 12:47:54 +02:00
Zeno Rogue e74d79583b fixed faster virtualRebase for sol 2022-09-09 12:30:20 +02:00
Zeno Rogue d03db1115c bug fixed: when ruleset was available only for the pure honeycomb, loading it would reset variation to pure 2022-09-09 12:26:32 +02:00
Zeno Rogue 466cc5cc0a removed redundant pre-changes orbused rollback, and made it more elegant in movegolem 2022-09-09 12:24:21 +02:00
Zeno Rogue 9110b6ac88 fixed 'orb used' flags not being rolled back in some cases 2022-09-09 12:22:49 +02:00
Zeno Rogue 852c637e4f fixed mousing over items with Energy+Time+Space combo 2022-09-09 12:21:55 +02:00
Zeno Rogue 613672b662 flush stdout on -exit 2022-09-09 12:20:33 +02:00
Jacob Mandelson 2f51cfc49e More cleanup for shLightningBolt & shHumanoid polygons. 2022-08-30 19:48:50 -07:00
Jacob Mandelson a2482b033d Clean up shLightningBolt & shHumanoid shape data further. 2022-08-30 19:14:37 -07:00
Jacob Mandelson 7441642b30 Clean up shHumanoid polygon. 2022-08-30 15:07:05 -07:00
Jacob Mandelson 4c75779692 Clean up the shLightningBolt points. 2022-08-30 15:00:31 -07:00
Jacob Mandelson 3081817872 Orb of Invisibility. 2022-08-30 14:49:37 -07:00
Jacob Mandelson 94b2a27b35 Do Orb of Aether. 2022-08-29 19:03:12 -07:00
Jacob Mandelson f8c9562a74 Do Orb of Trickery. 2022-08-29 18:50:50 -07:00
Jacob Mandelson ef28ce708e Add lightning bolt to Orb of Storms. 2022-08-29 16:14:59 -07:00
Jacob Mandelson 5239f6eadc Orbs of Lava, Matter, and Stone. 2022-08-29 10:30:37 -07:00
Jacob Mandelson 067f959ab1 Have Orb of Purity use a disk as well. 2022-08-29 10:05:40 -07:00
Jacob Mandelson c9f24344af Put disks behind the Orbs of Slaying and Undeath too. 2022-08-29 09:55:51 -07:00
Jacob Mandelson aefbd359e4 For many orb icons, put them on the disk as shadowing, instead of replacing the disk. 2022-08-29 09:44:36 -07:00
Jacob Mandelson ae284d68e8 Orb of Stunning. 2022-08-28 21:09:24 -07:00
Jacob Mandelson a6c8894166 Orb of Ferocity. 2022-08-28 20:31:25 -07:00
Jacob Mandelson 0f6754b43e Enlarge shSmallHammerHead. 2022-08-28 20:07:35 -07:00
Jacob Mandelson e1f3df2e65 Orbs of the Dragon, Domination, and the Mind. 2022-08-28 20:05:03 -07:00
Jacob Mandelson cc29338305 Use shSmallTreat for Orbs of Change, Choice, and Chaos. 2022-08-28 19:41:16 -07:00
Jacob Mandelson 5ec6783a2d Orb of Purity and Orb of Water. 2022-08-28 19:06:01 -07:00
Jacob Mandelson f1b75537f8 Clean up small bull head & horn shapes. 2022-08-28 11:31:14 -07:00
Jacob Mandelson afd57fe81d Orbs of Impact and Recall. 2022-08-28 11:10:12 -07:00
Jacob Mandelson c4a7776977 Flash shape for the Orb of Flash. 2022-08-28 10:55:09 -07:00
Jacob Mandelson 20a6876763 Orb of Winter and Orb of Luck. 2022-08-28 10:25:42 -07:00
Marcin Puc 4468061568 docs: drop version from README 2022-08-28 16:23:05 +02:00
Jacob Mandelson 0ebee6a1a3 Orb of Horns & Orb of the Bull. 2022-08-27 18:21:53 -07:00
Jacob Mandelson f5d4586d0f Orbs of Speed, Safety, and Freedom. 2022-08-27 16:37:49 -07:00
Jacob Mandelson af4a0c1da9 Orb of Choice: Two small disks. 2022-08-27 15:51:31 -07:00
Jacob Mandelson 46872919ba Orb of Energy and Orb of Intensity. 2022-08-27 12:43:22 -07:00
Jacob Mandelson cc3065f204 Bodies for Orbs of Triangle, Gravity, Warp, Matter, and Stone. 2022-08-27 11:31:58 -07:00
Jacob Mandelson 5766299c0a Adjust PickAxe, HedgehogBlade, and PSword for orbs of Earth, Thorns, and Slashing. 2022-08-27 07:14:56 -07:00
Jacob Mandelson 591acfebe4 Add hedgehog blade shape to Orb of Thorns. 2022-08-27 05:43:24 -07:00
Jacob Mandelson 1561d84f1b Sword shape for Orb of the Sword I & II. 2022-08-26 21:58:48 -07:00
Jacob Mandelson 3521ee917c Use Pickaxe shape for Orb of Earth ("Digging"). 2022-08-26 19:10:39 -07:00
Jacob Mandelson 064468b480 Added bodies to the Orb of Slaying and Orb of Undeath. 2022-08-26 18:48:21 -07:00
Jacob Mandelson 1f842704ec Add orb bodies for Orb of Slashing & Orb of the Frog. 2022-08-26 15:21:00 -07:00
Jacob Mandelson b71b34e734 Use turtle shell in the Orb of the Shell. 2022-08-26 14:00:42 -07:00
Jacob Mandelson d85ad065f6 Make Orb of Beauty use a small rose. 2022-08-26 12:34:04 -07:00
Jacob Mandelson 18e1912884 Show golem in Orb of Life. 2022-08-26 10:04:52 -07:00
Jacob Mandelson 446b23f83d Show a tame bomberbird in the Orb of Friendship. 2022-08-26 08:46:32 -07:00
Zeno Rogue ae003f7847 some fixes for older compilers 2022-08-26 14:24:58 +02:00
Zeno Rogue e70f3d1fe6 rulegen3:: fixes 2022-08-26 13:21:36 +02:00
Zeno Rogue 9f1480d21e fixup to dump 2022-08-26 13:10:29 +02:00
Zeno Rogue 3080e5d05b rogueviz::sag:: further new options 2022-08-26 12:43:59 +02:00
Zeno Rogue ec3bb7a5df rulegen-tests:: show seq-stats for 3D 2022-08-26 12:42:55 +02:00
Zeno Rogue aa539335b4 patterns:: treestarter parameter 2022-08-26 12:42:07 +02:00
Zeno Rogue eef03514ca rulegen3:: an option to dump rules in text format 2022-08-26 12:28:36 +02:00
Zeno Rogue 841108726c new system for honeycombs in action 2022-08-26 12:27:57 +02:00
Zeno Rogue 31b2bd9690 find_file to find files in HYPERPATH 2022-08-26 12:23:58 +02:00
Zeno Rogue 7be773ea03 fixed the Slaying+side attack combo 2022-08-25 10:51:56 +02:00
Zeno Rogue d66a877889 Added some land incompatibilities 2022-08-25 10:41:57 +02:00
Zeno Rogue 9f48d4f194 Pearls now use the Disk graphics 2022-08-25 10:38:22 +02:00
Zeno Rogue 5146fc00f0 using smaller field_quotients for rule_fp; also a list of field quotients is included in devmods 2022-08-25 10:31:28 +02:00
Zeno Rogue 4947b8c1b5 great success 2022-08-25 10:28:26 +02:00
Zeno Rogue 53839be194 fixup to no rels 2022-08-25 01:10:22 +02:00
Zeno Rogue 14a9961f92 reg3/field:: incorrect field computations generate errors; fixed a bug in suspending discovery; more elegant fieldpattern search not based on cgi.rels 2022-08-25 01:10:07 +02:00
Zeno Rogue 3f32112937 reg3:: do not call generate_fulls more than needed 2022-08-25 01:06:49 +02:00
Zeno Rogue a439b16602 dont generate horos in hrmap_h3 2022-08-25 01:05:58 +02:00
Zeno Rogue ae0425038b improvements to French translation 2022-08-24 12:30:45 +02:00
Zeno Rogue ffe8e9cef3 rulegen::tests:: display 3D fields 2022-08-23 21:52:36 +02:00
Zeno Rogue 7411f21b59 rogueviz:: parallelize moved from flocking to rogueviz.h 2022-08-23 21:52:36 +02:00
Zeno Rogue b6d665ff0e rogueviz:: SAG improvements 2022-08-23 21:52:36 +02:00
Zeno Rogue d4ea078f7f DHRG not exports some things 2022-08-23 21:52:36 +02:00
Zeno Rogue 5c97fbb06e another fix to Panini 2022-08-23 21:52:36 +02:00
Zeno Rogue 9ab84d9afd fixed is_master for 3D euclidean 2022-08-23 21:52:36 +02:00
Zeno Rogue ecadc352f1 minimization fixes 2022-08-23 21:52:36 +02:00
Zeno Rogue 41d14e0607 fixed reg3::in 2022-08-23 21:52:36 +02:00
Zeno Rogue b7c8e7b754 field:: hooks_solve3 2022-08-23 21:52:36 +02:00
Zeno Rogue 50087e032a faster virtualRebase in Solv 2022-08-23 21:52:36 +02:00
Zeno Rogue 0f0d0ff7a9 French translation updated 2022-08-23 21:52:36 +02:00
Zeno Rogue c07f84205b removed some music debug 2022-08-23 21:52:36 +02:00
Zeno Rogue 764afbcd11 nilrider:: save config 2022-08-23 21:52:36 +02:00
Zeno Rogue 121b3f2d58 reg3:: rule debug 2022-08-23 21:52:36 +02:00
Zeno Rogue 84d15a121b rogueviz::sag:: modernized, also made the animation possible again 2022-08-23 21:52:36 +02:00
Zeno Rogue 97c10ff878 rulegen3:: remove faster get_parent_dir as it causes problems 2022-08-23 21:52:36 +02:00
Zeno Rogue 1c4aa3e71c rulegen3:: removed the r3_neighborhood system 2022-08-23 21:52:36 +02:00
Zeno Rogue 01cb5eb9ef refactored check_road_shortcuts 2022-08-23 21:52:36 +02:00
Zeno Rogue cccab05f66 rulegen3:: fixed suspicious path analysis 2022-08-23 21:52:35 +02:00
Zeno Rogue 59b45c1be0 fixup to disable distance checks 2022-08-23 21:52:35 +02:00
Zeno Rogue 285beb4ad2 rulegen3:: remove some parts of 2D which cause bugs 2022-08-23 21:52:35 +02:00
Zeno Rogue 2d35e40dba rulegen3:: optimize the information 2022-08-23 21:52:35 +02:00
Zeno Rogue 2fe521452a yet another fixup to decision_neigh validate_neigh 2022-08-23 21:52:35 +02:00
Zeno Rogue 9c0231c455 rulegen3:: minor bugfixes 2022-08-23 21:52:35 +02:00
Zeno Rogue 7a5b2dcf25 rulegen3:: when check_det fails do not assume it succeeds 2022-08-23 21:52:35 +02:00
Zeno Rogue f866f66582 rulegen3:: w_ignore_transducer_dist flag 2022-08-23 21:52:35 +02:00
Zeno Rogue d571d2f1cb rulegen3:: validate_neighborhood 2022-08-23 21:52:35 +02:00
Zeno Rogue d6376bcaec rulegen3:: fixed bugs in build_cycle_data 2022-08-23 21:52:35 +02:00
Zeno Rogue 437dce455a fixed a bug in repeated cycle ignoring 2022-08-23 21:52:35 +02:00
Zeno Rogue 14f1da6de4 rulegen3:: renaming/refactoring 2022-08-23 21:52:35 +02:00
Zeno Rogue cc258f1f31 rulegen-tests:: set rules_known_for 2022-08-23 21:52:35 +02:00
Zeno Rogue a26234012f rulegen:: use more of rdebug_flags 2022-08-23 21:52:35 +02:00
Zeno Rogue 304c9efe54 rulegen3:: less cycles to check 2022-08-17 17:40:58 +02:00
Zeno Rogue 80c3dfcd34 rulegen3:: more improvements 2022-08-17 17:40:12 +02:00
Zeno Rogue a441ab474f include unordered_set and unordered_map 2022-08-17 17:38:28 +02:00
Zeno Rogue 2ddc35179a rulegen3:: better error reporting 2022-08-17 17:38:06 +02:00
Zeno Rogue 75c9258537 rulegen3:: w_r3_no_road_shortcuts 2022-08-17 17:34:13 +02:00
Zeno Rogue 47d2b5b27b rulegen:: clear codes on neg rule mismatch 2022-08-17 17:33:52 +02:00
Zeno Rogue ecee5b7f21 rulegen:: (some) controllable debug flags 2022-08-17 17:33:36 +02:00
Zeno Rogue ca315c2582 rulegen3:: reordered move_code 2022-08-17 17:32:15 +02:00
Zeno Rogue fe7b54d256 rulegen3:: faster get_parent_dir 2022-08-17 17:31:59 +02:00
Zeno Rogue 7f0bbcfef3 rulegen3:: faster get_roadsign 2022-08-17 17:31:32 +02:00
Zeno Rogue eb4af6c584 reg3:: in cubes_reg3, use field quotients not tori 2022-08-17 17:24:47 +02:00
Zeno Rogue d22d840f01 fpattern for Cube Tiling 2022-08-17 17:24:20 +02:00
Zeno Rogue d55a2022c0 nilrider:: audio settings 2022-08-14 19:55:25 +02:00
Zeno Rogue 9e56312dab reg3:: with extra_origins, more xpush in the Euclidean case 2022-08-14 19:26:54 +02:00
Zeno Rogue 35bd625a87 rulegen3:: improved debug 2022-08-14 19:26:36 +02:00
Zeno Rogue 16cdaa5a00 rulegen:: gen_rule 2022-08-14 19:26:13 +02:00
Zeno Rogue df5c36c2a6 music system now supports more tracks 2022-08-14 19:25:27 +02:00
Zeno Rogue 40765e8808 extra exports 2022-08-14 19:25:10 +02:00
Zeno Rogue 9108d06543 nilrider:: extra exports 2022-08-14 19:24:39 +02:00
Zeno Rogue 576e21ece9 nilrider:: fixup to new levels 2022-08-14 19:24:33 +02:00
Zeno Rogue ffcf7853cb nilrider:: compile in SDL2 2022-08-14 19:24:24 +02:00
Zeno Rogue 82e2e853bf nilrider:: synchronized music 2022-08-14 19:24:13 +02:00
Zeno Rogue dbab2254c6 nilrider:: two new levels 2022-08-14 19:23:18 +02:00
Zeno Rogue 3cffc218e6 rulegen3:: genhoneycomb throws exception if rules not known 2022-08-13 23:14:44 +02:00
Zeno Rogue dc37e1ed23 rulegen3:: w_r3_all_errors flag 2022-08-13 23:14:18 +02:00
Zeno Rogue dfce80d152 rulegen3:: call correct get_roadsign in move_code 2022-08-13 23:13:37 +02:00
Zeno Rogue 0b24804934 rulegen:: on 'reached the end', remove the relevant codes 2022-08-13 23:13:22 +02:00
Zeno Rogue 44e8f31545 changelog for 12.0x 2022-08-13 22:45:42 +02:00
Zeno Rogue 68da2e967c rogueviz:: fixed variation in create_notknot to pure 2022-08-13 22:45:10 +02:00
Zeno Rogue cfb47631ac slide text improvements 2022-08-13 22:44:44 +02:00
Zeno Rogue cafd721284 do not showMissionScreen with game_keys_scroll 2022-08-13 22:44:00 +02:00
Zeno Rogue 5e59f299c6 fixed a bug with incorrect colors_of_floors remaining 2022-08-13 22:43:45 +02:00
Zeno Rogue 48c99f296a crystal view_coordinates in tour 2022-08-13 22:43:31 +02:00
Zeno Rogue e86e6267ec the implementation in reg3 can now be used for the cube tiling 2022-08-13 22:42:59 +02:00
Zeno Rogue 0eed6a03d4 CLI -exit now uses println not printf 2022-08-13 22:40:49 +02:00
Zeno Rogue 41ccb86c8c rogueviz:: various minor fixes to presentations 2022-08-12 09:09:38 +02:00
Zeno Rogue d5467eb379 rogueviz:: links to the papers in presentations 2022-08-12 09:09:18 +02:00
Zeno Rogue dd4001601f fixed a freeze in snowballs 2022-08-12 09:08:19 +02:00
Zeno Rogue 608c283f2d rogueviz:: snow:: new options snow_random_colors and snow_just_centered 2022-08-12 09:07:59 +02:00
Zeno Rogue c7663c83be fixed a bug in stereographic projection 2022-08-12 09:07:19 +02:00
Zeno Rogue c261db8a08 rogueviz:: intra-demos:: popscreen on run 2022-08-07 15:44:49 +02:00
Zeno Rogue e686f5bc39 yet another fix to racing 2022-08-07 15:01:28 +02:00
Zeno Rogue ce8e3c8640 fixed a crash when deleting 3-sphere maps 2022-08-07 15:01:14 +02:00
Zeno Rogue 7883d569d6 debug removed 2022-08-07 15:01:00 +02:00
Zeno Rogue ad744820ae version 12.0w 2022-08-07 03:30:01 +02:00
Zeno Rogue 2a33f86f6f added missing override 2022-08-07 03:30:01 +02:00
Zeno Rogue 0265f76c69 rogueviz:: presentation:: allow pre-rendered LaTeX 2022-08-07 03:16:24 +02:00
Zeno Rogue f38da4cba9 rogueviz:: added namespace to intra demos 2022-08-07 03:16:24 +02:00
Zeno Rogue cfad696d4a rogueviz::dhrg:: fixed some confusion 2022-08-07 03:16:24 +02:00
Zeno Rogue 2354be07e5 rulegen3:: specified args to arg::args 2022-08-07 03:16:24 +02:00
Zeno Rogue 22523ccfc3 rogueviz:: in the minesweeper presentation, updated the tes filename 2022-08-07 03:16:24 +02:00
Zeno Rogue 91f0f7ff03 rogueviz::presentation:: added a comment about what package you need 2022-08-07 03:16:24 +02:00
Zeno Rogue 0dc84d8f34 racing fixed (hopefully) 2022-08-07 03:16:24 +02:00
Zeno Rogue 884a9bb2c5 fixed a bug with 'world overview' breaking ESC menu 2022-08-07 03:16:24 +02:00
Zeno Rogue 4ed44d78cc rogueviz:: added two new presentations 2022-08-07 03:16:24 +02:00
Zeno Rogue 6030dd2a47 rogueviz::presentation:: new options 2022-08-07 03:16:24 +02:00
Zeno Rogue eec0c968d9 HyperRogue help is now directly offered when displaying context help 2022-08-07 03:16:24 +02:00
Zeno Rogue c87bca5da0 help:: do not suggest to try the Guided Tour if already in the Guided Tour 2022-08-07 03:16:24 +02:00
Zeno Rogue 4497821b35 help:: do not display HyperRogue text if game_keys_scroll 2022-08-07 03:16:24 +02:00
Zeno Rogue 389acc68e3 rogeviz::inner_maps::new options 2022-08-07 03:16:24 +02:00
Zeno Rogue f138bbb5c2 rogueviz::pres::non_game_slide_scroll 2022-08-07 03:16:24 +02:00
Zeno Rogue 1f832faeba prevent stored games from having their cgi destroyed 2022-08-07 03:16:24 +02:00
Zeno Rogue 1c01cc7f94 rogueviz:: clear textures on hooks_resetGL 2022-08-07 03:16:24 +02:00
Zeno Rogue 0b3980a5a4 rogueviz:: non_game_slide 2022-08-07 03:16:24 +02:00
Zeno Rogue db8c4ee0b9 intra:: export ticks 2022-08-07 03:16:24 +02:00
Zeno Rogue 7931ced3f8 intra::switching so that you can store off an intra game 2022-08-07 03:16:24 +02:00
Zeno Rogue dd0c1e6b3d print hyperpoint now prints MDIM dimensions 2022-08-07 03:16:24 +02:00
Zeno Rogue dee519badd added make_floor_textures in raycaster 2022-08-07 03:16:24 +02:00
Zeno Rogue 7787f26bc2 added kz to some debug printouts 2022-08-07 03:16:24 +02:00
Zeno Rogue ed4c715a5e hyperpoint now uses det3 not det (faster and also avoids some bugs for unknown reason) 2022-08-07 03:16:24 +02:00
Zeno Rogue 3184aea2be game_keys_scroll option 2022-08-07 03:16:24 +02:00
Zeno Rogue 1da912a0a2 rogueviz::inner-maps:: fixed the comment (typo and order) 2022-08-07 03:16:24 +02:00
Zeno Rogue 8b68ad2fdd rulegen debug removed 2022-08-07 01:57:34 +02:00
Zeno Rogue 464f4277cc fixed a memory leak in (de)compress_string 2022-08-07 01:57:06 +02:00
Zeno Rogue fba2cc95cf rulegen3:: transducer-based check 2022-08-07 01:52:51 +02:00
Zeno Rogue c8f3dc827e rulegen3:: more careful when adding to important 2022-08-07 01:47:52 +02:00
Zeno Rogue 4b4103f667 rulegen3:: some exports added 2022-08-07 01:45:26 +02:00
Zeno Rogue 70561f1f5a rulegen3:: honeycomb_value 2022-08-07 01:44:49 +02:00
Zeno Rogue 498c9828c3 fixed loop detection in hrmap_h3_subrule 2022-08-07 01:43:14 +02:00
Zeno Rogue 647a70e27f reg3:: added the missing make_subconnections to hrmap_from_crystal 2022-08-07 01:42:43 +02:00
Zeno Rogue e6879ee806 reg3:: added the missing destructor to hrmap_closed3 2022-08-07 01:42:17 +02:00
Zeno Rogue 1529986d6a reg3:: added subshapes.clear on generate_subcells 2022-08-07 01:41:04 +02:00
Zeno Rogue e3925d6bad config:: nomap as param_b 2022-08-07 01:40:00 +02:00
Zeno Rogue c647431486 Makefile rulegen fix again 2022-07-23 16:43:02 +02:00
Zeno Rogue 7b47a301a3 Makefile rulegen fix 2022-07-23 16:41:37 +02:00
Zeno Rogue 8a58604371 factored enable_canvas_backup 2022-07-23 16:33:11 +02:00
Zeno Rogue 8e094e93a5 shmup save data not only in shmup 2022-07-23 16:33:00 +02:00
Zeno Rogue e9bb38d3b1 rogueviz::dhrg:: export some functions 2022-07-23 15:45:42 +02:00
Zeno Rogue 67267cbe6b rogueviz::dhrg::routing:: export some functions 2022-07-23 15:44:31 +02:00
Zeno Rogue cd58923454 rogueviz::dhrg:: improved cleanup 2022-07-23 15:43:26 +02:00
Zeno Rogue 57f9e3efb6 rogueviz:: easier to leave show_likelihood 2022-07-23 15:42:58 +02:00
Zeno Rogue 10f1559da0 fixup 2022-07-23 15:42:42 +02:00
Zeno Rogue 96b335e465 rogueviz::dhrg:: panning enable in show_likelihood 2022-07-23 15:42:33 +02:00
Zeno Rogue dcffdbbca5 rogueviz::som::tests:: an option to disable vertex coloring 2022-07-23 15:40:20 +02:00
Zeno Rogue 6291da56c4 rogueviz::som:: an option to make floor invisible 2022-07-23 15:39:36 +02:00
Zeno Rogue 41bfaeaf36 rogueviz:: fix legend disabling HUD if there is nothing to show 2022-07-23 15:39:13 +02:00
Zeno Rogue a8b27b2bdb rogueviz:: export more 2022-07-23 15:38:44 +02:00
Zeno Rogue 62132073de rogueviz:: highlight_target feature 2022-07-23 15:38:29 +02:00
Zeno Rogue ded7bde82c rv::presentation:: latex packages changeable 2022-07-23 15:37:56 +02:00
Zeno Rogue 42abdd223e expansion:: export distance_from 2022-07-23 15:36:38 +02:00
Zeno Rogue e8b3f0c5c9 titlecolor setting 2022-07-23 15:36:27 +02:00
Zeno Rogue b07b805b33 rogueviz:: dialog_add_latex now can have LATEX_COLOR flag to display text colored in Latex 2022-07-21 03:28:54 +02:00
Zeno Rogue 238828e300 12.0v 2022-07-17 14:52:04 +02:00
Zeno Rogue 436cc15dba Android version fixed for API 31 2022-07-17 14:48:08 +02:00
Zeno Rogue e7818829e2 improvement to rulegen3 2022-07-17 14:41:57 +02:00
Zeno Rogue b76bddb47b rulegen:: split 2022-07-17 14:41:57 +02:00
Zeno Rogue 1a245b2523 shots:: postprocessing hooks 2022-07-17 14:41:57 +02:00
Zeno Rogue f2efc6f295 in hrmap_h3_subrule, better debugging of conficts 2022-07-17 14:41:57 +02:00
Zeno Rogue 7c6fece132 reg3:: removed some debug 2022-07-17 14:41:57 +02:00
Zeno Rogue 11426c30b3 auto-land-rotation now works even if CAP_ORIENTATION is on 2022-07-17 14:41:57 +02:00
Zeno Rogue 2f7a6194a6 hprint:: print template for sets 2022-07-17 14:41:57 +02:00
Zeno Rogue 5c302a4c52 pipes: fixed bad shading because of full white overflow, more strict lengths, do not shade if not in perspective 2022-07-17 14:41:57 +02:00
Zeno Rogue 894ee3ad8e savemem:: more aggresive adj_memo clear 2022-07-17 14:41:57 +02:00
Zeno Rogue c5650e4e46 savemem:: do not crash because of flashdata not cleared 2022-07-17 14:41:57 +02:00
Zeno Rogue 6225fd38e8 savemem:: removed some more potential crashes 2022-07-17 14:41:57 +02:00
Zeno Rogue 7c1d083afa memory_saving_mode as param_b 2022-07-17 12:40:07 +02:00
Zeno Rogue 32ed3d98ee savemem:: fixed a crash caoused by not erasing adj_memo 2022-07-17 12:39:55 +02:00
Zeno Rogue b229f2c9b8 savemem:: correct delete functions used 2022-07-17 12:36:21 +02:00
Zeno Rogue 3b4571aa16 3d:: choice of end type for pipes 2022-07-14 11:28:24 +02:00
Zeno Rogue 6c4a53c001 3d:: auto-rotate pipe for nice shading 2022-07-14 11:09:47 +02:00
Zeno Rogue 43ff375435 3d:: improved pipe texture 2022-07-14 11:09:25 +02:00
Zeno Rogue f101ddb7fd utils:: read_file_as_string 2022-07-13 21:00:16 +02:00
Zeno Rogue 48702739fd reg3:: support for >= 32 move directions 2022-07-13 20:59:20 +02:00
Zeno Rogue f25379ca7d reg3:: removed/improved some debug 2022-07-13 20:59:11 +02:00
Zeno Rogue 58c78220df reg3:: subrule:: remove non-branching NLES 2022-07-13 20:58:42 +02:00
Zeno Rogue 0e14d06e40 reg3:: made extra_origins more distant to prevent accidental crash 2022-07-13 20:56:49 +02:00
Zeno Rogue 4c4120e4f0 fixes to hrmap_subrule 2022-07-13 19:56:32 +02:00
Zeno Rogue 906ad4ab90 less-states 2022-07-13 19:33:00 +02:00
Zeno Rogue 0b4df47964 rulegen3:: new features 2022-07-13 19:31:24 +02:00
Zeno Rogue 6bc3dc9d6f subrule 3D maps implemented 2022-07-13 19:30:36 +02:00
Zeno Rogue 7252b04626 fixup move 2022-07-13 19:02:35 +02:00
Zeno Rogue 94a243a825 moved genhoneycomb to rulegen3 2022-07-13 18:59:04 +02:00
Zeno Rogue 5ef8092af2 further ruleset refactoring 2022-07-13 18:51:31 +02:00
Zeno Rogue 91e405e421 reg3:: factored off ruleset, and disabled the special handling of Space535 2022-07-13 17:34:29 +02:00
Zeno Rogue ffdc74a0b5 rulegen:: fixed a bug which caused problems on MYSTERY-th state 2022-07-13 17:25:04 +02:00
Zeno Rogue 0bcf2ca0ab Android update 2022-07-13 00:02:03 +02:00
Zeno Rogue 68507a555f 12.0u 2022-07-12 14:48:28 +02:00
Zeno Rogue dfe0d7ccf9 rulegen:: removed debug 2022-07-12 14:46:32 +02:00
Zeno Rogue 591d370ea4 centering menus is now configurable 2022-07-12 14:46:31 +02:00
Zeno Rogue 4a4e48400a settings to view less stuff on the screen; fixed items/kills going over buttons in the portrait mode 2022-07-12 14:46:31 +02:00
Zeno Rogue 8256b398b1 added missing override 2022-07-12 14:46:31 +02:00
Zeno Rogue c9c066ccec updated mobile for menu changes 2022-07-12 14:46:31 +02:00
Zeno Rogue ff16f35e0b added some missing guards for CAP_RACING and CAP_COMMANDLINE 2022-07-12 14:46:31 +02:00
Zeno Rogue de5e0505a3 honeycomb rules for 345 and 355 2022-07-12 14:46:31 +02:00
Zeno Rogue 45d1675d8f rulegen:: improved troubleshooting 2022-07-12 14:46:31 +02:00
Zeno Rogue 4bbf4a1a88 rulegen:: fixed get_aid 2022-07-12 14:46:31 +02:00
Zeno Rogue 8fdbe7714a rulegen3:: fixed for ultra 2022-07-12 14:46:31 +02:00
Zeno Rogue 81248f0558 rogueviz:: anygraph removed since it is in dhrg now 2022-07-12 14:46:31 +02:00
Zeno Rogue 9a916f1ef3 rogueviz:: added DHRG 2022-07-12 14:46:31 +02:00
Zeno Rogue e04a6bc49a rogueviz:: reads hidden dependencies 2022-07-12 14:46:31 +02:00
Zeno Rogue b3728b109f devmods/tests updated 2022-07-12 14:46:31 +02:00
Zeno Rogue 85b4785447 devmods/solv-table updated 2022-07-12 14:46:31 +02:00
Zeno Rogue 0b29dc3964 devmods/musictable updated 2022-07-12 14:46:31 +02:00
Zeno Rogue b8ad184d70 devmods/honeycomb-rule-generator updated 2022-07-12 14:46:31 +02:00
Zeno Rogue c914dfbeb4 devmods/edit-shaders updated 2022-07-12 14:46:31 +02:00
Zeno Rogue a0abdb6f6f devmods/manual-animations:: updated 2022-07-12 14:46:31 +02:00
Zeno Rogue 9c9726249a update devmods/knuth-bendix.cpp 2022-07-12 14:46:31 +02:00
Zeno Rogue b3c3cc331e rogueviz:: readLabel 2022-07-12 14:46:31 +02:00
Zeno Rogue 9002ef2681 rogueviz:: max_line_splits parameter 2022-07-12 14:46:31 +02:00
Zeno Rogue 1cdf638128 rogueviz;: nilcompass:: fixup 2022-07-12 14:46:31 +02:00
Zeno Rogue 37f8479629 rulegen-tests:: -urq now has a parameter detailing what you want to do 2022-07-12 14:46:31 +02:00
Zeno Rogue 98d95a520c rulegen-tests:: -gen-honeycomb minimizes 2022-07-12 14:46:30 +02:00
Zeno Rogue dbb02d6bc9 rulegen:: a fixup for substates becoming a map 2022-07-12 14:46:30 +02:00
Zeno Rogue ae170378f5 mobile:: fixed an incorrect button shown in the game menu 2022-07-12 14:46:30 +02:00
Zeno Rogue dabc227cbe hprint:: some extra functions 2022-07-12 14:46:30 +02:00
Zeno Rogue ea66cb9706 rulegen-tests:: generate honeycombs 2022-07-12 14:46:30 +02:00
Zeno Rogue cdb2a001ca rulegen3 2022-07-12 14:46:30 +02:00
Zeno Rogue 3318c1e4b4 reg3:: fixed origins 2022-07-12 14:46:30 +02:00
Zeno Rogue a5c67624fd reg3:: fixed hrmap_h3 pure 2022-07-12 14:46:30 +02:00
Zeno Rogue 6113e0fd56 reg3:: improved strafe test 2022-07-12 14:46:30 +02:00
Zeno Rogue ef712a3b4f rulegen:: also number_of_types 2022-07-12 14:46:30 +02:00
Zeno Rogue c3ba88cb6c hrmap_h3 supports extra_origins 2022-07-12 14:46:30 +02:00
Zeno Rogue a920b837e1 reg3:: hrmap_h3 now works with subcells 2022-07-12 14:46:30 +02:00
Zeno Rogue a6116d678e reg3:: factored gen_quotient_map 2022-07-12 14:46:30 +02:00
Zeno Rogue 3f56f158ee rulegen:: tests:: animation of the algorithm 2022-07-12 14:46:30 +02:00
Zeno Rogue 1cd8abd011 rulegen:: tests:: view_actual_seq 2022-07-12 14:46:30 +02:00
Zeno Rogue 46cf751200 rulegen-tests:: fix gamescreen 2022-07-12 14:46:30 +02:00
Zeno Rogue c775936970 rulegen:: generalize to work with other maps than arbi 2022-07-12 14:46:30 +02:00
Zeno Rogue fb9bf4263a rulegen:: call hooks to animate the algorithm 2022-07-12 14:46:30 +02:00
Zeno Rogue 220a4b1a88 12.0t1 2022-07-12 14:46:30 +02:00
Zeno Rogue 710ae06e03
Merge pull request #310 from Technochips/master
FRENCH: more gender fixes (-e...)
2022-07-07 20:51:50 +02:00
Technochips efa8567a2b FRENCH: added "de" / "d'" 2022-07-05 23:16:56 +02:00
Technochips d69f4e868d FRENCH: more gender fixes (-e...) 2022-07-05 23:00:10 +02:00
Zeno Rogue c652b6bd00 made flags in hyper.h consistent with langen.cpp 2022-07-05 21:20:21 +02:00
Zeno Rogue 7fda3c08c4
Merge pull request #309 from Technochips/master
WIP: French improvements
2022-07-05 21:12:59 +02:00
Technochips 3881da340c FRENCH: fixed strings in language.cpp 2022-07-05 21:04:28 +02:00
Zeno Rogue 78b2482bbb
Merge pull request #308 from Quuxplusone/fixups
Various small compiler-warning fixes
2022-07-05 20:43:33 +02:00
Arthur O'Dwyer 1b8296a1f8 Fix Clang error where lambdas can't capture structured bindings until C++20
./rogueviz/nil-compass.cpp:98:10: error: reference to local binding 'i'
    declared in enclosing function 'rogueviz::nilcompass::draw_compass'
          if(i == _i && is == _is) return col;
             ^
2022-07-05 14:14:53 -04:00
Technochips 3dc7c3b086 FRENCH: gender flags, fixed a bunch of small stuff 2022-07-05 19:57:02 +02:00
Arthur O'Dwyer 2ec10ff7f2 Fix -Wsuggest-override on Clang 2022-07-05 13:28:00 -04:00
Arthur O'Dwyer ad47db4240 Suppress -Wchar-subscripts on Clang
For example:

    ./rogueviz/platformer.cpp:388:14: error: array subscript is
    of type 'char' [-Werror,-Wchar-subscripts]
      if(keystate['3'])
                 ^~~~
2022-07-05 13:28:00 -04:00
Arthur O'Dwyer 559301e69f Fix -Wmisleading-indentation warning on Clang 2022-07-05 13:28:00 -04:00
Arthur O'Dwyer 3c3f2b2b21 Silence overzealous -Wunused-result warnings on GCC 2022-07-05 13:28:00 -04:00
Arthur O'Dwyer dd55129ed3 Fix "extra ;" warnings on GCC 2022-07-05 13:28:00 -04:00
Arthur O'Dwyer 0ae74aad62 Fix more instances of Clang's -Wunqualified-std-cast-call 2022-07-05 13:28:00 -04:00
Arthur O'Dwyer 85753d240f Fix instances of Clang's -Wunqualified-std-cast-call 2022-07-05 12:19:04 -04:00
Technochips d315c74261 FRENCH: fixed a few typos 2022-07-05 16:30:04 +02:00
Technochips 3cdfd6e953 FRENCH: fixed extra apostrophes 2022-07-05 16:23:21 +02:00
Zeno Rogue 2d619d2f7c fixed the version number in changelog 2022-07-05 16:13:06 +02:00
Zeno Rogue 80eaaf93e7 rv::kohonen:: heatmap drawing 2022-07-05 16:04:19 +02:00
Zeno Rogue b2fb02f863 gamescreen updated in rogueviz 2022-07-05 16:03:12 +02:00
Zeno Rogue 80cc89f6eb 12.0t 2022-07-05 15:52:02 +02:00
Zeno Rogue 59ea72d506 side for sightrange edit 2022-07-05 14:02:51 +02:00
Zeno Rogue a0d3c402d7 fixup: addalpha 2022-07-05 14:02:45 +02:00
Zeno Rogue a2113d4142 darken the menu side of the screen 2022-07-05 14:00:51 +02:00
Zeno Rogue bbc495b2fb darken the menu side of the screen 2022-07-05 13:57:34 +02:00
Zeno Rogue 6e1743ac86 prettier color items 2022-07-05 12:54:59 +02:00
Zeno Rogue 5763120dae color dialog has the new sliders 2022-07-05 12:34:31 +02:00
Zeno Rogue 3ae7d8b2d7 graphical sliders 2022-07-05 12:26:20 +02:00
Zeno Rogue 52186377a0 fixed French 2022-07-05 11:52:05 +02:00
Zeno Rogue a19adccf82 startanims now can be disabled 2022-07-05 11:51:49 +02:00
Zeno Rogue 09d67c24f0 fixed the help button in the pause menu 2022-07-05 11:51:32 +02:00
Zeno Rogue 75f58766a2 made background screen darkening consistent and optional 2022-07-05 11:51:06 +02:00
Zeno Rogue b3a394c266 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2022-07-05 02:59:33 +02:00
Zeno Rogue db2139e4ab documented new options in Readme 2022-07-05 02:56:15 +02:00
Zeno Rogue 1987eff6cd remove -Werror and -march=native from mymake 2022-07-05 02:54:07 +02:00
Zeno Rogue 510d3785a7
Merge pull request #305 from AMDmi3/flags
Don't set -march=native and -Werror by default
2022-07-05 02:49:08 +02:00
Zeno Rogue 8eaeff85eb fixes in the French translation 2022-07-05 02:45:04 +02:00
Zeno Rogue 1bc7cd04cb implemented French translation 2022-07-05 02:44:19 +02:00
Zeno Rogue fe68186e5a refactored basicrep and parrep: genderrep to avoid repeated lines in both %y0 and %yINDEX, no more need for special case when noun not found 2022-07-05 01:57:33 +02:00
Zeno Rogue f69fce0050 fixed the Polish translation of the description of False Princess 2022-07-05 01:32:26 +02:00
Zeno Rogue e50c22134c
Merge pull request #307 from Quuxplusone/language-fr
Add @3raven's language-fr.cpp
2022-07-04 12:02:15 +02:00
Arthur O'Dwyer 8a1ee4622b French language translation by @3raven 2022-07-01 14:11:14 -04:00
Arthur O'Dwyer 77e2c64538 [Makefile] langen depends on language-ptbr.cpp 2022-07-01 14:08:05 -04:00
Arthur O'Dwyer 48800f58f8 Fix some compiler errors and a mistake in config.cpp. 2022-07-01 14:07:58 -04:00
Dmitry Marakasov b7975f20ce Enable -Werror for CI 2022-06-29 21:58:11 +03:00
Dmitry Marakasov 6f812233d2 Don't set -march=native and -Werror by default
See https://amdmi3.ru/posts/packaging-friendliness-compiler-flags-to-avoid/
2022-06-24 13:59:05 +03:00
Zeno Rogue 2486937720 10.2s 2022-06-24 00:23:04 +02:00
Zeno Rogue 5fe6aee84f show treasure bubbles in Dice Reserve 2022-06-23 13:46:34 +02:00
Zeno Rogue 217c6287fe all cheat keys are now displayed in the cheat menu -- also removed some outdated ones 2022-06-23 13:46:14 +02:00
Zeno Rogue 3ef10f1996 removed the extra 'racing menu' option from the pause menu 2022-06-23 13:05:25 +02:00
Zeno Rogue 5e27a2cc88 shift+A now exits the map editor 2022-06-23 13:02:37 +02:00
Zeno Rogue 9497eb31b9 fixup -- stars also do not have_valence 2022-06-23 10:49:27 +02:00
Zeno Rogue 1b832b4a54 arb:: tes files with tree data provided work again 2022-06-23 10:36:37 +02:00
Zeno Rogue c544ce5ed0 clearer comment on minimize_on_convert 2022-06-23 10:35:49 +02:00
Zeno Rogue 18549100f1 tes:: convert:: an option to produce minimal representation 2022-06-23 10:29:49 +02:00
Zeno Rogue d20b6a2e0f rogueviz:: added dpgen and antidesitter to rogueviz-all 2022-06-23 09:44:43 +02:00
Zeno Rogue 224376e234 rogueviz:: reset compass 2022-06-23 09:44:15 +02:00
Zeno Rogue 38099bd7cb hybrid:: new value of 'next' for get_corner 2022-06-23 09:35:16 +02:00
Zeno Rogue 11c4b7974f fixed Ctrl+keys on some systems 2022-06-23 09:34:21 +02:00
Zeno Rogue e691c63abe CLI option -cview 2022-06-23 09:33:58 +02:00
Zeno Rogue 61fcf62727 arb:: fixed cycle_length and repeat_value for conversion 2022-06-23 09:33:41 +02:00
Zeno Rogue 7480d1e0ea rogueviz:: updated to hr changes 2022-06-23 09:32:58 +02:00
Zeno Rogue ebeb22c448 rogueviz:: antidesitter comment added 2022-06-23 09:32:10 +02:00
Zeno Rogue e07f3eb5ff rogueviz:: antidesitter updated 2022-06-23 09:31:39 +02:00
Zeno Rogue de4b436d48 rogueviz:: VR in ascending/descending 2022-06-23 08:59:14 +02:00
Zeno Rogue 3b816f46fc fixed race reset 2022-06-21 10:34:43 +02:00
Zeno Rogue 952b99856d fixed Minesweeper in the highlights menu 2022-06-21 10:28:24 +02:00
Zeno Rogue ddf11f4b42 12.0r 2022-06-17 12:17:29 +02:00
Zeno Rogue 9fbe770db9 ghosts prioritize attacking players over attacking allies 2022-06-17 10:56:31 +02:00
Zeno Rogue fe42b5e2ef fixed Orbs not affecting slime 2022-06-17 10:46:13 +02:00
Zeno Rogue c6369ac832 Orb of the Sword can now kill yourself through mirror or topology 2022-06-17 10:40:26 +02:00
Zeno Rogue 7a7a982b33 sword attacks reflect in mirrors 2022-06-17 10:27:02 +02:00
Zeno Rogue 9ae7bb3d7b swords in mirrors are now displayed correctly 2022-06-17 09:43:37 +02:00
Zeno Rogue 227270283f mimics are now affected by Empathy, and no longer can reverse slime colors by going through mirror 2022-06-17 09:22:25 +02:00
Zeno Rogue a87ef1b02c Woods+Time: do not waste charge on attacking monsters in trees 2022-06-17 09:13:46 +02:00
Zeno Rogue 80e5a9d50e fixed help for life Orbs in the shmup mode 2022-06-17 09:09:53 +02:00
Zeno Rogue 56b0912ef0 Halloween:: fixed the jack-o-lantern 2022-06-17 01:26:44 +02:00
Zeno Rogue 9bb9fd572d moved dual geometry puzzle to RogueViz 2022-06-17 01:20:34 +02:00
Zeno Rogue f3f502e65e special modes cleanup, highlights cleanup 2022-06-17 01:03:31 +02:00
Zeno Rogue c9dae8e753 peace:: cleanup 2022-06-17 01:03:05 +02:00
Zeno Rogue fd36f65fc4 moved creative to game menu 2022-06-17 00:27:56 +02:00
Zeno Rogue 0c445ef365 switching shmup no longer invokes keyboard configuration 2022-06-16 23:58:28 +02:00
Zeno Rogue e6d0c0c803 unified the Quest screen and Main menu. 2022-06-16 23:54:47 +02:00
Zeno Rogue f196d706a6 racing:: don't block cells on load 2022-06-16 23:23:29 +02:00
Zeno Rogue 54971828da racing:: fixup 2022-06-16 23:14:19 +02:00
Zeno Rogue e5b561c804 optimize_shift function for shiftpoint 2022-06-16 23:14:10 +02:00
Zeno Rogue 784dc0d13a tour:: don't display help on NOTITLE 2022-06-16 23:13:54 +02:00
Zeno Rogue 5e2ba55e46 CLI command -rotate-up 2022-06-16 23:13:38 +02:00
Zeno Rogue ba99e537a3 revert uploadScore 2022-06-16 23:13:21 +02:00
Zeno Rogue d2333c15c3 racing:: restore_goals on save 2022-06-16 23:13:06 +02:00
Zeno Rogue 83eb725448 racing:: just reset the race on restart 2022-06-16 23:11:34 +02:00
Zeno Rogue b888205a17 racing:: save records 2022-06-16 23:11:22 +02:00
Zeno Rogue d2bd8933dd racing:: new system 2022-06-16 23:10:44 +02:00
Zeno Rogue 9331309af9 map:: lost memory not saved 2022-06-16 23:07:36 +02:00
Zeno Rogue f0e07eca66 map:: save halls of mirrors correctly 2022-06-16 23:07:20 +02:00
Zeno Rogue 86d1f109bc mapstreams:: now work with sstream too 2022-06-16 23:06:49 +02:00
Zeno Rogue 45e80ca5b5 mymake:: SDL2 with mingw-cross 2022-06-10 18:45:50 +02:00
Zeno Rogue 066b683bde walking:: switch_walking function 2022-06-10 18:45:28 +02:00
Zeno Rogue 91b6628922 fixed SDL2 (with GLEW) on Windows 2022-06-10 18:45:15 +02:00
Zeno Rogue 3fa23afdce rv::presentation:: added -slide-textoff 2022-06-08 18:05:18 +02:00
Zeno Rogue 73ceb6400d rv::presentation:: split empty_screen and white_screen 2022-06-08 18:05:05 +02:00
Zeno Rogue f02b385138 nilrider:: reverted duration check 2022-06-08 18:04:27 +02:00
Zeno Rogue 4d3a9081a9 dynamic-wfc: animation 2022-06-08 18:03:32 +02:00
Zeno Rogue fd5458eaed in history::progress, progress_each is now configurable 2022-06-08 18:01:23 +02:00
Zeno Rogue 88fcca886c fixed write_in_space to use poly_outline 2022-06-08 18:00:43 +02:00
Zeno Rogue d0a5c52889 fixed numerical_minefield display to darken numbers correctly 2022-06-08 18:00:28 +02:00
Zeno Rogue 6039c40bc2 fixed adj_minefield_cells_full 2022-06-08 18:00:00 +02:00
Zeno Rogue 356bce6842 fixup 2022-05-28 19:30:29 +02:00
Zeno Rogue 8660baf3e1 rogueviz:: added dynamic-wfc 2022-05-28 19:30:01 +02:00
Zeno Rogue a28e9e4df5 rogueviz::som:: fixup to last 2022-05-28 19:02:20 +02:00
Zeno Rogue 3b6dac7471 rogueviz::som:: fixup bounded -> closed_manifold 2022-05-28 19:00:53 +02:00
Zeno Rogue 743d9bd7f0 replaced std::sort in pattern2 with manual sort to avoid spurious warning in gcc 12.1.0 2022-05-28 18:58:37 +02:00
Zeno Rogue 5e2a1b6424 fixed a 'pointer used after free' warning 2022-05-28 18:52:10 +02:00
Zeno Rogue cd4cc52768 nilrider:: special music handling 2022-05-28 18:49:29 +02:00
Zeno Rogue a7dac1b28e NilRider version number set to 1.0 2022-05-28 18:48:38 +02:00
Zeno Rogue 1ac9df7c3c partial implementation of antidesitter 2022-05-28 18:48:10 +02:00
Zeno Rogue 5e22163d38 rogueviz:: fixed nil-compass order 2022-05-28 18:47:30 +02:00
Zeno Rogue b0e136dc85 rogueviz:: changed texture twidth to 4096 2022-05-28 18:47:08 +02:00
Zeno Rogue 3d05c9ae84 rogueviz::heatx:: added heat mode as parameter, and added '3' for fake Euclidean heat 2022-05-28 18:46:27 +02:00
Zeno Rogue b6b32d2c2b fixed sl2 rendering 2022-05-28 18:44:42 +02:00
Zeno Rogue a4d8e8314b hooks_sync_music 2022-05-28 18:44:22 +02:00
Zeno Rogue 4892541287 added comments for sl:: parameters, set them as param_, renamed steps to shader_iterations 2022-05-28 18:43:43 +02:00
Zeno Rogue 9c1dd1088b 12.0q 2022-05-21 17:25:39 +02:00
Zeno Rogue 57fd87e1d4 minesweeper now disables minefield range 2022-05-21 17:12:02 +02:00
Zeno Rogue ff2aa90321 numerical_minefield is now editable 2022-05-21 17:12:02 +02:00
Zeno Rogue 1cf26b5380 disk shape configurable 2022-05-21 17:12:02 +02:00
Zeno Rogue 296726a887 mark_always internal option 2022-05-21 17:12:02 +02:00
Zeno Rogue e32f1a4670 marked mines are now displayed at full intensity when ispeed==0 2022-05-21 17:12:02 +02:00
Zeno Rogue c9d90c1c64 now can change the shape of the disk 2022-05-21 17:12:02 +02:00
Zeno Rogue c9d1f8dfeb adj_memo now can keep separate memos for different rules 2022-05-21 17:12:01 +02:00
Zeno Rogue c80d6134e3 adj_minefields_cells_with_orientation upgraded to adj_minefield_cells_full 2022-05-21 16:38:39 +02:00
Zeno Rogue 37f4e400bd made all_disk_cells and all_disk_cells_sorted different, for consistency 2022-05-21 13:09:46 +02:00
Zeno Rogue 793148729b An option to play on a disk (and use bounded space rules). Also renamed 'bounded' flag to 'closed' or similar, and improved Halloween 2022-05-21 13:08:42 +02:00
Zeno Rogue 9bc0623022 disable_orb_range cheat for presentations 2022-05-17 09:45:09 +02:00
Zeno Rogue a703e1af2d dont_display_minecount flag 2022-05-17 09:45:09 +02:00
Zeno Rogue 238422fe89 ray:: renamed deparabolic13 and enparabolic13 adding 'i' to signify that they reorder the coordinates 2022-05-17 09:45:09 +02:00
Zeno Rogue 6285e39b06 export some linepatterns and expansion stuff 2022-05-17 09:45:09 +02:00
Zeno Rogue a6dc4b9314 new projections mostly for Solv: Lie perspective and Lie orthogonal 2022-05-17 09:45:09 +02:00
Zeno Rogue 69a82a8ce1 fixed lie_exp to use correct rules in solnih, and also avoid division by h[2] == 0 2022-05-17 09:37:32 +02:00
Zeno Rogue b9fd64e1d9 numerical_minefield option -- not yet changed in menu 2022-05-17 09:34:58 +02:00
Zeno Rogue 228c3e9866 v12.0p 2022-05-10 09:02:37 +02:00
Zeno Rogue 94c7cf6b03 more guard fixes 2022-05-10 08:53:58 +02:00
Zeno Rogue 319e316b55 nilrider:: fixed panning 2022-05-09 15:58:36 +02:00
Zeno Rogue 001be27c87 nilrider:: do not init textures and shapes before they are needed 2022-05-09 15:15:58 +02:00
Zeno Rogue 20ebc8b488 nilrider:: CAP_SAVE guards 2022-05-09 15:09:28 +02:00
Zeno Rogue 3ac690434d nilrider:: we need CAP_TEXTURE, and CAP_CONFIG guard added 2022-05-09 15:09:28 +02:00
Zeno Rogue b0c34c4f2c added CAP_RAY guard to intra stuff 2022-05-09 15:09:23 +02:00
Zeno Rogue 3c491fb7ac nilrider:: unilrun removed 2022-05-09 14:47:06 +02:00
Zeno Rogue 0f1f4ce99b nilrider:: recording if CAP_VIDEO is available 2022-05-09 14:47:06 +02:00
Zeno Rogue da5a17f8df nilrider:: new track (obstacle track) 2022-05-09 14:47:06 +02:00
Zeno Rogue 7ff9177484 nilrider:: no levellines by default 2022-05-09 14:47:06 +02:00
Zeno Rogue da21b1cb00 rogueviz:: Impossibility presentation updated 2022-05-09 14:47:06 +02:00
Zeno Rogue bd10f06a4c intra:: fix the VR settings 2022-05-09 14:47:06 +02:00
Zeno Rogue e51747dd42 draw sidewalls for shallow 2022-05-09 10:30:50 +02:00
Zeno Rogue 17a18d7579 nilrider:: levellines 2022-05-09 10:02:21 +02:00
Zeno Rogue d4957fd56b nilrider: CAP_VR guards 2022-05-09 09:40:35 +02:00
Zeno Rogue a300cb6ca0 nilrider:: fixed save comment 2022-05-09 09:39:29 +02:00
Zeno Rogue c8e5c3e763 precision in binsearch 2022-05-07 15:18:20 +02:00
Zeno Rogue 9c29f39f7e vr:: fixed buttons 2022-05-07 15:17:30 +02:00
Zeno Rogue acfc18b6a8 nilrider:: reduce quality feature 2022-05-06 21:08:15 +02:00
Zeno Rogue 6d8ce6db68 made some things faster 2022-05-06 21:07:57 +02:00
Zeno Rogue 381523515e nilrider:: vr improvements 2022-05-06 20:28:08 +02:00
Zeno Rogue 279fe685ec nilrider:: VR support 2022-05-06 19:55:09 +02:00
Zeno Rogue 00d606de47 nilrider:: fixed the seat model 2022-05-06 19:55:09 +02:00
Zeno Rogue 3f0dc27140 vr:: refactored vr_enable_button 2022-05-06 19:55:09 +02:00
Zeno Rogue da3584a89d nilrider:: fixed castle texture and minitriangle regen 2022-05-06 19:55:09 +02:00
Zeno Rogue 54fa76ecf8 nilrider:: smooth scrolling enabled 2022-05-06 19:55:09 +02:00
Zeno Rogue 775213345f nilrider:: expanded the level descriptions 2022-05-06 19:55:09 +02:00
Zeno Rogue 4846ffcb53 rogueviz:: fixed smooth movement in smoothcam 2022-05-06 19:55:09 +02:00
Zeno Rogue 6fe07c389c fixed smooth movement in modes other than sm::NORMAL 2022-05-06 19:55:09 +02:00
Zeno Rogue 0c2c32c126 nilrider:: debug removed 2022-05-06 19:55:09 +02:00
Zeno Rogue f6000cbf7a nilrider:: set black outline in menu 2022-05-06 19:55:09 +02:00
Zeno Rogue 54fde5348d nilrider:: don't pause if we have not even started 2022-05-06 19:55:09 +02:00
Zeno Rogue 34d8cb6f27 nilrider:: redesigned the track menu, and starting in it 2022-05-06 19:55:09 +02:00
Zeno Rogue b67b37f8f4 clear ext in prepare_shapes 2022-05-06 19:55:09 +02:00
Zeno Rogue 738d12ddf0 nilrider:: fixed loading records 2022-05-06 19:55:05 +02:00
Zeno Rogue 0f07b7866f nilrider:: fixed incorrect vertexlists in cgi 2022-05-06 19:55:05 +02:00
Zeno Rogue bc8811530f nilrider:: saving/viewing goals 2022-05-06 19:55:05 +02:00
Zeno Rogue 09266b3059 nilrider:: records and currentscores 2022-05-06 19:55:05 +02:00
Zeno Rogue aec4f78ac6 nilrider:: remove timer from checkerparam 2022-05-06 19:55:05 +02:00
Zeno Rogue 4d1c3b0956 nilrider:: fixed slowdown in planning 2022-05-06 19:55:03 +02:00
Zeno Rogue d95bbe2574 nilrider:: fixed missing textures in planning 2022-05-06 19:54:58 +02:00
Zeno Rogue 19a83d2ea8 nilrider:: timer is now recorded with timestamp 2022-05-06 19:54:58 +02:00
Zeno Rogue 4ab376caa7 nilrider:: fixed a bug in pfloor 2022-05-06 19:54:55 +02:00
Zeno Rogue 13e6fa057c nilrider:: sound effects 2022-05-06 19:54:55 +02:00
Zeno Rogue 426361ad96 nilrider:: standalone version 2022-05-06 19:54:55 +02:00
Zeno Rogue a0058eed72 nilrider:: textures invalidating should be fixed 2022-05-06 19:54:55 +02:00
Zeno Rogue dc375ade49 nilrider:: fixed recording surfaces to wrong cgi 2022-05-06 19:54:55 +02:00
Zeno Rogue 9502fc97fc nilrider:: the road starts closer so we know where to go 2022-05-06 19:54:55 +02:00
Zeno Rogue 0dace6f3c2 nilrider:: loaded_or_planned flag 2022-05-06 19:54:55 +02:00
Zeno Rogue b0587572ae fixed some CAP_TOUR guards in rogueviz 2022-05-06 19:54:55 +02:00
Zeno Rogue 78b0324a91 fixed some CAP guards 2022-05-06 19:54:55 +02:00
Zeno Rogue 075630e753 nilrider:: fixed wrong-sized instruments (and maybe something else) 2022-05-06 19:54:55 +02:00
Zeno Rogue e3c8a4c5bf nilrider:: fixed texturing in stepped 2022-05-06 19:54:55 +02:00
Zeno Rogue c057e10051 nilrider:: -nilrider CLI option (and function initialize_all) 2022-05-06 19:54:55 +02:00
Zeno Rogue 80ba9b4835 nilrider:: two projection styles 2022-05-06 19:54:55 +02:00
Zeno Rogue 418eb072dc lie_exp approximation for other geometries 2022-05-06 19:54:55 +02:00
Zeno Rogue 1c907be9da shift_view with geodesic-movement disabled is now based on Lie exponentials (NYI: SL2, Berger) 2022-05-06 19:54:55 +02:00
Zeno Rogue 97c7aef1a9 nilrider:: fix poly_outline changing 2022-05-06 19:54:55 +02:00
Zeno Rogue 28b7800d68 nilrider:: immediate reaction to camera distance 2022-05-06 19:54:55 +02:00
Zeno Rogue 2a9a219e61 nilrider:: stepped display 2022-05-06 19:54:55 +02:00
Zeno Rogue 166ae943ea nilrider:: to instruments, add display triangles, goals, and reversals 2022-05-06 19:54:55 +02:00
Zeno Rogue 117e2cb6f4 nilrider:: goal checking and goal solving and goals for all levels 2022-05-06 19:54:55 +02:00
Zeno Rogue b3e29d9e03 nilrider:: nlrOrder flag to order the triangles correctly 2022-05-06 19:54:55 +02:00
Zeno Rogue 0e3e3b9042 nilrider:: do not put the camera inside a wall 2022-05-06 19:54:55 +02:00
Zeno Rogue 2a5e83d760 nilrider:: remove the outdated initial plan 2022-05-06 19:54:55 +02:00
Zeno Rogue 775fc9b523 nilrider:: start on no-slope 2022-05-06 19:54:55 +02:00
Zeno Rogue 3772f45366 nilrider:: added triangles to remaining levels 2022-05-06 19:54:47 +02:00
Zeno Rogue fe947e0369 hilrider:: goal added in geodesical4 2022-05-06 19:54:47 +02:00
Zeno Rogue 9d2acb89c6 nilrider:: implemented xy_ functions for polar 2022-05-06 19:54:47 +02:00
Zeno Rogue e227119edb nilrider:: fixed pfloor 2022-05-06 19:54:47 +02:00
Zeno Rogue 9fc078e9c7 nilrider:: added a speeding area in the longtrack level 2022-05-06 19:54:47 +02:00
Zeno Rogue dcf0d8af9c nilrider:: refactored mapchar and get_xy 2022-05-06 19:54:47 +02:00
Zeno Rogue 2bd079003a nilrider:: loading saved plans and replays 2022-05-02 03:38:20 +02:00
Zeno Rogue ae503cf322 rv:: missing nil-compass 2022-05-01 21:09:06 +02:00
Zeno Rogue 7ac06e00a1 other settings are now changeable 2022-05-01 16:53:50 +02:00
Zeno Rogue 62331b43f1 nilrider:: basic save functionality (no load though) 2022-05-01 16:45:18 +02:00
Zeno Rogue 3072a998ba nilrider:: consistent replays 2022-05-01 16:44:35 +02:00
Zeno Rogue f82043e87e nilrider:: now using multi::get_actions() 2022-05-01 16:43:55 +02:00
Zeno Rogue 5a13f629d1 split off get_actions from handleInput 2022-05-01 16:43:30 +02:00
Zeno Rogue c4d4bfa517 nilrider:: replays available in manual mode 2022-05-01 16:42:38 +02:00
Zeno Rogue 1e176bb3b0 nilrider:: removed speedlimit -- will do it other way 2022-05-01 12:51:58 +02:00
Zeno Rogue 8ba5c58ac2 nilrider:: configurable keys, smooth reversal 2022-05-01 12:51:17 +02:00
Zeno Rogue 80acbc788f aimspeed settings 2022-05-01 12:12:04 +02:00
Zeno Rogue f3a597dd97 rv:: balloonsim added 2022-05-01 11:27:41 +02:00
Zeno Rogue 15e09eb6ec fixed buggy resizing 2022-05-01 11:25:49 +02:00
Zeno Rogue d3864a2e2c arb:: simplified display of apeirogons 2022-05-01 11:18:39 +02:00
Zeno Rogue 292bb72794 arb:: refactored set_defaults 2022-05-01 11:14:30 +02:00
Zeno Rogue edee92d877 arb:: fixed warning 2022-05-01 11:14:12 +02:00
Zeno Rogue 561a986b3d nilrider:: a simple solver 2022-04-30 12:04:50 +02:00
Zeno Rogue 523e000664 nilrider:: planning:: insert command now lets to drag to set vel 2022-04-30 12:03:54 +02:00
Zeno Rogue a5313d24c4 nilrider::planning:: derivative points now have priority when moving, otherwise they were immovable if vel == 0 2022-04-30 12:03:30 +02:00
Zeno Rogue e21a0180af nilrider:: show cursor in planning 2022-04-30 12:02:30 +02:00
Zeno Rogue 02d195ca0b new screen option sm::SHOWCURSOR 2022-04-30 12:02:05 +02:00
Zeno Rogue 59b11a74ad nilrider:: collecting triangles 2022-04-30 12:01:18 +02:00
Zeno Rogue a234a76d20 fixed the bug with partial symmetry apeirogons 2022-04-28 08:39:47 +02:00
Zeno Rogue 84d48789c7 apeirogonal color fixup 2022-04-28 08:24:13 +02:00
Zeno Rogue 51ea62977f debug_tiles feature 2022-04-28 08:23:33 +02:00
Zeno Rogue 63e855562c fixed the problem where apeirogons got outside boundary 2022-04-28 08:23:07 +02:00
Zeno Rogue f1ccf0450c 12.0o 2022-04-28 00:03:41 +02:00
Zeno Rogue 53289b3ba6 tes:: fix to apeirogons 2022-04-27 23:56:48 +02:00
Zeno Rogue 41d1ac743c fixed spherical geometry 2022-04-27 23:55:16 +02:00
Zeno Rogue 8e8de810fe v12.0n 2022-04-26 23:15:59 +02:00
Zeno Rogue 711fdf6c0d comments added to the new tes samples 2022-04-26 16:29:32 +02:00
Zeno Rogue b9c76d8162 options to disable apeirogon_consistent_coloring and apeirogon_hide_grid_edges 2022-04-26 16:19:02 +02:00
Zeno Rogue 61c3e41e8a gridlines now draw correctly for (ultra)ideal vertices 2022-04-26 16:19:02 +02:00
Zeno Rogue bff04eaf34 ultratriangle sample added 2022-04-26 16:19:02 +02:00
Zeno Rogue 27c9f59caa fixed the dice layering issue 2022-04-26 16:19:02 +02:00
Zeno Rogue 20e44ef18c fixed slime movement on nonorientable 2022-04-26 16:19:02 +02:00
Zeno Rogue 920fc454f0 slime spill is now predictable when multiple colors hit the same cell at once 2022-04-26 16:19:02 +02:00
Zeno Rogue 7adb3dac5a mirrors now flip Alchemist Lab colors (may be a bit unpredictable in minimal quotient) 2022-04-26 16:19:02 +02:00
Zeno Rogue 49d7ab3ed3 floating bubbles now should work correctly for Mirror Shards, Elemental Gems and Ancient Jewelry 2022-04-26 16:19:02 +02:00
Zeno Rogue 12b6ff7208 fixed Prairie in field quotient 2022-04-26 16:19:02 +02:00
Zeno Rogue 38564c3daf marked Hell as no-the 2022-04-26 16:19:02 +02:00
Zeno Rogue 5269c357d4 run away from the lava 2022-04-26 16:19:02 +02:00
Zeno Rogue a788b9e540 CLI command -keys 2022-04-26 16:19:02 +02:00
Zeno Rogue 64ece33a97 fixed Zebra-patterned lands in Zebra quotient space 2022-04-26 16:19:02 +02:00
Zeno Rogue 4707347f3b netgen:: should no longer switch to OpenGL-less and crash 2022-04-26 16:19:02 +02:00
Zeno Rogue 2c2b1ce127 in OpenGL need to reopen on resolution change 2022-04-26 16:19:02 +02:00
Zeno Rogue 4f2b64febe fixup to spiral 2022-04-26 16:19:02 +02:00
Zeno Rogue e0856c420f render spiral no longer tries to disable OpenGL 2022-04-26 16:19:02 +02:00
Zeno Rogue 90a123dcb6 fixed renderbuffer from SDL 2022-04-26 16:19:02 +02:00
Zeno Rogue ccdc858f65 fixed some floors scaled incorrectly when 'creature scale' is changed 2022-04-26 16:19:02 +02:00
Zeno Rogue 234041d39b arb:: used closest_to_zero in get_midedge 2022-04-26 16:19:02 +02:00
Zeno Rogue 31a554f077 ultra-ideal vertices should work now 2022-04-26 16:19:02 +02:00
Zeno Rogue 403f38521e samples for pseudogons and fake inf polygon 2022-04-26 16:19:02 +02:00
Zeno Rogue ad6430a97f arb:: finish_apeirogon now works with material vertices too 2022-04-26 16:19:02 +02:00
Zeno Rogue 8e3c5d367c finish_apeirogon now works with ultra-ideal center 2022-04-25 00:08:27 +02:00
Zeno Rogue 575fd136d7 fixed towards_inf to actually accept dist parameter 2022-04-25 00:07:37 +02:00
Zeno Rogue 65ab10ff18 added samples for the new tessellations 2022-04-24 22:57:35 +02:00
Zeno Rogue 0acebce55a parser:: MAX_EDGE and MAX_VALENCE constants are now available 2022-04-24 22:57:35 +02:00
Zeno Rogue 0301ae44db also increased OINF to be above FULLEDGE 2022-04-24 22:57:35 +02:00
Zeno Rogue ee475ac5b7 tes:: fixed -arb-slider option 2022-04-24 22:57:35 +02:00
Zeno Rogue a8412ac5f0 increased the value of special-move constants to >100 so that the limit on sides is indeed 120 2022-04-24 22:57:35 +02:00
Zeno Rogue 0c7a429985 parser:: ifz function 2022-04-24 22:57:34 +02:00
Zeno Rogue d82ac26ef0 parser:: removed exceptions in arcmedge since they might not work correctly with conditionals 2022-04-24 22:57:34 +02:00
Zeno Rogue 89efe24c2d arb:: int sliders 2022-04-24 22:57:34 +02:00
Zeno Rogue 5a748e113a arb:: added an argument for some functions 2022-04-24 22:57:34 +02:00
Zeno Rogue 87f1c9f972 arb:: added a comment explaining the meaning of slided 2022-04-24 22:57:34 +02:00
Zeno Rogue b09646f01c arb:: c2 auto-curvature option 2022-04-24 22:57:34 +02:00
Zeno Rogue f845523bcd parser:: arcmcurv function 2022-04-24 22:57:34 +02:00
Zeno Rogue 920bf96088 nilrider:: first commit 2022-04-24 22:57:34 +02:00
Zeno Rogue e25b8b94c2 CLI option -canvasfloor 2022-04-24 22:57:34 +02:00
Zeno Rogue a2f0f89c18 patterns now use the same color for the whole apeirogon 2022-04-24 22:57:34 +02:00
Zeno Rogue 59078497dd arb:: support for apeirogons using '*inf' 2022-04-24 22:57:34 +02:00
Zeno Rogue c6cca03248 do_klenize now activates on IDEAL flag 2022-04-24 22:57:34 +02:00
Zeno Rogue 24eccca370 renamed towards_ideal to towards_inf 2022-04-24 22:57:34 +02:00
Zeno Rogue cb654ca990 tes:: fixed get_adj with infinite points 2022-04-24 22:57:34 +02:00
Zeno Rogue 47da0d9f09 barriers:: do not freeze on OINF 2022-04-24 22:57:34 +02:00
Zeno Rogue 1acf4fa477 get_valence now can use the information from arb 2022-04-24 22:57:34 +02:00
Zeno Rogue 3f8e9dde2b parser:: regangle now works with inf edges 2022-04-24 22:57:34 +02:00
Zeno Rogue 32ff898cd1 compute_edgelength accepts inf-faces 2022-04-24 22:57:34 +02:00
Zeno Rogue 506a8b8f1b parser accepts inf 2022-04-24 22:57:34 +02:00
Zeno Rogue 592605c6e2 Arcmedge now accepts a^:b which means that a is repeated b times. Also the computations now work for real a, b 2022-04-24 22:57:34 +02:00
Zeno Rogue fb2431cc31 animperiod as param 2022-04-24 22:57:34 +02:00
Zeno Rogue f95e3e3f0f when parsing time_formula failed, show the error 2022-04-24 22:57:34 +02:00
Zeno Rogue 42cc598dd0 rv::som:: changed the type of analyze_each to ld, so that it can be animated 2022-04-24 22:57:34 +02:00
Zeno Rogue 065666a5a1 rv::som:: even better animations 2022-04-24 22:57:34 +02:00
Zeno Rogue 7624dadb71 parser:: min and max functions 2022-04-24 22:57:33 +02:00
Zeno Rogue 9f0b21cd8a rv:: playing-with-impossibility:: added extra screens 2022-04-21 12:39:49 +02:00
Zeno Rogue bc78a005d1 rv::notknot:: option -nk-solv for convenience 2022-04-21 12:36:03 +02:00
Zeno Rogue e37cc8216a rv::notknot:: fixed the fog colors 2022-04-21 12:35:18 +02:00
Zeno Rogue 858ea26b66 rv:: added nil-compass to rogueviz-all 2022-04-21 12:34:23 +02:00
Zeno Rogue 192cd50e5c rv::som:: fixed paths in rogueviz-all 2022-04-21 12:34:11 +02:00
Zeno Rogue 6e0960bb58 replaced loop_multiplier and loop_shift with more general -animformula 2022-04-21 12:33:37 +02:00
Zeno Rogue 7e8ae4262f rv::som:: need -kst-keys to use keys in som tests 2022-04-21 12:22:06 +02:00
Zeno Rogue 0c71c3724f rv::som:: improved animation 2022-04-21 12:21:23 +02:00
Zeno Rogue f67d16b0f8 rv::som:: junk removed 2022-04-21 12:18:32 +02:00
Zeno Rogue e4ddfa8250 hyperboloid fixup 2022-04-21 11:59:50 +02:00
Zeno Rogue 6d1ded7fd4 Viziers were immune to some attacks in illogical circumstances -- this is no longer the case 2022-04-21 11:59:15 +02:00
Zeno Rogue 91faa3faf3 rv::som:: added our tests 2022-04-21 11:56:01 +02:00
Zeno Rogue e57f69b936 rv::som:: spaces 2022-04-21 11:55:34 +02:00
Zeno Rogue 733d5e5e0e rv::som:: moved SOM to a subdirectory 2022-04-21 11:53:33 +02:00
Zeno Rogue 5e0bd689ef shot:: fixed default loop_multipolier to 1, also added loop_shift 2022-04-16 14:00:10 +02:00
Zeno Rogue 197157838d fixed in_smart_range to use nisot::in_table_range 2022-04-16 13:59:38 +02:00
Zeno Rogue f86670ec19 fixed freezes on VirtualRebase in Nil portal spaces 2022-04-16 13:59:03 +02:00
Zeno Rogue d3fa8a6c2a custom dialog items 2022-04-16 13:58:26 +02:00
Zeno Rogue 1a55a5cfb2 frustum_culling as parameter 2022-04-16 13:58:01 +02:00
Zeno Rogue 8a6f96cba9 rv::presentation:: -presangle to set the angle via CLI 2022-04-12 13:13:08 +02:00
Zeno Rogue f7f0a0ea02 rv::playing-with-impossibility:: loop_multiplier taken into account 2022-04-12 13:03:24 +02:00
Zeno Rogue 461025ca8f rv::simple-impossible:: loop_multiplier taken into account 2022-04-12 13:02:41 +02:00
Zeno Rogue 9bcd0be3f3 rv::presentation:: latex support, add rv_latex=1 to CLI to enable 2022-04-12 13:02:08 +02:00
Zeno Rogue 232736e465 shot:: loop_multiplier parameter 2022-04-12 12:55:23 +02:00
Zeno Rogue b9532031e4 shot:: AA now affects vid.fsize 2022-04-12 12:55:11 +02:00
Zeno Rogue e2cf3c0752 added a repeat command to tile/unittile 2022-04-11 19:58:23 +02:00
Zeno Rogue 7c0a2ba447 tes:: fixed some warnings and a bug 2022-04-11 19:58:23 +02:00
Zeno Rogue be7e4ce70d tes:: preliminary implementation of (ultra)ideal vertices 2022-04-11 19:58:23 +02:00
Zeno Rogue 4122c1336c tes:: repeat can now be stated before conway/c 2022-04-11 19:58:23 +02:00
Zeno Rogue ec033786e1 arb:: removed legacy 2022-04-11 19:58:23 +02:00
Zeno Rogue e318410bff improved handling of missing models/images 2022-04-11 19:58:23 +02:00
Zeno Rogue d075987fa4 rogueviz:: gen_dual 2022-04-07 20:58:53 +02:00
Zeno Rogue 0f49333644 rogueviz:: alt poincare (disabled) 2022-04-07 20:58:42 +02:00
Zeno Rogue e159eb7b47 rogueviz:: export show_animation 2022-04-07 20:57:18 +02:00
Zeno Rogue 816007c268 rogueviz:: an option to launch a slideshow or a specific slide by name 2022-04-07 20:57:02 +02:00
Zeno Rogue 091d747ae8 fixed objmodel reading 2022-04-07 20:56:17 +02:00
Zeno Rogue 306a5b6c0f scanline_noblank function 2022-04-07 20:54:33 +02:00
Zeno Rogue 82d9124d3f fixed hadoken missiles not displaying correctly in shmup 3D 2022-04-07 20:52:33 +02:00
Zeno Rogue ca0fc95a52 read_model now prioritizes the names from the current geometry 2022-04-07 20:51:29 +02:00
Zeno Rogue 2aeb74511d fixup to radar_transform in VR 2022-04-07 20:51:15 +02:00
Zeno Rogue 8c0600d8fe logarithmic fog parameter (logfog) 2022-04-07 20:50:59 +02:00
Zeno Rogue 589d2dd72c hemisphere in spherical now produces the hyperboloid model 2022-04-07 20:50:16 +02:00
Zeno Rogue 65b4b88ce4 uint -> color_t 2022-04-07 20:46:59 +02:00
Zeno Rogue 06023efddc fixup to achievements 2022-04-07 20:46:37 +02:00
Zeno Rogue d319173110 12.0m 2022-03-27 22:47:51 +02:00
Zeno Rogue 8ecb1ce593 rv:: intra-demos:: set playermoved to false 2022-03-27 22:47:51 +02:00
Zeno Rogue 36c71eb583 prevent a crash when entering '(0,0)' in Archimedean 2022-03-27 22:47:51 +02:00
Zeno Rogue 8489550aed multi:: radar works correctly in split_screen 2022-03-27 22:47:51 +02:00
Zeno Rogue 53d5813267 fixed cool fog in split screen 2022-03-27 22:47:51 +02:00
Zeno Rogue 31f70bbbfa ray:: fixed hyperbolic fragdepth (but this should not work, some bug in GLSL?) 2022-03-27 22:47:51 +02:00
Zeno Rogue 049eb33105 ray:: fixed levellines in hyperbolic 2022-03-27 22:47:51 +02:00
Zeno Rogue b79280e423 in non-fake 2.5D the raycaster is disabled by default 2022-03-27 22:47:51 +02:00
Zeno Rogue 14ed4b7603 display a hint when player hidden 2022-03-27 22:47:51 +02:00
Zeno Rogue 00d640fa22 fixed the Orb of Safety not disappearing in shmup+OSM 2022-03-27 22:47:51 +02:00
Zeno Rogue 0843b3c600 multi:: don't count pkills/selfhits if still protected byfragoff; increased the bullet_time 2022-03-27 22:47:51 +02:00
Zeno Rogue 17fcd83f6a multi:: fixed stats 2022-03-27 22:47:51 +02:00
Zeno Rogue 84446a6b9f disable X'es in set_multi 2022-03-27 22:47:51 +02:00
Zeno Rogue 719aab3fb5 fixed the orientation of two-point azimuthal and two-point hybrid 2022-03-27 22:47:51 +02:00
Zeno Rogue a6338d3c49 multi:: disable achievements in split-screen 2022-03-27 22:47:51 +02:00
Zeno Rogue 6d554d6b2e multi:: two-focus projections 2022-03-27 22:47:51 +02:00
Zeno Rogue a6cbedc944 multi:: PvP, friendly-fire, and self-hits options 2022-03-27 22:47:51 +02:00
Zeno Rogue 248c48613e shmup:: in split screen, monsters/missiles are now handled with the closest player 2022-03-27 22:47:51 +02:00
Zeno Rogue 68b2960dd5 shmup:: improved docs for monster struct 2022-03-27 22:47:51 +02:00
Zeno Rogue 37575bcdaf hr::span exported 2022-03-27 22:47:51 +02:00
Zeno Rogue 78ddda1b4f changed constant 3 to caflWarp 2022-03-27 22:47:51 +02:00
Zeno Rogue fbb75309d0 multi:: split_screen for standard shmup, not racing 2022-03-27 22:47:51 +02:00
Zeno Rogue 9a25da1989 multi:: more modern centering 2022-03-27 22:47:50 +02:00
Zeno Rogue 72865478aa splitscreen off now works correctly in racing 2022-03-27 22:47:50 +02:00
Zeno Rogue 23639b1e46 racing:: addsaver -> param 2022-03-27 22:47:50 +02:00
Zeno Rogue 7af95b950a racing:: disabling splitscreen works (except second player movement) 2022-03-27 22:47:50 +02:00
Zeno Rogue d294128ac8 fixed the displayed unlock rule for Crossroads III in Casual 2022-03-27 22:47:50 +02:00
Zeno Rogue 9eff4e597f rogueviz:: sunflower:: don't change whichShape to 9 2022-03-27 22:47:50 +02:00
Zeno Rogue fc29739741 rogueviz:: sunflower:: change sunflower-angle (partial) 2022-03-27 22:47:50 +02:00
Zeno Rogue d92f7f6765 rv:: sunflower:: new options for colors, overlay, and yshift 2022-03-27 22:47:50 +02:00
Zeno Rogue 998af473ca rogueviz:: add extra-projections 2022-03-27 22:47:50 +02:00
Zeno Rogue 5a73eccd4c an option to add more projections via plugins 2022-03-27 22:47:50 +02:00
Zeno Rogue 166f076f2d models:: makeband as a function 2022-03-27 22:47:50 +02:00
Zeno Rogue 8e710784df fixed scale_at for cylindrical projections 2022-03-27 22:47:50 +02:00
Zeno Rogue 930e0c6830 named technical projections 2022-03-27 22:47:50 +02:00
Zeno Rogue a6aa91dfab export qs flags 2022-03-27 22:47:50 +02:00
Zeno Rogue b840082c19 arb:: operators for connection_t 2022-03-27 22:47:50 +02:00
Zeno Rogue 08cfed6658 multi:: split-screen mode is now an option 2022-03-27 22:47:50 +02:00
Zeno Rogue bcc7c9c646
Merge pull request #303 from lottieratworld/main
Extra canvas-specific options + extra animation options
2022-03-26 15:59:31 +01:00
Zeno Rogue 7f2d579251 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2022-03-20 09:52:37 +01:00
Zeno Rogue 5084764275 rogueviz:: missing variables from objmodels 2022-03-20 09:52:32 +01:00
Zeno Rogue 6b0b198446 shape editor: fixed distances shown, also more precision when snapping 2022-03-20 00:51:43 +01:00
Zeno Rogue bbfdcea370 shape editor: mouse snapping feature 2022-03-20 00:51:43 +01:00
Charlotte Peppers 11fa88022f Merge branch 'main' of github.com:lottieratworld/hyperrogue 2022-03-07 19:00:36 -07:00
Charlotte Peppers ff67930be3
Added game version check for loading maps with canvas floor and darkening 2022-03-07 18:59:49 -07:00
Charlotte Peppers 6663a33df4
Merge branch 'zenorogue:master' into main 2022-03-07 17:44:10 -07:00
Charlotte Peppers 904faabd96
Added tower to canvas floor options, added new Flashing Effects option which currently effects storms and some curses 2022-03-07 17:37:35 -07:00
Zeno Rogue 3fe834e726 README now explains what RogueViz is 2022-03-07 13:25:19 +01:00
Charlotte Peppers ab08a69cc6
Added Canvas Floor and Canvas Darkness options 2022-03-06 20:01:59 -07:00
Charlotte Peppers 6117d626d8
Merge branch 'zenorogue:master' into main 2022-03-06 17:10:14 -07:00
Zeno Rogue 1ef969b0e2 version 12.0l 2022-03-01 09:53:30 +01:00
Zeno Rogue 490abd176f added aismallard to credits 2022-03-01 09:37:52 +01:00
Zeno Rogue 694c75efbc rv:: kohonen:: some missing } 2022-03-01 09:32:56 +01:00
Zeno Rogue bde3efbc35 rv:: some fixes to the demos 2022-03-01 09:32:39 +01:00
Zeno Rogue 0429c8353a fixed a crash when drawing aura in some projections 2022-03-01 09:23:51 +01:00
Zeno Rogue aaeab82425 rv:: objmodels:: fixed loading the city model 2022-03-01 08:57:08 +01:00
Zeno Rogue e2b6b6b2eb picking a pres from the list when another one is running no longer just turns the presentation off 2022-03-01 08:52:25 +01:00
Zeno Rogue 2f7bec5634 rv:: embeddings:: removed unused variable 2022-03-01 08:48:13 +01:00
Zeno Rogue 2a32a423d4 rv:: changed the hotkey for RogueViz demos to 'd' 2022-03-01 08:47:40 +01:00
Zeno Rogue 98cf022a44 rv:: snow:: fixes 2022-03-01 08:46:48 +01:00
Zeno Rogue 19019c907a rv:: objmodels fixes 2022-03-01 08:46:06 +01:00
Zeno Rogue 4d234a96f8 rv:: notknot:: faster and no player 2022-03-01 08:45:21 +01:00
Zeno Rogue 1e07875d05 rv:: kohonen:: removed debug 2022-03-01 08:44:59 +01:00
Zeno Rogue beb47aeb26 rv:: kohonen:: bugfix 2022-03-01 08:43:42 +01:00
Zeno Rogue 85d0173d36 rv:: kohonen 2022-03-01 08:42:20 +01:00
Zeno Rogue bd46fbd0ae rv:: embeddings 2022-03-01 08:40:18 +01:00
Zeno Rogue ebe0433168 rv:: hide player in intra-demos 2022-03-01 08:38:42 +01:00
Zeno Rogue 7a1d3822b3 rv:: fifteen:: changed the hotkey, added new puzzles and descriptions 2022-03-01 08:38:22 +01:00
Zeno Rogue 3f0bde3515 rv:: changed the hotkey to Playing with Impossibility 2022-03-01 08:37:47 +01:00
Zeno Rogue f5eae99531 rv:: impossibility:: fixed destroying other slides 2022-03-01 08:37:30 +01:00
Zeno Rogue f3d6f831dd Curse of Repulsion now correctly marked as used 2022-02-28 20:15:51 +01:00
Zeno Rogue f50f3c89dc Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2022-02-28 17:38:19 +01:00
Zeno Rogue 21bd4d7fe0 ray:: uProjection is now always taken as a 4x4 matrix 2022-02-28 17:34:00 +01:00
Zeno Rogue ad6a466837 gamedata:: store vid data more carefully 2022-02-28 17:32:56 +01:00
Zeno Rogue a8f8ca8536 mapeditor:: don't erase maps when loading intra maps 2022-02-28 17:32:19 +01:00
Zeno Rogue 0e39a8a485 intra:: CLI command -walk-on 2022-02-28 17:31:46 +01:00
Zeno Rogue 73738226dd intra:: walking works with vr correctly now 2022-02-28 17:31:27 +01:00
Zeno Rogue bee5a92443 vr:: render should now work even if apply_movement transcends a portal 2022-02-28 17:29:31 +01:00
Zeno Rogue 4891c735b7 vr:: compute iproj correctly 2022-02-28 17:28:50 +01:00
Zeno Rogue b022c3c84e intra:: change floor status of wallcolors 2022-02-27 15:21:58 +01:00
Zeno Rogue 1efd0b4441 rv:: platformer:: now possible to change settings, better explanation in the slide 2022-02-27 15:12:23 +01:00
Zeno Rogue 13cbece9df
Merge pull request #302 from ammongit/crossroads-wiki
Add exception for handling of "Crossroads" in wiki links
2022-02-27 14:59:45 +01:00
Zeno Rogue 3d5cc67f63 <ctime> is included in hyper.h 2022-02-27 14:58:37 +01:00
Zeno Rogue 78049518a5
Merge pull request #301 from ammongit/valentines
Valentine's Easter Egg: Add +1 extra charge to Orb of Love
2022-02-27 14:56:49 +01:00
Zeno Rogue 50e1497405 rv:: portal demos now organized into a separate presentation 2022-02-27 14:53:22 +01:00
Zeno Rogue e827d2a69f tour:: slide_action function 2022-02-27 14:51:02 +01:00
Zeno Rogue ded172b0d3 intra:: fixed a crash on reloading 2022-02-27 14:50:46 +01:00
Zeno Rogue 45fb8fcb44 intra:: shift_view_portal now calls itself recursively so multiple portal passes at once work 2022-02-27 14:50:33 +01:00
Zeno Rogue eed81a3630 fixed extra semicolon 2022-02-27 01:16:42 +01:00
Zeno Rogue 41bd09d4ba rv:: loading intra demos 2022-02-27 01:15:45 +01:00
Zeno Rogue 443ecf0331 intra:: correct cleanup of intra maps 2022-02-27 01:15:45 +01:00
Zeno Rogue 0aa338e9eb rv::platformer:: slide 2022-02-27 01:15:45 +01:00
Zeno Rogue d8d5e2512d rv::platformer::added missing create_sprite_texture 2022-02-27 01:15:45 +01:00
Zeno Rogue 4df17161d7 walking:: save colors_of_floors 2022-02-27 01:15:45 +01:00
Zeno Rogue 48260b781e tour:: next_slide function 2022-02-27 01:15:45 +01:00
Zeno Rogue 3410a20275 rv:: do not destroy change water into chasms (except demos that do that) 2022-02-27 01:15:45 +01:00
Zeno Rogue 162edb85a8 when having Orb of Freedom + Orb of Time, other orbs are no longer drained by Freedom checks 2022-02-27 01:15:45 +01:00
Zeno Rogue 253bec46cb fixed some settings incorrectly showing a warning on editing (this also brings back the 'play music when out of focus' option) 2022-02-27 01:15:45 +01:00
Zeno Rogue 22fc90a30e walking:: walking in solv-h3 2022-02-27 01:15:45 +01:00
Zeno Rogue 94d660cc43 intra:: walking mode 2022-02-27 01:15:45 +01:00
Zeno Rogue cfaa52cf42 intra:: extra debug 2022-02-27 01:15:45 +01:00
Zeno Rogue 822c77b302 smaller eps in apply_other_model 2022-02-27 01:15:45 +01:00
Zeno Rogue 729566d147 smaller eps in zlev 2022-02-27 01:15:45 +01:00
Zeno Rogue 961b09033f config:: reaction called on edit for list settings 2022-02-27 01:15:45 +01:00
Zeno Rogue 5a67e7c040 reduced epsilons in hyperpoint 2022-02-27 01:15:45 +01:00
Zeno Rogue 015006546e ray:: fixed dark lines in H2xR which happened when we got a=0 in quadratic equation 2022-02-27 01:15:45 +01:00
Zeno Rogue 80b9d9533c intra:: fixed portals to/from S3 and H3 2022-02-27 01:15:45 +01:00
Zeno Rogue 6b17cd6412 intra:: fixed Euclidean portals from/to product spaces 2022-02-26 09:48:49 +01:00
Zeno Rogue 8569242082 material works for s2xe and h2xe 2022-02-26 09:46:40 +01:00
Zeno Rogue 1bdb187735 made Yendor/Haunted sight radius consistent when the tiling is changed 2022-02-21 22:47:22 +01:00
Zeno Rogue 9c39688b49 infinite generation for single-land Camelot now only happens in hyperbolic geometry (also fixes the missing Grail in Crystal) 2022-02-21 20:02:58 +01:00
Zeno Rogue 67a19d93bb added missing MAXMDIM guards 2022-02-17 21:00:10 +01:00
Ammon Smith 7bd50b5068 Add missing "ed". 2022-02-15 18:22:56 -05:00
Ammon Smith 83372e7dea Add explanatory comment.
The 0-indexed month value may be confusing.
2022-02-14 18:11:49 -05:00
Ammon Smith 465ec66760 Add +1 charge for Orb of Love on Valentine's day.
Minor date-based easter egg, small enough to not impact gameplay
notably.
2022-02-14 18:06:19 -05:00
Ammon Smith aacea315f2 Add exception for handling of "Crossroads" in wiki links. 2022-02-12 17:57:34 -05:00
Zeno Rogue 4394502e3e 12.0k 2022-02-12 00:13:05 +01:00
Zeno Rogue 3337786c04 Orb of Slaying now works on big trees 2022-02-12 00:11:10 +01:00
Dennis Payne 3023b12e93 Add optional fontconfig support. 2022-02-08 12:44:51 -05:00
Charlotte Peppers a9820ef385
Merge branch 'zenorogue:master' into main 2022-02-05 21:50:16 -07:00
Zeno Rogue b46221bad8 Lazurite Figurines no longer appear immediately after using an Orb of Safety 2022-02-03 01:07:30 +01:00
Zeno Rogue c9ee75cdea Orb of Chaos is now forbidden in the Dungeon 2022-02-03 01:05:41 +01:00
Zeno Rogue 0c20fdeccb Stunning from the Orb of Chaos now destroys birds/shadows just like the other sources of stunning 2022-02-03 01:05:25 +01:00
Zeno Rogue ee246d4a93 Stunning the Shadow now temporarily destroys it 2022-02-03 01:04:19 +01:00
Zeno Rogue 2f2ff3184b Beauty now stuns the Shadows 2022-02-03 01:03:52 +01:00
Zeno Rogue af46e515fe fixup to GRAILH 2022-02-03 01:02:39 +01:00
Zeno Rogue f855106613 fixed Crystal 2022-02-02 11:54:53 +01:00
Zeno Rogue 064ac7de63 fixed racing official track generation 2022-02-02 03:07:12 +01:00
Zeno Rogue fd634e6de8 fixed land_structure for princess/racing/heptagonal achievements 2022-02-02 03:01:31 +01:00
Zeno Rogue fae4ceb672 the orb power gaining order is now: Purity extras -> Choice loss -> standard gain 2022-02-01 17:27:29 +01:00
Charlotte Peppers 0a9d671bd3
Merge branch 'zenorogue:master' into main 2022-02-01 09:23:13 -07:00
Zeno Rogue 231b510f16 patterns:: more distinct colors in 'eight domains' 2022-02-01 17:09:36 +01:00
Zeno Rogue bdc2697f98 fixed pmodel to md in some places in apply_other_model 2022-02-01 17:09:20 +01:00
Zeno Rogue b634d930cb gp:: fixed the comment about GOLDBERG_BITS 2022-02-01 17:08:54 +01:00
Zeno Rogue f61247afe2 arb:: partial option for combinatiorial tessellations 2022-02-01 17:06:56 +01:00
Zeno Rogue 45d684d813 fixed drawPlayerEffects arguments changed in shmup 2022-02-01 17:02:00 +01:00
Zeno Rogue 9f9b757735 rulegen:: tests improvements 2022-02-01 17:00:39 +01:00
Zeno Rogue 37ebe6af5d rulegen:: debug improvements 2022-02-01 16:57:47 +01:00
Zeno Rogue bff37f0274 rulegen:: fixed some bugs with sidecache 2022-02-01 16:57:34 +01:00
Zeno Rogue afb3a2be59 rulegen:: first_restart_on parameter 2022-02-01 16:57:13 +01:00
Zeno Rogue 7d49d7ee81 rulegen:: max_shortcut_length parameter 2022-02-01 16:56:44 +01:00
Charlotte Peppers 9a731572f6
Added idle animation option, fixed palace hypersian rugs using "ticks" instead of "pticks" 2022-01-31 14:39:41 -07:00
Zeno Rogue f366e4fbad mymake error: == not = 2022-01-17 22:34:27 +01:00
Zeno Rogue 549e57b3d1 Goldberg dialog now warns if outside of the supported limits 2022-01-08 19:30:46 +01:00
Zeno Rogue 450aa28d67 gp:: added -gph (better -gp) 2022-01-08 19:20:53 +01:00
Zeno Rogue 7ea8c765d9 gp:: fixed GP(1,3) for 4-valent 2022-01-08 19:20:35 +01:00
Zeno Rogue e9609df06b gp:: fixed some cases 2022-01-08 18:55:06 +01:00
Zeno Rogue 6ea3ad8493 perfect_linewidth as param_i 2022-01-08 18:54:24 +01:00
Zeno Rogue d6bf35201c flush method on hstream 2022-01-08 18:54:08 +01:00
Zeno Rogue b99e0f448f draw fishtails on friends with empathy 2022-01-08 18:53:57 +01:00
Zeno Rogue 1a7d55fd52 changed disable_flooshapes to floorshapes_level 2022-01-08 18:52:17 +01:00
Zeno Rogue b87a47eaaa fixed relative_matrix in crystal 2022-01-08 18:52:02 +01:00
Zeno Rogue 894da8c55a doubling distance_warning, getside and examine_branch to detect loops early 2021-12-29 04:27:17 +01:00
Zeno Rogue 014e995ef1 changed slow_side to the default as it turns out to be incompatible with branch skipping 2021-12-29 04:20:58 +01:00
Zeno Rogue e190fc63a7 rulegen:: branch skipping now made optional, also reset in case of serious errors 2021-12-29 04:20:19 +01:00
Zeno Rogue d40ea1d6ba rulegen:: smarter get_side by caching data inside tcell and by noting down known information on the way 2021-12-29 03:35:31 +01:00
Zeno Rogue d7d3d21d2a fixed a bug causing skipped branches to interact badly with single live branches 2021-12-29 03:34:31 +01:00
Zeno Rogue 61c5ad9344 fixed overzealous cache clearing 2021-12-29 03:33:35 +01:00
Zeno Rogue 2e17df921d rulegen:: fixed deleting tmap 2021-12-29 03:33:25 +01:00
Zeno Rogue 9787b3e52d rulegen:: fixed cleanups 2021-12-28 11:38:45 +01:00
Zeno Rogue 410d5c3015 rulegen:: clear branch checks on clean_data 2021-12-28 11:36:44 +01:00
Zeno Rogue 316b8d4f7c rulegen:: also set sidecache for the reverse twalker 2021-12-28 11:35:59 +01:00
Zeno Rogue 872ce9d389 rulegen:: distance warnings 2021-12-28 11:35:37 +01:00
Zeno Rogue 775a087624 larger values allowed for codes 2021-12-28 11:34:50 +01:00
Zeno Rogue 468873da29 rulegen:: skipping branches which seem good 2021-12-27 23:09:37 +01:00
Zeno Rogue a5d24e0ff7 rulegen:: tests:: auto disable floorshapes 2021-12-27 20:23:13 +01:00
Zeno Rogue a3a5b7c17e rulegen:: improved stats 2021-12-27 20:23:02 +01:00
Zeno Rogue 6ee2f4d3d1 fixup to last :: tests forking 2021-12-27 20:22:18 +01:00
Zeno Rogue 09ec5b0ee0 rulegen:: tests:: forking 2021-12-27 20:22:09 +01:00
Zeno Rogue e425bf9bf9 rulegen:: tests:: remove sprawl 2021-12-27 20:21:23 +01:00
Zeno Rogue eb8ea9c735 retry not failure on neg rule mismatch 2021-12-27 20:20:10 +01:00
Zeno Rogue 77bfa5c9a7 use vectors not maps for shortcuts and analyzers 2021-12-27 20:19:18 +01:00
Zeno Rogue f9b23b6c39 handle_queued_extensions fixup, should be in earlier commit 2021-12-27 13:30:36 +01:00
Zeno Rogue 38f3414828 rulegen:: retry not failure on reaching the end 2021-12-27 13:30:14 +01:00
Zeno Rogue 94e06b3bbf new analyzers, based on decision trees 2021-12-27 13:03:15 +01:00
Zeno Rogue f43f80b0ad rulegen:: better debug 2021-12-26 22:34:15 +01:00
Zeno Rogue 9eb7b2e337 fixup to some std 2021-12-26 22:34:07 +01:00
Zeno Rogue ac259bcc95 rulegen:: queue extensions 2021-12-26 22:33:33 +01:00
Zeno Rogue e466ed8e22 Revert "rulegen:: trace_rootpath changed to beats_exhaustive"
This reverts commit 81e8a1f113.
2021-12-26 17:31:42 +01:00
Zeno Rogue 81e8a1f113 rulegen:: trace_rootpath changed to beats_exhaustive 2021-12-26 16:28:47 +01:00
Zeno Rogue 045a439d64 fixup to parent_updates 2021-12-26 10:09:13 +01:00
Zeno Rogue a3a1845d49 clean_parent() on restart 2021-12-25 21:32:45 +01:00
Zeno Rogue 22ffb60ec3 rulegen:: improved overzealous xsidefreeze detection 2021-12-25 21:32:34 +01:00
Zeno Rogue 71fd8eccf5 rulegen:: optimized smart shortcuts 2021-12-25 21:32:08 +01:00
Zeno Rogue d74edf07db rulegen:: build shortcuts on parent change 2021-12-25 21:31:36 +01:00
Zeno Rogue d1ed0ab779 fixed >= to > in smart shortcut 2021-12-25 01:36:44 +01:00
Zeno Rogue 99486bfc3c disabled debug of smart shortcuts 2021-12-25 01:36:25 +01:00
Zeno Rogue d1043152dc in fix_distances, also fix parent_dir 2021-12-25 01:35:48 +01:00
Zeno Rogue 5115a379ee fixup to smart shortcuts 2021-12-24 23:13:57 +01:00
Zeno Rogue f861126171 rulegen:: smarter shortcuts 2021-12-24 23:13:05 +01:00
Zeno Rogue 127b64dc66 fixup to twalker I think 2021-12-24 23:11:50 +01:00
Zeno Rogue 2af34b84f2 rulegen:: better debugging on solid 2021-12-24 23:11:33 +01:00
Zeno Rogue 31272587b5 arb:: extra stats about the tiling available 2021-12-24 23:10:47 +01:00
Zeno Rogue c160a506e6 rulegen:: tests:: do not crash on failure 2021-12-24 23:10:18 +01:00
Zeno Rogue 67dcda0f25 rulegen:: tests:: more stats available 2021-12-24 23:10:06 +01:00
Zeno Rogue 0fb6ddb3bc rulegen:: tests:: list coordination sequences 2021-12-24 23:09:47 +01:00
Zeno Rogue 1343eacc1c rulegen:: tests:: disable timeout on iterate and irradiate 2021-12-24 23:08:47 +01:00
Zeno Rogue a065fc4d86 rulegen:: base the functions on twalkers to avoid unification errors 2021-12-24 23:08:14 +01:00
Zeno Rogue a373bad6c7 hyper-main:: convenience functions for the shared library 2021-12-19 13:08:12 +01:00
Zeno Rogue cf0d9ac501 mymake:: an option -shared to create a less intrusive shared object library 2021-12-19 13:07:50 +01:00
Zeno Rogue 92745fe1bb mymake:: an option -o to change the executable name 2021-12-19 13:07:18 +01:00
Zeno Rogue 87c902c4b8 fixed fat edges in some H3 honeycombs 2021-12-14 11:19:15 +01:00
Zeno Rogue fa79d67016 12.0j 2021-12-13 22:34:35 +01:00
Zeno Rogue 217d4a770d fixed selecting gravity/ocean as the starting land 2021-12-13 22:30:26 +01:00
Zeno Rogue abec39422c fixed a problem with victory achievements 2021-12-13 22:15:08 +01:00
Zeno Rogue 1eb762fde2 12.0i 2021-12-13 22:15:08 +01:00
Zeno Rogue d3fb683a95 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2021-12-12 22:39:54 +01:00
Zeno Rogue 973fc68b66 rogueviz:: added new modules to rogueviz-all.cpp 2021-12-12 22:39:16 +01:00
Zeno Rogue 58630373e7 rogueviz:: horo63 added 2021-12-12 22:38:49 +01:00
Zeno Rogue bbe6843390 rogueviz:: GoBot added 2021-12-12 22:38:15 +01:00
Zeno Rogue 8658d2abde rogueviz:: platformer added 2021-12-12 21:42:07 +01:00
Zeno Rogue c4a55669c8 Hyperbugs now ignore the player in peace mode. 2021-12-12 21:21:27 +01:00
Zeno Rogue 7350af18f2 fixed the Nature + movement orb combo, without Empathy 2021-12-12 21:14:41 +01:00
Zeno Rogue e238a7ddf9 fixed the Nature + Slaying + Empathy combo 2021-12-12 21:06:47 +01:00
Zeno Rogue 5d476fff1c fixed 'Orb of the Love' 2021-12-12 20:41:11 +01:00
Zeno Rogue 32bfdf42c3 Krakens no longer destroy player boats in peaceful mode 2021-12-12 20:35:18 +01:00
Zeno Rogue 3dde8d805a ray:: rmap_get_by_id and rmap_get_id_of 2021-12-12 00:30:44 +01:00
Zeno Rogue 00c71c5212 export curvedata 2021-12-12 00:30:07 +01:00
Zeno Rogue d3f397fe27 fieldpattern:: call analyze immediately 2021-12-12 00:29:03 +01:00
Zeno Rogue df2180cf67 fieldpattern:: removed currfp. in analyze which could cause a loop 2021-12-12 00:28:48 +01:00
Zeno Rogue 5d81260f0b expansion_analyzer is now in cgi 2021-12-11 23:28:05 +01:00
Zeno Rogue cfcd8a5e57 fixed a bug in parsing unary - 2021-12-09 20:53:52 +01:00
Zeno Rogue 8220611718 third_person_rotation 2021-11-30 20:56:36 +01:00
Zeno Rogue a4ec0cabf0 knuth-bendix implementation 2021-11-23 10:25:28 +01:00
Zeno Rogue 914f2b9a57 rulegen-tests improved 2021-11-23 10:25:16 +01:00
Zeno Rogue a98d9cb699 disable_floorshapes 2021-11-23 10:24:51 +01:00
Zeno Rogue 237a521e80
Merge pull request #299 from dulsi/master
Add HYPERFONTPATH to make it easier to package on Fedora.
2021-11-18 17:26:02 +01:00
Dennis Payne d31c330d8b Add HYPERFONTPATH to make it easier to package on Fedora. 2021-11-17 10:11:13 -05:00
Zeno Rogue 770949978a reduced the other land range for currentLocalTreasure in 3D geometries 2021-11-07 10:53:04 +01:00
Zeno Rogue 9ca670af20 do not remove faraway treasures in 3D geometries (they are not that far away...) 2021-11-07 10:52:25 +01:00
Zeno Rogue a8d2e589f1 that fixup was added? 2021-11-07 10:41:27 +01:00
Zeno Rogue 98969e4b6b fixed openplains in nowalls mode 2021-11-07 10:34:53 +01:00
Zeno Rogue d07ae075bc ray:: fixed raycaster in 2dim geometries crashing 2021-11-07 10:19:21 +01:00
Zeno Rogue 456adb32c0 fixup to 'which_copy includes rotation' 2021-11-07 10:14:08 +01:00
Zeno Rogue a5d5cba14d fixed allies affecting Terracotta Warriors without actually moving next to them 2021-11-07 10:11:16 +01:00
Zeno Rogue ea079ba0d1 which_copy now consistenly includes rotation -- seems to fix cat moving problem 2021-11-07 10:03:16 +01:00
Zeno Rogue 18f2ccf1d4 rulegen:: fix_distances on tmove 2021-11-07 09:59:44 +01:00
Zeno Rogue 12dcd348b0 sol:: stop crashing if coordinates are NAN 2021-11-07 09:59:22 +01:00
Zeno Rogue 6078f53dbc fixed colors in coxeter 2021-11-07 09:07:51 +01:00
Zeno Rogue 215f203d40 removed the Gardener flag as it is handled by achievement_gain_once 2021-11-07 08:43:41 +01:00
Zeno Rogue 0d08dceddf fixed a subtle issue causing max_examine_branch error 2021-11-03 10:20:29 +01:00
Zeno Rogue ea9936c544 rulegen:: fix memory leak in add_other_origins 2021-11-03 09:42:40 +01:00
Zeno Rogue f3d7601c88 rulegen:: fix_distances in numerical_fix 2021-11-03 09:42:21 +01:00
Zeno Rogue 54b37284eb devmods:: rulegen-tests:: -tesgen option 2021-11-01 17:27:28 +01:00
Zeno Rogue 65355469ff devmods:: rulegen-tests:: a comment 2021-11-01 17:27:06 +01:00
Zeno Rogue 9c2d0dec05 devmods/rulegen-tests:: some extra stats 2021-11-01 17:26:28 +01:00
Zeno Rogue 391d1a646b rulegen:: simplified get_parent_dir 2021-11-01 17:25:50 +01:00
Zeno Rogue cca9afaba9 rulegen:: fixed a bug with sidecache not clearing on single_live_branch_close_to_root 2021-11-01 17:25:39 +01:00
Zeno Rogue 233934630f rulegen:: find_new_shortcut also called in the other direction 2021-11-01 17:25:24 +01:00
Zeno Rogue 78298432da rulegen:: numerical-fix, known-structure and known-distances 2021-11-01 17:24:54 +01:00
Zeno Rogue e36a8970f4 rulegen:: some extra debug 2021-11-01 17:22:50 +01:00
Zeno Rogue ed156e9efb rulegen:: reinforced trace_root_path 2021-11-01 17:21:50 +01:00
Zeno Rogue 523f640fa5 rulegen:: fixed hashing in case of incompatible distances 2021-11-01 17:20:08 +01:00
Zeno Rogue a7149f7054 rulegen:: fix_distances on connect_and_check 2021-11-01 17:18:16 +01:00
Zeno Rogue 78d33ec573 rulegen:: used EX 2021-11-01 17:18:06 +01:00
Zeno Rogue 045dc90378 another fixup to last 2021-11-01 17:17:16 +01:00
Zeno Rogue 159ed86045 fixup to last 2021-11-01 17:15:23 +01:00
Zeno Rogue 1a74241cd9 devmods:: rulegen-tests:: time measuring improvements (movecount and attempts) 2021-11-01 17:14:01 +01:00
Zeno Rogue 1e2ffd611c devmods:: rulegen-tests:: disdable bigstuff 2021-11-01 17:13:07 +01:00
Zeno Rogue 4040f56262 rogueviz:: added the missing function on_cleanup_or_next 2021-10-17 17:02:34 +02:00
Zeno Rogue 1e504d98ae arb:: loading tes options is now optional 2021-10-17 09:40:28 +02:00
Zeno Rogue 839ca440ea refer to color by HTML name in commandline arguments 2021-10-17 09:18:31 +02:00
Zeno Rogue 9d26e98fcd colors:: allocate more colors 2021-10-17 09:05:51 +02:00
Zeno Rogue 25b77617cd star samples 2021-10-17 08:31:57 +02:00
Zeno Rogue eac543fe07 fixup to last 2021-10-15 22:39:45 +02:00
Zeno Rogue ce4be1bc6b fixed pseudogonal to pseudohedral 2021-10-15 22:38:24 +02:00
Zeno Rogue cb75ba44dc pseudogonal mode 2021-10-15 22:36:43 +02:00
Zeno Rogue e3c80b70bf arb:: a feature to add commandline options 2021-10-15 22:15:47 +02:00
Zeno Rogue 6821caa509 arb:: star option 2021-10-15 22:15:15 +02:00
Zeno Rogue a6022178b3 arg:: run_arguments function 2021-10-15 22:14:30 +02:00
Zeno Rogue 432499f903 eatchar in parser 2021-10-15 22:13:52 +02:00
Zeno Rogue 9f9a95059a intra:: perf/edit setting 2021-10-10 00:49:59 +02:00
Zeno Rogue 2d3ed4a79d 12.0h 2021-10-10 00:40:22 +02:00
Zeno Rogue 56af053d4b ray:: requested in intra, no cgi_string used 2021-10-10 00:40:22 +02:00
Zeno Rogue 6db94b134d intra:: optimize saved maps 2021-10-10 00:40:22 +02:00
Zeno Rogue 5d5f93e1bc rogueviz:: added intra-demos 2021-10-10 00:40:22 +02:00
Zeno Rogue 6e9245a6ce ray:: param_i for ray_max_cells 2021-10-10 00:40:22 +02:00
Zeno Rogue ea2899d7e0 ray:: iteration in intra fix 2021-10-10 00:40:22 +02:00
Zeno Rogue 7d60c2d73e multigame:: save hybrid::csteps and patterns::rwalls 2021-10-10 00:40:22 +02:00
Zeno Rogue ef67ed4a75 mapstream:: save sol correctly 2021-10-10 00:40:22 +02:00
Zeno Rogue 868b75f64e intra:: set T=Id to prevent possible rendering errors 2021-10-10 00:40:22 +02:00
Zeno Rogue 09f8aefba7 ray:: reordered just in case 2021-10-10 00:40:22 +02:00
Zeno Rogue 912aab9d27 ray:: use the same shader for all starting points in intra 2021-10-10 00:40:22 +02:00
Zeno Rogue a97fa8a95d ray:: special maxstep and max_iter for intra 2021-10-10 00:40:22 +02:00
Zeno Rogue 32684298a0 intra:: option -intra-kill 2021-10-10 00:40:22 +02:00
Zeno Rogue 12fe1e1d54 intra:: improved debug 2021-10-10 00:40:22 +02:00
Zeno Rogue a79d28fafe more portal fixes 2021-10-10 00:40:22 +02:00
Zeno Rogue 7d5d2e44e8 function idv 2021-10-10 00:40:22 +02:00
Zeno Rogue b6986879ec fixed a crash when generating daily 2021-10-10 00:40:22 +02:00
Zeno Rogue 84f5d2b454 allowed Dice and Curse and walls in Daily 2021-10-10 00:40:22 +02:00
Zeno Rogue 8f59ff7016 do not switch variation to pure when switching to Archimedean product 2021-10-10 00:40:22 +02:00
Zeno Rogue 4aa0dcf2fa mapstream:: correctly save coxeter and subcube-based variations 2021-10-10 00:40:22 +02:00
Zeno Rogue 09655ebf9f intra:: improved be-square 2021-10-10 00:40:22 +02:00
Zeno Rogue af18ee7ae1 intra:: become() now adds more spaces if called inside intra 2021-10-10 00:40:22 +02:00
Zeno Rogue 11aa9d0ddd intra:: improved debug 2021-10-10 00:40:22 +02:00
Zeno Rogue 57e58b3302 intra:: non-regular-shaped portals e.g. right-angled triangles 2021-10-10 00:40:22 +02:00
Zeno Rogue be1df0a68d fixed gen_sample_list (more walkaround than fix) 2021-10-10 00:40:22 +02:00
Zeno Rogue 41308e8e98 fixed product in dual archimedean 2021-10-10 00:40:22 +02:00
Zeno Rogue f97282099c intra:: binary x Z now connects to Solv/H3, fixes to product vertical 2021-10-10 00:40:22 +02:00
Zeno Rogue a04635111c fixed 20/21 resolution in multi-cell spaces 2021-10-10 00:40:22 +02:00
Zeno Rogue 2b8c19a6f7 ray:: works with Ternary and BinaryTiling product 2021-10-10 00:40:22 +02:00
Zeno Rogue 569c968a41 ray:: now works with Binary4 product 2021-10-10 00:40:22 +02:00
Zeno Rogue 83da34d6ac ray:: no portal_connections if not needed 2021-10-10 00:40:22 +02:00
Zeno Rogue 43cefcaca1 ray:: fixed the names of len functions 2021-10-10 00:40:22 +02:00
Zeno Rogue 77feff1c30 ray:: renamed bt/minkowski function to deparabolic and enparabolic for cinsistency 2021-10-10 00:40:22 +02:00
Zeno Rogue fe1e1d1f16 binary product now uses curved shapes 2021-10-10 00:40:22 +02:00
Zeno Rogue 62c4ddef45 made bt wider by default to match Binary3 and Solv 2021-10-10 00:40:22 +02:00
Zeno Rogue b4ffffe6ba shot:: hack to work in intra 2021-10-10 00:40:22 +02:00
Zeno Rogue 6605092515 ray:: fixup to solv portals 2021-10-10 00:40:22 +02:00
Zeno Rogue 2e5b46ff45 mapeditor:: save plevel_factor 2021-10-10 00:40:22 +02:00
Zeno Rogue b866647622 fixes to parabolic 2021-10-10 00:40:22 +02:00
Zeno Rogue 8217fb474e intra:: reduced eps to 1e-5 2021-10-10 00:40:22 +02:00
Zeno Rogue b1774a0763 intra:: using .at instead of [] 2021-10-10 00:40:22 +02:00
Zeno Rogue cb6226b5ab intra:: better H3/Solv portals 2021-10-10 00:40:22 +02:00
Zeno Rogue e4ea3b9de2 intra:: portal debugging 2021-10-10 00:40:22 +02:00
Zeno Rogue 0966d5e36c more accurate portal movement 2021-10-07 12:43:45 +02:00
Zeno Rogue 8d0059a760 refactored bt coordinate functions 2021-10-07 12:41:44 +02:00
Zeno Rogue 4ff08f3f3e deparabolic13 in hyperpoint 2021-10-07 12:41:29 +02:00
Zeno Rogue ac54fe909d inverse_exp more precise for very small vectors 2021-10-07 12:40:52 +02:00
Zeno Rogue 8bdf5aa404 param_f for levellines 2021-10-07 12:39:49 +02:00
Zeno Rogue 4a904b73c5 intra:: fix -be-square 2021-10-03 18:07:46 +02:00
Zeno Rogue f52b02b638 intra:: be more careful in infinite spaces 2021-10-03 18:07:32 +02:00
Zeno Rogue 36f3a0cf7b ray:: do not switch if no sample 2021-10-03 18:06:39 +02:00
Zeno Rogue 8385cad774 ray:: fixed levellines 2021-10-03 18:06:27 +02:00
Zeno Rogue 74906727c6 intra:: Solv portalsP 2021-10-03 18:06:15 +02:00
Zeno Rogue 6920382634 intra:: fixed wrongly rotating portals 2021-10-03 18:04:52 +02:00
Zeno Rogue 30a99f762f ray:: step-based works with intra 2021-10-03 18:03:14 +02:00
Zeno Rogue 4f3988602c ray:: nicer bt_to_minkowski 2021-10-03 11:16:15 +02:00
Zeno Rogue d2c8527213 ray:: fixed intra in bt 2021-10-03 11:15:33 +02:00
Zeno Rogue 80ce840b3d add_function in raygen 2021-10-03 10:55:07 +02:00
Zeno Rogue 6fea0c31e4 intra:: H3-bt portals (preliminary) 2021-10-03 10:19:45 +02:00
Zeno Rogue 1458929a5d clearer functions bt::bt_to_minkowski and bt::minkowski_to_bt 2021-10-02 19:49:29 +02:00
Zeno Rogue e70e2fc404 intra:: fixed the mirroring on product ceiling portals 2021-10-02 14:01:22 +02:00
Zeno Rogue 49fcd23397 12.0g 2021-10-01 08:18:49 +02:00
Zeno Rogue 53a4a472aa made rulegen compile in older compiler 2021-10-01 08:18:49 +02:00
Zeno Rogue 77063c135d back_and_front was not added in hyper.h 2021-10-01 08:03:16 +02:00
Zeno Rogue 5d4df5d9d6 fixed message about 9 types 2021-10-01 08:00:42 +02:00
Zeno Rogue 486803aca6 intra:: CLI option -be-square 2021-10-01 07:56:57 +02:00
Zeno Rogue 8f0d6585cd options to create intra map 2021-09-30 19:05:15 +02:00
Zeno Rogue 011611d575 re-enabled Caribbean 2021-09-30 16:17:37 +02:00
Zeno Rogue 8b6a745a8f intra:: more portal combinations are working (product upwards, portal to self) 2021-09-30 16:13:47 +02:00
Zeno Rogue b3fc40a8fc intra:: fixed mirroring 2021-09-30 15:02:16 +02:00
Zeno Rogue ed88c6dfbb fixed asin_auto_clamp in product 2021-09-30 14:13:19 +02:00
Zeno Rogue 631469490f parallel linepattern is now configurable 2021-09-30 13:23:35 +02:00
Zeno Rogue 642f0899b5 fixed box display which sometimes removed parts of the picture 2021-09-30 13:22:48 +02:00
Zeno Rogue 99f85aecfd option disable_bigstuff for some experiments 2021-09-30 13:22:12 +02:00
Zeno Rogue aeb93f7e3f arb::convert:: added more tests as the current sometimes did not work 2021-09-30 13:18:34 +02:00
Zeno Rogue b88ec8550e mimics destroyed correctly in the map editor 2021-09-30 13:16:22 +02:00
Zeno Rogue 7e57852788 gp:: pBring works with GP(2,2) and larger 2021-09-30 13:11:55 +02:00
Zeno Rogue 9ffdf3aa67 gp:: improved debug 2021-09-30 13:10:52 +02:00
Zeno Rogue aeb889119d gp(1,1) now works with non-orientable S3==4 2021-09-30 12:05:16 +02:00
Zeno Rogue 70c0fb1c7a UNRECTIFIED now works with non-orientable 2021-09-30 12:04:58 +02:00
Zeno Rogue 3967aee968 new geometry gHalfBring 2021-09-30 12:04:26 +02:00
Zeno Rogue 6929b2f1b4 rogueviz:: edgewidth parameter 2021-09-30 11:42:23 +02:00
Zeno Rogue af00aaac2d rogueviz:: improved line quality 2021-09-30 11:42:02 +02:00
Zeno Rogue 89696a8e2c rogueviz:: weirdmaze:: option atleast == -1 2021-09-30 11:40:30 +02:00
Zeno Rogue 73c16f9586 rogueviz::smoothcam:: disable sm::SIDE 2021-09-30 11:39:48 +02:00
Zeno Rogue 66f0e22dae rogueviz:: objmodels:: removed debug 2021-09-30 11:38:57 +02:00
Zeno Rogue e1fa7345ff rogueviz:: objmodels:: ignore_mtlname option 2021-09-30 11:38:45 +02:00
Zeno Rogue 36ee3b7ebe rogueviz::objmodels:: root option 2021-09-30 11:37:53 +02:00
Zeno Rogue d29cf4bda5 rogueviz:: snow:: -use-model option 2021-09-30 11:36:04 +02:00
Zeno Rogue 2b2eabd63a rogueviz:: added sokoban to highdim-demo 2021-09-30 11:35:09 +02:00
Zeno Rogue d2d9483065 rogueviz:: fundamental:: add clearmemory 2021-09-30 11:33:44 +02:00
Zeno Rogue 9564f0fdc6 rogueviz:: fixed crystal-sokoban 2021-09-30 11:33:13 +02:00
Zeno Rogue 9a32a462cc crystal:: fixed a crash bug 2021-09-30 11:14:31 +02:00
Zeno Rogue 402fabeefb rogueviz:: use enable_canvas 2021-09-30 10:49:12 +02:00
Zeno Rogue 2377ccb434 fixed -r option and made it more powerful: -f1 -r 0, -f1 -r XxYxF, -f0 -r .9x.9, -f0 -r 1000x1000 2021-09-18 01:55:55 +02:00
Zeno Rogue 3ece943c9f fixup to intra editing (point_direction was missing) 2021-09-18 01:39:30 +02:00
Zeno Rogue 96c143da8e backandfront projection option 2021-09-18 01:39:09 +02:00
Zeno Rogue a7ddaae7d4 intra:: improved keeping cgi's 2021-09-17 13:50:43 +02:00
Zeno Rogue 9076056fc4 geometry_information:: edgelen available 2021-09-17 13:50:24 +02:00
Zeno Rogue c16686404d fineline as param_b 2021-09-17 13:49:43 +02:00
Zeno Rogue aa6c0cb1cd fixup to save field 3d fix 2021-09-17 13:49:31 +02:00
Zeno Rogue a5228b06a5 mapeditor:: loading maps now sets the default settings like pmodel for 3D 2021-09-17 12:20:15 +02:00
Zeno Rogue 23a860d405 intra:: intra maps are now saved correctly 2021-09-17 12:00:53 +02:00
Zeno Rogue 7a7198c45a mapeditor:: 3D field quotients are now saved correctly 2021-09-17 11:56:18 +02:00
Zeno Rogue 716f7684e0 intra:: portals now can be edited 2021-09-17 10:26:51 +02:00
Zeno Rogue e8e6d0aa25 two-sided display of hyperbolic disk with -1<pconf.alpha<0 2021-09-16 22:26:23 +02:00
Zeno Rogue eb58d78555 ray:: fixed mirrors in intra::in 2021-09-16 22:14:30 +02:00
Zeno Rogue 09b4191758 ray:: used variable m intead of calling getM("woi") 2021-09-16 22:11:09 +02:00
Zeno Rogue f7bcadab50 intra:: fix 2021-09-16 22:04:24 +02:00
Zeno Rogue 5f4e03b1da intra:: fixes 2021-09-16 21:58:35 +02:00
Zeno Rogue 64268f7990 fixed PAGEDOWN rotating in the same direction as PAGEUP 2021-09-16 21:31:36 +02:00
Zeno Rogue 663e334e38 intra:: first version 2021-09-16 21:30:26 +02:00
Zeno Rogue 30f964e6e3 ray:: protect_prod applied 2021-09-16 20:53:05 +02:00
Zeno Rogue 35fda985f1 ray:: refactoring in raycaster 2021-09-16 20:50:39 +02:00
Zeno Rogue c7ccb0b64f improved citation metadata 2021-09-15 17:21:56 +02:00
Zeno Rogue a086dc568e improved metadata 2021-09-15 17:17:50 +02:00
Zeno Rogue 5561351769 more metadata 2021-09-15 17:16:01 +02:00
Zeno Rogue 78bf27f514 CITATION.cff updated 2021-09-15 16:51:28 +02:00
Zeno Rogue 93f98c3036 added CITATION.cff 2021-09-15 16:42:55 +02:00
Zeno Rogue 8a007fc1d6 rogueviz:: one more CAP_TEXTURE guard 2021-09-04 22:01:35 +02:00
Zeno Rogue 01ebce9496 added missing CAP_TEXTURE guard in rogueviz 2021-09-04 22:00:41 +02:00
Zeno Rogue 46f2fa4f9a moved draw_sky out of #if 2021-09-04 21:58:45 +02:00
Zeno Rogue f87e3b3dce mymake:: added option -sdl0 for SDL-less builds 2021-09-04 21:57:17 +02:00
Zeno Rogue d97c4bbde3 mymake:: added -march=native 2021-09-04 21:57:01 +02:00
Zeno Rogue 97ec940744 added CAP_GL guards 2021-09-04 21:54:42 +02:00
Zeno Rogue e2ba882b55 refactored compute_geometry_data 2021-08-27 12:06:10 +02:00
Zeno Rogue e432991abe rulegen:: minor fixes 2021-08-25 12:58:02 +02:00
Zeno Rogue 73d5862d04 refactored check_timeout 2021-08-25 12:57:50 +02:00
Zeno Rogue 9df74125bd fix_distances: do not fix while fixing uni 2021-08-25 12:57:33 +02:00
Zeno Rogue 0e3acfe91b check_timeout in find_new_shortcuts 2021-08-25 12:57:14 +02:00
Zeno Rogue 83e69a4872 rulegen:: addstep used in one more place 2021-08-25 12:56:56 +02:00
Zeno Rogue 25dba5a13c do not crash on memory clean in case of precision errors 2021-08-25 12:55:51 +02:00
Zeno Rogue 42d87d39ac in be_solid check that c1 is not null (not sure how it could happen) 2021-08-24 12:55:56 +02:00
Zeno Rogue 510c28227b Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2021-08-24 12:20:52 +02:00
Zeno Rogue 0b7b1845bf rogueviz:: recursive-house added 2021-08-24 12:20:13 +02:00
Zeno Rogue 3e269fe053 rulegen:: w_near_solid 2021-08-24 12:06:17 +02:00
Zeno Rogue 74bf728b84 rulegen:: some weird stuff 2021-08-24 03:37:09 +02:00
Zeno Rogue 25c636c54a rulegen:: improved shortcut generation 2021-08-24 03:36:50 +02:00
Zeno Rogue 4d127e824a rulegen:: tests:: use clock() 2021-08-24 00:34:35 +02:00
Zeno Rogue 9174a8210b rulegen:: tests:: new features 2021-08-24 00:34:25 +02:00
Zeno Rogue cda7d2337a rulegen:: origin_id can be changed now 2021-08-24 00:33:52 +02:00
Zeno Rogue 61c400c459 rulegen:: debuglist for solid errors 2021-08-24 00:33:38 +02:00
Zeno Rogue 0c6b6e4b8e rulegen:: improved handling of distance errors 2021-08-24 00:33:24 +02:00
Zeno Rogue 6215039f9d rulegen:: export ufind 2021-08-24 00:32:53 +02:00
Zeno Rogue ea44116beb rulegen:: tests:: fixed set_dir 2021-08-23 15:57:22 +02:00
Zeno Rogue cd1f421c70 rulegen:: tests:: changing colors and some other new features for making screenshots 2021-08-23 15:57:12 +02:00
Zeno Rogue e5aa10df83 move_to function 2021-08-23 15:56:45 +02:00
Zeno Rogue 711ae44605 rulegen:: handle dead roots 2021-08-23 15:50:08 +02:00
Zeno Rogue 308ed5cbb1 rulegen:: fixed branch conflicts handled incorrectly 2021-08-23 15:49:48 +02:00
Zeno Rogue 9e04e053df rulegen:: do not include conversion time 2021-08-23 12:07:18 +02:00
Zeno Rogue c36116f125 rulegen:: tests:: precision testing, report solid_err 2021-08-23 12:06:52 +02:00
Zeno Rogue b41785d671 mymake:: quiet option -q 2021-08-22 23:42:12 +02:00
Zeno Rogue 6c9f7e71e1 better handling of precision errors in arcm and arb 2021-08-22 23:41:38 +02:00
Zeno Rogue c6aa583a3d
Merge pull request #296 from jruderman/rose_crash
Erase rosemap entries for deleted cells
2021-08-22 23:35:18 +02:00
Zeno Rogue 5e87f08f54 walker::peek() is now const 2021-08-22 23:34:19 +02:00
Zeno Rogue 536c1c21ea sidecache was not cleared -- added 2021-08-22 19:42:25 +02:00
Zeno Rogue 59aed89f96 rulegen:: w_bfs option 2021-08-22 19:42:07 +02:00
Zeno Rogue 320ff44ef3 fixup to export flag names 2021-08-22 19:41:44 +02:00
Zeno Rogue 565d43665e rulegen:: fixup to numerical 2021-08-22 14:31:30 +02:00
Zeno Rogue c5c8d4a928 rulegen:: fixup to time computation 2021-08-22 14:31:23 +02:00
Zeno Rogue 359227c84a rulegen:: fix weird errors 2021-08-22 14:31:13 +02:00
Zeno Rogue d361d2bf61 rulegen:: report all_solid_errors 2021-08-22 14:30:52 +02:00
Zeno Rogue 1c08b5500f rulegen:: implemented w_numerical 2021-08-22 14:30:24 +02:00
Zeno Rogue 75e637be30 rulegen:: epxort flag names 2021-08-22 14:28:54 +02:00
Jesse Ruderman 34537282f8 Erase rosemap entries for deleted cells 2021-08-22 02:00:04 -07:00
Zeno Rogue 489c930ced rulegen:: new test value 2021-08-22 00:28:52 +02:00
Zeno Rogue 3616221118 rulegen:: updated tests to use new features 2021-08-22 00:23:51 +02:00
Zeno Rogue 29f2570662 rulegen:: timeout feature 2021-08-22 00:12:22 +02:00
Zeno Rogue db28ca7c4a stats fixup 2021-08-22 00:10:14 +02:00
Zeno Rogue 6db8f857e1 rulegen:: flags to test variants of the algorithm 2021-08-22 00:10:02 +02:00
Zeno Rogue 3654ca58aa rulegen:: more fixes in reporting 2021-08-21 23:40:50 +02:00
Zeno Rogue 7f33024321 fixup to dlbonus removal 2021-08-21 23:38:42 +02:00
Zeno Rogue 60a8992b29 rulegen:: extra stats, extra cleanup 2021-08-21 23:38:36 +02:00
Zeno Rogue a272bb399d rulegen:: removed dlbonus as it is unused 2021-08-21 23:35:04 +02:00
Zeno Rogue 5f1f10c79f Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2021-08-20 11:40:09 +02:00
Zeno Rogue c999d4c314 rulegen:: tests:: now can test regular and Archimedean tessellations and their variations 2021-08-20 11:37:38 +02:00
Zeno Rogue 566f05a6d0 arb::convert:: had debug lines which caused conversion to end up even if it worked correctly 2021-08-20 11:35:09 +02:00
Zeno Rogue 647f7132dd improved find_single_live_branch 2021-08-20 01:36:14 +02:00
Zeno Rogue 78ee00ddea fixed problems in resolve_confusion 2021-08-20 01:35:19 +02:00
Zeno Rogue 1135aaab7e set try_to_resolve_confusion to true 2021-08-20 01:34:00 +02:00
Zeno Rogue 71d416f78d max_getside configurable 2021-08-20 00:48:09 +02:00
Zeno Rogue 25aa5d62e1 rulegen:: do not repeat importants 2021-08-20 00:46:22 +02:00
Zeno Rogue 153a639337 rulegen:: removed junk 2021-08-20 00:45:46 +02:00
Zeno Rogue 40792a3aa1 faster get_side hard case 2021-08-20 00:44:24 +02:00
Zeno Rogue 0d60ff6bdc find_new_shortcuts fix hid original shortcuts 2021-08-20 00:44:12 +02:00
Zeno Rogue e80782be87 converted wrongcode from rulegen_failure to rulegen_retry 2021-08-19 13:22:31 +02:00
Zeno Rogue 0ed4b8f367 rulegen-tests:: improvements 2021-08-19 13:19:32 +02:00
Zeno Rogue 2f11f9babb refactored clean_data and clean_parents 2021-08-19 13:19:11 +02:00
Zeno Rogue 881b262174 removed mismatch_error to multiple error causes 2021-08-19 13:19:01 +02:00
Zeno Rogue 19f65644e7 rulegen:: check all live branches, not until the first error 2021-08-19 13:18:38 +02:00
Zeno Rogue c58f12cfc6 rulegen:: just call rules_iteration_for for unknown states, no need to restart 2021-08-19 13:17:56 +02:00
Zeno Rogue d7f40b8cdb more handle_distance_errors 2021-08-19 13:14:57 +02:00
Zeno Rogue 5e249ba4f4 rulegen:: in find_new_shortcuts don't find subshortcuts 2021-08-19 13:14:15 +02:00
Zeno Rogue cd52fe35b2 rulegen:: renamed check_solid to find_new_shortcuts 2021-08-19 13:13:59 +02:00
Zeno Rogue 31d359d908 multiple shortcuts per sample, check_solid on unification 2021-08-19 13:12:26 +02:00
Zeno Rogue 1b1d38bda6 fixup to tests improved 2021-08-19 01:40:15 +02:00
Zeno Rogue 80d5ee7c37 rulegen:: tests improved 2021-08-19 01:39:49 +02:00
Zeno Rogue 9b741ebb47 fixup to MYSTERY_DIST removal 2021-08-19 01:33:07 +02:00
Zeno Rogue 755e1df101 rulegen:: minor fixes 2021-08-19 01:27:56 +02:00
Zeno Rogue 49e92f4288 addstep, protected cw+wstep 2021-08-19 01:27:26 +02:00
Zeno Rogue 8b5c0bbe70 rulegen:: better export/error reporting 2021-08-19 01:25:18 +02:00
Zeno Rogue 8d764fd8ef removed MYSTERY_DIST 2021-08-19 01:24:35 +02:00
Zeno Rogue d321e4b5ec sidecache 2021-08-19 01:24:01 +02:00
Zeno Rogue 1798bc4612 rulegen::clear analyzers on doubling 2021-08-19 01:21:44 +02:00
Zeno Rogue 137763dae9 rulegen:: fix unification errors 2021-08-17 23:05:56 +02:00
Zeno Rogue 627963c634 rulegen:: improved memory usage 2021-08-17 20:08:06 +02:00
Zeno Rogue 858fd61794 rulegen:: perform get_code if code is given but no parent_dir 2021-08-17 20:07:17 +02:00
Zeno Rogue 57dffb8af9 rulegen:: cleaner push_unify and improved assertions 2021-08-17 20:06:48 +02:00
Zeno Rogue 73edbfee90 longer shortcuts allowed 2021-08-17 19:27:02 +02:00
Zeno Rogue f5d0d928cb throw mismatch errors quickly 2021-08-17 18:58:23 +02:00
Zeno Rogue afc92c586c rulegen:: added single_live_branch_close_to_root to cleanup 2021-08-17 17:43:24 +02:00
Zeno Rogue c97290890e fixed push_deadstack in the root 2021-08-17 17:24:11 +02:00
Zeno Rogue 4c3800f2b4 removed sub_status -- unused in the current branchtester 2021-08-17 17:15:11 +02:00
Zeno Rogue 5c95359763 rulegen:: debug removed in find_sub_status 2021-08-17 17:04:29 +02:00
Zeno Rogue 47c6495652 rulegen:: simpler branch testing 2021-08-17 17:04:17 +02:00
Zeno Rogue bc511cf37b rulegen:: tests:: can print rules 2021-08-17 14:35:53 +02:00
Zeno Rogue 2fed33ae43 rulegen:: tests:: able to set -resolve 2021-08-17 14:35:46 +02:00
Zeno Rogue 943682f1d5 rulegen:: tests:: comments now available in .lst files 2021-08-17 14:35:31 +02:00
Zeno Rogue 9fafad3ee0 rulegen:: tests:: options to specify what statistics to report 2021-08-17 14:35:13 +02:00
Zeno Rogue d9b8c338d3 rulegen:: tests:: display root states 2021-08-17 14:34:34 +02:00
Zeno Rogue 89958ea3c8 rulegen:: tests:: an option to debug parent_dir 2021-08-17 14:34:27 +02:00
Zeno Rogue 72f0f9b28b rulegen:: tests:: nicer MYSTERY_DIST display 2021-08-17 14:34:14 +02:00
Zeno Rogue 096364bb06 rulegen:: tests:: set canvas land just in case 2021-08-17 14:33:50 +02:00
Zeno Rogue 41978a6a03 rulegen:: tests:: YA fixup for multi 2021-08-17 14:33:37 +02:00
Zeno Rogue f17f8cacf1 second part of last -- fixup 2021-08-17 14:30:36 +02:00
Zeno Rogue 631827c657 simpler multi-connection system 2021-08-17 14:28:27 +02:00
Zeno Rogue 031d6a2c50 rulegen:: ufind in extend_analyzer just in case 2021-08-17 14:25:20 +02:00
Zeno Rogue e0db5d8f6a rulegen:: set C_CHILD for id==0 2021-08-17 14:24:58 +02:00
Zeno Rogue 85acd05ee7 rulegen:: improved get_side 2021-08-17 14:24:32 +02:00
Zeno Rogue b307ab2762 rulegen:: rulegen_retry on no extension 2021-08-17 14:24:06 +02:00
Zeno Rogue 43aec99cd8 rulegen:: debug get_parent_dir 2021-08-17 14:20:54 +02:00
Zeno Rogue dd79a01f02 rulegen:: attempt to resolve confusion (for testing other parts mainly) 2021-08-17 14:18:54 +02:00
Zeno Rogue 5e534dbe28 rulegen:: get_parent_dir now finds a conflict in symmetric case 2021-08-17 14:18:05 +02:00
Zeno Rogue 6080443fde dealing with single live branches correctly 2021-08-17 02:32:03 +02:00
Zeno Rogue 02a6ca7441
Merge pull request #292 from blargdag/ru2
More Russian translations
2021-08-17 00:36:02 +02:00
Zeno Rogue e4fdac9d65
Merge pull request #291 from blargdag/typo
Fix typo in Russian translation.
2021-08-17 00:35:49 +02:00
Zeno Rogue a96b3daf69 rulegen: unused var removed 2021-08-17 00:25:07 +02:00
Zeno Rogue 48b91ddafb rulegen:: some fixes in get_parent_dir 2021-08-17 00:24:38 +02:00
Zeno Rogue f19ba00324 rulegen:: fixed for the case of a single live branch at root. TBH more hack than a proper fix 2021-08-15 21:01:47 +02:00
Zeno Rogue fc0763362e improved get_parent_dir 2021-08-15 18:06:23 +02:00
Zeno Rogue 749b8aead6 rulegen:: simplified since we know LEFT/RIGHT directions 2021-08-15 17:43:13 +02:00
Zeno Rogue 0f0aef8dd9 rulegen:: faster shortcuts 2021-08-15 17:26:38 +02:00
blargdag 1565691bb5 Advance marked line. :-D 2021-08-12 16:56:58 -07:00
blargdag 12f9f48577 Translate description of Free Fall. 2021-08-12 16:56:58 -07:00
blargdag b7f29095bc Translate Brown Island description. 2021-08-12 15:11:05 -07:00
blargdag 0b667f5d42 Fix typo. 2021-08-11 16:55:56 -07:00
Zeno Rogue 68949a4ea4 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2021-08-09 14:42:12 +02:00
Zeno Rogue 53010a259e removed reachedfrom from system 2021-08-09 14:42:07 +02:00
Zeno Rogue 30a6a55ba0
Merge pull request #288 from jruderman/aenum
Update autoplay for #221
2021-08-09 13:50:02 +02:00
Zeno Rogue 838b9d0b10
Merge pull request #289 from jruderman/illusion_item
Orb of Trickery messages no longer reveal underwater items
2021-08-09 13:49:28 +02:00
Zeno Rogue f1e495be4f
Merge pull request #290 from jruderman/vault_phase_msgs
Add Orb error messages for Phasing and Vaulting
2021-08-09 13:47:54 +02:00
Jesse Ruderman dbb6488557 Add Orb error messages for Phasing and Vaulting 2021-08-09 04:26:56 -07:00
Jesse Ruderman 8d98193e70 check_vault: ensure error codes don't depend on angle 2021-08-09 04:26:28 -07:00
Jesse Ruderman aad8441d83 Orb of Trickery messages no longer reveal underwater items 2021-08-09 02:24:18 -07:00
Jesse Ruderman 85a4dd2683 Update autoplay for #221 2021-08-09 02:22:12 -07:00
Zeno Rogue 77f6d2db14 improved ranged Orb error messages 2021-08-09 02:07:32 +02:00
Zeno Rogue f8c13ea531 better checking of pathlock 2021-08-09 00:50:39 +02:00
Zeno Rogue 5dbda4c896 split reachedfrom to path_reachedfrom and bfs_reachedfrom; also fix bfs_reachedfrom for other geoms 2021-08-09 00:49:22 +02:00
Zeno Rogue 897ba90628 added missing pathdata structure creation 2021-08-09 00:48:11 +02:00
Zeno Rogue bb77f035b0 pathdata:: no longer inline 2021-08-09 00:48:11 +02:00
Zeno Rogue fbc32c6bc4 don't set landparam for hunting dogs outside of laHunting 2021-08-08 22:12:32 +02:00
Zeno Rogue d33fc20c6b movei constructor now calls cmove, not move 2021-08-08 19:43:58 +02:00
Zeno Rogue 68ba57142a warning protection no longer evokes Flash/Lightning 2021-08-08 19:33:26 +02:00
Zeno Rogue a6151f185f refactored whirlline loop detection 2021-08-08 19:13:09 +02:00
Zeno Rogue 025893e946 cleaned up where summoned creature appears for Orb of Life and Orb of Friendship 2021-08-08 19:04:58 +02:00
Zeno Rogue 683ab67ad9 prevent freezes in West Wall with wrong data 2021-08-08 18:32:10 +02:00
Zeno Rogue 4902d2db8d fake_edgelength constant in parser 2021-08-08 18:29:49 +02:00
Zeno Rogue a8eef4b717 fixed set_view for 2.5D 2021-08-08 18:29:35 +02:00
Zeno Rogue ba7b9d6097 an option to disable sky drawing 2021-08-08 18:29:21 +02:00
Zeno Rogue 7b0b41967f wall shadows no longer drawn with noshadow 2021-08-08 18:28:24 +02:00
Zeno Rogue ae03bd5272 some Euclidean lands are now available only in single land mode 2021-08-08 18:23:38 +02:00
Zeno Rogue 2f11237171 no more fatigue_cost checking when the Curse is gone 2021-08-08 17:24:09 +02:00
Zeno Rogue e55fe37803 gravityLevelDiff is now clamped to [-1,1] 2021-08-08 17:23:17 +02:00
Zeno Rogue 6a3e12836f added CAP_COMMANDLINE guards in rulegen 2021-08-08 17:14:19 +02:00
Zeno Rogue bdeee41e98 fixed rot spaces 2021-08-08 17:11:05 +02:00
Zeno Rogue 1756a634a5 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2021-08-08 13:31:19 +02:00
Zeno Rogue 0105808adf added RogueViz sample 2021-08-08 13:31:11 +02:00
Zeno Rogue fad27e34c1
Merge pull request #287 from jruderman/event_targets
emscripten: specify event targets to fix a JS error
2021-08-07 11:50:57 +02:00
Zeno Rogue 501f5c59bc fixed the interesting dodecahedral quotient spaces (535c, 535s, 533s) 2021-08-07 11:32:54 +02:00
Zeno Rogue de83eeeef2 weirdmaze add fixup 2021-08-07 11:25:36 +02:00
Zeno Rogue 8b43724b6c rogueviz/weirdmaze added 2021-08-07 11:24:50 +02:00
Jesse Ruderman 75d67fb7d9 emscripten: specify event targets to fix a JS error 2021-08-06 11:30:30 -07:00
Zeno Rogue 610d5cc399 raycaster fix continued 2021-08-06 15:38:54 +02:00
Zeno Rogue dfa682ea8a fixed a possible bug while raycasting the first frame 2021-08-06 15:03:06 +02:00
Zeno Rogue cba7ed1db9 added -Wno-invalid-offset in Makefile 2021-08-05 20:34:08 +02:00
Zeno Rogue c4c862ad01 fake:: added missing override 2021-08-05 20:33:40 +02:00
Zeno Rogue dda9f29403 12.0f 2021-08-05 13:49:41 +02:00
Zeno Rogue 317e9d5549 mentioned one more fix in changelog 2021-08-05 13:47:24 +02:00
Zeno Rogue 3f155298b4 updated to 12.0f 2021-08-05 13:30:32 +02:00
Zeno Rogue 8545c7d66f shot:: more 16:9 formats 2021-08-05 13:22:29 +02:00
Zeno Rogue 14afd51049 when switching dimension in arb/fake, the correct geometry is used for fixmatrix 2021-08-05 13:17:40 +02:00
Zeno Rogue 51ad054012 arcm:: debug output uses index_pointer 2021-08-05 12:48:48 +02:00
Zeno Rogue f21a36a7aa arcm:: correct cgip is used for the altmap 2021-08-05 12:48:14 +02:00
Zeno Rogue fcf55f1852 arcm:: arcm_euclid_length parameter 2021-08-05 12:21:39 +02:00
Zeno Rogue 2c074a7088 rulegen:: analyzer improvements 2021-08-05 11:56:49 +02:00
Zeno Rogue 9e9b331b3a sky debug removed 2021-08-05 11:56:20 +02:00
Zeno Rogue cb6a28f7c1 fixed some problems with 2D fake 2021-08-05 11:56:12 +02:00
Zeno Rogue 8d2dcb462e rulegen:: fractal debug removed 2021-08-04 20:48:24 +02:00
Zeno Rogue eae1b67013 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2021-08-04 20:22:52 +02:00
Zeno Rogue cb2972f207 changelog was not pushed with 12.0e 2021-08-04 20:22:18 +02:00
Zeno Rogue 932cb7c997 rulegen:: fractal landscapes 2021-08-04 20:21:03 +02:00
Zeno Rogue 9896f8d311 fixed BabyTortoise generation for ls::single() 2021-08-04 20:18:54 +02:00
Zeno Rogue 9ce7a243ed fixed switching messages 2021-08-04 20:15:46 +02:00
Zeno Rogue 8ca6d3407a
Merge pull request #271 from jruderman/nestcolors
Adjust Snake Nest colors so drawMonster can add them without overflowing to black
2021-08-04 19:14:43 +02:00
Zeno Rogue 2ac3b6f949
Merge pull request #275 from jruderman/fall_alch_msg
Show correct message when trying to move from a high Brown Island cell to a Red Slime cell
2021-08-04 19:13:10 +02:00
Zeno Rogue 4710110421
Merge pull request #274 from jruderman/recall_tense
Fix typo in Orb of Recall description
2021-08-04 19:12:36 +02:00
Zeno Rogue 3af71a1388
Merge pull request #272 from jruderman/snake_high
Fix highlight colors for snakes
2021-08-04 19:12:02 +02:00
Zeno Rogue e61a69207a
Merge pull request #273 from jruderman/vsnekcolor
Fix RRV snakes sometimes being colored like SN snakes
2021-08-04 19:11:26 +02:00
Zeno Rogue 4f33b4297b
Merge pull request #277 from jruderman/chaos_trap
Orb of Chaos now destroys arrow traps
2021-08-04 19:11:10 +02:00
Zeno Rogue 69e5356e8a
Merge pull request #276 from jruderman/slime_color_in_brown
Fix color of slime on Brown Island
2021-08-04 19:10:46 +02:00
Zeno Rogue 965b40cf11
Merge pull request #279 from jruderman/ndfe
Fix discontinuity in notDippingForExtra
2021-08-04 19:09:58 +02:00
Zeno Rogue f5264e49c7
Merge pull request #278 from jruderman/detrap_particles
Animate destruction of arrow traps
2021-08-04 19:09:41 +02:00
Zeno Rogue 0f746b5009
Merge pull request #281 from jruderman/gen_no_stun
Clear stuntime when generating new monsters
2021-08-04 19:09:18 +02:00
Zeno Rogue ba3c117d97
Merge pull request #282 from jruderman/terra_wparam
Fix terra statue interactions with Chaos+Icy, BSoC swap, Alch dup
2021-08-04 19:07:42 +02:00
Zeno Rogue d98c8a025f fixup to memory perf 2021-08-04 18:36:38 +02:00
Zeno Rogue a5bb0b7ffc rulegen:: rule_status is now logged 2021-08-04 18:35:48 +02:00
Zeno Rogue 6935aa1cf7 rulegen:: branches starting at other roots were not examined 2021-08-04 18:35:37 +02:00
Zeno Rogue b60618d28a rulegen:: improved the memory performance 2021-08-04 18:35:04 +02:00
Zeno Rogue 7c9c599e4c index_pointer now produces better sequences of chars 2021-08-04 18:25:52 +02:00
Zeno Rogue b544461dc7 flat_model_enabler now sets the default variation, fixes issue #254 2021-08-04 18:23:26 +02:00
Zeno Rogue 6999277715 arb:: fixed a bug with 'ended at wrong edge determining vertex_valence' 2021-08-04 18:00:34 +02:00
Zeno Rogue e175f522dc arcm:: cleared spam in DF_GEOM 2021-08-04 18:00:09 +02:00
Zeno Rogue e2077620c8 general_barrier: removed useless at_corner = true 2021-08-04 17:59:09 +02:00
Zeno Rogue d8e13ed88d general_barrier:: fixed holes 2021-08-04 17:58:52 +02:00
Zeno Rogue 917e42e4a5 CR4/Elemental Planes now supported generally 2021-08-04 17:46:47 +02:00
Zeno Rogue 9d8cde1508 renamed checkBarriersNowall to general_barrier_check 2021-08-04 17:45:24 +02:00
Zeno Rogue 3c4e3f0e3e fixed general_barrier not working correctly at all with CEPOSNEG 2021-08-04 17:43:51 +02:00
Zeno Rogue fdf2162b36 function wsname for debugging 2021-08-04 17:41:54 +02:00
Zeno Rogue 0b5a32d1c1 fixed the raycaster in elliptic S3 2021-08-04 15:28:17 +02:00
Zeno Rogue 8c2dfad20f fix elliptic S3 2021-08-04 15:18:22 +02:00
Jesse Ruderman d8509a0528 Fix terra statue interactions with Chaos+Icy, BSoC swap, Alch dup 2021-08-03 17:15:53 -07:00
Jesse Ruderman 85cfd1d01f Clear stuntime when generating new monsters 2021-08-03 16:32:04 -07:00
Jesse Ruderman ddd4f81b97 Fix discontinuity in notDippingForExtra 2021-08-02 22:37:23 -07:00
Jesse Ruderman b8aab5e50d Animate destruction of arrow traps 2021-08-02 22:18:23 -07:00
Jesse Ruderman e90999e5b6 Orb of Chaos now destroys arrow traps 2021-08-02 22:13:40 -07:00
Jesse Ruderman 07035f3c09 Fix raised colors in Snake Nest 2021-08-02 19:40:05 -07:00
Jesse Ruderman 7f73dc88ab Fix color of slime on Brown Island 2021-08-02 19:11:58 -07:00
Jesse Ruderman 46ca5f81a0 Show correct message when trying to move from a high Brown Island cell to a Red Slime cell 2021-08-02 19:09:45 -07:00
Jesse Ruderman 00fe4eaf16 Fix typo in Orb of Recall description 2021-08-02 13:31:57 -07:00
Jesse Ruderman 5d4584c66a Fix RRV snakes sometimes being colored like SN snakes 2021-08-02 12:45:46 -07:00
Jesse Ruderman 34b4ffffae Fix highlight colors for snakes 2021-08-02 12:14:21 -07:00
Jesse Ruderman 74ae7a72c5 Adjust Snake Nest colors so drawMonster can add them without overflowing to black 2021-08-02 12:06:10 -07:00
Zeno Rogue b67b946126 upgraded Android version number 2021-08-01 11:43:57 +02:00
Zeno Rogue ce1d48c415 added missing override 2021-08-01 11:28:45 +02:00
Zeno Rogue b0dd4ebf94 rulegen:: added MLEFT and MRIGHT to treestates in files 2021-08-01 03:02:39 +02:00
Zeno Rogue 5dd6789762 treestate reading now actually supports placing PARENT in other places 2021-08-01 03:00:24 +02:00
Zeno Rogue d04416dae8 fived bugs with moving the key with boats 2021-08-01 02:39:42 +02:00
Zeno Rogue 8da22c4ba9 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2021-07-31 20:38:26 +02:00
Zeno Rogue ed1a1dc37c
Merge pull request #270 from jruderman/drc2
Dice hover map now indicates hardness with color
2021-07-31 20:36:13 +02:00
Zeno Rogue 96f03dee31
Merge pull request #266 from jruderman/teleport_euclid
Teleport cheat (from overview) now works in Euclidean
2021-07-31 20:35:08 +02:00
Zeno Rogue d0c231b057
Merge pull request #267 from jruderman/a3
Autoplay improvements 3
2021-07-31 20:34:47 +02:00
Zeno Rogue a15d3e5811 don't return no_great_walls any longer 2021-07-31 20:30:41 +02:00
Zeno Rogue 923420fd0d altmap:: protect from crashing barriers 2021-07-31 20:30:12 +02:00
Zeno Rogue 8498e0ce14 fixup to bin fix 2021-07-31 20:29:44 +02:00
Zeno Rogue c89b97b244 generate_random_path fixed in 3D 2021-07-31 20:29:11 +02:00
Zeno Rogue c588837375 rulegen:: fixed a crash in generate_random_path when exploring a dead branch 2021-07-31 20:28:51 +02:00
Zeno Rogue 8e88ceb3bc removed disabling barriers in gBinary4 2021-07-31 20:18:32 +02:00
Zeno Rogue 36d3314eae currentmap for generating floorshapes is now of correct class in bt 2021-07-31 20:12:43 +02:00
Zeno Rogue 8079b0ffa4 paragraphs in strict tree maps help 2021-07-31 16:10:37 +02:00
Zeno Rogue ad454f2c67 more features explained in the sample 2021-07-31 16:10:23 +02:00
Zeno Rogue a065e73013 an option to change rule_root in the tes file 2021-07-31 16:10:08 +02:00
Zeno Rogue 769411554f an option to enable strict tree maps from the expansion menu 2021-07-31 16:02:30 +02:00
Zeno Rogue 0f05bb5e59 rulegen:: dialog now shows the statistics on success 2021-07-31 15:58:13 +02:00
Zeno Rogue 1fc3961a6f rulegen:: added the dialog enabling these 2021-07-31 15:50:20 +02:00
Zeno Rogue c843af9131 reduced the default max_tcellcount 2021-07-31 15:48:12 +02:00
Zeno Rogue 8d5d311555 arb::convert:: fixed a bug when trying to run multiple times 2021-07-31 15:47:58 +02:00
Zeno Rogue 0a141e0606 shvid-pattern ('A') is now universally available 2021-07-31 15:14:31 +02:00
Zeno Rogue dae0aacbb7 shvid now calls require_shapes() 2021-07-31 15:14:31 +02:00
Zeno Rogue c661290930 rulegen:: fixed a bug with generating Camelot root 2021-07-31 15:14:31 +02:00
Zeno Rogue 7fcc4de28b alt error reported differently 2021-07-31 15:14:31 +02:00
Zeno Rogue e8a8a75620 rulegen:: fixed UB in get_corner while doing floorshapes 2021-07-31 15:14:31 +02:00
Zeno Rogue c8b4d6b159 basic generate_random_path in strict_tree_rules 2021-07-31 15:14:31 +02:00
Zeno Rogue 3972e5a6bb altmap:: generate_random_path used 2021-07-31 15:14:31 +02:00
Zeno Rogue 0f2f435534 randomdir option for generate_random_path 2021-07-31 15:14:31 +02:00
Zeno Rogue ebfe0b6f48 exp_parser:: crash on unknown values starting with capital letters and _ 2021-07-31 15:14:31 +02:00
Zeno Rogue da4429e327 disabled surround problemfix in arb 2021-07-31 15:14:31 +02:00
Zeno Rogue d7a7447699 factored generate_random_path from yendor out 2021-07-31 15:14:31 +02:00
Zeno Rogue f567f0012b renamed 'nowall' functions to clearer general_barrier_* 2021-07-31 15:14:31 +02:00
Zeno Rogue 834457a24f added a new tessellation sample using the new features 2021-07-31 15:14:31 +02:00
Zeno Rogue fa03033c99 arb/rulegen:: trees can now be defined in tes files 2021-07-31 15:14:31 +02:00
Zeno Rogue 0559fce5fb barrier:: the barrier _WALL algorithm now moves step by step 2021-07-31 15:14:31 +02:00
Zeno Rogue b29e27e1c8 stars now are placed lower in FPP to prevent glitches 2021-07-31 15:14:31 +02:00
Zeno Rogue c9a1e52aaf sky now interacts better with stars and other high objects 2021-07-31 15:14:31 +02:00
Zeno Rogue 3cabddeb65 added is_boundary for &out_of_bounds just in case 2021-07-31 15:14:31 +02:00
Zeno Rogue 70702a8cd9 barrier:: fixed getNewLand to know the old land with new barriers 2021-07-31 15:14:31 +02:00
Zeno Rogue 8d913f525d altmap height now uses an outside parameter 2021-07-31 15:14:31 +02:00
Zeno Rogue 83ffa89fbf arb:: valence known 2021-07-31 15:14:31 +02:00
Zeno Rogue 06c8f48aa0 arb:: style improvement in compute_vertex_valence 2021-07-31 15:14:31 +02:00
Zeno Rogue 21942ff7b9 arb:: fixed shape id info in unmirror 2021-07-31 15:14:31 +02:00
Zeno Rogue c70dc65846 adapted rulegen-tests to change in rulegen 2021-07-31 15:14:31 +02:00
Zeno Rogue 8871efcc0c rulegen:: generate roots of all sid's 2021-07-31 15:14:31 +02:00
Zeno Rogue 0dfa361453 arb:: converted and rulegen status is now saved in save_geometry 2021-07-31 15:14:31 +02:00
Zeno Rogue 253c5ee531 arb:: two new parameters, boundary_ratio and floor_scale 2021-07-31 15:14:31 +02:00
Zeno Rogue d0e7541b45 nicer auto sight range computation, and range(...) directive in the tes language 2021-07-31 15:14:31 +02:00
Zeno Rogue c8cbe55e1f fixed minimize_rules() not updating id's 2021-07-31 15:14:31 +02:00
Zeno Rogue 872587d156 barrier:: great-wall-like barriers now correctly create sea buoys etc. 2021-07-31 15:14:31 +02:00
Zeno Rogue 184d32a89d rulegen:: added relative_matrixh 2021-07-31 15:14:31 +02:00
Zeno Rogue 6f9a784775 an expansion mode to display pointer indices 2021-07-31 15:14:31 +02:00
Zeno Rogue ebfbc3d1c9 do not try to make horos needlessly in Euclidean 2021-07-31 15:14:31 +02:00
Zeno Rogue a2211590b3 implemented great-wall-like walls for all H2 tessellations 2021-07-31 15:14:31 +02:00
Zeno Rogue a55111c226 improved NOWALLs in other geometries 2021-07-31 15:14:31 +02:00
Zeno Rogue 6e1e4a7db4 rulegen:: added some tests to devmods 2021-07-31 15:14:31 +02:00
Zeno Rogue 4a0f688673 rulegen:: apply arb::convert, and imrpoved generation 2021-07-31 15:14:31 +02:00
Zeno Rogue c996805533 rulegen:: adj for floorshapes 2021-07-31 15:13:44 +02:00
Zeno Rogue 1ca7175e56 rulegen:: removed useless current_geometry_name 2021-07-31 15:13:44 +02:00
Zeno Rogue ef0116b3b6 arb:: all are pseudohept if have_ph not specified 2021-07-31 15:13:44 +02:00
Zeno Rogue 0d62a7878f arb:: convert compatible tessellations to arb internal format 2021-07-31 15:13:44 +02:00
Zeno Rogue 24fcc1a642 expansion:: show correct types in strict_tree_rules 2021-07-31 15:13:44 +02:00
Zeno Rogue ebf9a299b5 altmap:: fixed Camelot for strict_tree_rules 2021-07-31 15:13:44 +02:00
Zeno Rogue bc79fd05df changed names generateAlts to extend_altmap and createAlternateMap to create_altmap 2021-07-31 15:13:44 +02:00
Zeno Rogue 0e71e67ba6 reg3:: more happy to create initial altmap 2021-07-31 15:13:44 +02:00
Zeno Rogue c0f91c0ea9 fixed a typo in comment 2021-07-31 15:13:44 +02:00
Zeno Rogue ced16a2f4e sword:: fixed a possible crash on incomplete maps 2021-07-31 15:13:44 +02:00
Zeno Rogue f92e26dc00 rulegen:: set state correctly 2021-07-31 15:13:44 +02:00
Zeno Rogue c797d376e5 fixed and improved rendering of tree patterns 2021-07-31 15:13:44 +02:00
Zeno Rogue c579db717f improved updir and updir_alt 2021-07-31 15:13:44 +02:00
Zeno Rogue c53270ca16 introduced rulegen.cpp which generates strict_tree_rules for arb 2021-07-31 15:13:44 +02:00
Zeno Rogue bb3fbc5256 removed debug from generateAlt 2021-07-31 15:13:44 +02:00
Zeno Rogue 9c07ea7d3d expansion:: curr_dist in dfWorld mode is now more helpful 2021-07-31 15:13:44 +02:00
Zeno Rogue 05d4fcc280 altmap parameters are now accessible via altmap:: functions 2021-07-31 15:13:44 +02:00
Zeno Rogue bac88ea9fd altmap relspin is now remembered in altmap::relspin 2021-07-31 15:12:06 +02:00
Zeno Rogue 2e47da5d2c moved the virtual functions in hrmap and its basic subclasses outside of the classes 2021-07-31 15:12:06 +02:00
Zeno Rogue d10181e363 gp:: replaced draw_li with current_li which is computed when needed 2021-07-31 15:12:06 +02:00
Zeno Rogue f996104074 improved timestamps 2021-07-31 15:12:06 +02:00
Zeno Rogue 5bff87f5e1 added oob (out_of_bounds heptagon) 2021-07-31 15:12:06 +02:00
Zeno Rogue 64947fe456 reg3:: fixed a bug in link_alt 2021-07-31 15:12:06 +02:00
Zeno Rogue bdfe78eaf5 arb:: fixed compute_vertex_valence 2021-07-31 15:12:06 +02:00
Zeno Rogue ae33c14337 arb:: fixed cycle_length computation 2021-07-31 15:12:06 +02:00
Zeno Rogue 1c31a987a8 refactored link_alt 2021-07-31 15:12:06 +02:00
Zeno Rogue 6540c9968c arb:: commented arb::shape 2021-07-29 12:58:54 +02:00
Zeno Rogue d2fdfc02ea arb:: compute_vertex_valence function 2021-07-29 12:58:54 +02:00
Zeno Rogue 46a3cf220f arb:: replaced tuple with connection_t 2021-07-29 12:58:54 +02:00
Jesse Ruderman b941d46733 Dice hover map now indicates hardness with color 2021-07-28 03:24:30 -07:00
Jesse Ruderman afa97376eb Autoplay: fix types for prairie::enter check 2021-07-25 23:17:08 -07:00
Jesse Ruderman 042b95a8bb Autoplay: skip 'missing princess info' check in euclid 2021-07-25 23:15:14 -07:00
Jesse Ruderman ab7d6c407e Autoplay: split into several functions 2021-07-25 23:13:24 -07:00
Jesse Ruderman b086946163 Teleport cheat (from overview) now works in Euclidean 2021-07-25 18:01:07 -07:00
Zeno Rogue 4dfb77d727
Merge pull request #264 from blargdag/pl-typo
Russian translation for Wetland strings.
2021-07-23 15:27:16 +02:00
blargdag d910743685 Translate Wetland strings. 2021-07-22 09:14:08 -07:00
blargdag 90650831e1 Add missing Polish translation for "Pike". 2021-07-22 09:14:08 -07:00
blargdag db9e9f879c Fix typo in Polish translation.
Wrong key was used for deep water.
2021-07-22 08:06:03 -07:00
Zeno Rogue 936ddb838d
Merge pull request #261 from ammongit/goblin-text
Change goblin text to account for its presence in other lands
2021-07-21 22:39:35 +02:00
Zeno Rogue 4c0d0e2a6f
Merge pull request #262 from jruderman/pc_peril
Princess Quest no longer shows fail screen merely due to the princess being in peril
2021-07-21 22:38:53 +02:00
Jesse Ruderman 4e44dab836 Princess Quest no longer shows fail screen merely due to the princess being in peril 2021-07-21 13:24:44 -07:00
Ammon Smith 79894038d4 Join lines, add TODO for translators. 2021-07-21 13:59:58 -04:00
Ammon Smith 2afaf26e9a Change goblin flavortext to use "caves" generically. 2021-07-21 12:27:24 -04:00
Zeno Rogue 1769ec6b69 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2021-07-21 10:51:40 +02:00
Zeno Rogue cc18251160 rogueviz::embeddings:: mark_signposts_subg 2021-07-21 10:51:06 +02:00
Zeno Rogue 8b3ea9031a nil:: fixed a possible crash due to missing compute_hept() 2021-07-21 10:49:48 +02:00
Zeno Rogue 4425556ebc gp:: conj() function for gp::loc 2021-07-21 10:49:09 +02:00
Zeno Rogue 9941d602f6
Merge pull request #246 from Quuxplusone/adc
Adc
2021-07-21 10:20:41 +02:00
Zeno Rogue 79bc004b2b
Merge pull request #256 from jruderman/dc_far
Prevent dice overlap after an animated die rolls away
2021-07-21 10:16:15 +02:00
Zeno Rogue cbb98436a1
Merge pull request #257 from jruderman/dc_geom
Fix Dice Reserve crash in geometries that support d6/d12
2021-07-21 10:15:53 +02:00
Zeno Rogue eedca281ef
Merge pull request #250 from jruderman/mirror_p
Palace no longer generates monsters on mirrors
2021-07-21 10:15:31 +02:00
Zeno Rogue 994b3b9122
Merge pull request #253 from jruderman/regroup_at_8
Hunting Dogs now notify stragglers of failed ambushes
2021-07-21 10:15:11 +02:00
Zeno Rogue 748d8bcf3a
Merge pull request #258 from jruderman/describe_dice_2
Show dice type/value on mouseover
2021-07-21 10:13:58 +02:00
Zeno Rogue 037528a50c
Merge pull request #259 from blargdag/ru_adj
Fix wrong Russian adjective ending.
2021-07-21 10:13:26 +02:00
blargdag b24d82307b Fix wrong Russian adjective ending. 2021-07-20 15:36:58 -07:00
Jesse Ruderman 362c6f673f Show dice type/value on mouseover 2021-07-20 07:00:48 -07:00
Jesse Ruderman 9ac1f2577a Fix Dice Reserve crash in geometries that support d6/d12 2021-07-20 05:50:02 -07:00
Jesse Ruderman ecfbe7de49 Prevent dice overlap after an animated die rolls away 2021-07-20 05:39:52 -07:00
Jesse Ruderman 7a7f2476b6 Hunting Dogs now notify stragglers of failed ambushes 2021-07-20 00:45:16 -07:00
Zeno Rogue cb2d24aca9
Merge pull request #251 from blargdag/freefall2
Translate more strings from Free Fall.
2021-07-20 09:29:38 +02:00
blargdag 9624ff1ee7 Translate more strings from Free Fall. 2021-07-19 15:54:23 -07:00
Zeno Rogue d765104f7f
Merge pull request #249 from jruderman/ruin_treas
Ruined City treasure now increases with the correct kill types
2021-07-19 20:54:50 +02:00
Zeno Rogue c1fd437a11
Merge pull request #248 from jruderman/turretb
Cursed Canyon no longer generates monsters in walls
2021-07-19 20:54:16 +02:00
Jesse Ruderman c894e8dd61 Palace no longer generates monsters on mirrors 2021-07-19 03:33:50 -07:00
Jesse Ruderman 01509406a3 Ruined City treasure now increases with the correct kill types 2021-07-19 02:28:29 -07:00
Jesse Ruderman 6b781bc0d8 Cursed Canyon no longer generates monsters in walls 2021-07-19 02:14:01 -07:00
Arthur O'Dwyer 67a54d3aa1 Finish replacing macro ADC with plain old code. 2021-07-18 17:43:03 -04:00
Arthur O'Dwyer d606c3183b Replace hr::find_or_null with hr::at_or_null. 2021-07-18 17:43:03 -04:00
Arthur O'Dwyer 3c8a9e5274 Replace macro ADC with a plain old function hr::span_at. 2021-07-18 17:30:07 -04:00
Arthur O'Dwyer 74052ef2bf Replace IF_KEY_EXISTS with a plain old function, not a macro. 2021-07-18 17:21:38 -04:00
Zeno Rogue 8c6aba5f6f
Merge pull request #242 from jruderman/slaying_cursed
Allow Orb of Slaying to appear in Cursed Canyon as a prize orb
2021-07-18 18:35:21 +02:00
Zeno Rogue 65065c7e69 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2021-07-18 18:33:02 +02:00
Zeno Rogue 81e066d0c3 gp:: replaced the magic constants 15, 16, 31, 32 with named constants derived from GOLDBERG_BITS 2021-07-18 18:32:50 +02:00
Zeno Rogue 5a8e31c626
Merge pull request #237 from jruderman/wcheat
Starting in a non-basic land with -W now enables cheat mode
2021-07-18 12:25:51 +02:00
Zeno Rogue 3ae26f5888
Merge pull request #238 from jruderman/a2
Autoplay improvements 2
2021-07-18 12:25:04 +02:00
Zeno Rogue 4dfedc421d
Merge pull request #240 from jruderman/ally_rose
Rose scent can now force the player's allies to walk into rosebushes
2021-07-18 12:23:53 +02:00
Zeno Rogue 7f3382c08f
Merge pull request #241 from jruderman/mutivy_stun
ASCII monsters: don't draw stun stars for Mutant Ivy
2021-07-18 12:23:30 +02:00
Zeno Rogue 933e789d9a
Merge pull request #236 from blargdag/frogpark
Translation of Frog Park strings.
2021-07-18 12:23:16 +02:00
Zeno Rogue d0e6ac7d48
Merge pull request #243 from jruderman/woods_bull
Allow Orb of the Woods to appear in Bull Dash as a prize orb
2021-07-18 12:22:37 +02:00
Zeno Rogue 196510d788
Merge pull request #245 from jruderman/weak_hp
Weak attacks no longer affect enemy HP
2021-07-18 12:22:17 +02:00
Zeno Rogue e567fa2033 IF_KEY_EXISTS used in util.cpp 2021-07-18 12:19:49 +02:00
Zeno Rogue cd60b0ffb3 renamed IF_MAP_CONTAINS_KEY to IF_KEY_EXISTS, and used a better implementation 2021-07-18 12:19:49 +02:00
Zeno Rogue 18c6aa7823 ADC now checks IF_MAP_CONTAINS_KEY 2021-07-18 11:53:35 +02:00
Zeno Rogue ef8b24ff2a added IF_MAP_CONTAINS_KEY macro 2021-07-18 11:53:18 +02:00
Zeno Rogue cebb0180a5 kohonen:: triangulate in 3D manifolds 2021-07-18 11:40:03 +02:00
Zeno Rogue 04c9bd193a rogueviz:: added a header for kohonen.cpp and (newly added) embeddings.cpp 2021-07-18 11:38:45 +02:00
Zeno Rogue 0fc8dfde15 fixed generate_brm in 3D 2021-07-18 11:15:31 +02:00
Zeno Rogue 6cf00a1c3c stop_game on 3dim variations 2021-07-18 11:15:13 +02:00
Zeno Rogue c53b60adf5 reg3:: exit -> exception 2021-07-18 11:14:29 +02:00
Zeno Rogue 0701a5e194 reg3:: removed debug that called exit while all was OK 2021-07-18 11:14:22 +02:00
Jesse Ruderman 7d2f2aad7b Weak attacks no longer affect enemy HP 2021-07-17 23:50:57 -07:00
Jesse Ruderman 877ce3771a Allow Orb of the Woods to appear in Bull Dash as a prize orb 2021-07-17 08:20:20 -07:00
Jesse Ruderman 6098b0f488 Allow Orb of Slaying to appear in Cursed Canyon as a prize orb 2021-07-17 08:13:18 -07:00
Jesse Ruderman c24e32de7c ASCII monsters: don't draw stun stars for Mutant Ivy 2021-07-17 02:24:38 -07:00
Jesse Ruderman 1f88b87154 Rose scent can now force the player's allies to walk into rosebushes 2021-07-16 09:28:47 -07:00
Jesse Ruderman 36af5f186f Autoplay improvements 2 2021-07-14 20:56:46 -07:00
Jesse Ruderman 7bf23df2dd Starting in a non-basic land with -W now enables cheat mode 2021-07-14 17:47:32 -07:00
blargdag 285605c0f2 Translation of Frog Park strings. 2021-07-14 05:44:03 -07:00
Zeno Rogue bfe81feb2c rogueviz::kohonen:: reverted unintentional revert 2021-07-14 09:22:33 +02:00
Zeno Rogue 64f4f93966 updated rogueviz to changed functions 2021-07-13 22:46:55 +02:00
Zeno Rogue b80bd90174 12.0d 2021-07-13 22:27:05 +02:00
Zeno Rogue cc80bc7b3a Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2021-07-13 21:32:55 +02:00
Zeno Rogue dcac42ec76 fake:: more interesting for the coxeter variation 2021-07-13 21:32:01 +02:00
Zeno Rogue 4bff948243 fixup to gfake-euc 2021-07-13 21:31:44 +02:00
Zeno Rogue eb0b7d2809 fake:: option gfake-euc 2021-07-13 21:30:17 +02:00
Zeno Rogue 6aae43f1f8 fake:: ray_iadj 2021-07-13 18:10:19 +02:00
Zeno Rogue 5de7eb2bb2 more eqmatrix precision in raycaster 2021-07-13 17:38:59 +02:00
Zeno Rogue 5c21b64060 reg3:: new variation, bch_oct 2021-07-13 15:12:03 +02:00
Zeno Rogue b4f0f71436
Merge pull request #235 from jruderman/copy_wparam
Copy wparam when copying wall
2021-07-13 13:59:16 +02:00
Jesse Ruderman aa548e3467 Copy wparam when copying wall 2021-07-12 22:42:45 -07:00
Zeno Rogue 81ea3d75f5 fake:: works with coxeter 2021-07-13 02:34:24 +02:00
Zeno Rogue 3560bcc3db fake:: there could be more spins 2021-07-13 02:11:24 +02:00
Zeno Rogue 7d930b6f29 fake working in subcubes 2021-07-13 02:10:34 +02:00
Zeno Rogue 039d86cd13
Merge pull request #233 from Quuxplusone/fix-warnings
Fix -Woverloaded-virtual warnings
2021-07-13 01:46:51 +02:00
Zeno Rogue 456c0ae435 set walloffsets 2021-07-13 01:07:56 +02:00
Arthur O'Dwyer 5651b8c425 Enable -Wsuggest-override on Clang. 2021-07-12 17:51:44 -04:00
Arthur O'Dwyer 0ee6ce8c83 Eliminate -Woverloaded-virtual warnings from Clang. NFCI. 2021-07-12 17:51:39 -04:00
Zeno Rogue dd5035184b improved adj_minefield_cells to avoid relative_matrix 2021-07-12 20:54:45 +02:00
Zeno Rogue c4e85c16d3 full cellshape computed in hybrid geometries 2021-07-12 20:54:16 +02:00
Zeno Rogue acce9a596b
Merge pull request #190 from blargdag/ru-menus
Fill in some missing Russian translations in menus
2021-07-12 20:08:42 +02:00
Zeno Rogue 40b0a6d13d
Merge pull request #231 from jruderman/alch_dice
Fix crash: prevent slime from duplicating dice
2021-07-12 17:04:58 +02:00
Zeno Rogue 89fd715fa8
Merge pull request #227 from jruderman/golem_lava
Orb of Lava no longer intimidates allies
2021-07-12 17:04:26 +02:00
Zeno Rogue 5687fadb82
Merge pull request #229 from jruderman/makefile_typo
Fix typo in cxxflags
2021-07-12 17:03:50 +02:00
Zeno Rogue d3e05bee29
Merge pull request #232 from jruderman/wind_outgoing
Fix typo in Windy Plains description
2021-07-12 16:57:20 +02:00
blargdag 92caaa5d7f Reorder things to follow order of strings in Polish translation.
More reorderings and fixes.
2021-07-12 07:21:06 -07:00
Jesse Ruderman fa0271038f Fix typo in Windy Plains description 2021-07-12 07:20:04 -07:00
Jesse Ruderman b04573f659 Fix crash: prevent slime from duplicating dice 2021-07-12 06:52:14 -07:00
Jesse Ruderman a19cc103ce Fix typo in cxxflags 2021-07-12 04:35:34 -07:00
Zeno Rogue 84ea2919aa mymake:: added -wno-invalid-offsetof 2021-07-12 12:23:48 +02:00
Zeno Rogue 2215e07fca created cellshapes for other 3D geometries 2021-07-12 12:23:34 +02:00
Zeno Rogue 8215ac74ee fixup 2021-07-12 11:34:51 +02:00
Zeno Rogue 0d20066f10 fixup 2021-07-12 11:32:39 +02:00
Zeno Rogue 6e6d0a7839 the main (heptagon) cellshape now also uses subcellshape; removed dirdist and get_vertices and introduced get_cellshape instead 2021-07-12 11:07:22 +02:00
Zeno Rogue 2d962c324d increased the limit in bounded_celldistance to 14400 2021-07-12 10:02:26 +02:00
Zeno Rogue 48bccdbd70 get_sphere_loc function 2021-07-12 10:01:16 +02:00
Zeno Rogue 06ec86347c reg3:: vertices_only_local was not computed 2021-07-12 10:01:05 +02:00
Zeno Rogue 7c9bea6e1b conflict resolved 2021-07-12 09:55:25 +02:00
Zeno Rogue 6e3471d481
Merge pull request #220 from jruderman/offsetof1
Use offsetof to reduce UB
2021-07-12 09:52:14 +02:00
Zeno Rogue 38530386d0
Merge branch 'master' into offsetof1 2021-07-12 09:52:03 +02:00
Jesse Ruderman 4a6787d0a7 Orb of Lava no longer intimidates allies 2021-07-12 00:50:52 -07:00
Zeno Rogue e3cf526bca
Merge pull request #223 from jruderman/ub_gravity
Fix UB in draw_gravity_particles
2021-07-12 09:46:56 +02:00
Zeno Rogue 457b918697
Merge pull request #226 from jruderman/sort_empty
Fix UB when shuffling empty vecs
2021-07-12 09:45:58 +02:00
Zeno Rogue 44ac254f98
Merge pull request #224 from jruderman/ub_familiar
Fix UB drawing Familiar's eye
2021-07-12 09:44:37 +02:00
Zeno Rogue e39d778b38
Merge pull request #225 from jruderman/ub_draugr
Fix UB: use unsigned add for draugr's cloak color
2021-07-12 09:43:59 +02:00
Jesse Ruderman 123994bdc2 Fix UB when sorting empty vecs 2021-07-11 20:54:25 -07:00
Jesse Ruderman 0c810d0f8d Fix UB: use unsigned add for draugr's cloak color 2021-07-11 20:02:35 -07:00
Jesse Ruderman 0c83642f20 Fix UB drawing Familiar's eye 2021-07-11 19:56:29 -07:00
Jesse Ruderman fdfba9be50 Fix UB in draw_gravity_particles 2021-07-11 19:47:56 -07:00
Zeno Rogue 08cbe8e4e0
Merge pull request #222 from Quuxplusone/fix-warnings
Fix or suppress a bunch of Clang warnings. NFCI.
2021-07-12 00:31:49 +02:00
Arthur O'Dwyer 090e084dd4 Add `explicit` and `override` consistently everywhere else. NFCI. 2021-07-11 18:03:08 -04:00
Arthur O'Dwyer a2989a3d39 Add `explicit` and `override` consistently in hprint.cpp. NFCI. 2021-07-11 17:31:05 -04:00
Arthur O'Dwyer db762ff21a Fix or suppress a bunch of Clang warnings. NFCI. 2021-07-11 17:22:00 -04:00
blargdag 774b93c887 Partial translation of Irradiated Field related strings. 2021-07-11 10:40:59 -07:00
blargdag fa28f4cfb6 Partial translation of Free Fall strings. 2021-07-11 10:40:38 -07:00
blargdag e4e3d9ce22 Partial translation of Brown Island related strings. 2021-07-11 10:40:13 -07:00
blargdag e8f8ea105f Demarcate completed translations. 2021-07-11 10:39:18 -07:00
Jesse Ruderman 98fd1f9c47 Use offsetof to reduce UB 2021-07-11 07:45:55 -07:00
Zeno Rogue 7aec4c3cf1 reg3:: changed the remaining refs to adjacent_dirs to dirdist; S7 to c->type 2021-07-11 16:18:04 +02:00
blargdag 4ed17c65ab Translate some strings for restructured menus. 2021-07-11 06:40:18 -07:00
Zeno Rogue a727fd29a2
Merge pull request #219 from blargdag/ru-cleanup3
Various cleanups of Russian translation
2021-07-11 15:28:33 +02:00
Zeno Rogue 3f2c8d7479
Merge pull request #218 from jruderman/tbd_indexing
Fix array indexing in totalbulldistance
2021-07-11 15:26:46 +02:00
Zeno Rogue e9de3ac7d5 Great Walls in bch 2021-07-11 15:07:40 +02:00
blargdag c0ff53105c More duplicate translation fixes. 2021-07-11 05:39:00 -07:00
blargdag f3cb7dec28 More cleanups of duplicate translations. 2021-07-11 05:39:00 -07:00
blargdag 15a6bdb217 Cleanup duplicate strings, merge translations. 2021-07-11 05:39:00 -07:00
blargdag cab7b054ea Fix typo. 2021-07-11 05:10:11 -07:00
blargdag 1288d7b101 Fix some typos. 2021-07-11 05:10:11 -07:00
blargdag 69591dc1d4 "anti-aliasing" 2021-07-11 05:09:47 -07:00
blargdag 7da2a0c141 Missing space at end of line. 2021-07-11 05:09:47 -07:00
Jesse Ruderman a138fa0952 Fix array indexing in totalbulldistance 2021-07-11 04:07:32 -07:00
Zeno Rogue 53efc30bd5 fixes to Great Wall generation 2021-07-11 12:28:19 +02:00
Zeno Rogue d06e94d480 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2021-07-11 11:57:23 +02:00
Zeno Rogue 0e0e4d0212 reg3:: strafe and dirs_adjacent with subcubes -- Great Wall generation works 2021-07-11 11:48:33 +02:00
Zeno Rogue 5f54bf2888 reg3:: compute dirs_adjacent and strafe data for subcubes 2021-07-11 11:03:35 +02:00
Zeno Rogue cac0b57d7c
Merge pull request #215 from jruderman/kpnull
Fix crash when an unknown princess is in peril
2021-07-11 09:47:03 +02:00
Zeno Rogue 0f0897ecf4
Merge pull request #217 from jruderman/statue_dice
Fix crash by disallowing statue-dice swaps
2021-07-11 09:45:44 +02:00
Zeno Rogue 9722bfc9e7
Merge pull request #216 from jruderman/camelot_vine
Ivy to Vine no longer overwrites Round Table
2021-07-11 09:44:46 +02:00
Jesse Ruderman b4d6b86872 Fix crash by disallowing statue-dice swaps 2021-07-10 19:15:16 -07:00
Jesse Ruderman 5bb2650820 Ivy to Vine no longer overwrites Round Table 2021-07-10 19:11:18 -07:00
Jesse Ruderman 42f8f5f4cc Fix crash when an unknown princess is in peril 2021-07-10 18:57:54 -07:00
Zeno Rogue 8f8cbfd4c7
Merge pull request #211 from jruderman/rop_atc
reduceOrbPowers: only call mine::auto_teleport_charges once
2021-07-10 22:10:07 +02:00
Zeno Rogue 1d174ef8e4 added missing Polish noun 2021-07-10 22:07:13 +02:00
Zeno Rogue 017a4750ed Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2021-07-10 22:05:38 +02:00
Zeno Rogue df7d8ee5fc fixed mymake to recompile language.cpp if language-data.cpp changed 2021-07-10 22:05:30 +02:00
Zeno Rogue b02aae0af8
Merge pull request #209 from jruderman/reverse_winter
Reversing the Curse of Water now gives bonus Orb of Winter
2021-07-10 21:56:07 +02:00
Zeno Rogue 0b4c2e53ba
Merge pull request #210 from jruderman/warp_msgs
Fix some messages when using Orb of the Warp
2021-07-10 20:42:55 +02:00
Zeno Rogue 40f4747108
Merge pull request #208 from jruderman/caves1
Cave transformation is fairer to players
2021-07-10 20:42:30 +02:00
Jesse Ruderman 72d496cd88 reduceOrbPowers: only call mine::auto_teleport_charges once 2021-07-10 04:59:50 -07:00
Jesse Ruderman 2b0af74903 Fix some messages when using Orb of the Warp 2021-07-10 03:53:42 -07:00
Jesse Ruderman 1f64daa03f Reversing the Curse of Water now gives bonus Orb of Winter 2021-07-10 02:50:29 -07:00
Jesse Ruderman c67f9b72af Cave transformation is fairer to players 2021-07-10 02:32:13 -07:00
Zeno Rogue 2eeca0410e
Merge pull request #202 from jruderman/f10
Prairie no longer appears on Crossroads IV
2021-07-10 09:48:10 +02:00
Zeno Rogue bc6e1bd978
Merge pull request #203 from jruderman/f11
Raging Bull can no longer push Princess onto player's cell
2021-07-10 09:47:15 +02:00
Zeno Rogue 79bad795b6
Merge pull request #185 from jruderman/chasm_trail
Only show chasm trails in special modes
2021-07-10 09:46:46 +02:00
Zeno Rogue d438dbddec
Merge pull request #186 from jruderman/no_blow_shark
Orb of Air can no longer push sharks
2021-07-10 09:46:11 +02:00
Zeno Rogue fa0d1978f1
Merge pull request #188 from jruderman/push_dice_item
Dice can now be pushed onto items
2021-07-10 09:45:45 +02:00
Zeno Rogue 296d2d10e3
Merge pull request #196 from jruderman/f4
Fix crash after using Orb of Domination
2021-07-10 09:45:09 +02:00
Zeno Rogue 9b0f64ab8b
Merge pull request #187 from jruderman/push_wall_msg
Fix 'nowhere to blow' message for happy dice
2021-07-10 09:44:17 +02:00
Zeno Rogue e323378def
Merge pull request #207 from jruderman/help_nl
Command line help: add line breaks
2021-07-10 09:43:35 +02:00
Zeno Rogue 712ec1598c
Merge pull request #189 from jruderman/init_pages
Filtering the Overview now hides page buttons reliably
2021-07-10 09:43:07 +02:00
Zeno Rogue ff40a46883
Merge pull request #192 from jruderman/f1
Curse of Weakness no longer allows pushing parts of multitile monsters
2021-07-10 09:34:45 +02:00
Jesse Ruderman 5e3af36fe7 Command line help: add line breaks 2021-07-10 00:34:37 -07:00
Zeno Rogue 093224bde6
Merge pull request #194 from jruderman/f2
Orb of shield/shell no longer bypasses 'kraken will destroy boat' warning
2021-07-10 09:34:14 +02:00
Zeno Rogue b8cd045f5d
Merge pull request #195 from jruderman/f3
Fix checkmate check when standing on an Orb of Speed
2021-07-10 09:33:29 +02:00
Zeno Rogue d7474b23a1
Merge pull request #197 from jruderman/f5
Kraken Tentacle attacks now obey Warp restrictions
2021-07-10 09:32:52 +02:00
Zeno Rogue 08d427ec46
Merge pull request #198 from jruderman/f6
Irradiated Field: bull generation no longer breaks ivy
2021-07-10 09:32:27 +02:00
Zeno Rogue cb71817cf1
Merge pull request #199 from jruderman/f7
Fix crash when talking to a Knight in the Temple of Cthulhu
2021-07-10 09:31:52 +02:00
Zeno Rogue 14623af38d
Merge pull request #201 from jruderman/f9
haveMount: check specifically for worm-type monsters
2021-07-10 09:31:09 +02:00
Zeno Rogue cbe7332203
Merge pull request #200 from jruderman/f8
Fix several Friendly Ivy interactions
2021-07-10 09:30:13 +02:00
Zeno Rogue 194f44b466
Merge pull request #204 from jruderman/f12
Orbs no longer stun Mimics
2021-07-10 09:29:39 +02:00
Zeno Rogue 4f30780871
Merge pull request #205 from jruderman/attack_msgs
Add missing 'cannot attack' messages
2021-07-10 09:28:57 +02:00
Zeno Rogue ff7c017665
Merge pull request #206 from jruderman/autoplay1
Autoplay improvements
2021-07-10 09:27:17 +02:00
Jesse Ruderman 252abda9ca Autoplay improvements 2021-07-09 23:29:13 -07:00
Jesse Ruderman 71088e9a1c Add missing 'cannot attack' messages 2021-07-09 23:10:44 -07:00
Jesse Ruderman ef5a870a78 Orbs no longer stun Mimics 2021-07-09 22:50:17 -07:00
Jesse Ruderman 002c354a51 Raging Bull can no longer push Princess onto player's cell 2021-07-09 21:52:09 -07:00
Jesse Ruderman e31740c4c7 Prairie no longer appears on Crossroads IV 2021-07-09 21:46:59 -07:00
Jesse Ruderman 0530c1dc69 haveMount: check specifically for worm-type monsters 2021-07-09 21:43:30 -07:00
Jesse Ruderman 4fe57cf534 Fix several Friendly Ivy interactions 2021-07-09 21:35:38 -07:00
Jesse Ruderman e544826a94 Fix crash when talking to a Knight in the Temple of Cthulhu 2021-07-09 21:33:25 -07:00
Jesse Ruderman 9d522cfe6f Irradiated Field: bull generation no longer breaks ivy 2021-07-09 21:30:13 -07:00
Jesse Ruderman 15f90f194e Kraken Tentacle attacks now obey Warp restrictions 2021-07-09 21:20:30 -07:00
Jesse Ruderman 45b6317e69 Fix crash after using Orb of Domination 2021-07-09 20:51:07 -07:00
Jesse Ruderman c5f867da91 Fix checkmate check when standing on an Orb of Speed 2021-07-09 20:33:38 -07:00
Jesse Ruderman 7f28389e66 Orb of shield/shell no longer bypasses 'kraken will destroy boat' warning 2021-07-09 20:28:24 -07:00
Jesse Ruderman 7baa1ca932 Curse of Weakness no longer allows pushing parts of multitile monsters 2021-07-09 20:00:25 -07:00
Zeno Rogue 4799f7c5f7 ray:: fixed mirrors in product when cells have different degrees 2021-07-09 22:32:00 +02:00
Zeno Rogue f3fec9434a ray:: fixup to ms when MDIM==3 2021-07-09 22:32:00 +02:00
Zeno Rogue 03fc72e7d2 ray:: reflection now works with multiple types 2021-07-09 22:32:00 +02:00
Zeno Rogue 0aa1d45287 moved ray_iadj from hybrid to hrmap method 2021-07-09 22:32:00 +02:00
Zeno Rogue 7da49c9d2f fixed Nil and Sol 2021-07-09 22:32:00 +02:00
Zeno Rogue f9a55d13c8 reg3:: added at for debugging and fixed a bug with shvid called for incorrect map 2021-07-09 22:32:00 +02:00
Zeno Rogue 064c6015b6 reg3:: fixed an issue with subcubes not working for low subcube_counts 2021-07-09 22:32:00 +02:00
Zeno Rogue 41faa43f65 pattern I, and fixed the possible crashes in nearest_map and furthest_map 2021-07-09 22:32:00 +02:00
Zeno Rogue 3c7e64c66d reg3:: faster va analysis 2021-07-09 22:32:00 +02:00
Zeno Rogue 479b2eaf3c reg3:: the new variations can be selected from the menu 2021-07-09 22:32:00 +02:00
Zeno Rogue f300d0f8e9 reg3:: coxeter_param included in cgi_string 2021-07-09 22:32:00 +02:00
Zeno Rogue 0d8dd6c19e reg3:: subshapes in hrmap_h3_rule 2021-07-09 22:32:00 +02:00
Zeno Rogue 11d73bb655 reg3:: throw exceptions if not cubes 2021-07-09 22:32:00 +02:00
Zeno Rogue b6bf0911f3 refactored master_relative as virtual function 2021-07-09 22:32:00 +02:00
Zeno Rogue 9a319e2d2a refactored shvid_full and wall_offset as virtual functions 2021-07-09 22:32:00 +02:00
Zeno Rogue 09850d2f76 fixed crash in zebra40 2021-07-09 22:32:00 +02:00
Zeno Rogue f3adce29b3 reg3:: coxeter subcells 2021-07-09 22:32:00 +02:00
Zeno Rogue 964d1010b3 refactored generate_subcells 2021-07-09 22:32:00 +02:00
Zeno Rogue 3d1be24558 reg3:: fixed a bug in hrmap_closed3::relative_matrix 2021-07-09 22:32:00 +02:00
Zeno Rogue 49adf19da2 reg3:: subcubes:: testing_subconnections flag; made it faster if it is off 2021-07-09 22:32:00 +02:00
Zeno Rogue 45bdbdbbcc reg3:: subcubes:: optimized also identifying cells 2021-07-09 22:32:00 +02:00
Zeno Rogue 889866f166 reg3:: subcubes:: optimized connection creation 2021-07-09 22:32:00 +02:00
Zeno Rogue 7fe40cbfc0 removed debug from voronoi 2021-07-09 22:32:00 +02:00
Zeno Rogue 8b75d73c32 reg3:: bch_subcubes:: Voronoi vertices 2021-07-09 22:32:00 +02:00
Zeno Rogue 374e6a4ca9 circumscribe for H3 and S3 2021-07-09 22:32:00 +02:00
Zeno Rogue ccc82866a9 moved circumscribe and other functions from irregular.cpp to hyperpoint.cpp 2021-07-09 22:32:00 +02:00
Zeno Rogue 2a7d932703 reg3:: subcubes:: neater again 2021-07-08 20:34:49 +02:00
Zeno Rogue 670f315df5 reg3::subcubes:: neater building 2021-07-08 20:25:27 +02:00
Jesse Ruderman 306066fa4e Filtering the Overview now hides page buttons reliably 2021-07-08 01:32:11 -07:00
Zeno Rogue bc5ecf35e0 ray:: works with complex subcube-based honeycombs 2021-07-07 23:34:15 +02:00
Zeno Rogue 4590271450 ray:: added constants ray_scale, max_wall_offset and max_celltype to textures-as-arrays 2021-07-07 23:33:34 +02:00
Zeno Rogue 3e1e0f3f18 renamed get_face_vertices to get_face_vertex_count, and added new get_face_vertices 2021-07-07 23:32:22 +02:00
Zeno Rogue 4f09bf2124 polygon debug removed 2021-07-07 18:27:38 +02:00
Zeno Rogue 2f39f259d3 CLI option uqf 2021-07-07 18:27:26 +02:00
Zeno Rogue 567436ed2f CLI option -uqf 2021-07-07 18:26:40 +02:00
Zeno Rogue 581cb8ae26 throw exception on createMov error 2021-07-07 18:26:30 +02:00
Zeno Rogue f8d406a458 basic darkval for subcubes 2021-07-07 18:26:14 +02:00
Zeno Rogue 32a7f03360 implemented dual-subcubes and bch-subcubes variations 2021-07-07 18:26:03 +02:00
Zeno Rogue 415fe72329 fixed gen_sample_list 2021-07-07 18:22:15 +02:00
Zeno Rogue 2dfec288da cmirror function 2021-07-07 18:21:17 +02:00
Zeno Rogue 4b3f72cc56 3D variations: subcubes 2021-07-07 01:48:20 +02:00
Jesse Ruderman db5a9baac2 Dice can now be pushed onto items 2021-07-05 05:25:59 -07:00
Jesse Ruderman a79c442469 Fix 'nowhere to blow' message for happy dice 2021-07-05 03:12:56 -07:00
Jesse Ruderman 5ee3ebd1f7 Orb of Air can no longer push sharks 2021-07-05 02:39:18 -07:00
Jesse Ruderman f4193c32e9 Only show chasm trails in special modes 2021-07-04 14:17:21 -07:00
Zeno Rogue 7fff0405a7 updated the version number in Android 2021-07-04 12:10:10 +02:00
Zeno Rogue 5306334267 update 12.0c 2021-07-04 11:32:51 +02:00
Zeno Rogue 9817c3fb0c rogueviz::smoothcam:: extra debug 2021-07-04 11:32:31 +02:00
Zeno Rogue a8c17c64ab rogueviz:: -rvlabelscale option 2021-07-04 11:32:03 +02:00
Zeno Rogue 5dbaea3049 fifteen:: remove debug 2021-07-04 11:31:39 +02:00
Zeno Rogue 4c3529cae4 fifteen:: no more ghosts 2021-07-04 11:31:25 +02:00
Zeno Rogue 1facb672ac fifteen:: fixed triangle_markers (they were based on incorrect end configuration) 2021-07-04 11:31:14 +02:00
Zeno Rogue 6f91dbb242 bringris:: an option to draw nohud, and to add extensions 2021-07-04 11:30:47 +02:00
Zeno Rogue 49c3bc1e4a init_heptagon fixup 2021-07-04 11:27:37 +02:00
Zeno Rogue 169ffe1d6d fixed the commandline options -o0 and -f0 (disabling OpenGL and fullscreen) 2021-07-04 11:25:52 +02:00
Zeno Rogue e37fa65247 arcm:: fixed the possible crash on deleting arcms with large cells, because of the confusion of cdata 2021-07-04 11:00:38 +02:00
Zeno Rogue f873a4ba18 init_heptagon fixup 2021-07-04 10:39:55 +02:00
Zeno Rogue 74486309a6 created a function init_heptagon which does tailored_alloc and clears the data 2021-07-04 10:36:16 +02:00
Zeno Rogue adb9bd75ee items in water no longer burn 2021-07-04 09:54:47 +02:00
Zeno Rogue d07662d11c fixed the warning (-Warray-bounds) 2021-07-04 09:53:29 +02:00
Zeno Rogue 43fed4adac Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2021-07-04 09:49:34 +02:00
Zeno Rogue 304ef91f8d
Merge pull request #179 from jruderman/nonneg_items
Overview cheats: arrow keys no longer make treasure/orb counts negative
2021-07-04 09:48:21 +02:00
Zeno Rogue 934054a6c1
Merge pull request #178 from jruderman/plague_time
Orb of Time now preserves Orb of Plague properly
2021-07-04 09:47:51 +02:00
Zeno Rogue f3808de42c
Merge pull request #173 from jruderman/safety_mons
Orb of Safety excludes more monsters
2021-07-04 09:44:33 +02:00
Zeno Rogue 2b1ec6565f
Merge pull request #174 from blargdag/ru-fixes2
More fixes for Russian translation
2021-07-04 09:43:47 +02:00
Zeno Rogue 0799a5ea06
Merge pull request #175 from jruderman/flash_witch_a
Flash Witches no longer avoid killing the player's allies
2021-07-04 09:38:56 +02:00
Zeno Rogue a8c6c8f240
Merge pull request #177 from jruderman/phaser_flags
Yellow Frogs no longer phase into the player's sword
2021-07-04 09:38:04 +02:00
Zeno Rogue 34bce22715
Merge pull request #180 from jruderman/gala_keys
Resolve conflict between 'Galápagos shading' and 'teleport'
2021-07-04 09:36:34 +02:00
Zeno Rogue 4e4b32f2bc
Merge pull request #181 from jruderman/hud_kills
Fix HUD kill list in 'items only' mode
2021-07-04 09:36:04 +02:00
Zeno Rogue 59bc3e1cc6
Merge pull request #182 from jruderman/quieter-rrv
Wandering rocksnakes no longer appear on hepts
2021-07-04 09:35:10 +02:00
Zeno Rogue d8eb44a9f0
Merge pull request #183 from jruderman/land_help_wiki
Add wiki links to land help
2021-07-04 09:34:22 +02:00
Zeno Rogue d57a3fcaa3 fixed REPLACE_LETTERS 2021-07-04 09:32:59 +02:00
Zeno Rogue 3bf17c12f7 arcm:: hr_archimedean_error as an exception 2021-07-04 09:32:29 +02:00
Zeno Rogue 0cad3a55f9 arb:: unmirror functionality 2021-07-04 09:32:04 +02:00
Jesse Ruderman ff7be8d4e0 Add wiki links to land help 2021-07-03 19:38:20 -07:00
Jesse Ruderman 221d42e4e9 Wandering rocksnakes no longer appear on hepts 2021-07-03 17:04:15 -07:00
Jesse Ruderman f67452eccb Fix HUD kill list in 'items only' mode 2021-07-03 16:12:39 -07:00
Jesse Ruderman 26c8afdc7e Resolve conflict between 'Galápagos shading' and 'teleport' 2021-07-03 03:05:23 -07:00
Jesse Ruderman a89524918a Overview cheats: arrow keys no longer make treasure/orb counts negative 2021-07-03 02:47:44 -07:00
Jesse Ruderman cc110ba109 Orb of Time now preserves Orb of Plague properly 2021-07-03 01:31:33 -07:00
Jesse Ruderman e9b2c929d6 Yellow Frogs no longer phase into the player's sword 2021-07-03 00:19:48 -07:00
Jesse Ruderman efa1f575e9 Flash Witches no longer avoid killing the player's allies 2021-07-02 15:24:51 -07:00
blargdag 09413589b5 Remove redundant untranslated Polish strings.
Russian translation actually appears later for the exact same strings.
2021-07-01 10:13:06 -07:00
blargdag c8f1fe7368 Update source string format. 2021-07-01 10:13:06 -07:00
blargdag d5df018049 Typo. 2021-07-01 10:13:06 -07:00
blargdag ce71a4a54a Spelling. 2021-07-01 10:13:06 -07:00
blargdag d4df0ffbea Spelling. 2021-07-01 10:13:06 -07:00
blargdag 2965efe5f9 More untranslated Polish. 2021-07-01 10:13:06 -07:00
blargdag 58bc123695 Spelling. 2021-07-01 10:13:06 -07:00
blargdag c2614fac15 Fix typo. 2021-07-01 10:13:06 -07:00
blargdag 03b59c21b8 Spelling typo. 2021-07-01 10:13:06 -07:00
blargdag d3c37d0654 Fix untranslated Polish string.
Apparently this one was missed in the original translation based on the
Polish template.
2021-07-01 10:12:54 -07:00
Jesse Ruderman 8794c78ad9 Orb of Safety excludes more monsters 2021-07-01 01:24:39 -07:00
Zeno Rogue 7f8d978beb
Merge pull request #158 from jruderman/mac_build_info
Update README.md to include instructions for macOS
2021-06-30 01:08:26 +02:00
Zeno Rogue b178db75c5
Merge pull request #167 from jruderman/jelly_typo
Fix typo in Jelly Kingdom description
2021-06-30 01:07:55 +02:00
Zeno Rogue f502f6662e
Merge pull request #168 from jruderman/free_fall_typo
Fix typo in Free Fall description
2021-06-30 01:07:37 +02:00
Zeno Rogue 15fa8c7c73
Merge pull request #170 from jruderman/extra_semis
Remove extra semis in struct defs
2021-06-30 01:07:09 +02:00
Zeno Rogue 9bc13e6f7a
Merge pull request #169 from jruderman/winter_return
Remove unreachable break
2021-06-30 01:04:16 +02:00
Zeno Rogue 13cfc7f60b
Merge pull request #154 from josephcsible/patch-3
Mention the Cursed Canyon in the Shadow's description
2021-06-30 01:03:46 +02:00
Zeno Rogue 8e06c8f25a
Merge pull request #171 from jruderman/catch_name
Remove unused catch binding
2021-06-30 01:03:01 +02:00
Zeno Rogue 0dda09a1c2
Merge pull request #172 from Quuxplusone/trans
Fix some low-hanging translation bugs.
2021-06-30 01:02:24 +02:00
Arthur O'Dwyer 0a1bbf08ee Fix some more low-hanging translation bugs. 2021-06-29 06:47:40 -04:00
Arthur O'Dwyer a6a8e5430a Fix some low-hanging translation bugs. 2021-06-29 06:26:40 -04:00
Jesse Ruderman 45e94c120e Remove unused catch binding 2021-06-28 22:39:11 -07:00
Jesse Ruderman 59b7e7bbdf Remove extra semis in struct defs 2021-06-28 22:33:08 -07:00
Jesse Ruderman f454579700 Remove unreachable break 2021-06-28 22:25:41 -07:00
Jesse Ruderman 07846490b0 Fix typo in Free Fall description 2021-06-28 17:59:58 -07:00
Joseph C. Sible 2a6196d78e Update the translation files too 2021-06-28 20:21:01 -04:00
Jesse Ruderman a1f78cde4c Fix typo in Jelly Kingdom description 2021-06-28 16:49:03 -07:00
Zeno Rogue 548b5b7772
Merge pull request #144 from josephcsible/patch-1
Avoid spurious "R'Lyeh is not what we are talking about now"
2021-06-28 21:12:21 +02:00
Zeno Rogue bca8e3d5ec
Merge pull request #153 from blargdag/typo
Fix typos in Russian translation.
2021-06-28 21:01:07 +02:00
Zeno Rogue 626c941b90
Merge pull request #155 from jruderman/teleport_haunted
Teleporting to Haunted Woods no longer puts you infinitely deep
2021-06-28 20:59:40 +02:00
Zeno Rogue 8e8b77036f
Merge pull request #156 from jruderman/polym
Orb of Change no longer produces Jiangshi or Desert Man
2021-06-28 20:58:58 +02:00
Zeno Rogue 4f7c4912de
Merge pull request #157 from jruderman/force_vizier
Fix extra Viziers when walking around the Palace with 12 treasures
2021-06-28 20:58:37 +02:00
Zeno Rogue 09a6b59f95
Merge pull request #159 from jruderman/mutant_sapling_help
Help for Mutant Sapling no longer claims that it unlocks Orb of Luck globally
2021-06-28 20:58:16 +02:00
Zeno Rogue ecc33f9d80
Merge pull request #160 from jruderman/slaying_in_hubs
Orb of Slaying can now appear in hub lands
2021-06-28 20:56:44 +02:00
Zeno Rogue c6785203d1
Merge pull request #161 from jruderman/woods_olr
Orb of the Woods now only appears in lands where it is potentially useful (and in hubs)
2021-06-28 20:56:08 +02:00
Zeno Rogue 4e447f5548
Merge pull request #162 from jruderman/no_luck_free_fall
Orb of Luck no longer appears in Free Fall
2021-06-28 20:55:13 +02:00
Zeno Rogue e486c87256
Merge pull request #165 from jruderman/friend_terracotta
Orb of Friendship no longer appears in Terracotta Army
2021-06-28 20:54:57 +02:00
Zeno Rogue 0a8f284b20
Merge pull request #163 from jruderman/ranged_beauty
The Orb of Beauty now lifts rose-scent restrictions on targeting of ranged orbs
2021-06-28 20:54:31 +02:00
Jesse Ruderman 6ce9681497 Orb of Friendship no longer appears in Terracotta Army 2021-06-27 09:52:52 -07:00
Jesse Ruderman 32878e5191 The Orb of Beauty now lifts rose-scent restrictions on targeting of ranged orbs 2021-06-27 02:39:34 -07:00
Jesse Ruderman a5b219ebb3 Orb of Luck no longer appears in Free Fall 2021-06-27 02:25:08 -07:00
Jesse Ruderman 0bf3bde3ec Orb of the Woods now only appears in lands where it is potentially useful (and in hubs) 2021-06-27 02:17:59 -07:00
Jesse Ruderman 7ed69739b9 Orb of Slaying can now appear in hub lands 2021-06-27 02:09:56 -07:00
Jesse Ruderman 67419631f5 Help for Mutant Sapling no longer claims that it unlocks Orb of Luck globally 2021-06-27 01:44:11 -07:00
Jesse Ruderman fa9239fddb
Update README.md 2021-06-26 23:07:01 -07:00
Jesse Ruderman 061e9bb014 Fix extra Viziers when walking around the Palace with 12 treasures 2021-06-26 22:36:15 -07:00
Jesse Ruderman ab1cec3bac Orb of Change no longer produces Jiangshi or Desert Man 2021-06-26 22:05:36 -07:00
Jesse Ruderman e1461f85ab Teleporting to Haunted Woods no longer puts you infinitely deep 2021-06-26 21:39:41 -07:00
Zeno Rogue 241e731663 fixed a memory leak -- not clearing finf.tvertices 2021-06-25 18:52:18 +02:00
Zeno Rogue b6a6b1b442 an option to replace letters when foreign letters are not available 2021-06-25 15:14:50 +02:00
Zeno Rogue 59ea009521 rogueviz::sag:: cleared debug 2021-06-25 15:14:22 +02:00
Zeno Rogue 3c882ec6c0 rogueviz:: label placement now takes scalefactor into account correctly 2021-06-25 14:07:37 +02:00
Zeno Rogue eca47115c9 fixup to using addHook_* 2021-06-25 14:04:50 +02:00
Zeno Rogue 5e09993eca rv_ignore fixup 2021-06-25 14:03:11 +02:00
Zeno Rogue 9d2faeef51 rogueviz:: function id_known 2021-06-25 14:00:31 +02:00
Zeno Rogue 279cd5a6ba rogueviz:: option -rvspaces 2021-06-25 14:00:01 +02:00
Zeno Rogue d7326e7f87 rogueviz:: added CAP_RAY and CAP_SOLV guards 2021-06-25 13:54:17 +02:00
Zeno Rogue 28d334c660 using addHook_rvslides and addHook_slideshows in various rogueviz demos 2021-06-25 13:53:23 +02:00
Zeno Rogue b3bb235ac9 rogueviz::sag:: -saghubs option 2021-06-25 13:49:55 +02:00
Zeno Rogue 3d552ea849 updated Bringris to 1.6 2021-06-25 13:49:20 +02:00
Zeno Rogue 87b0f3a008 rogueviz::fifteen:: -fifteen works outside of ISWEB 2021-06-25 13:48:52 +02:00
Zeno Rogue 72587085af rogueviz::fifteen:: option -fifteen-center 2021-06-25 13:46:57 +02:00
Zeno Rogue 5cedf8863a rogueviz:: fifteen:: triangle markers 2021-06-25 13:46:08 +02:00
Zeno Rogue 6a0e18d22d rogueviz:: added guards to rogueviz.h, and also added addHook macros which return 0 with no CAP_RVSLIDES 2021-06-25 13:43:33 +02:00
blargdag 295108a718 Another typo. 2021-06-18 12:55:59 -07:00
blargdag b6378cb7e7 Punctuation. 2021-06-18 12:52:47 -07:00
blargdag b2faae42d8 Another typo. 2021-06-18 12:52:47 -07:00
blargdag fae51170d7 Fix typo in Russian translation. 2021-06-18 12:52:47 -07:00
Zeno Rogue 2ef9268c01
Merge pull request #147 from josephcsible/patch-2
Update build information
2021-06-17 10:36:31 +02:00
Zeno Rogue 74e4e4c014 added missing override 2021-06-17 09:55:27 +02:00
Zeno Rogue fe93cac596 CAP_TRANS guards added 2021-06-17 09:55:18 +02:00
Zeno Rogue 90425b3f0e Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2021-06-17 09:53:50 +02:00
Zeno Rogue e37ca8d5f0 12.0b 2021-06-17 09:53:28 +02:00
Zeno Rogue c1ee1973f4 no saveStats in keepinmemory for casual 2021-06-17 09:50:00 +02:00
Zeno Rogue 0c0cc8a006 removed airbuf debug 2021-06-17 09:44:48 +02:00
Zeno Rogue d12601a538 fixed thruVine with Orb of the Woods 2021-06-17 09:44:48 +02:00
Zeno Rogue 910d312acd fixed item graphics 2021-06-17 09:44:48 +02:00
Zeno Rogue 29dee36525 fixed product shvid 2021-06-17 09:44:48 +02:00
Zeno Rogue c5e8d8aab3 sky for INFORDER 2021-06-17 09:44:48 +02:00
Zeno Rogue afc8120e1f fixed 3D floorshape generation for INFORDER 2021-06-17 09:44:48 +02:00
Zeno Rogue 00146174da 'edit cell values' option now visible in the map editor 2021-06-17 09:44:48 +02:00
Zeno Rogue 1be1713b91 monmirror editable 2021-06-17 09:44:48 +02:00
Zeno Rogue c953b2dda6 dice values are now editable in Shift+G 2021-06-17 09:44:48 +02:00
Zeno Rogue 41e11a63dc Orb of Change no longer can produce Hunter Dogs 2021-06-17 09:44:48 +02:00
Zeno Rogue 3a0b383b9b out_of_bounds cell 2021-06-17 09:44:48 +02:00
Zeno Rogue 2320619b86 strict_tree_rules() added 2021-06-17 09:44:48 +02:00
Zeno Rogue 0a6746f296 full_geometry_name now displays the Archimedean symbol 2021-06-17 09:44:48 +02:00
Zeno Rogue 82b8b02a36 hprint now can print maps 2021-06-17 09:44:48 +02:00
Zeno Rogue 442a751a33 fixed 'inv' displayed incorrectly in HUD mode line 2021-06-17 09:44:48 +02:00
Zeno Rogue d65e80e130 dice:: numbers now shown outside of the OpenGL mode 2021-06-17 09:44:48 +02:00
Zeno Rogue 70bd671941 dice:: added comments to val and dir 2021-06-17 09:44:48 +02:00
Zeno Rogue b9ba311a63 dice:: Orb of Chaos works correctly now 2021-06-17 09:44:48 +02:00
Zeno Rogue e6dd27f5bf dice:: now work correctly in non-orientable spaces 2021-06-17 09:44:48 +02:00
Zeno Rogue ca6eb9d8ef swap_data is now a general template function, not in tortoise 2021-06-17 09:44:47 +02:00
Zeno Rogue 7b38fc4de1 fixed the direction setup by Orb of Chaos 2021-06-17 09:44:47 +02:00
Zeno Rogue 56556ca1e1 fixed the remaining spurious shadow messages 2021-06-17 09:44:47 +02:00
Zeno Rogue 8b306c765e used OOP for get_corner_position 2021-06-17 09:44:47 +02:00
Zeno Rogue 42fc2c44a7 rewritten shvid using OOP 2021-06-17 09:44:47 +02:00
Zeno Rogue 8d18946450 written createMov in an OOP way 2021-06-12 23:25:59 +02:00
Joseph C. Sible 3659b5f414
Mention the Cursed Canyon in the Shadow's description 2021-06-11 20:35:44 -04:00
Zeno Rogue d4f34d0d4f
Merge pull request #152 from AMDmi3/patch-2
bigstuff.cpp: fix identation warning
2021-06-09 21:42:00 +02:00
Zeno Rogue b698c8a8a1 added new music for Android 2021-06-09 21:39:54 +02:00
Dmitry Marakasov 0550ea97e6
bigstuff.cpp: fix identation warning
Fixes clang warning

    ./bigstuff.cpp:1663:5: warning: misleading indentation; statement is not part of the previous 'if' [-Wmisleading-indentation]
2021-06-09 17:34:38 +03:00
Zeno Rogue f3c06a6eec fixed the new music 2021-06-09 05:49:54 +02:00
Zeno Rogue ace4ad62fd fixed a bug with the raycaster shader crashing -- (affected Bringris and notknot) 2021-06-09 04:44:04 +02:00
Zeno Rogue b71e436cb6 added some missing CAP_* guards 2021-06-09 04:33:55 +02:00
Zeno Rogue 7777c7b415 version 12.0a 2021-06-06 11:27:52 +02:00
Zeno Rogue d7445d4fdf fixed spurious messages about slashing the Shadow 2021-06-06 11:26:03 +02:00
Zeno Rogue c9229f36d6 android:: updated targetSdkVersion to 29 2021-06-06 10:51:14 +02:00
Zeno Rogue 35ea5e6bc0 android:: added uses-permission 2021-06-06 10:50:16 +02:00
Zeno Rogue 29b17bd8e4 android:: fixed the 'game in progress' notifications for Android 28 and 29 2021-06-06 10:50:00 +02:00
Zeno Rogue 4f4a7ccde4 added ISIOS guards in make_air 2021-06-06 10:49:21 +02:00
Zeno Rogue 029b57d8e1 fixed typo Sentent -> Sentient 2021-06-06 10:49:09 +02:00
Zeno Rogue d9a9accfc5 sound effect for Canyon Hag's attack 2021-06-06 10:40:00 +02:00
Zeno Rogue f94163bb78 curses thrown are now animated 2021-06-06 10:35:55 +02:00
Zeno Rogue 4a4a0fc217 Orb of Earth no longer marked useless in CC 2021-06-06 10:20:47 +02:00
Zeno Rogue facb0a04d5 improved how Earth works in CC 2021-06-06 10:20:32 +02:00
Zeno Rogue f9fec7607f vertex debug improved 2021-06-06 10:13:57 +02:00
Zeno Rogue bc65476a12 unused variable removed 2021-06-06 10:13:40 +02:00
Zeno Rogue 0e7adf28a8 fixed a bug with dice drawing 2021-06-06 10:13:19 +02:00
Zeno Rogue 805f33d8fa fixed Dice achievements 2021-06-03 15:11:32 +02:00
Zeno Rogue 982377c26c fixed unused capture warnings 2021-06-03 15:11:24 +02:00
Zeno Rogue fde3977218 missing improve_score for new treasures 2021-06-03 15:11:05 +02:00
Zeno Rogue 9fce0078c8 fixup to default_land_structure 2021-06-03 14:35:46 +02:00
Zeno Rogue c0fc9c4ac5 new lands were not generating 2021-06-03 14:24:17 +02:00
Zeno Rogue 6d3f1b0b82 version number 12.0 2021-06-03 13:26:33 +02:00
Zeno Rogue 0e0f773560 get_asset used on IOS too 2021-06-03 13:26:10 +02:00
Zeno Rogue 196d0dcb4c refactored default_land_structure 2021-06-03 13:26:10 +02:00
Zeno Rogue 168fc5705f usingGL on IOS 2021-06-03 13:26:10 +02:00
Zeno Rogue f6718d875d Dice:: clear memory 2021-06-03 13:26:10 +02:00
Zeno Rogue f03968c9e5 fixed land_structure rich presence 2021-06-03 13:26:10 +02:00
Zeno Rogue 57c75c6cb8 corner HUD now displays the active specimodes 2021-06-03 13:26:10 +02:00
Zeno Rogue 41f8f7fba3 improved Shadow slaing: SWORD, SWORD_INTO and CRUSH now clear the Shadow history (previously SWORD killed it for 1 turn) 2021-06-03 13:26:10 +02:00
Zeno Rogue dd3f5a3d6b do not generate Graveyard next to Dice 2021-06-03 13:26:10 +02:00
Zeno Rogue 695dee5b98 disabled CAP_SOLV and CAP_RAY in mobile due to the limits of GLES 2021-06-03 13:26:10 +02:00
Zeno Rogue a1d54a819d ray:: in GLES, disable raycaster in most spaces 2021-06-03 13:26:10 +02:00
Zeno Rogue ba58789d56 ray:: GLES textures are not precise enough for via_texture ): 2021-06-03 13:26:10 +02:00
Zeno Rogue cf7d19c775 ray:: fixed the interaction of m_via_texture and changing gms_array_size 2021-06-03 13:26:10 +02:00
Zeno Rogue 2c59bb3004 ray:: fixed getters built with wall_via_texture 2021-06-03 13:26:10 +02:00
Zeno Rogue 10bb713422 ray:: fixed missing mediump 2021-06-03 13:26:10 +02:00
Zeno Rogue dee64d29d4 mobile:: fixed lmouseover_distant 2021-06-03 13:26:10 +02:00
Zeno Rogue b37ad3d8a8 mobile:: rotating rug via orientation works again, and using rotate_view 2021-06-03 13:26:10 +02:00
Zeno Rogue 6e4b2c281f fixed a possible crash due to validating lands in product without underlying space 2021-06-03 13:26:10 +02:00
Zeno Rogue 0c048ea53b glhr:: more informative messages on shader compile failure with -dgl 2021-06-03 13:26:10 +02:00
Zeno Rogue 9ebd7d98d5 the Android version is now able to access honeycomb rules via assets 2021-06-03 13:26:10 +02:00
Zeno Rogue 3c3c95e072 simplified textures on mobile 2021-06-03 13:26:10 +02:00
Zeno Rogue 31666007f3 fixup to get_requested_resolution on mobile 2021-06-03 13:26:10 +02:00
Zeno Rogue e7a1ce6a1a fixed model settings without CAP_COMMANDLINE 2021-06-03 13:26:10 +02:00
Zeno Rogue dcd59b6096 CAP_EXTFONT for ISFAKEMOBILE 2021-06-03 13:26:10 +02:00
Zeno Rogue f76002579a fixup to safety help, and CZ translation 2021-06-03 13:26:10 +02:00
Zeno Rogue 0698336354 CAP_SAVE guards for casual 2021-06-03 13:26:10 +02:00
Zeno Rogue 0283eaa252 fixed GL settings in Android 2021-06-03 13:26:10 +02:00
Zeno Rogue 63570af240 XGD: filled circles and start with clearscreen 2021-06-03 13:26:10 +02:00
Zeno Rogue 214e314803 fixed Android music 2021-06-03 13:26:10 +02:00
Zeno Rogue e41d4e7912 dice:: CAP_EXTFONT-version of dice numbers 2021-06-01 13:07:56 +02:00
Zeno Rogue 50a9c78343 load/save/place dice in the map editor 2021-06-01 13:07:56 +02:00
Zeno Rogue 8f563f5deb achievements for 12.0 2021-06-01 13:07:56 +02:00
Zeno Rogue f75688851b fixed Java encoding 2021-06-01 13:07:56 +02:00
Zeno Rogue 2a4c7bd565 fixed dice too large 2021-06-01 13:07:56 +02:00
Zeno Rogue fe73d29c43 added the musictable tool 2021-06-01 13:07:56 +02:00
Zeno Rogue d5a20c7460 music in Android 2021-06-01 13:07:56 +02:00
Zeno Rogue 9374253d3e new music tracks 2021-06-01 13:07:56 +02:00
Zeno Rogue 32c4a5d4ff disabled the new lands in Daily for now 2021-06-01 13:07:56 +02:00
Zeno Rogue 56908743e3 Orb of Safety is marked dangerous, and Winter non-useless, in the Cursed Canyon 2021-06-01 13:07:56 +02:00
Zeno Rogue e01d9a86ed wandering Canyon Hags 2021-06-01 13:07:56 +02:00
Zeno Rogue 26b05d18be dice:: dont_work in pure heptagonal and in 3D geometries 2021-06-01 13:07:56 +02:00
Zeno Rogue 655cc1a8b5 dice:: don't generate any dice if Safety is on 2021-06-01 13:07:56 +02:00
Zeno Rogue 7f15f3b46f Angry Dice are now hot and destroy living walls 2021-06-01 13:07:56 +02:00
Zeno Rogue 660eaa6afe newbie-friendliness: explain how to get Safety 2021-06-01 13:07:56 +02:00
Zeno Rogue 41235b4afa Increased lands_for_hell() to 40 in casual 2021-06-01 13:07:56 +02:00
Zeno Rogue 31c228d114 translation updated CZ 2021-06-01 13:07:56 +02:00
Zeno Rogue 6e240661fb text fixes in PL 2021-06-01 13:07:56 +02:00
Zeno Rogue 1791bd9f02 text fixes 2021-06-01 13:07:56 +02:00
Zeno Rogue 199d5ef598 fixed/improved dice in non-H geometries 2021-06-01 13:07:56 +02:00
Zeno Rogue ec966403fe Cursed Canyon uses Cave Floor 2021-06-01 13:07:56 +02:00
Zeno Rogue 5c5a69b7b8 shmup:: Canyon Hags work 2021-06-01 13:07:56 +02:00
Zeno Rogue ab92209778 shmup:: Orb of Magnetism, Curse of Water, Curse of Weakness, Curse of Repulsion, Curse of Fatigue now work 2021-06-01 13:07:56 +02:00
Zeno Rogue be5194958e refactored to use isDie if applicable 2021-06-01 13:07:56 +02:00
Zeno Rogue b63a70f279 shmup:: knives no longer kill Dice 2021-06-01 13:07:56 +02:00
Zeno Rogue 6d63af62ca added flags for Dice 2021-06-01 13:07:56 +02:00
Zeno Rogue 689732f852 counting kills for new monsters 2021-06-01 13:07:56 +02:00
Zeno Rogue 80acefbdbe added new stuff to savegames 2021-06-01 13:07:56 +02:00
Zeno Rogue ad0a362681 Dice Reserve works in shmup 2021-06-01 13:07:56 +02:00
Zeno Rogue 22c4cfc4ad fixed a confirmation message even though saved 2021-06-01 13:07:56 +02:00
Zeno Rogue cc31e1cd64 inv:: the new Orbs displayed and hotkeyed correctly 2021-06-01 13:07:56 +02:00
Zeno Rogue bc0eed4cf0 'plain' button shown in the inventory screen 2021-06-01 13:07:56 +02:00
Zeno Rogue 8f28497f26 fixed invalid error messages on Animated Dice validity tests 2021-06-01 13:07:56 +02:00
Zeno Rogue 03c41443c4 no more world overview in Yendor Challenge 2021-06-01 13:07:56 +02:00
Zeno Rogue 95b4ad28b9 fixed some bugs with which_copy -- now should consistently use the View coordinate system 2021-06-01 13:07:56 +02:00
Zeno Rogue 855d2f66c3 fixed the Caribbean Yendor Chalenge 2021-06-01 13:07:56 +02:00
Zeno Rogue 80f925c9ce translations for the tour slide chapter names 2021-06-01 13:07:56 +02:00
Zeno Rogue a4037b14ca fixed translating the tour slides 2021-06-01 13:07:56 +02:00
Zeno Rogue 1fb1f614de Raging Bulls generated from Herd Bulls crashing into walls offscreen no longer permanently block the way when offscreen 2021-06-01 13:07:55 +02:00
Zeno Rogue c9a3dde67b Bulls crashing into rock formations now reduce their height, and ones falling from Rock III increase the height when they fall 2021-06-01 13:07:55 +02:00
Zeno Rogue dc5384da1e added to credits 2021-06-01 13:07:55 +02:00
Zeno Rogue 21639feb91 fixed GP on Crystal 2021-06-01 13:07:55 +02:00
Zeno Rogue 46c154e6d2 rosescent no longer spreads into gravity lands 2021-06-01 13:07:55 +02:00
Zeno Rogue 7edf506152 rosephase is now reset to 0 on safety 2021-06-01 13:07:55 +02:00
Zeno Rogue c89bde455d typo fix 2021-06-01 13:07:55 +02:00
Zeno Rogue 874ede836d fixed face_the_player to orient ASCII correctly in VR 2021-06-01 13:07:55 +02:00
Zeno Rogue 8a5b0d981a PL translation updated 2021-06-01 13:07:55 +02:00
Zeno Rogue db06438823 brought back the color for laDice 2021-06-01 13:07:55 +02:00
Zeno Rogue 00142c949c fixed the animation of dice made angry 2021-06-01 13:07:55 +02:00
Zeno Rogue ad753b12ca texts improved 2021-06-01 13:07:55 +02:00
Zeno Rogue 2114446695 d4s now appear better 2021-06-01 13:07:55 +02:00
Zeno Rogue 20c838ca9c happy d4s now appear in the right position 2021-06-01 13:07:55 +02:00
Zeno Rogue 1f6dec0205 new lands in lists 2021-06-01 13:07:55 +02:00
Zeno Rogue 80d21096fb dice:: error messages without excessive \n 2021-06-01 13:07:55 +02:00
Zeno Rogue ecf71826c3 dice:: improvements to generalization 2021-06-01 13:07:55 +02:00
Zeno Rogue 6fb5cc879e Animated Die are now distinct from HexDemon, for alt geometries 2021-06-01 13:07:55 +02:00
Zeno Rogue 12c1009039 improved theme for Dice Heaven and Cursed Canyon 2021-06-01 13:07:55 +02:00
Zeno Rogue e819552986 dice:: shapes for other geometries 2021-06-01 13:07:55 +02:00
Zeno Rogue 2973cada6d dice:: added Angry Dice 2021-06-01 13:07:55 +02:00
Zeno Rogue d7e2b491ac determinePush now accepts movei instead of c 2021-06-01 13:07:55 +02:00
Zeno Rogue b0333a6ab7 added CAP_TIMEOFDAY 2021-06-01 13:07:55 +02:00
Zeno Rogue 65a2a2e74b fixed a bug in OoY message 2021-06-01 13:07:55 +02:00
Zeno Rogue d4a03aa780 fixed fontsize to vid.fontsize on mobile devices 2021-06-01 13:07:55 +02:00
Zeno Rogue 3f7fc5f2b9 added CAP_EXTFONT for when font textures are not available (i.e., mobile devices) 2021-06-01 13:07:55 +02:00
Zeno Rogue 334bf12292 added missing CAP_COMMANDLINE guards, and other fixes for non-CAP_COMMANDLINE 2021-06-01 13:07:55 +02:00
Zeno Rogue 83070fe50c PTM is now searchable 2021-06-01 13:07:55 +02:00
Zeno Rogue c49bf13bbc Panini/stereo projection now works in the 'single' VR screen (didn't work correctly) but not on the eyes (did work) 2021-06-01 13:07:55 +02:00
Zeno Rogue c7d3cc87c5 vrhr:: fixed the 'thurston racing' option 2021-06-01 13:07:55 +02:00
Zeno Rogue 176f6a542c vrhr:: controllers are now shown on the desktop screen 2021-06-01 13:07:55 +02:00
Zeno Rogue 44ecbccb89 added option -nomsg 2021-06-01 13:07:55 +02:00
Zeno Rogue ea22207a28 made ge_land_selection searchable, also fixed the dialog title 2021-06-01 13:07:55 +02:00
Zeno Rogue 554214b33f added missing XLAT to find_setting 2021-06-01 13:07:55 +02:00
Zeno Rogue a2a1acfd8d renamed waBlandDie to waHappyDie 2021-06-01 13:07:55 +02:00
Zeno Rogue 707292a7e4 inv:: added the new orbs 2021-06-01 13:07:55 +02:00
Zeno Rogue 80bce047ab Orb of Luck: subtle changes were only listed while in inv 2021-06-01 13:07:55 +02:00
Zeno Rogue 848ef6e96c Land of Dice: treasure is itDice not itCursed 2021-06-01 13:07:55 +02:00
Zeno Rogue 9c2247de3e Land of Dice: fixed orb probabilities 2021-06-01 13:07:55 +02:00
Zeno Rogue 4b6b1379e6 made the Land of Dice a lucky land 2021-06-01 13:07:55 +02:00
Zeno Rogue a5fdc985c2 changed the Native orb for Overgrown to Woods; Orb of Luck is native for Dice, and Orb of Air is guest 2021-06-01 13:07:55 +02:00
Zeno Rogue 6f18ef8cf9 Orb of Air/Dice interaction 2021-06-01 13:07:55 +02:00
Zeno Rogue f2ebcc93ea improved dice movement on conflicts 2021-06-01 13:07:36 +02:00
Zeno Rogue 0065f160d0 Land of Dice: balanced generation 2021-06-01 13:07:36 +02:00
Zeno Rogue 77ae9d22c3 fixed missing translatability for the Hardcore messages 2021-06-01 13:07:36 +02:00
Zeno Rogue 6a6ed4ea0d first version of the Land of Dice 2021-06-01 13:07:36 +02:00
Zeno Rogue b879682d82 added lmouseover_distant 2021-06-01 13:07:36 +02:00
Zeno Rogue 990b544e7f fixed a YASC code bug 2021-06-01 13:07:36 +02:00
Zeno Rogue 4cdadea45f generalized write_in_space 2021-06-01 13:07:36 +02:00
Zeno Rogue b65e5f603f casual mode 2021-06-01 13:07:36 +02:00
Zeno Rogue 7fc91b1eaf YASC codes 2021-05-24 16:14:02 +02:00
Zeno Rogue 887fc9e1e2 Polish translation updated 2021-05-24 11:43:14 +02:00
Zeno Rogue f015023421 more text fixes found while translating 2021-05-24 11:42:46 +02:00
Zeno Rogue cd8856ea80 picking up an Orb of Purity with no Cursed Land in sight will grant 5 charges of every curseable orb 2021-05-23 16:42:26 +02:00
Zeno Rogue e53a7dbd68 specified native monster and reqs for the Cursed Land 2021-05-23 16:37:39 +02:00
Zeno Rogue 5d30ec70d3 increased the z-buffer to 10 MB 2021-05-23 16:00:50 +02:00
Zeno Rogue 3d12529b78 removed debug from shRing 2021-05-23 16:00:50 +02:00
Zeno Rogue feaef63f22 first version of the Land of Dice 2021-05-23 16:00:50 +02:00
Zeno Rogue 744f03c7d6 reduced charge limits for curses, and bonus for Draining 2021-05-23 16:00:50 +02:00
Zeno Rogue ece8c94d4c fixed the Hag's attack 2021-05-23 16:00:50 +02:00
Zeno Rogue 5e1bea6c3b Cursed Land: less turrets 2021-05-23 16:00:50 +02:00
Zeno Rogue 773e3afd7c floor color for laCursed 2021-05-23 16:00:50 +02:00
Zeno Rogue 0c816d3c68 in set_view, trust rightward 2021-05-23 16:00:50 +02:00
Zeno Rogue a8acbdd943 fieldpattern:: -fwrite displays the hash 2021-05-23 16:00:50 +02:00
Zeno Rogue d8e0618df0 devmod/gentrans.cpp: an utility for automatically finding non-translated text 2021-05-23 16:00:50 +02:00
Zeno Rogue 8f4a0935b9 more XLAT refactoring, and preparation for gentrans.cpp 2021-05-23 16:00:50 +02:00
Zeno Rogue 087c815372 hprint:: added as_nice_cstring 2021-05-23 16:00:50 +02:00
Zeno Rogue 0f767e16b6 XLAT refactor continued 2021-05-23 16:00:50 +02:00
Zeno Rogue c0002da574 refactored some XLAT calls for automated analysis, fixing some bugs on the way 2021-05-23 16:00:50 +02:00
Zeno Rogue b92c621112 vr:: added missing XLAT 2021-05-23 16:00:50 +02:00
Zeno Rogue 4fc3bf19eb shadow path described in mouseover 2021-05-23 16:00:49 +02:00
Zeno Rogue a5689de265 shadow now triggers other stuff, not only mines 2021-05-23 16:00:49 +02:00
Zeno Rogue 90c7d31483 fixed the index order for shpos 2021-05-23 16:00:49 +02:00
Zeno Rogue a9ec2be47e included fires in Cursed to make the Curse of Water have a positive aspect 2021-05-23 16:00:49 +02:00
Zeno Rogue 745d524433 Curse of Water now protects from fire 2021-05-23 16:00:49 +02:00
Zeno Rogue 0562fc4b63 Curse of Fatigue now can be used to fool Ratlings 2021-05-23 16:00:49 +02:00
Zeno Rogue bb47ad99e6 Curse of Repulsion now activates plates and other effects 2021-05-23 16:00:49 +02:00
Zeno Rogue 6aa4eef3f6 generating Orb of Purity 2021-05-23 16:00:49 +02:00
Zeno Rogue ac070a72e9 added itOrbWinter as a secondary reverse for itCurseWater, and also made some reverses cancel each other 2021-05-23 16:00:49 +02:00
Zeno Rogue 7cc075d96f no longer push statues through halfvines 2021-05-23 16:00:49 +02:00
Zeno Rogue 698104b29c implemented Orb of the Woods 2021-05-23 16:00:49 +02:00
Zeno Rogue 49ba1a7fc4 Orb of Luck improved 2021-05-23 16:00:49 +02:00
Zeno Rogue 5e33bd6db7 improved the Hag message to include the curse used 2021-05-23 16:00:49 +02:00
Zeno Rogue 9e92595c5e improved the generation of Cursed Land 2021-05-23 16:00:49 +02:00
Zeno Rogue 99d8e8d424 graphical effects for some curses 2021-05-23 16:00:49 +02:00
Zeno Rogue c5e979118a reg3 rules:: correct possible_states size 2021-05-23 16:00:49 +02:00
Zeno Rogue af9d35dc1c reg3 rules now support 65535 states 2021-05-23 16:00:49 +02:00
Zeno Rogue e78a170e7e added some missing CAP_SDL and CAP_GL guards 2021-05-23 16:00:49 +02:00
Zeno Rogue 8678a2f77f Curse of Weakness allows to push stunned monsters as originally designed 2021-05-23 16:00:49 +02:00
Zeno Rogue 9af73d9543 space436 now loads faster 2021-05-23 16:00:49 +02:00
Zeno Rogue 776ffb35e2 other-rule changing allowed in honeycomb-rule-generator 2021-05-23 16:00:49 +02:00
Zeno Rogue 256b12b140 reg3:: included tree rules for most hyperbolic honeycombs 2021-05-23 16:00:49 +02:00
Zeno Rogue bb016585ab optimized the honeycomb rules by using the 'quotient' fieldpatterns 2021-05-23 16:00:49 +02:00
Zeno Rogue 5a83434e7a honeycomb rulegen commands moved to a script 2021-05-23 16:00:13 +02:00
Zeno Rogue f485441650 honeycomb-rules-generator:: no more need to set XS7 2021-05-23 16:00:13 +02:00
Zeno Rogue ce3098de65 change FP_RULES to bool use_rule_fp 2021-05-23 16:00:13 +02:00
Zeno Rogue 20771ddae4 fieldpattern:: an option to use 'quotient group' fieldpatterns in 3D for more efficient representation 2021-05-23 16:00:13 +02:00
Zeno Rogue aea74df731 honeycomb-rule-generator:: fixed minimizer to not produce conflicts because of different parent IDs 2021-05-19 12:18:50 +02:00
Zeno Rogue a94c41fee2 honeycomb-rule-generator:: an option to optimize 344 2021-05-19 12:18:04 +02:00
Zeno Rogue 0342b377f7 honeycomb-rule-generator:: exh option to generate ideal honeycombs too 2021-05-19 12:17:44 +02:00
Zeno Rogue 7221ee58f2 animations: added movement angle 2 2021-05-17 14:28:19 +02:00
Zeno Rogue d951a84cc6 movei::dir_force function 2021-05-17 14:23:20 +02:00
Zeno Rogue 42f64f5bcf REVERT gen_sample_list for non-hybrid 2021-05-17 14:23:08 +02:00
Zeno Rogue eed8ba49ab hyperpoint:: added dot_d function 2021-05-17 14:22:19 +02:00
Zeno Rogue 3a9f81a248 ray:: fixed crashes when the raycaster is reset while rendering 2021-05-17 14:21:29 +02:00
Zeno Rogue 8681883e58 raycaster:: work with many tile shapes 2021-05-17 14:21:14 +02:00
Zeno Rogue 809d1510c2 first approach to Cursed Land 2021-05-17 14:20:02 +02:00
Zeno Rogue 6277ba6143 improved curse descriptions 2021-05-17 14:19:00 +02:00
Zeno Rogue d22965a1da monster added: Hag 2021-05-17 14:18:45 +02:00
Joseph C. Sible 2954781281
Update build information
On Debian buster, I needed make, g++, libsdl-mixer1.2-dev, and libglew-dev to compile successfully, so add them to the list. Remove gcc from the list, since it's a dependency of g++ and so gets installed anyway. Also, mention that mymake uses less RAM to compile (relevant on RAM-constrained systems).
2021-05-12 23:12:20 -04:00
Zeno Rogue 7dfa614e6a removed incorrect implementation of 2.5D in gen_sample_list() 2021-05-12 20:20:40 +02:00
Zeno Rogue 891f163954 ray:: fixed crashes when rmap is destroyed while in use 2021-05-12 20:19:45 +02:00
Zeno Rogue c6beebec79 fixed raycaster on (convex) 2.5D tes 2021-05-12 20:18:34 +02:00
Zeno Rogue 0678590e77 added MAXMDIM guard 2021-05-12 20:15:40 +02:00
Zeno Rogue bdc4671be4 an option to disable label coloring 2021-05-12 20:15:06 +02:00
Zeno Rogue 8a6b7e5752 fixed linecross -- walls in 2.5D tes appear again 2021-05-12 20:14:33 +02:00
Zeno Rogue bdc428e8b1 MAXMDIM guard 2021-05-09 02:25:41 +02:00
Zeno Rogue 196f8fc97d new shape shTinyArrow 2021-05-09 02:25:17 +02:00
Zeno Rogue 6504e949b9 no inner line drawn in rings 2021-05-09 02:25:05 +02:00
Zeno Rogue 4f7b01e0a6 shRing refactor 2021-05-09 02:23:33 +02:00
Joseph C. Sible 1bd9381b73
Avoid spurious "R'Lyeh is not what we are talking about now"
If you're following along with the tutorial, you'll still be in the Temple of Cthulhu when it tells you to go to the Burial Grounds. On your way there, you'll need to pass back through R'Lyeh, so we shouldn't warn you not to go there.
2021-05-08 17:32:17 -04:00
Zeno Rogue 61891c4eb8 implemented curses 2021-05-02 15:16:29 +02:00
Zeno Rogue 46683b06fe extra Orb shapes 2021-05-02 13:39:09 +02:00
Zeno Rogue 3003cda827 11.4k 2021-05-01 14:14:28 +02:00
Zeno Rogue 2135d1b798 reptilecheat makes Hunting empty 2021-05-01 14:14:28 +02:00
Zeno Rogue 605f0209b8 untrapped Prairie in no_walls 2021-05-01 14:14:28 +02:00
Zeno Rogue 957d1e49a5 fixed resetModes switching mode to incorrect land_structure 2021-05-01 14:14:28 +02:00
Zeno Rogue 27406ec801 Crossroads II and V are no longer generated in nowalls mode 2021-05-01 14:14:28 +02:00
Zeno Rogue 69c0b90169 fixed Camelot having inside lands in some ls modes, and also made it more likely to appear in nowalls 2021-05-01 14:14:28 +02:00
Zeno Rogue 4d7f117c0d temple etc is listed in bt::in() multiland if starting in it 2021-05-01 14:14:28 +02:00
Zeno Rogue b8aaf5c09a in binary tilings, starting in a horocyclic land (not singleland) now generates a single horocycle 2021-05-01 14:14:28 +02:00
Zeno Rogue ad235ee8e1 fixed wrong starting land in any_wall hybrid 2021-05-01 14:14:28 +02:00
Zeno Rogue 3146fdd02f hybrid:: draw_underlying_space no longer covers the screen in e2xe, and also fixed the orientation in product 2021-05-01 14:14:28 +02:00
Zeno Rogue 19e7b8aa29 fixed nicewalls in hybri 2021-05-01 14:14:28 +02:00
Zeno Rogue 6a43061ea6 Orb of Earth no longer marked useless in the Warped Coast 2021-05-01 10:44:49 +02:00
Zeno Rogue 1d2b0cf245 ray:: added reset_raycaster_map() function 2021-04-30 19:45:34 +02:00
Zeno Rogue 6e94d7346e fixed the E2xE raycaster 2021-04-30 19:45:22 +02:00
Zeno Rogue 639122e314 added faraway monster highlight as in @still-flow's pull request 2021-04-30 19:44:54 +02:00
Zeno Rogue 4cd43b3f27 fixed some issues with param_i and param_enum 2021-04-30 19:43:14 +02:00
Zeno Rogue f6f1bbe5a8 fixed the Temple of Cthulhu in bin44 2021-04-30 15:05:10 +02:00
Zeno Rogue e42d9dbe4f 11.4j fix (added to changelog) 2021-04-25 12:13:35 +02:00
Zeno Rogue b2c1e82d17 fixed ASCII display without OpenGL 2021-04-25 12:03:06 +02:00
Zeno Rogue ffe61e27bf 11.4j 2021-04-25 11:55:37 +02:00
Zeno Rogue 987b1a88da spawn sounds are not played for monsters entering vision 2021-04-25 11:45:58 +02:00
Zeno Rogue 0add1e5c0d land structure in menu does not display OFF if ineligible_starting_land 2021-04-25 11:33:40 +02:00
Zeno Rogue 3529fa8d84 do not destroy the Round Table in makeEmpty 2021-04-25 11:31:01 +02:00
Zeno Rogue 923f4522c3 fixed the Princess Challenge 2021-04-25 11:30:34 +02:00
Zeno Rogue 5f2c39a599 fixed Crossroads II 2021-04-25 11:30:26 +02:00
Zeno Rogue acfacd498f horocycle refactor/bugfix 2021-04-25 11:30:10 +02:00
Zeno Rogue a99be21653 clearing in gBinaryTiling 2021-04-25 11:10:09 +02:00
Zeno Rogue 42b440c1f4 11.4i 2021-04-23 21:52:18 +02:00
Zeno Rogue 44e127689d rogueviz::objmodel:: load faces with more than 3 vertices 2021-04-23 21:00:49 +02:00
Zeno Rogue c8b26954c2 rogueviz::kohonen:: made kohrestrict cell order more deterministic 2021-04-23 21:00:15 +02:00
Zeno Rogue 7086c16c04 rogueviz::flocking:: added swarming (numerical precision visualization) 2021-04-23 20:58:49 +02:00
Zeno Rogue ada99f6a35 rogueviz::presentation:: export draw_texture 2021-04-23 20:53:58 +02:00
Zeno Rogue 6c15ff6d70 rogueviz graph:: fix hilite 2021-04-23 20:53:25 +02:00
Zeno Rogue d37895b051 rogueviz:: export brm_limit 2021-04-23 20:53:16 +02:00
Zeno Rogue bdc5c7365f rogueviz::smoothcam:: various improvements 2021-04-23 20:52:53 +02:00
Zeno Rogue 2dba723eb3 fixed a crash trying to generate nowalls e.g. in {3,7} 2021-04-23 20:52:02 +02:00
Zeno Rogue 0da2c70674 fixed the Highlights & Achievements menu to set the correct land structure 2021-04-23 20:43:51 +02:00
Zeno Rogue 60c1e0f8f3 'land structure' selector now displays OFF if the default structure is selected 2021-04-23 20:40:07 +02:00
Zeno Rogue ce11319968 anim:: fixed rug rotation 2021-04-23 20:37:15 +02:00
Zeno Rogue 2893a3709b improved making sure that edges are not drawn twice 2021-04-23 20:29:41 +02:00
Zeno Rogue 831d699270 fixed crashes with Canvas 2021-04-23 20:23:49 +02:00
Zeno Rogue d63ab2f1a2 export brm_structure 2021-04-23 20:13:36 +02:00
Zeno Rogue 5bd56eea10 fixed Elemental Planes in ls single 2021-04-23 20:13:10 +02:00
Zeno Rogue 12e864912b plevel_factor is now param_f 2021-04-23 20:12:08 +02:00
Zeno Rogue 3f4135079c fixed set_view in product geometries 2021-04-23 20:11:44 +02:00
Zeno Rogue 4da935a4e2 fixed switching to 2d field quotient after 3d field quotient, and refactored 2021-04-23 20:10:06 +02:00
Zeno Rogue 056419288c enabling canvas now automatically enables ls::single 2021-04-23 20:09:23 +02:00
Zeno Rogue e681357206 in ls single, fixed Brown Islands 2021-04-23 20:02:20 +02:00
Zeno Rogue 1276f87b71 added build_barrier_good, and also fixed equidistant lands in single 2021-04-23 19:54:12 +02:00
Zeno Rogue 21d5187039 in ls::single, fixed Warped Coast 2021-04-23 19:51:45 +02:00
Zeno Rogue e960b82e17 fixed Crossroads in ls::single, also enabled Crossroads V 2021-04-23 19:45:50 +02:00
Zeno Rogue f3b359940e fixed single-land Camelot 2021-04-23 19:14:37 +02:00
Zeno Rogue 0f27c86614 rogueviz::inner-maps:: fixed a wrong character 2021-04-16 19:41:45 +02:00
Zeno Rogue 6fcb5f0c0d rogueviz::smoothcam:: uninitialized variable fixed 2021-04-16 19:41:25 +02:00
Zeno Rogue 4bb6379a53 11.4h 2021-04-15 19:59:40 +02:00
Zeno Rogue b597c538ef fixed missing discard 2021-04-15 19:08:35 +02:00
Zeno Rogue a4fda1b843 fixed modecodes for yendor and tactic despite the ls change 2021-04-15 19:08:10 +02:00
Zeno Rogue 8f91990de6 improvements in ls::single 2021-04-15 19:07:41 +02:00
Zeno Rogue af003fc931 legacy:: fixed CircleChaos to PatchedChaos 2021-04-15 18:21:21 +02:00
Zeno Rogue 91bd0c2018 lovasz completed 2021-04-15 18:21:05 +02:00
Zeno Rogue 9ffc5cd03f added ckeat option -unlock-all 2021-04-15 18:20:28 +02:00
Zeno Rogue 6bd2038f88 new -char option running 2021-04-15 18:20:12 +02:00
Zeno Rogue 79f6f04405 Princess set with -char princess is left-handed 2021-04-15 18:19:42 +02:00
Zeno Rogue 097bdb1687 fixed the mirrors in FPP 2021-04-15 18:13:53 +02:00
Zeno Rogue 4eb780f237 no more 'press SPACE to find the player' if no mapeditor::drawplayer 2021-04-15 17:56:17 +02:00
Zeno Rogue 91cf680182 improved ASCII: fixed domination 2021-04-15 17:55:58 +02:00
Zeno Rogue 9291e47400 improved ASCII: fixed viies 2021-04-15 17:55:46 +02:00
Zeno Rogue e513cc84df fixed a possible black screen on firstperson mode change 2021-04-15 17:54:49 +02:00
Zeno Rogue a1b0b6a643 one fix for all_unlocked 2021-04-15 17:33:52 +02:00
Zeno Rogue c7b24363bb improved add_unlocked as a cheat 2021-04-15 17:22:47 +02:00
Zeno Rogue c436130d67 added add_unlocked as a cheat 2021-04-15 17:19:59 +02:00
Zeno Rogue f5fa1263c3 fixed the mercury rivers 2021-04-15 17:17:20 +02:00
Zeno Rogue 885c377dd5 ASCII displayed for terracotta warriors in the ASCII mode 2021-04-15 17:17:01 +02:00
Zeno Rogue 871238ab98 updated knight_names 2021-04-15 16:12:45 +02:00
Zeno Rogue a3add19eba improvements to ASCII items & monsters: PC movement animated on radar; movement is animated; available in 3D graphical modes 2021-04-15 15:26:32 +02:00
Zeno Rogue 2884ae17bc land selection now automatically changes land_structure for Crossroads and Canvas/Asteroids 2021-04-12 13:58:04 +02:00
Zeno Rogue 864e7e3ec3 texture:: option original 2021-04-12 13:57:28 +02:00
Zeno Rogue d7d29d8827 shaders:: fixed fog 2021-04-12 13:57:11 +02:00
Zeno Rogue 4b1b0516f3 choice of the land structure 2021-04-11 22:15:40 +02:00
Zeno Rogue 5bca58a1da rogueviz:: fixed pedantic errors 2021-04-07 23:23:40 +02:00
Zeno Rogue 6c2ada39d6 rogueviz::hypcity:: no more player 2021-04-07 23:22:09 +02:00
Zeno Rogue c43df41a7d sphere:: get_where did not memoize 2021-04-07 22:43:23 +02:00
Zeno Rogue 131b9f656e gp:: do_adjm is now set for sphere for performance 2021-04-07 22:41:44 +02:00
Zeno Rogue 21cc2f6a7d gp:: improved adj 2021-04-07 22:40:58 +02:00
Zeno Rogue e5120bca38 fixup to qtm 2021-04-07 21:48:56 +02:00
Zeno Rogue e0547c3a91 rogueviz::qtm:: fixed to rv_hook not addHook 2021-04-07 21:32:04 +02:00
Zeno Rogue 8bcbf6d863 rogueviz::highdim-demo:: removed console spam 2021-04-07 21:31:47 +02:00
Zeno Rogue b54e5d567b rogueviz::impossible-ring:: fixed the slide 2021-04-07 21:07:11 +02:00
Zeno Rogue 0c1086f81f fixed incorrect clipping in H2xE 2021-04-07 21:04:25 +02:00
Zeno Rogue c5a40f9f68 fixed player disappearing in rogueviz presentations 2021-04-07 20:58:31 +02:00
Zeno Rogue 963c90dfbb rogueviz:: random-walk:: fixed the presentation 2021-04-07 20:25:47 +02:00
Zeno Rogue bcf014a6dc fixed clipping planes affecting 2D geometries 2021-04-07 20:25:27 +02:00
Zeno Rogue b470af5d89 added ignore to prevent warnings 2021-04-07 20:00:49 +02:00
Zeno Rogue c0901b47c8 removed debug comments from notknot 2021-04-07 19:58:23 +02:00
Zeno Rogue eaa2a45932 added hooks_post_initgame 2021-04-07 18:32:54 +02:00
Zeno Rogue a4f7bc1ee6 rogueviz::snow:: used hr::lerp to make it work in new compilers 2021-04-07 18:32:36 +02:00
Zeno Rogue 22aefcfff6 rogueviz:: export vertex_shape 2021-04-07 18:32:00 +02:00
Zeno Rogue c44ec8b51d rogueviz::presentation:: menu option is now called RogueViz demos, not presentations 2021-04-07 18:31:51 +02:00
Zeno Rogue 6926b20bc6 rogueviz:: unity build with CAP_ROGUEVIZ works again 2021-04-07 18:31:27 +02:00
Zeno Rogue 871d103f9a shot:: option -shot-500 2021-04-07 18:30:33 +02:00
Zeno Rogue cee08a9e87 removed silly definition from dpgen.cpp 2021-04-07 18:29:55 +02:00
Zeno Rogue 58af5f156d rogueviz::smoothcam:: edit the animation with the o-key 2021-04-07 18:15:58 +02:00
Zeno Rogue 59783a1478 rogueviz::smoothcam:: better comment 2021-04-07 18:15:58 +02:00
Zeno Rogue 04a67d2951 rogueviz::smoothcam:: fixed -smoothcam-on 2021-04-07 18:15:58 +02:00
Zeno Rogue f923b45973 rogueviz::smoothcam:: correctly working front_distance and up_distance 2021-04-07 18:15:58 +02:00
Zeno Rogue c312e02a59 rogueviz::smoothcam:: testing the animation 2021-04-07 18:15:58 +02:00
Zeno Rogue 5493621167 create and new position and increase interval now work on current_segment 2021-04-07 18:15:58 +02:00
Zeno Rogue 1efe2115cb rogueviz::smoothcam:: after Z, move to ctrl keys 2021-04-07 18:15:58 +02:00
Zeno Rogue 7beef4e417 rogueviz::smoothcam:: fixed edit this segment 2021-04-07 18:15:58 +02:00
Zeno Rogue db72e94f4c rogueviz::smoothcam:: edit front_distance and up_distance 2021-04-07 18:15:58 +02:00
Zeno Rogue 74abde8437 rogueviz::smoothcam:: added 'copy before 2021-04-07 18:15:58 +02:00
Zeno Rogue 82fcf76005 placed all extra hread/hwrite functions here 2021-04-07 18:15:58 +02:00
Zeno Rogue 5403859b41 rogueviz:: random-walk:: fixed with rv_hook 2021-04-07 18:15:58 +02:00
Zeno Rogue 02da8e78ec rogueviz:: projection visualizations have slides 2021-04-07 18:15:58 +02:00
Zeno Rogue 57d7663650 rogueviz::flocking:: added a Wikipedia link 2021-04-07 18:15:58 +02:00
Zeno Rogue d35085bad5 rogueviz::flocking:: slides added 2021-04-07 18:15:58 +02:00
Zeno Rogue ab3bb1b378 rogueviz::flocking:: fixed a bug in inital setup occuring sometimes 2021-04-07 18:15:58 +02:00
Zeno Rogue 0bfeca4256 rogueviz::flocking:: follow_distance parameter 2021-04-07 18:15:58 +02:00
Zeno Rogue 42265258f2 hyperpoint:: det function is now based on the largest coordinate, making it more precise 2021-04-07 18:15:58 +02:00
Zeno Rogue 7a89ad8b19 acos_clamp function added 2021-04-07 18:15:58 +02:00
Zeno Rogue 35ae9bf34a a separate, nicer field_quotient_3d function 2021-04-07 18:15:58 +02:00
Zeno Rogue f56b15a5ee edit_stretch function 2021-04-07 18:15:58 +02:00
Zeno Rogue 57b5d03695 asonov:: bounded_celldistance special case is for gArnoldCat, not asonov::in() 2021-04-07 18:15:58 +02:00
Zeno Rogue 298e1535c8 rogueviz:: flocking:: fixed initial generation (the boids were not rotated) 2021-04-07 18:15:58 +02:00
Zeno Rogue 901379d284 rogueviz:: qtm:: slides added 2021-04-07 18:15:58 +02:00
Zeno Rogue 5cc5af932a improved ray error reporting 2021-04-07 18:15:58 +02:00
Zeno Rogue c4e260341f ray:: raycaster_state now based on cgi_string, not geometry 2021-04-07 18:15:58 +02:00
Zeno Rogue 97ccc07be6 ray:: reset_raycaster now resets rots::saved_matrices_ray 2021-04-07 18:15:58 +02:00
Zeno Rogue e887d9e0b8 rotspace for S2 is now always elliptic 2021-04-07 18:15:58 +02:00
Zeno Rogue 2463e0e163 hooks_preoptimize and hooks_postoptimize 2021-04-07 18:15:58 +02:00
Zeno Rogue 41779cd92c set_view in 2D geometries 2021-04-07 18:15:58 +02:00
Zeno Rogue 937c7d4340 sphere:: relative_matrix is no longer based on gmatrix0, instead we just keep the matrices in hrmap 2021-04-07 18:15:58 +02:00
Zeno Rogue 1d26678d68 rogueviz::heatx:: new options, o-key, added to presentation 2021-04-07 18:15:58 +02:00
Zeno Rogue e1b0982e89 rogueviz::smoothcam:: fixup to current_segment 2021-04-07 18:15:58 +02:00
Zeno Rogue 639eea08a2 rogueviz::smoothcam:: option -smoothcam-on 2021-04-07 18:15:58 +02:00
Zeno Rogue 8c7f2cf9ac rogueviz::smoothcam:: fixed help 2021-04-07 18:15:58 +02:00
Zeno Rogue 7438445178 rogueviz::smoothcam:: better distance reporting 2021-04-07 18:15:58 +02:00
Zeno Rogue 40f2f60b83 rogueviz::smoothcam:: current_segment editing 2021-04-07 18:15:58 +02:00
Zeno Rogue 774771e5f5 rogueviz::smoothcam:: an option to draw the crosshair 2021-04-07 18:15:58 +02:00
Zeno Rogue 821745dfa7 fixed derivative 2021-04-07 18:15:58 +02:00
Zeno Rogue e73a9bb924 rogueviz::smoothcam:: join does not work 2021-04-07 18:15:58 +02:00
Zeno Rogue afd75250b2 rogueviz::smoothcam:: view traces 2021-04-07 18:15:58 +02:00
Zeno Rogue 6b5ed3e591 rogueviz::smoothcam:: do not crash if total_total == 0 2021-04-07 18:15:58 +02:00
Zeno Rogue e47f4fbba5 throw exception in mapeditor while saving with no parent 2021-04-07 18:15:58 +02:00
Zeno Rogue 3d42376fec fixed incorrect connections in notknot walls 2021-04-07 18:15:58 +02:00
Zeno Rogue 0a5f0b04e0 fixed roguevizslide 2021-04-07 18:15:58 +02:00
Zeno Rogue 97b3a23fda rogueviz:: implemented smoothcam 2021-04-07 18:15:58 +02:00
Zeno Rogue a86fb6cd4d rogueviz:: added URLs to various visualizations 2021-04-07 18:15:58 +02:00
Zeno Rogue 604083cb0e removed invert_depth 2021-04-07 18:15:58 +02:00
Zeno Rogue 7d2a70024d added 'RogueViz settings' to HyperRogue main menu; graph viz is now accessed via o-key only 2021-04-07 18:15:58 +02:00
Zeno Rogue e9c8f516aa rogueviz::planets fixed moon_precision parameter name 2021-04-07 18:15:58 +02:00
Zeno Rogue bfc4324605 rogueviz::pentagonal fixed 2021-04-07 18:15:58 +02:00
Zeno Rogue d42d6a4c84 added point30 for clarity 2021-04-07 18:15:58 +02:00
Zeno Rogue fe0e7f8421 rug:: prevented rug::renderonce from disabling rug camera movement keys 2021-04-07 18:15:58 +02:00
Zeno Rogue 3f288c4f90 tour:: allow help extensions, and slide_url command 2021-04-07 18:15:58 +02:00
Zeno Rogue cfb438b48b rogueviz:: reimplemented staircase using new techniques and it works again 2021-04-07 18:15:58 +02:00
Zeno Rogue 954f0d1981 rogueviz::staircase:: removed an incorrect comment 2021-04-07 18:15:58 +02:00
Zeno Rogue d206656724 rogueviz:: added heatx 2021-04-07 18:15:58 +02:00
Zeno Rogue b952d03277 rogueviz:: added hyperbolic-analogs 2021-04-07 18:13:45 +02:00
Zeno Rogue 4e3890a570 rogueviz:: added planets 2021-04-07 18:13:45 +02:00
Zeno Rogue a732eebb7c added notknot to rogueviz-all 2021-04-07 18:13:45 +02:00
Zeno Rogue 79164fa7da fixup added link to inner-maps 2021-04-07 18:13:45 +02:00
Zeno Rogue d4be547e72 rogueviz:: added inner-maps 2021-04-07 18:13:45 +02:00
Zeno Rogue 91d339aa38 rogueviz::sunflowers:: using rv_hook 2021-04-07 18:13:45 +02:00
Zeno Rogue 1aae969b6c rogueviz:: fixed animation in simple Penrose staircases 2021-04-07 18:13:45 +02:00
Zeno Rogue 088aff457c tour:: reverted restore_all on GeometryReset 2021-04-07 18:13:45 +02:00
Zeno Rogue 21f151cadb tour:: slide_backup with 1 parameter 2021-04-07 18:13:45 +02:00
Zeno Rogue 22c3bf8821 moved unsorted to the last presentation 2021-04-07 18:13:45 +02:00
Zeno Rogue f63a3f0612 rogueviz::notknot:: added to unsorted 2021-04-07 18:13:45 +02:00
Zeno Rogue 4539de3ae0 rogueviz::notknot:: neater structure 2021-04-07 18:13:45 +02:00
Zeno Rogue 9d52b1b092 improved hypcity settings 2021-04-07 18:13:45 +02:00
Zeno Rogue 3e5d9d94db changed THE END to LEGAL::NONE 2021-04-07 18:13:45 +02:00
Zeno Rogue 35414a6ff6 tour:: with LEGAL::NONE, '1' and '2' keys do not work 2021-04-07 18:13:45 +02:00
Zeno Rogue 7a887ac7c1 slide_restore_all on geometryreset 2021-04-07 18:13:45 +02:00
Zeno Rogue dc66fe836e rogueviz::hypcity:: presentation 2021-04-07 18:13:45 +02:00
Zeno Rogue c4b059192f hypcity:: fixed normalization 2021-04-07 18:13:45 +02:00
Zeno Rogue 75961e6543 in canvas 2.5D, no ceiling if canvas_default_wall == waInvisibleFloor 2021-04-07 18:13:45 +02:00
Zeno Rogue 0881f33fc2 param_b coolfog 2021-04-07 18:13:45 +02:00
Zeno Rogue 2786221def shift_argi and shift_args <- add this before! 2021-04-07 18:13:45 +02:00
Zeno Rogue 7cd37f1021 fixup to gi_extension: forgot virtual 2021-04-07 18:13:45 +02:00
Zeno Rogue a4d6365b53 rogueviz:: ascending-descending:: configurable prec 2021-04-07 18:13:45 +02:00
Zeno Rogue 3c1fdb0f2c rogueviz:: hypcity:: configurable prec 2021-04-07 18:13:45 +02:00
Zeno Rogue 599d446038 rogueviz::objmodel:: precision is now configurable via o-key 2021-04-07 18:13:45 +02:00
Zeno Rogue 084fa5ea5e rogueviz::hypcity:: spherical and Solv geometry 2021-04-07 18:13:45 +02:00
Zeno Rogue e5b87a1a36 rogueviz::kohonen::coloring_3d now via rv_hook 2021-04-07 18:13:45 +02:00
Zeno Rogue 03f55aa372 rogueviz:: do_cleanup as a separate function 2021-04-07 18:13:45 +02:00
Zeno Rogue 4af75fe611 rogueviz:: slide_error used 2021-04-07 18:13:45 +02:00
Zeno Rogue 367ff6f035 rogueviz::presentation:: slide_error function 2021-04-07 18:13:45 +02:00
Zeno Rogue b622a7ac42 added file_exists function 2021-04-07 18:13:45 +02:00
Zeno Rogue 4aff89134e added a presentation for the fifteen puzzle 2021-04-07 18:13:45 +02:00
Zeno Rogue 7c8c4f3d04 rogueviz::fifteen:: used rv_hook and new map loading 2021-04-07 18:13:45 +02:00
Zeno Rogue 0af2877cc1 improved hooks_loadmap system so that it is known if extra modules are to be loaded; also added CLI option -save 2021-04-07 18:13:45 +02:00
Zeno Rogue f03939b46c rogueviz::cylon:: use rv_hook 2021-04-07 18:13:45 +02:00
Zeno Rogue 8fa9a13165 rogueviz:: simple-impossible:: used rv_hook 2021-04-07 18:13:45 +02:00
Zeno Rogue c9b59877eb rogueviz::ascending-descending:: rv_hook used 2021-04-07 18:13:45 +02:00
Zeno Rogue 6ed4b564ef rogueviz::notknot:: check wallcolor 2021-04-07 18:13:45 +02:00
Zeno Rogue 50ddd5c6fc rogueviz::objmodels:: improved preparing 2021-04-07 18:13:45 +02:00
Zeno Rogue 73c4cef0cc rogueviz::snow::junk removed 2021-04-07 18:13:45 +02:00
Zeno Rogue 51b73ecd6e rogueviz::objmodels:: using gi_extension 2021-04-07 18:13:45 +02:00
Zeno Rogue d3bb52749f gi_extensions 2021-04-07 18:13:45 +02:00
Zeno Rogue 7f26be2531 rogueviz::highdim-demo:: removed welcome message 2021-04-07 18:13:45 +02:00
Zeno Rogue 8a836fd1ea rogueviz:: used args::add and made hypcity and hypocycloid enablable 2021-04-07 18:13:45 +02:00
Zeno Rogue ceb79290ae arg:: made added_commands a pointer, to prevent possible initialization order errors 2021-04-07 18:13:45 +02:00
Zeno Rogue 408a49dfe9 arg:: used the new add::arg in some contexts 2021-04-07 18:13:45 +02:00
Zeno Rogue af28dd98da rogueviz::crystal-sokoban:: add arg::add2 2021-04-07 18:13:45 +02:00
Zeno Rogue 7a7bb2dddb arg:: nicer adding commandline parameters 2021-04-07 18:13:45 +02:00
Zeno Rogue 9ed06c7fee rogueviz:: removed vizid 2021-04-07 18:13:45 +02:00
Zeno Rogue f9edc44a8a rogueviz::highdim:: rv_hooks used 2021-04-07 18:13:45 +02:00
Zeno Rogue b17eca5ff1 rogueviz::crystal_sokoban:: using rv_hooks 2021-04-07 18:13:45 +02:00
Zeno Rogue 08fe6995c3 rogueviz::kohonen:: used rv_hook 2021-04-07 18:13:45 +02:00
Zeno Rogue bfd635dedd rogueviz::kohonen:: no levellines if lv.qty < 0 2021-04-07 18:13:45 +02:00
Zeno Rogue b04e505b2b rogueviz::kohonen:: change som_dispersion option 2021-04-07 18:13:45 +02:00
Zeno Rogue 3ad88ad30a rogueviz::kohonen:: CLI option -som-wtd 2021-04-07 18:13:45 +02:00
Zeno Rogue a4113d39a7 rogueviz::kohonen:: improved step debug, changed tt calculation 2021-04-07 18:13:45 +02:00
Zeno Rogue b4d18ecc7f rogueviz::kohonen:: improved dispersion debug, changed the default value 2021-04-07 18:13:45 +02:00
Zeno Rogue 8967d117e6 rogueviz::kohonen:: fixup to improved init 2021-04-07 18:13:45 +02:00
Zeno Rogue e575fed606 rogueviz::kohonen:: animate option 2021-04-07 18:13:45 +02:00
Zeno Rogue 5df3fe3d12 rogueviz::kohonen:: show_rings option 2021-04-07 18:13:45 +02:00
Zeno Rogue f27017e0d5 rogueviz::kohonen:: bestsample -1 2021-04-07 18:13:45 +02:00
Zeno Rogue 5ca009f58b rogueviz::kohonen:: precise_placement 2021-04-07 18:13:45 +02:00
Zeno Rogue d781bf538e rogueviz::kohonen:: better initialization system 2021-04-07 18:13:45 +02:00
Zeno Rogue 0ac88cbb2f config brm_limit from CLI 2021-04-07 18:13:45 +02:00
Zeno Rogue 05d6706d2c rogueviz:: use adj just in case 2021-04-07 18:13:45 +02:00
Zeno Rogue 9a33c3b572 rogueviz:: rv_hook system used for RogueViz itself 2021-04-07 18:13:45 +02:00
Zeno Rogue 73c5b5e881 rogueviz:: used rv_hook in some viz 2021-04-07 18:13:45 +02:00
Zeno Rogue 19a1358607 rogueviz cleanup fixup 2021-04-07 18:13:45 +02:00
Zeno Rogue fbea016f03 rogueviz::magiccube:: using rv_hook 2021-04-07 18:13:45 +02:00
Zeno Rogue bb5eaf0fc5 added the high-dimensional demo 2021-04-07 18:13:45 +02:00
Zeno Rogue 05318256dc added the playing-with-impossibility presentation 2021-04-07 18:13:45 +02:00
Zeno Rogue 4486e9a017 export more presentation functions 2021-04-07 18:13:45 +02:00
Zeno Rogue cf1cd09f81 rogueviz::objmodels:: availability checking 2021-04-07 18:13:45 +02:00
Zeno Rogue 6a2553ced9 rogueviz:: fixed ascending-descending 2021-04-07 18:13:45 +02:00
Zeno Rogue 05e7a6b717 tour:: qualified Guided Tour to HyperRogue Guided Tour 2021-04-07 18:13:45 +02:00
Zeno Rogue 54d7574047 rogueviz:: categorization fixup 2021-04-07 18:13:45 +02:00
Zeno Rogue bdf97fc6de rogueviz:: reorganized the presentations 2021-04-07 18:13:23 +02:00
Zeno Rogue 30b79de1f5 rogueviz:: added objmodels.cpp and some demos using it 2021-04-07 18:13:17 +02:00
Zeno Rogue ccc5e3bf9b rogueviz:: crystal-sokoban:: sokomap displayed online 2021-03-30 12:09:11 +02:00
Zeno Rogue fa6b9989c0 crystal-sokoban:: welcome message 2021-03-30 12:00:26 +02:00
Zeno Rogue 1e3786550b don't include magiccube in crystal-sokoban 2021-03-30 11:42:02 +02:00
Zeno Rogue 85683d6688 fixup guard 2021-03-30 11:41:52 +02:00
Zeno Rogue 2b6b344c15 rogueviz:: added fifteen and crystal-sokoban 2021-03-30 11:40:05 +02:00
Zeno Rogue f7f3309063 added worker character 2021-03-30 11:39:18 +02:00
Zeno Rogue 939cfc209e one more guard fixup 2021-03-30 11:33:35 +02:00
Zeno Rogue e8f9a09930 Sokoban elements 2021-03-30 11:29:18 +02:00
Zeno Rogue 98f36617c4 fixup 2021-03-30 11:28:35 +02:00
Zeno Rogue 5a73510c4f added some guards for MAXMDIM >= 4 and CAP_SOLV 2021-03-30 11:27:48 +02:00
Zeno Rogue 1f939920d2 added missing EX 2021-03-30 00:04:20 +02:00
Zeno Rogue 7b5a67549d added options '-char dodek', '-char rudy', '-char princess' 2021-03-29 16:26:04 +02:00
Zeno Rogue 9fb616c943 rogueviz::qtm:: fixed after moving rainbow_color 2021-03-25 14:31:02 +01:00
Zeno Rogue 6151859380 another cellshape fix 2021-03-25 12:47:52 +01:00
Zeno Rogue 0a0cbfcbeb fixed one place when old cellshape was used 2021-03-25 12:44:25 +01:00
Zeno Rogue ef8db33d7a notknot:: reset camera_speed in other scenes 2021-03-25 12:41:43 +01:00
Zeno Rogue 3f1bae7b6d notknot:: added Solv portal to menu 2021-03-25 12:41:41 +01:00
Zeno Rogue ade0eb2456 notknot:: optimized by improved loop recording 2021-03-25 12:41:21 +01:00
Zeno Rogue 693f95f3b4 notknot:: removed junk comments 2021-03-25 11:20:16 +01:00
Zeno Rogue d2235e29a0 notknot:: fog now uses rainbow colors 2021-03-25 11:18:13 +01:00
Zeno Rogue f15ab95ca1 notknot:: bugfix to use base not geometry 2021-03-25 11:17:24 +01:00
Zeno Rogue b6505de623 notknot:: added debug to show pathbacks 2021-03-25 11:17:12 +01:00
Zeno Rogue db7901791f notknot:: removed debug 2021-03-25 11:16:52 +01:00
Zeno Rogue a2ed0e9294 asonov:: cgi.cellshape and cgi.vertices_only are now known 2021-03-25 11:13:57 +01:00
Zeno Rogue 6b594b9fc9 cgi.cellshape is now vector of vectors 2021-03-25 11:12:58 +01:00
Zeno Rogue 4a80af6912 asonov:: added a geometry flag to recognize Arnold's cat 2021-03-25 10:57:48 +01:00
Zeno Rogue 1dc655df5a color fixup (header) 2021-03-25 10:57:16 +01:00
Zeno Rogue 8b304ba7de removed the moved functions rcolor and rainbow_color from rogueviz/qtm 2021-03-25 10:56:46 +01:00
Zeno Rogue 355b8df23a added colors.cpp for all color-related functions 2021-03-25 10:56:20 +01:00
Zeno Rogue d16aa1b160 notknot:: solv portal 2021-03-25 10:36:07 +01:00
Zeno Rogue 8f56ff56b9 removed debug from generate_brm 2021-03-24 20:26:09 +01:00
Zeno Rogue 953e17722d throw hr_exceptions not strings 2021-03-24 20:25:44 +01:00
Zeno Rogue 8fc92f2e83
Merge pull request #142 from Quuxplusone/no-automake
Eliminate autotools/automake/configure.
2021-03-22 12:40:05 +01:00
Arthur O'Dwyer 1761b02b90 Rationalize some std::exception stuff. 2021-03-21 17:57:09 -04:00
Arthur O'Dwyer 4c10b17b7e Move `Makefile.simple` to just `Makefile`. 2021-03-21 17:40:06 -04:00
Arthur O'Dwyer 77cc0cc01b Eliminate autotools/automake/configure. 2021-03-21 17:19:41 -04:00
Zeno Rogue 5ade959c02 nil:: nilwidth recorded in cgi_string 2021-03-21 12:51:50 +01:00
Zeno Rogue c41d1e173c nil:: edit nilwidth via menu 2021-03-21 12:51:50 +01:00
Zeno Rogue 7b06abd97a notknot:: other scenes available via the menu 2021-03-21 12:51:50 +01:00
Zeno Rogue e3d1402f58 fixed cgi_string generation in notknot 2021-03-21 12:51:50 +01:00
Zeno Rogue 3c1e0ebb38 added hooks_cgi_string 2021-03-21 12:51:50 +01:00
Zeno Rogue 820c640212 fixed wall coordinates for Nil, also now check for 'nil' instead of geometry == gNil 2021-03-21 12:51:50 +01:00
Zeno Rogue ed2b78aa9a irr:: CLI parameters now do PHASEFROM 2021-03-21 12:51:50 +01:00
Zeno Rogue e1683463d2 orbsize is now affected by creature_scale 2021-03-21 12:51:50 +01:00
Zeno Rogue 55331270d4 added shHugeDisk shape 2021-03-21 12:51:50 +01:00
Zeno Rogue e57fc630b4 (incomplete) some preparation for the Lovasz Conjecture achievement 2021-03-21 12:51:50 +01:00
Zeno Rogue ee1837e3d8 ray:: fixed for nil with nilwidth changed 2021-03-21 12:51:50 +01:00
Zeno Rogue 0f081fb1ab stereographic projection added 2021-03-21 12:51:50 +01:00
Zeno Rogue 421ff4a94a stretchable spherical spaces are now marked qSTRETCHABLE 2021-03-21 12:51:50 +01:00
Zeno Rogue 16e3c549a0 in SDL1, don't reopen the window needlessly 2021-03-21 12:51:50 +01:00
Zeno Rogue 50c4e2be62 improved cycle checking 2021-03-21 12:51:50 +01:00
Zeno Rogue 33d2331788 notknot:: nicer flag checking 2021-03-21 12:51:50 +01:00
Zeno Rogue e5bbac6010 notknot:: more spaces 2021-03-21 12:51:50 +01:00
Zeno Rogue 242b601a51 added hr_exception_str 2021-03-21 10:44:38 +01:00
Zeno Rogue b55eb5721e you can no longer go through walls in portalspaces 2021-03-21 10:42:36 +01:00
Zeno Rogue 8a6f1764d2 rogueviz::fifteen:: support for non-orientable worlds, 'go back' actually works, an option to remove all tiles 2021-03-16 21:52:29 +01:00
Zeno Rogue 15e1d63089 rogueviz:: added the fifteen puzzle 2021-03-16 19:54:57 +01:00
Zeno Rogue b6e7c355bf mapstream:: export some additional functions 2021-03-16 19:54:57 +01:00
Zeno Rogue 15adcdf191 missing () 2021-03-12 23:00:18 +01:00
Zeno Rogue 5f86ed6b4b fixed more fallthroughs, added exception hr_wrong_geometry 2021-03-12 22:59:24 +01:00
Zeno Rogue eb6322b864 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2021-03-12 15:31:27 +01:00
Zeno Rogue 8e9da9e1fe fixed the spiral projection 2021-03-12 15:31:17 +01:00
Zeno Rogue 4b45872443 marked intended fallthroughs to prevent errors 2021-03-12 15:31:00 +01:00
Zeno Rogue e4947acef7 illegal cases in binarytiling.cpp now throw hr_wrong_dir() 2021-03-12 15:30:12 +01:00
Zeno Rogue e9b31ccd17
Merge pull request #132 from Quuxplusone/ci-step
Add a CI step to compare "make clean" against "git clean"
2021-03-12 10:46:26 +01:00
Zeno Rogue 03cbe7f7e3 yet another initialization order error fixed 2021-03-11 10:01:21 +01:00
Zeno Rogue c47aa8ce3f fixed a function type error in mingw 2021-03-11 10:01:01 +01:00
Zeno Rogue 3b0c760289 removed static initialization order fiasco from fieldpattern 2021-03-11 10:00:41 +01:00
Zeno Rogue b872926cac in -mingw64-cross, changed -DCAP_GLEW=1 to -DGLEW_STATIC 2021-03-11 09:29:27 +01:00
Zeno Rogue f5793c7bcb added -mingw64-cross target 2021-03-11 09:16:55 +01:00
Zeno Rogue a54c34ff99 mymake:: renamed system to mysystem (as it no longer just converts the type) and moved the implementation earlier 2021-03-11 09:16:42 +01:00
Arthur O'Dwyer 60fa736904 Use OSX 10.15 and Ubuntu Bionic for all TravisCI runs.
Ideally we'd just say "use the default OS version" and have it
auto-upgrade as Travis upgrades their stuff, with no work on
our part. Unfortunately, Travis has let their default OSX image
lag so far back (it's now 10.13) that Homebrew has started
refusing to install GLEW without the `--build-from-source` flag.
So, sign up for some extra maintenance work.
2021-03-10 16:57:17 -05:00
Arthur O'Dwyer 3a29576d9f Add build steps to check the committed files against "make clean".
If "make clean" on a new checkout causes diffs, you accidentally committed
one of the build products currently listed in "make clean", and you
should `git rm` it again.

If "make clean" on a dirty/built checkout causes diffs, then either
(1) the "make" process modified some tracked file which is not removed
by "make clean", i.e. either (1A) it is a build product which needs to
be `git rm`ed AND added under "make clean", or (1B) the build process
is modifying some source file, which is highly weird and shouldn't happen;
or else (2) "make" created some untracked file which is not removed
by "make clean", i.e., you should add that build product to "make clean".

The Travis build that uses "mymake" now does the same "mv" trick as Github CI,
to avoid having the executable sometimes named "./hyperrogue" and sometimes
named "./hyper". Why are these filenames different, anyway?
2021-03-10 12:00:11 -05:00
Arthur O'Dwyer 0fd92b6c37 git rm hyper.html
This build artifact should not be checked in.
2021-03-10 12:00:11 -05:00
Zeno Rogue 7cc628fb55 fixed to work with other CAP options 2021-03-10 08:40:43 +01:00
Zeno Rogue f180f447e6 11.4g 2021-03-09 16:29:05 +01:00
Zeno Rogue 54661a975f another missing CAP_VR guard 2021-03-09 16:22:22 +01:00
Zeno Rogue dafa2fd7b3 missing CAP_VR guard 2021-03-09 16:19:17 +01:00
Zeno Rogue 1a43e1330f missing override 2021-03-09 16:19:02 +01:00
Zeno Rogue 16143f3c9f frustum culling in VR 2021-03-09 16:04:53 +01:00
Zeno Rogue 26b53f0db7 more fixes to SDL2 setting modes 2021-03-09 16:04:02 +01:00
Zeno Rogue 3d311b9dd7 vr:: if hsm is set to 'holonomy' or 'reference' in 2D, use 'model_viewing' instead 2021-03-09 14:46:57 +01:00
Zeno Rogue 91f7b2696f ray:: in VR raycasting, raycast_map is called just once per frame 2021-03-09 14:09:58 +01:00
Zeno Rogue 04472e513d fixed a revert-related bug which could cause a non-collected key to be considered collected 2021-03-09 14:05:47 +01:00
Zeno Rogue 56485f20a9 various changes and fixes to make coolfog and sky work correctly in VR 2021-03-09 13:12:53 +01:00
Zeno Rogue 9f5591249a remove VR models on vr::shutdown 2021-03-09 10:48:53 +01:00
Zeno Rogue 49a1cf1cab CLI option d:history 2021-03-09 10:48:21 +01:00
Zeno Rogue fcb270f78e resizable is now editable 2021-03-09 10:48:03 +01:00
Zeno Rogue 7798632b9d optimized drawing the sky 2021-03-09 10:47:20 +01:00
Zeno Rogue 95d4e942e2 removed obsolete profiling 2021-03-09 10:45:44 +01:00
Zeno Rogue c4ab8cca8b delete airbuf on resetGL 2021-03-09 10:43:50 +01:00
Zeno Rogue 353af95596 better window resizing in SDL2 2021-03-09 09:45:33 +01:00
Zeno Rogue 1c36c876ba fixed reverse condition: allies' plague spreading worked only if you had no empathy 2021-03-08 14:51:44 +01:00
Zeno Rogue 6e942e98f5 fieldpattern:: now can work with triplets 2021-03-08 13:30:55 +01:00
Zeno Rogue dd0e9ddae7 SDL2 improved cleanup 2021-03-07 22:31:36 +01:00
Zeno Rogue f853016cff vr:: fixed the formula checking whether we are pointing at something in the UI 2021-03-07 21:37:16 +01:00
Zeno Rogue a25ca511c3 fixup to strings on map 2021-03-07 21:31:30 +01:00
Zeno Rogue b69ea3886e vr:: strings on map are now drawn correctly 2021-03-07 21:13:31 +01:00
Zeno Rogue 23f9d58307 window can be set to non-resizable (useful for netgen) 2021-03-07 21:12:35 +01:00
Zeno Rogue 69f16c45b1 added border between font letters to avoid rendering artifacts 2021-03-07 21:12:12 +01:00
Zeno Rogue 0ceddf03a0 improved glfont rendering 2021-03-07 21:11:42 +01:00
Zeno Rogue ec2dedf678 fixed generating treasure (Wetlands, Blizzard) and enemies (Wetland) in Safety; also made Wetlands easier to exit 2021-03-07 17:55:57 +01:00
Zeno Rogue 4c20f29989 Orb of Safety prevents wandering monsters (for 7 turns) 2021-03-07 17:54:37 +01:00
Zeno Rogue ba9d72365c netgen:: now works correctly with sdl2 2021-03-07 14:25:10 +01:00
Zeno Rogue 6fbccbeda0 mymake:: added an option -v to view the commandline 2021-03-07 14:18:58 +01:00
Zeno Rogue d8fd187986 in SDL2, SDL_gfx functions seem to use a different order of components 2021-03-07 14:14:53 +01:00
Zeno Rogue b87a995871 history::spiral:: reset out=s just in case 2021-03-07 14:12:40 +01:00
Zeno Rogue df1db8ca03 fixed some bugs with SDL2 2021-03-07 14:12:18 +01:00
Zeno Rogue b3a4cdb15a fixup to mymake/savepng 2021-03-07 14:06:11 +01:00
Zeno Rogue 9e8a325cc8 changed default SDL version to 1.2 2021-03-07 14:02:33 +01:00
Zeno Rogue 77e673f6f1 mymake:: savepng now works like other modules, and is compiled with SDL2 if needed 2021-03-07 14:02:06 +01:00
Zeno Rogue 4de8e6507d SDL2 fixup 2021-03-07 10:42:19 +01:00
Zeno Rogue c6fcfe7f21 auto switch to model_viewing if vr-enabled 2021-03-06 16:27:30 +01:00
Zeno Rogue d09ffb37f0 added SDL_WINDOW_ALLOW_HIGHDPI 2021-03-06 14:57:27 +01:00
Zeno Rogue 3eff38bb4d mymake:: option -vr 2021-03-06 14:53:48 +01:00
Zeno Rogue f00696711a HyperRogue ported to SDL2 (in mymake do -sdl2) 2021-03-06 14:53:25 +01:00
Zeno Rogue 87cbfaeac3 fixup to threepoint 2021-03-06 11:59:57 +01:00
Zeno Rogue 693ee60fe3 'reset special modes' disables dual geometry 2021-03-06 11:59:32 +01:00
Zeno Rogue 3940f624fd added model: three-point equidistant 2021-03-06 11:54:25 +01:00
Zeno Rogue 250909a6f3 CLI option for vertical shots 2021-03-06 11:48:15 +01:00
Zeno Rogue 0020957906 finalizer struct, and fixed animations breaking 2021-03-06 11:47:54 +01:00
Zeno Rogue ff4d86ee65 rug:: extra variables to report the rug shape 2021-03-06 11:46:57 +01:00
Zeno Rogue 40d450676e more fixes to multiplayer 2021-03-06 11:46:13 +01:00
Zeno Rogue 032a6b6df2 fixed a reverse_direction crash in kd2 2021-03-06 11:07:54 +01:00
Zeno Rogue c8cb6ef230 emptyscreen added to o-key 2021-03-06 11:00:45 +01:00
Zeno Rogue 009e1e2eb4 changemode uses the new dialogkey system 2021-03-06 11:00:36 +01:00
Zeno Rogue 970d65c71a fixed a crash when trying to set some options 2021-03-06 10:45:01 +01:00
Zeno Rogue c1f4c19ea4 improved max_iter_iso, VR settings 2021-02-23 05:38:12 +01:00
Zeno Rogue a8da017676 CLI option -reseed 2021-02-23 05:33:48 +01:00
Zeno Rogue f1ecf0ecac ray:: memory cleanup with fixed map 2021-02-23 05:33:35 +01:00
Zeno Rogue aee985f3d1 notknot:: configurable with 'o', exec, memory cleaning 2021-02-23 05:22:22 +01:00
Zeno Rogue 0f2ff4cf7e notknot:: fixed a bug on regeneration 2021-02-23 05:21:08 +01:00
Zeno Rogue 07fef1c70c regenerate notknot on parameter changes 2021-02-23 04:56:53 +01:00
Zeno Rogue 038d209941 self-hiding knot option 2021-02-23 04:56:23 +01:00
Zeno Rogue cc45b32be1 rogueviz:: fixed the 'vertex shape' option 2021-02-20 15:07:10 +01:00
Zeno Rogue bf0956966a rogueviz:: improved edge placement 2021-02-20 15:06:58 +01:00
Zeno Rogue a2018c6f55 BRM structure 2021-02-20 15:05:38 +01:00
Zeno Rogue 2666fae339 notknot:: configurable parameters 2021-02-19 14:42:39 +01:00
Zeno Rogue 22e7612b7e notknot:: fixed the coloring 2021-02-19 02:37:03 +01:00
Zeno Rogue cf5477f4ae rogueviz:: added notknot 2021-02-18 16:16:34 +01:00
Zeno Rogue 4f0d4b8b4e rogueviz::hypocycloid:: the other hemisphere 2021-02-18 16:16:34 +01:00
Zeno Rogue 16259b66c9 added hooks_record_anim 2021-02-18 16:16:34 +01:00
Zeno Rogue d96f92c0f8 support for portal spaces 2021-02-18 16:16:34 +01:00
Zeno Rogue a634412dcb param_f for panini_alpha 2021-02-18 16:16:34 +01:00
Zeno Rogue 2d03e822e6 params now indexed by parameter_name, not by s 2021-02-18 16:16:34 +01:00
Zeno Rogue cc1cd5655d load_from for bool settings 2021-02-18 16:16:34 +01:00
Zeno Rogue 9499c7f81c ray_exp_decay_poly is param_f 2021-02-18 16:16:34 +01:00
Zeno Rogue ad2ee6d98f an option to generate raycaster map just once 2021-02-18 16:16:34 +01:00
Zeno Rogue e775e7ada0 bringris:: version 1.4 2021-02-18 16:16:34 +01:00
Zeno Rogue cb394e9ea0 rogueviz::hypocycloid:: generalized 2021-02-08 23:07:25 +01:00
Zeno Rogue 90f3c562eb rogueviz:: adjusted for param changes 2021-02-08 23:07:01 +01:00
Zeno Rogue 03a0cc2722 typo fix 2021-02-08 17:13:03 +01:00
Zeno Rogue adec776947 rogueviz:: hypocycloid added 2021-02-08 05:51:30 +01:00
Zeno Rogue 42c6f2774a 11.4f 2021-02-07 22:55:11 +01:00
Zeno Rogue 040310eec4 yet one more CAP_VR guard 2021-02-07 22:55:11 +01:00
Zeno Rogue 7bf88916fd disabled awareness on old MINGW 2021-02-07 22:55:11 +01:00
Zeno Rogue a4373e5328 1 not 1234 2021-02-07 22:55:11 +01:00
Zeno Rogue e4fd468d8d added some missing guards 2021-02-07 22:55:11 +01:00
Zeno Rogue 1307790d46 ray:: fixed on GLSL 2021-02-07 22:55:11 +01:00
Zeno Rogue 6e33333b0c no more need for disabling MINIMIZE_GL_CALLS 2021-02-07 22:55:11 +01:00
Zeno Rogue b744107069 fixed MINIMIZE_GL_CALLS 2021-02-07 22:55:11 +01:00
Zeno Rogue 16a085f253 ray:: maxstep and iter setting for eyes VR 2021-02-07 22:55:11 +01:00
Zeno Rogue a836384f19 vr:: compute_vr_direction function 2021-02-07 22:55:11 +01:00
Zeno Rogue 8ee918c7ee vr:: fixed VR UI pointing if the rectangle is changed 2021-02-07 22:55:11 +01:00
Zeno Rogue ecb01118c1 vr:: changed cscr default to eyes 2021-02-07 22:55:11 +01:00
Zeno Rogue 7a2c56ac58 bringris:: VR pointing to move 2021-02-07 22:55:11 +01:00
Zeno Rogue f0bf2e9975 VR settings, removed reset_vr_ref() 2021-02-07 22:55:11 +01:00
Zeno Rogue ed2039ddee use_equidistant option 2021-02-07 22:55:11 +01:00
Zeno Rogue ee341d77c7 bringris:: flashes option 2021-02-07 22:55:11 +01:00
Zeno Rogue 9844125d78 vr:: emptyscreen() so that VR knows what to do if there is no screen 2021-02-07 22:55:11 +01:00
Zeno Rogue 198decfd64 ray:: vr:: fixed raycaster not recompiling correctly on setting changes 2021-02-07 22:55:11 +01:00
Zeno Rogue b166b64006 added missing guards 2021-02-07 22:55:11 +01:00
Zeno Rogue be44d4d2d6 added missing override 2021-02-07 22:55:11 +01:00
Zeno Rogue a50d51fc70 bringris:: fixed disabling raycaster, fixed explore without raycaster, reset vr ref on enter/leave settings 2021-02-07 22:55:11 +01:00
Zeno Rogue a3a577c2e4 start_game missing in -animvideo 2021-02-07 22:55:11 +01:00
Zeno Rogue d2531aba5e fixed resetGL 2021-02-07 22:55:11 +01:00
Zeno Rogue 9daa95599d fixed sightrange settings 2021-02-07 22:55:11 +01:00
Zeno Rogue 8ed6c72622 removed debug from resolution rework 2021-02-07 22:55:11 +01:00
Zeno Rogue 7c5691a131 vr:: warning and auto-change when using incorrect headset modes in 2D geometries 2021-02-07 22:55:11 +01:00
Zeno Rogue 55faf74d38 bringris:: adapted Bringris to VR 2021-02-07 22:55:11 +01:00
Zeno Rogue de0fc0f452 added missing CAP_VR guard 2021-02-07 22:55:11 +01:00
Zeno Rogue 1da9622c67 generalized VR UI placement 2021-02-07 22:55:11 +01:00
Zeno Rogue dabbf28500 non-editable settings warn when you try to edit them; xres/yres are no longer empty-displayed; fixed some lines 2021-02-07 22:55:11 +01:00
Zeno Rogue a70dcb7cea vr:: down direction in 2.5D/H2xE can be changed 2021-02-07 22:55:11 +01:00
Zeno Rogue 53b541f520 vr:: fixed escaping in product space 2021-02-07 22:55:11 +01:00
Zeno Rogue d061e57d07 VR raycaster NYI for sl2 2021-02-07 22:55:11 +01:00
Zeno Rogue de498da1d1 fixed bugs when switching FPP in E2 torus 2021-02-07 22:55:11 +01:00
Zeno Rogue c57566f9da highlights in special modes 2021-02-07 22:55:11 +01:00
Zeno Rogue 2b2bdbdb54 cylinder/donut view option for the torus 2021-02-07 22:55:11 +01:00
Zeno Rogue 3d306c6aa5 fixed the donut view 2021-02-07 22:55:10 +01:00
Zeno Rogue 51daac745f projection menu improvements 2021-02-07 22:55:10 +01:00
Zeno Rogue 335e2c84cc some fixup? 2021-02-07 22:55:10 +01:00
Zeno Rogue 317e2637ec fixed potential crashes when setting fontsize to a too large value 2021-02-07 22:55:10 +01:00
Zeno Rogue 015f6227fa redone basic graphics settings (vsync, resolution, fullscreen, gl/aa) 2021-02-07 22:55:10 +01:00
Zeno Rogue 50cb77e413 config:: fixed bool_setting::editable and reaction 2021-02-07 22:55:10 +01:00
Zeno Rogue f415c5f9f1 fixed sightrange editing 2021-02-07 22:55:10 +01:00
Zeno Rogue 822be6709f vr:: fixed spinEdge in product spaces 2021-02-07 22:55:10 +01:00
Zeno Rogue c1386d49b7 no in_vr_sphere except in sphere 2021-02-07 22:55:10 +01:00
Zeno Rogue fd67ec2385 vr:: improved performance? 2021-02-07 22:55:10 +01:00
Zeno Rogue db00cf3ae4 vr:: better face_the_player 2021-02-07 22:55:10 +01:00
Zeno Rogue f224b2fc70 improved the wall/floor textures in 3D modes 2021-02-07 22:55:10 +01:00
Zeno Rogue dc20dfe648 moved replace_str to util 2021-02-07 22:55:10 +01:00
Zeno Rogue a3574a2c13 langen:: improved error messages 2021-02-07 22:55:10 +01:00
Zeno Rogue 7c29dd49c8 filename for history band can be changed now 2021-02-07 22:55:10 +01:00
Zeno Rogue 67ff42c37a fixed the game not determining the land correctly for Orb generation purposes in Haunted Woods border, mercury river bridges, and Warped Sea 2021-02-07 22:55:10 +01:00
Zeno Rogue 0c0ca95897 fixed the 4xStabber and Princess achievements 2021-02-07 22:55:10 +01:00
Zeno Rogue e7865a62b4 arcm:: fixed a potential crash 2021-02-07 22:55:10 +01:00
Zeno Rogue cfdf016c5d euclid:: trying to generate wall lines in non-standard Euclidean geometry no longer crashes the game 2021-02-07 22:55:10 +01:00
Zeno Rogue 5c77ffa36c added missing line in language-PL 2021-02-07 22:55:10 +01:00
Zeno Rogue 357e715963 another junk line removed 2021-02-07 22:55:10 +01:00
Zeno Rogue 47576cb68e junk line removed 2021-02-07 22:55:10 +01:00
Zeno Rogue dfd7d2a11a tutorial->tour in CZ and RU 2021-02-07 22:55:10 +01:00
Zeno Rogue 19732ec9cd one more typo fix 2021-02-07 22:55:10 +01:00
Zeno Rogue 25e4308455 typo fixed 2021-02-07 22:55:10 +01:00
Zeno Rogue 7a4478a2d3 fixup to scale=0.5 2021-02-07 22:55:10 +01:00
Zeno Rogue 243ba096e8 sphere:: fixmatrix is now used so that numeric errors do not accumulate 2021-02-07 22:55:10 +01:00
Zeno Rogue e8aa080536 rug:: Clifford torus factored out for other uses 2021-02-07 22:55:10 +01:00
Zeno Rogue c1555c3ffa English grammar fix 2021-02-07 22:55:10 +01:00
Zeno Rogue 00c5f9a626 changed default FPS limit to 999 2021-02-07 22:55:10 +01:00
Zeno Rogue a8c0c8be8e config::arg:: read parameters in format 'scale=0.5' 2021-02-07 22:55:10 +01:00
Zeno Rogue 3ff21b803d config:: reaction is separate 2021-02-07 22:55:10 +01:00
Zeno Rogue 8c5c8f2c19 util:: parseint function 2021-02-07 22:55:10 +01:00
Zeno Rogue 41628cbd1a config:: changed hooks_config to correct hooks_configfile 2021-02-07 22:55:10 +01:00
Zeno Rogue 2f47babf7c added virtual destructor to setting 2021-02-07 22:55:10 +01:00
Zeno Rogue f64ada6572 ray::vr:: Nil in equidistant 2021-02-07 22:55:10 +01:00
Zeno Rogue f9c8a458aa fixup params in vr 2021-02-07 22:55:10 +01:00
Zeno Rogue cb4c18ee94 ray::vr:: equidistant pseudo-ray in product 2021-02-01 21:26:25 +01:00
Zeno Rogue 115f326d5c removed unnecessary extern 2021-02-01 17:15:25 +01:00
Zeno Rogue 81d9fe9e73 config:: menuitem_binary_width 2021-02-01 17:14:28 +01:00
Zeno Rogue 016569bb35 config:: moved sets() to setting:: 2021-02-01 17:06:26 +01:00
Zeno Rogue 4f87697392 int_setting uses min_max_value 2021-02-01 17:00:11 +01:00
Zeno Rogue 839a41370f config:: removed SIDE from find_setting 2021-02-01 15:23:14 +01:00
Zeno Rogue 198b4b118d config:: help_text included in search_key 2021-02-01 15:23:01 +01:00
Zeno Rogue b7a80937f3 pconf/rconf now based on restrict, not on prefix 2021-02-01 15:22:47 +01:00
Zeno Rogue 3860e7a81d remember recent setting changes, and other improvements 2021-02-01 15:10:03 +01:00
Zeno Rogue ea5ee7eefd fixed a crashbug when entering ../ 2021-02-01 13:42:24 +01:00
Zeno Rogue 5bd7dea231 improved help for editable values 2021-02-01 13:42:12 +01:00
Zeno Rogue c2ce2905d7 improved model config 2021-02-01 12:50:02 +01:00
Zeno Rogue 184fb2bf9e reorganized pconf/rconf config 2021-02-01 12:03:55 +01:00
Zeno Rogue b921a5a81b drawing tool and shape editor can now be used with texture mode enabled 2021-02-01 11:45:52 +01:00
Zeno Rogue 9065011437 fixed pointing in sphere orthographic 2021-02-01 11:45:13 +01:00
Zeno Rogue b28270959d ray:: fixed in VR-less compile 2021-02-01 11:21:51 +01:00
Zeno Rogue 6655ca1bc8 CLI option -nilh 2021-02-01 11:21:38 +01:00
Zeno Rogue 5e1b3a2512 nil:: fixed virtualRebase in the other honeycomb 2021-02-01 11:21:19 +01:00
Zeno Rogue 3886b81caa new quick projection menu 2021-02-01 11:20:22 +01:00
Zeno Rogue 31a050b79d vector settings improved 2021-02-01 11:19:20 +01:00
Zeno Rogue 712d01e290 no more capitals in sightrange_style 2021-02-01 03:12:39 +01:00
Zeno Rogue 8ecb229920 more setting improvements 2021-02-01 03:11:15 +01:00
Zeno Rogue b40fc679af renamed addparamsaver to param_type 2021-02-01 01:45:10 +01:00
Zeno Rogue 298c051beb saver enums 2021-02-01 01:35:34 +01:00
Zeno Rogue 044518e18e rewritten 3D settings in the new standard 2021-01-31 20:45:00 +01:00
Zeno Rogue 7fc1ce8b45 changed parameter order in float_setting 2021-01-31 20:44:34 +01:00
Zeno Rogue 3d6e38a321 a system for all settings in one place 2021-01-31 19:55:33 +01:00
Zeno Rogue 0dc00763d5 fixup to screenshot.cpp 2021-01-31 19:06:28 +01:00
Zeno Rogue b28b2cc5c4 moved more settings from config.cpp to shot and racing 2021-01-31 18:53:52 +01:00
Zeno Rogue a59ddc6c31 moved some paramsavers from config to models and history 2021-01-31 18:45:17 +01:00
Zeno Rogue 7d5fb11c26 removed param list, changed addsaver to addparamsaver 2021-01-31 18:34:54 +01:00
Zeno Rogue 4c94cc793c vr:: fixed rconf to rrconf, as it hit a definition 2021-01-31 15:28:36 +01:00
Zeno Rogue 9e9d136c60 ray:: was disabled in VR-less builds 2021-01-31 15:28:14 +01:00
Zeno Rogue a76ef1e8da raycasting in VR equidistant, for isotropic geometries 2021-01-31 15:27:58 +01:00
Zeno Rogue f73bb98a27 fixed unused variable under some settings 2021-01-02 16:58:15 +01:00
Zeno Rogue 992c44c7e6 11.4e 2020-12-31 19:19:19 +01:00
Zeno Rogue d48eb17226 vr:: VR demos added 2020-12-31 19:11:14 +01:00
Zeno Rogue f5ac66513c fixed CAP_VR guards 2020-12-31 19:11:14 +01:00
Zeno Rogue 79bf71ce78 shmup::vr:: shmup/racing controls for vr 2020-12-31 19:11:14 +01:00
Zeno Rogue 726c2fc871 framerate-independent vr aiming 2020-12-31 19:11:14 +01:00
Zeno Rogue a61f094288 vr/rug:: improved 2020-12-31 19:11:14 +01:00
Zeno Rogue 9fc21b67e1 vr:: renamed functions to more accurate names, and fixed pointing in WDIM==2 2020-12-31 19:11:14 +01:00
Zeno Rogue 5ec9f06383 vr:: pointing now works in truesim 2020-12-31 19:11:14 +01:00
Zeno Rogue ca2154e034 vr:: only mdEquidistant resolves to inverse_exp 2020-12-31 19:11:14 +01:00
Zeno Rogue 87d5545428 option -dred to debug drawingtool quickly 2020-12-31 19:11:14 +01:00
Zeno Rogue ecbd0eca83 VR:: -vr-pl option 2020-12-31 19:11:14 +01:00
Zeno Rogue be0309c656 fixed pointing in nonisotropic 2020-12-31 19:11:14 +01:00
Zeno Rogue 22fb9d1c30 vr:: pointing in the rug 2020-12-31 19:11:14 +01:00
Zeno Rogue fc28c4c20a no icons in VR UI 2020-12-31 19:11:14 +01:00
Zeno Rogue 0ffd31e4b4 vr:: you can still click the map while an UI is shown 2020-12-31 19:11:14 +01:00
Zeno Rogue f9740e5ee3 fixed UI location 2020-12-31 19:11:14 +01:00
Zeno Rogue e5a7fc9ab9 in truesim, the shader will not recoordinate H3 to azimuthal equidistant; also fixed distfun 2020-12-31 19:11:14 +01:00
Zeno Rogue 384c5eb2da fixed the value shown in 'reset the reference point' 2020-12-31 19:11:14 +01:00
Zeno Rogue faec8c9df2 vr:: all VR settings are now configurable via VR/projection menu. Also cleanup vr_angle 2020-12-31 19:11:14 +01:00
Zeno Rogue 2835cd522a addparamsaver function 2020-12-31 19:11:14 +01:00
Zeno Rogue cec8a40786 correct equidistant in H3 2020-12-31 19:11:14 +01:00
Zeno Rogue d5fc277531 3D drawing 2020-12-31 19:11:14 +01:00
Zeno Rogue 49f0c248bd some debug removed 2020-12-31 19:11:14 +01:00
Zeno Rogue 0f0c4a5d02 vr:: point to the correct side of the sphere 2020-12-31 19:11:14 +01:00
Zeno Rogue 97d5c91240 vr:: vr_disk used only for WDIM == 2 2020-12-31 19:11:14 +01:00
Zeno Rogue 3186ca3e73 vr:: UI smaller for now 2020-12-31 19:11:14 +01:00
Zeno Rogue cafc265cc6 vr:: controller ray now extend to the correct distance 2020-12-31 19:11:14 +01:00
Zeno Rogue 1b976d364b uniform VR control 2020-12-31 19:11:14 +01:00
Zeno Rogue db46f247c5 fixed a crash in perspective move 2020-12-31 19:11:14 +01:00
Zeno Rogue 4b3b7fead0 vr:: vr_distance correct in 2.5D 2020-12-31 19:11:14 +01:00
Zeno Rogue 9895da1483 indentation fix 2020-12-31 19:11:14 +01:00
Zeno Rogue 9dfa4516ed vr:: implemented eCompScreen::single 2020-12-31 19:11:14 +01:00
Zeno Rogue 1dc2041dab disable aura in vr 2020-12-31 19:11:14 +01:00
Zeno Rogue 8914330eb2 vr:: rearranging render() to remember projection data globally 2020-12-31 19:11:14 +01:00
Zeno Rogue e4e1a856e6 replace vrhr::state checking with nicer functions 2020-12-31 19:11:14 +01:00
Zeno Rogue 483ea3369b precise VR pointing (in 2D; still need to send keys) 2020-12-31 19:11:14 +01:00
Zeno Rogue d73b9f36cd refactored find_on_screen into pointable() and minimize_point_value 2020-12-31 19:11:14 +01:00
Zeno Rogue 0520eb132c vr:: vr move/rotate now changes the reference in eHeadest::model_viewing 2020-12-31 19:11:14 +01:00
Zeno Rogue 2c59aa0e14 precise mouseh in 2.5D 2020-12-31 19:11:14 +01:00
Zeno Rogue 8a63307ed5 moved mouse-line from rug to drawMarkers 2020-12-31 19:11:14 +01:00
Zeno Rogue f7ba6108b2 refactored grid_prec 2020-12-31 19:11:14 +01:00
Zeno Rogue e6ff8c041f pointing in 2D modes 2020-12-31 19:11:14 +01:00
Zeno Rogue 3b6071e9fb cli option dmc 2020-12-31 19:11:13 +01:00
Zeno Rogue 4cd6f84a78 movement commands change the reference in non-perspective 2020-12-31 19:11:13 +01:00
Zeno Rogue 2e0ddd5a48 vr:: correctly rendered 2D sphere 2020-12-31 19:11:13 +01:00
Zeno Rogue 6217ec4702 drawing:: removed hiliteclick debug 2020-12-31 19:11:13 +01:00
Zeno Rogue 391e9e7432 fixed sphereflipped! 2020-12-31 19:11:13 +01:00
Zeno Rogue 60c3f383b9 extra commandline option 2020-12-31 19:11:13 +01:00
Zeno Rogue 11e7ddc8ee Slaying is now marked useful in Eclectic and Brownian 2020-12-31 19:11:13 +01:00
Zeno Rogue 38eb8c5122 disk model in Euclidean and hyperbolic 2020-12-31 19:11:13 +01:00
Zeno Rogue 266e4e43c4 vr:: ... also hyperboloid in spherical 2020-12-31 19:11:13 +01:00
Zeno Rogue 69e121bd16 hemisphere works nicely in Euclidean and spherical 2020-12-31 19:11:13 +01:00
Zeno Rogue f9d65a2e37 added some missing CAP_VR guards, more work on 2D in VR 2020-12-31 19:11:13 +01:00
Zeno Rogue 85ab111abb fixed a rendering bug with band in 3D 2020-12-31 19:11:13 +01:00
Zeno Rogue eb6d186f00 2D models in 3D (WIP) 2020-12-31 19:11:13 +01:00
Zeno Rogue da2042265b try to use VR in 2D geometries too 2020-12-31 19:11:13 +01:00
Zeno Rogue ec70119c3e moved vr_scale_factor and vr_zshift to pconf, and added some new projection parameters for the future 2020-12-31 19:11:13 +01:00
Zeno Rogue 319bd1574f VR in non-perspective models 2020-12-26 23:00:51 +01:00
Zeno Rogue 7e1df6d9a3 additional convenience functions for Euclidean translations and scaling 2020-12-26 22:59:58 +01:00
Zeno Rogue 926ca2808a vr:: works with raycasting 2020-12-26 21:13:32 +01:00
Zeno Rogue f41414a705 ray:: projection is now set via matrix, instead of via five values 2020-12-26 21:12:34 +01:00
Zeno Rogue 9c9afceb41 Princess hug animation 2020-12-26 18:09:09 +01:00
Zeno Rogue f3040d439c fixed potential crashes on Ivy errors 2020-12-26 17:22:32 +01:00
Zeno Rogue c906a2b906 fixed a crash in princess AI 2020-12-26 17:19:45 +01:00
Zeno Rogue 5acdab45d6 fixed a crash bug when collecting an Orb of Safety via Orb of Space with Orb of Impact active 2020-12-26 17:17:05 +01:00
Zeno Rogue 1f5951dbee fixed a crash bug when collecting an Orb of Safety via Orb of Water 2020-12-26 17:16:51 +01:00
Zeno Rogue 0f1c8ec102 create a fake info for an unknown princess 2020-12-26 17:16:22 +01:00
Zeno Rogue a614af8dbe shmup: fixed redundant and incorrect revival of mirror spirits 2020-12-25 06:10:12 +01:00
Zeno Rogue 1612b767b3 shmup:: parent-child relation is now based on ref counting 2020-12-25 06:09:36 +01:00
Zeno Rogue 68ab6fedc6 fixed a bug when moving animation with m.s == m.t 2020-12-25 06:08:19 +01:00
Zeno Rogue 2a0ef4f30b fixed a crash in princess AI when pathq is empty 2020-12-25 06:07:58 +01:00
Zeno Rogue fd715d4057 fixed the default value for FoV 2020-12-25 06:07:42 +01:00
Zeno Rogue e13172f9ab fixed crashes caused by missing rev_dir 2020-12-25 06:07:30 +01:00
Zeno Rogue f2e9b371ff fixed counting from -1 in batsAfraid (not sure why it was like that?) 2020-12-25 06:06:43 +01:00
Zeno Rogue f664e8fbce hassert: implemented without println 2020-12-25 06:06:09 +01:00
Zeno Rogue 3addade4c6 Princess is now able to open gates in order to reach the player 2020-12-25 00:06:04 +01:00
Zeno Rogue 002c1ae7e9 fixed the Princess AI to use pathdist not cpdist 2020-12-25 00:05:33 +01:00
Zeno Rogue 48e8d15042 refactored toggle_radius as a separate function 2020-12-25 00:04:05 +01:00
Zeno Rogue 075d9002c2 fixed hassert 2020-12-25 00:03:27 +01:00
Zeno Rogue b48defb5f1 bringris:: -dpl option to change draw_per_level 2020-12-24 23:03:10 +01:00
Zeno Rogue d3ae28730e improved the piece set for HDUAL 2020-12-24 23:01:49 +01:00
Zeno Rogue 146e911eef bringris: animation function 2020-12-24 23:01:02 +01:00
Zeno Rogue 7c9bfc7719 adjust_animation as a separate function 2020-12-24 22:59:44 +01:00
Zeno Rogue 7c2f343960 no readFboId on GLES 2020-12-24 22:58:55 +01:00
Zeno Rogue 9ef2f96413 glhr fixup 2020-12-24 22:19:26 +01:00
Zeno Rogue 1b8b2f4c1e fixed a bug in notDippingFor 2020-12-24 06:07:14 +01:00
Zeno Rogue 96f84c77ca random_spin3 is now a separate function 2020-12-23 23:42:09 +01:00
Zeno Rogue 782859f93b rug texture is disabled only if levellines && disable_texture 2020-12-23 23:41:41 +01:00
Zeno Rogue 47c54e8660 textured_vertex now has the Z coordinate so that the rug works correctly in web 2020-12-23 23:41:22 +01:00
Zeno Rogue 6392f97bfc fixed setting the default value in addsaverenum without CAP_CONFIG 2020-12-23 23:40:15 +01:00
Zeno Rogue 6eaae5c206 fixed 3D perspective rendering without CAP_VR 2020-12-06 20:48:03 +01:00
Zeno Rogue 479b5f5db0 fixed tes floorshape 2020-11-27 02:05:11 +01:00
Zeno Rogue b0d60f42f9 11.4d 2020-11-22 20:00:43 +01:00
Zeno Rogue cd9b8d57ab fixed reference/equidistant in nonisotropic 2020-11-22 20:00:43 +01:00
Zeno Rogue ffcda7f602 vr:: fixes to spinEdge 2020-11-22 20:00:43 +01:00
Zeno Rogue 7e3ecab8ed vr:: two new actions 2020-11-22 17:58:40 +01:00
Zeno Rogue 60a037265f vr:: disabled for mac for now, works correctly in mingw64 2020-11-22 17:58:40 +01:00
Zeno Rogue 29c1676c75 vr:: changed the default settings 2020-11-22 17:58:40 +01:00
Zeno Rogue 0de8ce9a10 initial implementation of VR 2020-11-22 17:58:40 +01:00
Zeno Rogue 4444fa6bf1 floor textures:: scratches 2020-11-22 17:57:03 +01:00
Zeno Rogue 828753cede detailed shader debug 2020-11-22 17:57:03 +01:00
Zeno Rogue 162d298927 rogueviz::presentation::draw_texture now ignores vid.fsize when inHighQual 2020-11-22 17:56:57 +01:00
Zeno Rogue ef3170dce7 removed the old VR preparation 2020-11-19 18:19:17 +01:00
Zeno Rogue deae12dea6 an attempt to set DPI awareness on Windows 2020-11-19 18:18:24 +01:00
Zeno Rogue 72b7cffcaf do not use Panini while panini off 2020-11-19 18:17:49 +01:00
Zeno Rogue 665d52eeae 11.4c 2020-11-19 18:16:59 +01:00
Zeno Rogue 3564522393 changed the formatting of unlock rules which allow alternatives 2020-11-14 15:08:16 +01:00
Zeno Rogue 35a502ae9a the rotation fix did not work in SL2 2020-11-14 15:04:52 +01:00
Zeno Rogue bc102b000d fixed camera not rotating in Nil shmup 2020-11-14 14:43:14 +01:00
Zeno Rogue c9fc591e9d fixed the problem in nonisotropic shmup 2020-11-14 14:38:57 +01:00
Zeno Rogue 1cefbd2ffa anim:: record animation of another content 2020-11-14 14:18:57 +01:00
Zeno Rogue 1ad581b9a8 hybrid:: in PURE, one type is sufficient -- important in GLES 2020-11-14 14:18:08 +01:00
Zeno Rogue 9b1a34d4ec fixed freeze on binary tiling X R 2020-11-14 14:17:03 +01:00
Zeno Rogue a1beb28437 ray:: better choosing whether to use multi-cell-type or single-cell-type raycaster; GMS array now starts small and grows as needed 2020-11-14 13:53:19 +01:00
Zeno Rogue d74fc8ddad fixed the graphics in horosphere tilings 2020-11-14 13:31:44 +01:00
Zeno Rogue 8a5d4db2c3 shot:: default_screenshot_content now calls gamescreen, which correctly renders multi-game and some other things 2020-11-14 13:17:55 +01:00
Zeno Rogue 62b6b4ec3b rug:: do not draw the mouseline in screenshot 2020-11-14 13:16:29 +01:00
Zeno Rogue f35a09a885 anims:: improved rollback 2020-11-14 13:11:01 +01:00
Zeno Rogue 3082b88139 Panini setting resets all shaders, not only raycaster 2020-11-14 12:52:49 +01:00
Zeno Rogue 73cc3c549f fixup: Panini is available in any PERS3 (including rug, excluding box) 2020-11-14 12:52:08 +01:00
Zeno Rogue 54cb73e0fd 11.4b 2020-11-10 15:41:05 +01:00
Zeno Rogue 56164ab172 zoom_or_fov takes panini limits into account 2020-11-08 12:43:07 +01:00
Zeno Rogue d7351d169a fixed some pconf/vpconf bugs 2020-11-08 12:09:42 +01:00
Zeno Rogue 32a61367b0 fixed actual_view_transform to just use inverse 2020-11-08 11:55:08 +01:00
Zeno Rogue 5606007259 fixed SLR graphical duplication needlessly called outside of SLR 2020-11-08 11:54:48 +01:00
Zeno Rogue 5312459d16 fixed SLR graphical duplication needlessly called outside of SLR 2020-11-08 11:51:36 +01:00
Zeno Rogue 71e8f84cec using GLWRAP 2020-11-08 11:49:19 +01:00
Zeno Rogue 4373c03823 GLWRAP for debugging GL errors 2020-11-08 11:48:36 +01:00
Zeno Rogue b3db152ee6 fixed a crash without OpenGL 2020-11-07 19:26:11 +01:00
Zeno Rogue b6202f5443 fixed a bug introduced by removal of unordered_map 2020-11-07 16:12:54 +01:00
Zeno Rogue 0cdd73c24d in 3D config, automatic TPP/FPP now appears on top, as you usually want this, not 'use 3D models' 2020-11-07 15:47:19 +01:00
Zeno Rogue f0a98bbc55 fixed the positioning in TPP 2020-11-07 15:43:09 +01:00
Zeno Rogue 1198c4467c fixed projections other than perspective not working in 2.5D 2020-11-07 15:06:45 +01:00
Zeno Rogue f57229134c fixed unstable camera problems (actual_view_transform needs iso_inverse not ortho_inverse) 2020-11-07 15:05:27 +01:00
Zeno Rogue 17c39c3ca2 missing guards in menuitem_*_volume, also no change of music volume when no music_available 2020-11-06 16:11:19 +01:00
Zeno Rogue 3b7295c26a fixed merge 2020-11-06 15:43:18 +01:00
Zeno Rogue 971b002caf
Merge pull request #134 from still-flow/fix_hyperroid
Fix hyperroid builds
2020-11-06 15:42:04 +01:00
Zeno Rogue 28383c94e0
Merge branch 'master' into fix_hyperroid 2020-11-06 15:40:59 +01:00
Zeno Rogue 76618db2e6
Merge pull request #138 from still-flow/bringris_music
Add background music volume controller to Bringris
2020-11-06 11:18:58 +01:00
still-flow 2319dce683 refactor sound-related settings
also only show music volume setting when music is available
2020-11-06 06:21:02 +03:00
still-flow 41952afdcd add missing natchar for CAP_TRANS=0 case 2020-11-06 06:21:02 +03:00
Zeno Rogue b1cb66e468
Merge pull request #129 from Quuxplusone/unordered-map
Remove USE_UNORDERED_MAP because it has bit-rotted.
2020-11-05 20:03:13 +01:00
Zeno Rogue 67af738cd6 11.4a 2020-11-05 18:53:37 +01:00
Zeno Rogue 358d94f020 fixed camera-rotated aura for stretch 2020-11-05 18:26:37 +01:00
Zeno Rogue 14555bf1b4 fixed the aura when camera angle changed 2020-11-05 16:26:50 +01:00
Zeno Rogue 72a451b139 fixed selecting large regions for copying with mouse 2020-11-05 16:05:06 +01:00
Zeno Rogue ce33511905 messages at 30 treasures etc. should no longer appear in PTM 2020-11-05 16:00:41 +01:00
Zeno Rogue 37a18eafd8 fixed a bug which allowed change range 2020-11-05 15:24:58 +01:00
Zeno Rogue 67b7e854b9 fixed dog drawing in kill list 2020-11-05 15:18:52 +01:00
Zeno Rogue d80becb63b the color dialog now shows full hex color 2020-11-05 15:15:33 +01:00
Zeno Rogue 80ab04de36 Orb of the Mind now actually kills reptiles 2020-11-05 15:12:50 +01:00
Zeno Rogue 42eec2a90f Orb of Chaos is now forbidden in the Princess Quest 2020-11-05 15:10:00 +01:00
Zeno Rogue 1da4ce95d9 highlight mode setting should be saved now 2020-11-05 15:08:56 +01:00
Zeno Rogue 215ed1f338 friends prefer to attack hedgehog warriors/pikemen, rather than making other moves 2020-11-05 15:07:13 +01:00
Zeno Rogue 771fe3458d improved Golem pathfinding 2020-11-05 15:02:47 +01:00
Zeno Rogue a6edbe3378 fixed some bugs with push 2020-11-05 14:46:09 +01:00
Zeno Rogue 63f895974e improved the checkmove.cpp, also works for golems now 2020-11-05 14:24:01 +01:00
still-flow e3709cf0ce add Android CI
- test building
    - run in emulator and grab a screenshot
    - update gradle-wrapper
    - add gradle-wrapper.jar validation
2020-11-03 03:17:05 +03:00
Zeno Rogue 2e236be695 bringris fix 2020-11-02 17:00:40 +01:00
Zeno Rogue 7d13a593e9 rogueviz:subquotient:: removed a C++17-ism 2020-11-02 11:48:22 +01:00
Zeno Rogue 9b6d78b7ed 11.4 2020-11-02 11:47:57 +01:00
Zeno Rogue c88827c09f panini: fix shader-primitvie cooperation 2020-11-01 21:39:18 +01:00
Zeno Rogue fd9fb83540 panini: frustum_culling disabling done nicely 2020-11-01 21:38:45 +01:00
Zeno Rogue 3288eb0c5a panini: max_fov_angle() now just returns 360 if panini_alpha is out of range 2020-11-01 21:37:59 +01:00
Zeno Rogue 6513b3a87e Panini projection 2020-11-01 21:20:54 +01:00
Zeno Rogue 2cc06e39ba changed the default texture_step to 4 2020-11-01 21:16:08 +01:00
Zeno Rogue dcd9345fd8 starbattle:: no panning in dialog 2020-11-01 20:23:37 +01:00
Zeno Rogue 00f900a04c gamescreen should now be able to draw multiple screens in screenshot 2020-11-01 20:23:14 +01:00
Zeno Rogue 5dbb15edda fixed undefined behavior 2020-11-01 20:20:59 +01:00
Zeno Rogue 1425256ef4 shift available also in s2xe 2020-11-01 20:10:23 +01:00
Zeno Rogue 8c4b700466 show_hyperboloid_flat option 2020-11-01 20:10:08 +01:00
Zeno Rogue 4362f06b0b MINIMIZE_GL_CALLS in bringris 2020-11-01 19:59:21 +01:00
Zeno Rogue 342ac0805f heptagon S3>4 in quotient 2020-11-01 19:57:58 +01:00
Zeno Rogue 96d28d173a MXDIM, and some extra comments 2020-11-01 17:37:51 +01:00
Zeno Rogue 50474abae1 Bringris 1.3 2020-11-01 11:36:02 +01:00
Zeno Rogue 9f5da212a7 no SOLV in BWEB 2020-11-01 11:34:00 +01:00
Zeno Rogue a1742d29ba rogueviz:: added subquotient space generator 2020-11-01 11:33:36 +01:00
Zeno Rogue bbc124e33c export symmask 2020-11-01 11:33:25 +01:00
Zeno Rogue 785b1aa748 arb fixup 2020-11-01 11:32:22 +01:00
Zeno Rogue a0574d159f support for quotient spaces with S3 > 4 2020-11-01 11:32:12 +01:00
Zeno Rogue c828934f89 arb:: improved plain floor shapes 2020-11-01 11:30:55 +01:00
Zeno Rogue 2ccd0fab9c do not save OSM if not CAP_INV 2020-11-01 11:30:31 +01:00
Zeno Rogue 61c3939cb7 fixed clearfrom if a heptagon is adjacent to itself 2020-11-01 11:30:03 +01:00
Zeno Rogue a52d103334 bringris:: no save in Web for now 2020-10-26 20:05:37 +01:00
Zeno Rogue d7ef4fa77d back button in config 2020-10-26 20:05:04 +01:00
Zeno Rogue 2892603f70 bringris:: fix menu keys 2020-10-26 19:53:35 +01:00
Zeno Rogue f7fdb6fa1b bringris:: do not save hr::geometry as it is buggy 2020-10-26 19:53:27 +01:00
Zeno Rogue c0637bc1a2 bringris:: fixed wall darkening in non-ray 2020-10-26 19:53:16 +01:00
Zeno Rogue 1367278a5b bringris 1.2 2020-10-26 19:38:19 +01:00
Zeno Rogue 2465a4d81c bringris:: fixed typo 2020-10-26 19:38:15 +01:00
Zeno Rogue 201990aca0 a bit larger bounded well 2020-10-26 19:38:07 +01:00
Zeno Rogue d037aa0fef bringris:: added get_center 2020-10-26 19:37:58 +01:00
Zeno Rogue 6f8b986d67 fixed disappear to stop at the correct level 2020-10-26 19:37:42 +01:00
Zeno Rogue 49650ee691 fixed max_cells computation 2020-10-26 19:37:34 +01:00
Zeno Rogue 9c376539c4 rotate_block does not rotate if forbidden 2020-10-26 19:37:22 +01:00
Zeno Rogue c836733ba3 missing CAP 2020-10-26 19:37:05 +01:00
Zeno Rogue 8c53ce662b fix typo 2020-10-26 19:34:40 +01:00
Zeno Rogue 78aa8dcd69 bringris:: fixed mouse control 2020-10-26 19:17:51 +01:00
Zeno Rogue ca7210081f better matrix handling 2020-10-26 19:17:38 +01:00
Zeno Rogue 4e3a611168 bringris:: set ray::max_cells 2020-10-26 17:48:19 +01:00
Zeno Rogue e7ba5e1875 no more keys when paused 2020-10-26 17:48:03 +01:00
Zeno Rogue 452cad82cc fixed/removed debug 2020-10-26 17:47:48 +01:00
Zeno Rogue 69e72db9a8 bringris:: visual configuration 2020-10-26 17:46:10 +01:00
Zeno Rogue d11825021a play sound if rotation not allowed 2020-10-26 12:04:08 +01:00
Zeno Rogue b409091e29 bringris:: configuration 2020-10-26 12:03:59 +01:00
Zeno Rogue bcbe154b3a ray:: fix matrix in h2xe 2020-10-26 12:02:24 +01:00
Zeno Rogue 77d16fdc3d change caption for key config 2020-10-26 12:01:33 +01:00
Zeno Rogue bb00e47ce5 do not create a new model in generate_floorshapes() bitrunc 2020-10-26 12:00:28 +01:00
Zeno Rogue a225ace0d0 fixed Asonov creation 2020-10-26 11:59:27 +01:00
Zeno Rogue 8ce684d628 removing and changing defaults in savers 2020-10-26 11:51:39 +01:00
Zeno Rogue 87918fcb4b bringris:: abstracted enable_bgeom 2020-10-26 11:50:10 +01:00
Zeno Rogue b49e0eb6e7 bringris:: new geometries 2020-10-26 10:54:11 +01:00
Arthur O'Dwyer d163a01b8a Remove USE_UNORDERED_MAP because it has bit-rotted.
Trying to compile with `-DUSE_UNORDERED_MAP` produces lots of compiler errors
like these, because of missing `std::hash` specializations.
Also, `#define unordered_map map` is just evil!

```
./nonisotropic.cpp:875:36: note: in instantiation of template class 'std::__1::unordered_map<hr::nilv::mvec, hr::heptagon *,
      std::__1::hash<hr::nilv::mvec>, std::__1::equal_to<hr::nilv::mvec>, std::__1::allocator<std::__1::pair<const hr::nilv::mvec, hr::heptagon
      *> > >' requested here
    unordered_map<mvec, heptagon*> at;
                                   ^

./nonisotropic.cpp:239:58: note: in instantiation of template class 'std::__1::unordered_map<std::__1::pair<hr::heptagon *, hr::heptagon *>,
      hr::heptagon *, std::__1::hash<std::__1::pair<hr::heptagon *, hr::heptagon *> >, std::__1::equal_to<std::__1::pair<hr::heptagon *,
      hr::heptagon *> >, std::__1::allocator<std::__1::pair<const std::__1::pair<hr::heptagon *, hr::heptagon *>, hr::heptagon *> > >'
      requested here
    unordered_map<pair<heptagon*, heptagon*>, heptagon*> at;
                                                         ^

./nonisotropic.cpp:457:49: error: no matching member function for call to 'iadj'
      while(h1->distance < h2->distance) back = iadj(h2, down) * back, h2 = h2->cmove(down);
                                                ^~~~
cell.cpp:42:15: note: candidate function not viable: no known conversion from 'hr::sn::hrmap_solnih' to 'hr::hrmap' for object argument
  transmatrix iadj(heptagon *h, int d) {
              ^
cell.cpp:41:22: note: candidate function not viable: no known conversion from 'hr::sn::hrmap_solnih' to 'hr::hrmap' for object argument
  struct transmatrix iadj(cell *c, int i) { cell *c1 = c->cmove(i); return adj(c1, c->c.spin(i)); }
                     ^
```
2020-10-19 13:15:29 -04:00
Zeno Rogue c302aafebd bringris order change fix 2020-10-18 15:04:58 +02:00
Zeno Rogue c1aa16b160 fixup 2020-10-18 14:49:32 +02:00
Zeno Rogue 8bf9b5f906 fixed EX max_iter_iso 2020-10-18 14:48:35 +02:00
Zeno Rogue 342c1d91ca Bringris update 2020-10-18 14:48:21 +02:00
Zeno Rogue 1890381c0e ray:: changed #if to #ifdef 2020-10-18 14:38:21 +02:00
Zeno Rogue 9f14389489 fixed cgi_string in product 2020-10-18 14:37:55 +02:00
still-flow 0d174064cf mend merge confglict w/ master 2020-10-15 22:43:37 +03:00
still-flow 8274448de8 replace rug::move_forward call 2020-10-15 22:17:00 +03:00
Zeno Rogue 3b60420968 bringris 2020-10-15 16:39:21 +02:00
Zeno Rogue 8a14faa1d0 better debug in renderbuffer 2020-10-15 16:39:05 +02:00
Zeno Rogue ade824e97c ray:: partially works in web 2020-10-15 16:37:43 +02:00
Zeno Rogue 052854ec74 hyperweb:: auto-resizing 2020-10-15 16:35:44 +02:00
Zeno Rogue e881f3b8cb parser:: edgelen value 2020-10-15 16:34:07 +02:00
Zeno Rogue d64c5e338c extra guards 2020-10-15 16:33:52 +02:00
still-flow 9f2f1ba536 force shader re-creation 2020-10-15 00:16:31 +03:00
Zeno Rogue 76462aa1e7 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2020-10-12 01:29:25 +02:00
Zeno Rogue 35d26d1595 mymake now works with Emscripten 2020-10-12 01:28:50 +02:00
Zeno Rogue 9a2b464778 CLI option: -hroll (reroll hrand) 2020-10-12 01:26:17 +02:00
still-flow c4f105e148 pushd, popd -> cd 2020-10-08 22:21:34 +03:00
Zeno Rogue b74509c95a Five new projections: Poor Man (hyperbolic only), Panini, retroazimuthal: Craig, Hammer, Littrow (retro-Hammer buggy on sphere) 2020-10-08 18:22:28 +02:00
still-flow 273282682a update README 2020-10-07 21:35:22 +03:00
still-flow 4b11eac0ff chmod u+x gradlew 2020-10-07 00:36:16 +03:00
Zeno Rogue 34dc8fcc6e various fixes related to product spaces, especially product+inverse 2020-10-06 21:11:27 +02:00
Zeno Rogue 95f65fa965 bandshift now usable in product 2020-10-06 21:10:18 +02:00
Zeno Rogue 388b4e1667 det now uses MDIM not GDIM 2020-10-06 21:09:03 +02:00
Zeno Rogue 311ee10cf1 field distance is known only in PURE and BITRUNCATED 2020-10-06 21:08:06 +02:00
Zeno Rogue f5eff4e225 fixed the dialog navigation keys 2020-10-06 21:07:34 +02:00
Zeno Rogue f2fcbf4b81 go back is now BACKSPACE in Web, except number/string dialogs 2020-10-06 21:07:12 +02:00
still-flow c114ea1b1d update copy.sh to use Makefile.simple 2020-10-05 22:15:38 +03:00
still-flow a8691f0d8e fix hyperroid builds
- add cap guards where necessary
- adapt to new `shiftpoint` datatype and function interfaces thereof
2020-10-05 21:48:56 +03:00
Zeno Rogue 872301c7cf
Merge pull request #115 from still-flow/mymake_mingw64
Attempt to convince mymake to work on MinGW
2020-09-25 13:03:32 +02:00
still-flow d924b84c1d
make gdb backtraces explicit
mark them as red checks for convenience
2020-09-25 04:05:12 +03:00
still-flow 253061a4fd stop ignoring return values of some calls 2020-09-24 21:48:46 +03:00
still-flow f1dab56bab try supporting MinGW64 in mymake 2020-09-24 20:56:29 +03:00
Zeno Rogue b991b1ae85
Merge pull request #128 from still-flow/ci_mymake
Improve CI configuration in various ways
2020-09-24 12:58:07 +02:00
still-flow b2c741117d improve CI cfg in various ways:
- prettier-looking step names
- add win-mymake build matrix entry
- fix exit commands
- change the way envvars are set up
- other minor changes
- use gdb on win-mymake builds to catch backtraces (temporarily)
2020-09-24 01:27:47 +03:00
Zeno Rogue eb6cae8810 fixed crash on initialization of monster() 2020-09-23 22:02:22 +02:00
Zeno Rogue bb6c2e8f04 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2020-09-23 18:53:18 +02:00
Zeno Rogue 79c1493141 fixed the initialization of ringcolor 2020-09-23 18:53:06 +02:00
Zeno Rogue d6519a0a5f
Merge pull request #127 from still-flow/patch-1
Fix some Github CI red checks
2020-09-23 18:44:42 +02:00
Zeno Rogue b1f4f92f2c added CAP_VIDEO guards 2020-09-23 18:42:47 +02:00
Zeno Rogue 1422d97071 export hide-hud 2020-09-23 14:56:45 +02:00
Zeno Rogue a0a63990e2 in Werner hyperbolic don't draw the auto-boundary 2020-09-23 14:56:26 +02:00
Zeno Rogue b6450fc5bc 'go back' on web is now Backspace, not ESC 2020-09-23 14:53:24 +02:00
Zeno Rogue b50c32e775 starbattle:: undo, lines have fixed colors, nicer lines, and other minor improvements 2020-09-23 14:53:10 +02:00
still-flow efc2766849 move to setup-msys2 action
much less clunky config as a bonus
2020-09-22 23:48:27 +03:00
still-flow 4970b6af25 add -fPIC opt to CXXFLAGS across the board 2020-09-22 22:29:01 +03:00
still-flow 6327e766d9
set cpp std to c++17 for rogueviz CI builds
related to #117
2020-09-22 19:57:36 +03:00
Zeno Rogue 626999525e starbattle:: fixed drawplayer 2020-09-22 17:18:00 +02:00
Zeno Rogue 832733502c added starbattle to rogueviz 2020-09-22 16:53:07 +02:00
Zeno Rogue 70d92bb157 simplified ggpushxto0 2020-09-22 15:51:37 +02:00
Zeno Rogue f4a596ed87 gp::INVERSE:: relative_matrix now works correctly 2020-09-22 15:51:15 +02:00
Zeno Rogue 1ab72ba964 fixed duals for Euclidean tessellations 2020-09-22 15:50:57 +02:00
Zeno Rogue f41ce7c42a changed the WEB size so that the sidemenu is used by default 2020-09-22 15:50:38 +02:00
Zeno Rogue b09b2375bc 11.3z1 2020-09-21 12:59:05 +02:00
Zeno Rogue 4aeb4e6287 fixed the issues with Orb of Yendor 2020-09-21 12:04:50 +02:00
Zeno Rogue 7cc9e146cb enabled CAP_EDIT in ISWEB 2020-09-21 12:04:23 +02:00
Zeno Rogue 78757f4017 ray:: fixed export of exp_decay_exp and exp_decay_poly 2020-09-21 12:04:10 +02:00
Zeno Rogue fdcba734c9 fixed direct_exp in S2xE 2020-09-21 12:03:32 +02:00
Zeno Rogue 4ce821bf7a fixed Friendly Ghosts 2020-09-21 12:03:19 +02:00
Zeno Rogue a0865998db mapeditor now saves/loads file online 2020-09-21 12:02:23 +02:00
Zeno Rogue 9f1762f0c1 mapstream:: export saveMap, loadMap, and a hook for special saving/loading 2020-09-21 12:02:07 +02:00
Zeno Rogue 3e66b520ba draw editor:: dt_finish 2020-09-21 12:01:22 +02:00
Zeno Rogue d87287c155 web:: offer_download and offer_choose_file 2020-09-21 12:00:52 +02:00
Zeno Rogue abde8f049c fixed precise_mouseover on sphere 2020-09-21 12:00:25 +02:00
Zeno Rogue e3a45b0141 11.3z 2020-09-17 04:37:57 +02:00
Zeno Rogue c4ca0840be no more crash when view by negative distance 2020-09-17 04:37:16 +02:00
Zeno Rogue b72414ae2a halloween: dragons only in sphere 2020-09-17 04:36:36 +02:00
Zeno Rogue 68fa0c83e7 fixed Halloween 2020-09-17 04:35:49 +02:00
Zeno Rogue a5db74a8b8 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2020-09-17 01:55:28 +02:00
Zeno Rogue b20058215f changed C0 to C02 to fix a crash on initialization 2020-09-17 01:55:22 +02:00
Zeno Rogue 2425c33403
Merge pull request #117 from still-flow/master
Proposal to add Github CI
2020-09-17 00:02:34 +02:00
Zeno Rogue 32ced09b18 fixed unused variable 2020-09-16 23:52:30 +02:00
Zeno Rogue d35cac293f
Merge pull request #121 from still-flow/mymake_paral3
Add parallel compilation to mymake
2020-09-16 23:50:50 +02:00
Zeno Rogue ff7549ccd2 improved Key generation in Land of Mirrors 2020-09-16 23:49:17 +02:00
Zeno Rogue b37d7b9808 camera_speed and camera_rot_speed configurable from menu, also they work where they should now 2020-09-16 23:49:17 +02:00
Zeno Rogue 5aaa7f2b27 orb of domination X is no longer huge 2020-09-16 23:49:17 +02:00
Zeno Rogue 2aec7b7691 improved correctness checking for Archimedean symbols: 6,5 or 6,4,2 are no longer valid 2020-09-16 23:49:17 +02:00
Zeno Rogue 9e06993bb4 fixed Yendor/Grail collection benefit help message in OSM 2020-09-16 23:49:17 +02:00
Zeno Rogue f02170ba28 Mirror Spirits now face the original player 2020-09-16 23:49:17 +02:00
Zeno Rogue 9b9e7ccaf2 fixed errors with mirrors walls: monsters face the player correctly; mimics in mirrors display their X-signs correctly; player in mirror displays their X sign while previously they did not 2020-09-16 23:49:17 +02:00
Zeno Rogue b17cfbe4bc Goldberg linepatterns now available in INVERSE 2020-09-16 23:49:17 +02:00
Zeno Rogue dd113c0f46 chessboard pattern in unrectified {4,n} tilings 2020-09-16 23:49:17 +02:00
Zeno Rogue 722ba41799 fixed variation selector 2020-09-16 23:49:17 +02:00
Zeno Rogue ee41a777d2 z_inverse does iso_inverse in iso spaces 2020-09-16 23:49:17 +02:00
Zeno Rogue b8abcf6c11 iso_inverse for nil 2020-09-16 23:49:17 +02:00
Zeno Rogue 9aae9112bc set model parameters from CLI 2020-09-16 23:49:17 +02:00
Zeno Rogue 54e33f9151 save extra model parameters 2020-09-16 23:49:17 +02:00
Zeno Rogue 0f0c342ffa used winkel parameter 2020-09-16 23:49:17 +02:00
Zeno Rogue 24c557b5d2 fixed loximuthal parameter 2020-09-16 23:49:17 +02:00
Zeno Rogue 4d71857d7b fixed missing miller config 2020-09-16 23:49:17 +02:00
Zeno Rogue 11b1f6dfb0 down arrow in menus now works opposite to the up arrow (rolls around) 2020-09-16 23:49:17 +02:00
Zeno Rogue c6ed4ea736 fixed broken models with orientation change 2020-09-16 23:49:17 +02:00
Zeno Rogue 9a8d386422 fixed broken_projection with tinf 2020-09-16 23:49:17 +02:00
Zeno Rogue 5f33d6b51b drawing:: broken_projection as a separate function 2020-09-16 23:49:17 +02:00
Zeno Rogue f7a3a80f85 issues with racing (e.g. in band model) should be fixed 2020-09-16 23:49:17 +02:00
Zeno Rogue e26f8f5a5b optimized inverses 2020-09-16 23:49:17 +02:00
Zeno Rogue cea3da31fc separated highlight 2020-09-16 23:49:17 +02:00
Zeno Rogue e74eeca2c3 the 'copy' button in the Map Editor works with the mouse now 2020-09-16 23:49:17 +02:00
Zeno Rogue f95ef3973e fixed Free Wall unlock requirements in OSM 2020-09-16 23:49:17 +02:00
Zeno Rogue 02940f0276 rv::pentaroll:: improved 2020-09-16 23:49:17 +02:00
Zeno Rogue 5b280f4198 rv::presentation:: fixed draw_texture, added clearMessages 2020-09-16 23:49:17 +02:00
Zeno Rogue 3260a635a8 fixed base_x and base_y 2020-09-16 23:49:17 +02:00
Zeno Rogue b782452a4a push Statue/Fire with Orb of Winter 2020-09-16 23:49:17 +02:00
Zeno Rogue 313204f732 added Piotr Grochowski to credits 2020-09-16 23:49:17 +02:00
Zeno Rogue 0e20afe918 fixed a potential crash when calling fieldval in some geometries 2020-09-16 23:49:17 +02:00
Zeno Rogue 2e47adef1c new projections based on cartography 2020-09-16 23:49:17 +02:00
Zeno Rogue a6482d00ab no title displayed with tour::NOTITLE flag 2020-09-16 23:49:17 +02:00
Zeno Rogue c11e552318 an option to disable drawing centerover 2020-09-16 23:49:13 +02:00
Zeno Rogue c5f9005405 fixed equidistant/equiarea projections in S2 2020-09-15 19:13:24 +02:00
Zeno Rogue a215ab462a rug::mouse_control_rug flag 2020-09-15 19:12:54 +02:00
Zeno Rogue 40b91f6d36 camera_speed and camera_rot_speed 2020-09-15 19:12:25 +02:00
Zeno Rogue ea6a44ce1b generalized the slide backup template 2020-09-15 19:11:29 +02:00
Zeno Rogue a8ac3b2ff7 tour:: an option to print 2020-09-15 19:11:19 +02:00
Zeno Rogue e3ed7a3bb3 yet another fix 2020-09-13 15:38:41 +02:00
Zeno Rogue 8daae8a1ed fixed a bug with SHDIM==3 2020-09-13 14:22:13 +02:00
Zeno Rogue 910775a25d rvtour:: finished changing rvtour to pres 2020-09-13 06:32:18 +02:00
Zeno Rogue 1937659a03 rogueviz:: added pentaroll 2020-09-11 11:48:46 +02:00
Zeno Rogue 1789ad1a33 improved presentation support in RogueViz 2020-09-11 11:48:27 +02:00
Zeno Rogue 3eb576e309 a fix in rogueviz 2020-09-11 11:41:09 +02:00
Zeno Rogue 37495105a5 removed incorrect optimization in 3D graphics 2020-09-11 11:29:14 +02:00
Zeno Rogue 6a5a06c622 fixed the graphics in OINF 2020-09-11 11:22:26 +02:00
Zeno Rogue 804e426c2a nicer support for multiple slideshows 2020-09-11 11:21:52 +02:00
Zeno Rogue 9cc4d74da0 tour:: call pmStartAll for all slides at start 2020-09-11 11:21:21 +02:00
Zeno Rogue c816137f8b tour:: slide_restore_all() on pmStop 2020-09-11 11:19:19 +02:00
Zeno Rogue 3311809e01 fixed a possible crash with airbuf missing 2020-09-11 11:18:51 +02:00
Zeno Rogue d9e6b254cc has_orientation only in hyperbolic mdHorocyclic 2020-09-11 11:18:25 +02:00
Zeno Rogue 2f18e0dd32 atscreenpos for mdHorocyclic 2020-09-11 11:18:02 +02:00
Zeno Rogue 275e6b369d more general textures 2020-09-11 11:17:48 +02:00
Zeno Rogue db646aba5d hook deletion 2020-09-11 11:17:12 +02:00
Zeno Rogue acc9b40431 no_find_player option 2020-09-11 11:16:59 +02:00
Zeno Rogue 724729962b export euc::get_at 2020-09-11 11:16:49 +02:00
Zeno Rogue ddae0a7b00 in mouseover help, just display the slide name if tour::on && \!tour::texts 2020-09-11 11:16:34 +02:00
Zeno Rogue a7bee1b22a set_help_to for stronger prevention about obsolete help messages 2020-09-11 11:16:02 +02:00
Zeno Rogue b90df0d37b correct key buffering 2020-09-11 11:14:32 +02:00
Zeno Rogue 45ff7a4e10 CLI option -via-shader 2020-09-11 11:13:29 +02:00
Zeno Rogue 18ab187547 rotational model of Nil, and change Nil rotation 2020-09-11 11:13:18 +02:00
Zeno Rogue 59a7d3e562 added set_view function 2020-09-11 11:11:30 +02:00
Zeno Rogue ec6068944f rogueviz/balls: improvement 2020-09-11 11:09:10 +02:00
Zeno Rogue 6d8cc0eadc support to draw colored textures 2020-09-11 11:08:27 +02:00
Zeno Rogue 8dc7a6cd92 content: no content now has description NODESC, not NULL 2020-09-11 11:05:12 +02:00
Zeno Rogue e05256725e EX setcameraangle 2020-09-11 11:03:53 +02:00
Zeno Rogue 383bf80738 shadows supported in Euclidean 3D 2020-09-11 11:03:42 +02:00
rpljwi 85b9debde2 add Github CI 2020-09-05 19:38:10 +03:00
Zeno Rogue f04400f9de rogueviz::qtm now uses hooks_cellgen 2020-08-23 00:16:50 +02:00
Zeno Rogue fe2d9e7da8 added a hook on cellgen 2020-08-23 00:16:32 +02:00
Zeno Rogue 01ed0290c2 mstretch fixup 2020-08-23 00:16:14 +02:00
Zeno Rogue 62b85fff34 ray:: ray-step option 2020-08-23 00:11:47 +02:00
Zeno Rogue b8b24af6ff mstretch fixup 2020-08-23 00:11:37 +02:00
Zeno Rogue 6c99b70f16 fixed not reseting mstretch correctly 2020-08-23 00:11:19 +02:00
Zeno Rogue b5924ccc5c mstretch now works in rot spaces including SL2 2020-08-23 00:10:59 +02:00
Zeno Rogue e87da576e4 fix CR4 achievement 2020-08-20 19:32:59 +02:00
Zeno Rogue dac3a3260a 11.3y 2020-08-20 16:49:47 +02:00
Zeno Rogue 351f45f693 GLERR after drawqueue just in case 2020-08-20 16:49:47 +02:00
Zeno Rogue 1680693ec9 correct error message when trying to move from Rock III to a wall 2020-08-20 16:49:47 +02:00
Zeno Rogue 7f636a2a7c Speed Witches are no longer incorrectly considered as threats (but Flash Witches are real\!) 2020-08-20 16:49:47 +02:00
Zeno Rogue a4b7819fff fixed Camelot accessibility help 2020-08-20 16:49:47 +02:00
Zeno Rogue 644d20cd89 smartrange area-based 2020-08-20 16:49:47 +02:00
Zeno Rogue c932ae4399 2D and 3D variants of det 2020-08-20 16:11:35 +02:00
Zeno Rogue 58aba3eb37 Chaos Mode unlocking should be fixed 2020-08-20 16:03:37 +02:00
Zeno Rogue 0e38bc2352 fixed premature victory screen in minesweeper 2020-08-20 16:03:08 +02:00
Zeno Rogue 64cb6772e8 three new projections 2020-08-20 16:02:34 +02:00
Zeno Rogue c9e0529a88 solv-error-analyze added 2020-08-12 22:09:52 +02:00
Zeno Rogue f27c54596e intro slide to noniso geometries 2020-08-10 20:31:49 +02:00
Zeno Rogue 0822625cf8 fixed a NAN in rots::formula_exp 2020-08-10 20:20:55 +02:00
Zeno Rogue 6a4d6358fb noniso slide order fixed again 2020-08-10 20:07:03 +02:00
Zeno Rogue 436f4d65f6 rogueviz:: sunflower:: fixed base matrix 2020-08-10 19:04:08 +02:00
Zeno Rogue 22f7df9119 rogueviz:: removed visualizations which currently do not work 2020-08-10 19:03:50 +02:00
Zeno Rogue 62fe3fe7f8 removed debug 2020-08-10 19:03:33 +02:00
Zeno Rogue 54bb5d5c5c rogueviz:: in impossible structures, shapes disappeared due to a bug 2020-08-10 18:47:24 +02:00
Zeno Rogue 6880dfc96b rogueviz:: random walk:: improvements 2020-08-10 18:41:07 +02:00
Zeno Rogue be71014ed6 rogueviz:: added random walk 2020-08-10 18:09:59 +02:00
Zeno Rogue 38a5b4d1f8 added a noniso honeycomb viz to the presentation, and noniso slides are now in a common folder 2020-08-10 18:09:19 +02:00
Zeno Rogue b0d34adf32 nohud did not work 2020-08-10 18:06:21 +02:00
Zeno Rogue f59fd7b0c9 fixed a crash caused by glhr::init on some video cards 2020-08-10 18:06:11 +02:00
Zeno Rogue 0926b98c83 fixed raycaster in twisted geometries; weirdly twisted spherical geometry 2020-08-08 16:08:51 +02:00
Zeno Rogue 191ef35d21 inverse3 function 2020-08-08 16:05:49 +02:00
Zeno Rogue 4bddeedaf8 draw crosshair even if nohud 2020-08-08 16:05:28 +02:00
Zeno Rogue 1ac2805b7f 11.3w 2020-08-05 01:31:41 +02:00
Zeno Rogue 830a2703dd fixed shmup in elliptic 2020-08-05 01:27:18 +02:00
Zeno Rogue a7ac7b0894 added a comment to qtm that it is the inverse 2020-08-05 01:18:25 +02:00
Zeno Rogue 92502dc75e no 'find the player' in sphere 2020-08-05 01:18:08 +02:00
Zeno Rogue fb06570c83 fixed a bug with loading saves 2020-08-05 01:17:19 +02:00
Zeno Rogue 8173fc0504 more guards 2020-08-03 23:25:08 +02:00
Zeno Rogue a49b10d2ad removed xcodes from RogueViz 2020-08-03 22:29:37 +02:00
Zeno Rogue 10d2f932ce fixed some warning/errors 2020-08-03 19:49:54 +02:00
Zeno Rogue 2349d57f44 11.3v 2020-08-02 13:47:46 +02:00
Zeno Rogue 554567e0cf fixed some potential issues with arb 2020-08-02 13:01:55 +02:00
Zeno Rogue 6c96349714 rogueviz:: added sumotron 2020-08-02 12:56:43 +02:00
Zeno Rogue a66136625d save/load arb geometry 2020-08-02 12:56:43 +02:00
Zeno Rogue f7adc64101 fixed a bug with Orb of Recall 2020-08-02 12:56:43 +02:00
Zeno Rogue daeffcfde5 removed experimental flag from gArb 2020-08-02 12:56:43 +02:00
Zeno Rogue 716a774d1c restricted some hints to full games 2020-08-02 12:56:43 +02:00
Zeno Rogue c97badc8c4 improved mission screen in Minesweeper, and also in non-full games 2020-08-02 12:56:43 +02:00
Zeno Rogue 3505f17460 redone modecode 2020-08-02 12:55:37 +02:00
Zeno Rogue 44f359582c coolfog: also affect textures 2020-08-01 16:48:38 +02:00
Zeno Rogue 81d1066596 display other players in 2.5D radar 2020-08-01 16:48:08 +02:00
Zeno Rogue b14aeedcf4 2.5D: changed Desert sky colors 2020-08-01 16:47:37 +02:00
Zeno Rogue a27419cf97 cool fog effect now can be disabled 2020-08-01 16:47:21 +02:00
Zeno Rogue 5958a4dbcc RogueViz:: do not reset variation on start 2020-08-01 16:46:46 +02:00
Zeno Rogue c1554ce0f2 fixed a crash when setting new variations 2020-08-01 16:43:21 +02:00
Zeno Rogue 79a02a0c2e no more empty lines on GL errors 2020-08-01 16:43:05 +02:00
Zeno Rogue 1d278263bf DIALOG_STRICT_X now works with diTitle/diInfo 2020-08-01 16:42:55 +02:00
Zeno Rogue 7d9be4d40c even again fixed flatmodel in 3D 2020-08-01 16:42:15 +02:00
Zeno Rogue 0c5877a7ba no linewidth while flat_on 2020-08-01 16:42:02 +02:00
Zeno Rogue fc283bd527 allow larger letters 2020-08-01 16:41:44 +02:00
Zeno Rogue 7c3c34c3d8 sky-based fog in 2.5D 2020-08-01 13:59:53 +02:00
Zeno Rogue 3c198a3672 fixed potential memory error in sightranges 2020-08-01 13:58:03 +02:00
Zeno Rogue 5514ce4849 disabled the '@' sign in FPS 2020-08-01 13:57:51 +02:00
Zeno Rogue 44a0f5c1d8 fixed stranded boats in 3D 2020-08-01 13:57:39 +02:00
Zeno Rogue 6974567965 fixed big Minefields 2020-07-30 21:27:51 +02:00
Zeno Rogue f7e545d8de fixed rogueviz/cvl 2020-07-30 10:13:46 +02:00
Zeno Rogue 947ec6afe9 fixed error 2020-07-30 03:40:00 +02:00
Zeno Rogue b3dd70f26a rogueviz shift fixup 2020-07-30 02:30:07 +02:00
Zeno Rogue ecbd8806e7 added some missing guards 2020-07-30 02:29:59 +02:00
Zeno Rogue 9d0a252d14 shift-awareness in rogueviz 2020-07-29 23:34:00 +02:00
Zeno Rogue e99251e70c adjusted grigorchuk to shiftmatrix 2020-07-29 23:03:20 +02:00
Zeno Rogue c1ac290491 11.3u 2020-07-29 23:03:09 +02:00
Zeno Rogue 61ab21fb07 redone peaceful mode to puzzle/exploration mode 2020-07-29 23:01:15 +02:00
Zeno Rogue ae65a1dd5f Orb of Air now kills Red Raiders if separating them, instead of crashing 2020-07-29 21:56:34 +02:00
Zeno Rogue f34205ca6b fixed bad graphics in 3D 2020-07-29 21:49:38 +02:00
Zeno Rogue 7cdf941441 11.3t 2020-07-28 22:06:14 +02:00
Zeno Rogue 6e0de94ff1 fixed discrepancy in last 2020-07-28 22:06:14 +02:00
Zeno Rogue b6872b66a1 mapeditor:: in_front_dist now works with mouseaim sensitivity off 2020-07-28 22:06:14 +02:00
Zeno Rogue 92715e5799 fixed weird shadow of Text button 2020-07-28 22:06:14 +02:00
Zeno Rogue 3bb3e2027c press alt to disable mouse aiming in the map/draw editor 2020-07-28 22:06:14 +02:00
Zeno Rogue d5950e7cf9 drawing tool now works in 3D, and if you are drawing inside a movement animation 2020-07-28 22:06:14 +02:00
Zeno Rogue e8a462da0e fixed pushdown 2020-07-28 22:06:14 +02:00
Zeno Rogue 0a25848633 fixed drawing unnecessary cells in SL2 2020-07-28 22:06:14 +02:00
Zeno Rogue c23209b189 fixed key conflict in 3D config 2020-07-28 22:06:14 +02:00
Zeno Rogue 64279e33cc ray:: better raycaster in SL/sphere 2020-07-28 22:06:14 +02:00
Zeno Rogue fbe0df9814 ray:: in berger sphere can be disabled 2020-07-28 22:06:14 +02:00
Zeno Rogue c25e120c13 fixed a freeze in Berger sphere primitive 2020-07-28 22:06:14 +02:00
Zeno Rogue 18c96d4e62 fixed a bug in rotspace raycasting 2020-07-28 22:06:14 +02:00
Zeno Rogue c9168b59bd fixed the radar in SL 2020-07-28 22:06:14 +02:00
Zeno Rogue dcda11d740 fixed a bug while saving/loading INVERSE maps 2020-07-28 22:06:14 +02:00
Zeno Rogue 4fc6b8edb5 fixed distance computation in quotient spaces (necessary for rotspace) 2020-07-28 22:06:14 +02:00
Zeno Rogue 5795e5447d fixed a crash on universal cover 2020-07-28 22:06:14 +02:00
Zeno Rogue c99650cae4 rotspace:: in configure_period menu, updated description, and menu is left correctly 2020-07-28 22:06:14 +02:00
Zeno Rogue 475d16451a rotspace:: shift: implemented using cellwalkers, works correctly in bounded spaces now 2020-07-28 22:06:14 +02:00
Zeno Rogue 33647a56c2 fixed distance computation in periodic product spaces (racing in H2xE no longer freezes) 2020-07-28 22:06:14 +02:00
Zeno Rogue 1c2606c36f fixed a possible crash in kite 2020-07-28 22:06:14 +02:00
Zeno Rogue 67595a4ed3 redone hrmap::draw() function to keep DRY 2020-07-28 22:06:14 +02:00
Zeno Rogue 42446f1925 fixed non-shader-based slr::get_inverse_exp 2020-07-28 22:06:14 +02:00
Zeno Rogue 26a98237e0 'monster face the player: changed the code to simpler and better 2020-07-28 22:06:14 +02:00
Zeno Rogue 922e289b14 do not request shader in rotspace -- not that good 2020-07-28 22:06:14 +02:00
Zeno Rogue 82f32607e6 MAJOR CHANGE: replaced (transmatrix,band_shift) pair with shiftmatrix 2020-07-28 22:06:14 +02:00
Zeno Rogue d046023164 flatmodel now always use the standard geometry graphics 2020-07-26 15:05:42 +02:00
Zeno Rogue 1d94bd76f8 fixup to last 2020-07-25 16:20:06 +02:00
Zeno Rogue 7e5ff7b318 added missing CAP_RAY guard 2020-07-25 12:00:01 +02:00
Zeno Rogue adc17dce1b fixed slshader when xy==0 2020-07-25 03:14:11 +02:00
Zeno Rogue 4d9775080d fixed crash in geometry selection 2020-07-25 03:13:54 +02:00
Zeno Rogue a3c5773864 potential bugfix 2020-07-25 03:13:46 +02:00
Zeno Rogue c931cb93d5 draw_stretch without triangles 2020-07-25 03:13:30 +02:00
Zeno Rogue 6515f5bb1b Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2020-07-25 02:29:03 +02:00
Zeno Rogue ccfcb2eaeb 11.3s 2020-07-25 02:28:12 +02:00
Zeno Rogue 94cac21716 primitive-based rendering of the Berger sphere (very poor) 2020-07-24 23:39:30 +02:00
Zeno Rogue 2dff2df4fe fixed a crash in untruncated sphere 2020-07-24 16:21:43 +02:00
Zeno Rogue 958388eec2 fixed colors of underwater compasses and rugs 2020-07-24 16:21:11 +02:00
Zeno Rogue 269a65862f crash fixed in geom-exp menu 2020-07-24 16:20:49 +02:00
Zeno Rogue 7d7fe85199 slr:: fixes in ~SL quotients: auto disc_quotient, underlying spaces drawn correctly, comment in period selector 2020-07-24 16:20:27 +02:00
Zeno Rogue 8e041e7b2c collecting items while moving compass 2020-07-24 14:05:20 +02:00
Zeno Rogue a4edd03a8c Reptile counters are now reset when fast creatures move over them 2020-07-24 13:40:07 +02:00
Zeno Rogue dc458ba31a fixed a crash when walking over a hyperbolic digon in Archimedean tiling 2020-07-24 11:43:36 +02:00
Zeno Rogue 4c6500514e nicer slshader 2020-07-24 11:35:32 +02:00
Zeno Rogue 351eda2b5d generalized PSL to ~SL (discrepancies still appear) 2020-07-24 02:30:50 +02:00
Zeno Rogue 4798bf99fd 'faces per vertex' in inverse variations 2020-07-23 13:11:52 +02:00
Zeno Rogue f90cd66710 world size in new variations 2020-07-23 13:02:25 +02:00
Zeno Rogue 7a9f6fa830 the checkmate rule now takes tortoise calming into account 2020-07-23 12:20:57 +02:00
Zeno Rogue 7e85f07458 primitive rendering now implemented for stretched H2xE; removed the old implementation of SL(2,R) 2020-07-22 00:19:13 +02:00
Zeno Rogue 9ba448af94 changelog variation fix 2020-07-22 00:15:50 +02:00
Zeno Rogue 8fde64378f
Merge pull request #125 from Quuxplusone/new-travis-entries
Add a Travis build matrix entry for -DCAP_PNG=0, and comment each existing entry
2020-07-20 14:06:07 +02:00
Arthur O'Dwyer 011ef3611e Add a Travis build matrix entry for -DCAP_PNG=0, and comment each existing entry. 2020-07-18 16:17:22 -04:00
Zeno Rogue 36055d993e 11.3r 2020-07-13 01:33:09 +02:00
Zeno Rogue e90e0f861e auto-reset variation to variation_for when setting geometry 2020-07-13 00:56:00 +02:00
Zeno Rogue 2449895b49 fix some bugs in gp menu 2020-07-13 00:55:42 +02:00
Zeno Rogue f36eb9ddfe removed the macro VALENCE 2020-07-13 00:54:25 +02:00
Zeno Rogue 9da8dac45b memory clearing in inverse 2020-07-13 00:54:12 +02:00
Zeno Rogue 224a02d086 bigstuff in inverse 2020-07-13 00:53:48 +02:00
Zeno Rogue cf0abe6184 redone some Guided Tour slides 2020-07-13 00:10:16 +02:00
Zeno Rogue b87f051b3f fixed a weird crash in guided tour 2020-07-13 00:07:39 +02:00
Zeno Rogue 7deb98154f fixed save/load text 2020-07-12 21:39:34 +02:00
Zeno Rogue 50bb01b7e2 fixed a bug with saving string 2020-07-12 21:39:34 +02:00
Zeno Rogue bcd2a6230f text in drawing tool 2020-07-12 21:39:34 +02:00
Zeno Rogue 7bed07e7b4 ray:: volumetric cheat prevention 2020-07-12 21:39:34 +02:00
Zeno Rogue 1774f59462 fixed display-only inverse operators 2020-07-12 21:39:34 +02:00
Zeno Rogue 1f1e7d9bbf inverse tessellation operators 2020-07-12 21:39:34 +02:00
Zeno Rogue db96f3499c dialog::add_action_confirmed 2020-07-12 21:39:34 +02:00
Zeno Rogue fa1cc8b44c missing 11.3q 2020-07-12 21:39:34 +02:00
Zeno Rogue 1ce9ef4341 comments for geometry2 vertex functions 2020-07-12 21:39:34 +02:00
Zeno Rogue 6c1c444241 fixed rotation in farcorner 2020-07-12 21:39:34 +02:00
Zeno Rogue 4013d55c27 gp::pshid is now in gpdata 2020-07-12 21:39:34 +02:00
Zeno Rogue 78dbf6824d sound credits updated 2020-07-08 16:09:28 +02:00
Zeno Rogue 0b72d28ecd removed debug in expansion 2020-07-08 16:06:24 +02:00
Zeno Rogue 8f2bde4434 crystal:: restricted view_coordinates 2020-07-08 16:00:33 +02:00
Zeno Rogue 47483f6ef4 anim:: rotation distance from center 2020-07-08 15:49:29 +02:00
Zeno Rogue aefbe6cdbc fixed disable_texture in rug 2020-07-08 15:48:01 +02:00
Zeno Rogue 8223bf354f clearer comment in graph config 2020-07-08 15:47:49 +02:00
Zeno Rogue 65dd868cb7 ray:: volumetric improvements 2020-07-08 12:43:30 +02:00
Zeno Rogue e992c6a3cd fixed the boat protection given by Orb of Winter 2020-07-08 12:42:33 +02:00
Zeno Rogue bf1269e525 arb:: undo in connection debugger 2020-07-08 12:42:10 +02:00
Zeno Rogue 9103735be1 eyelevel setting not works in the first-person shooter mode 2020-07-08 12:41:14 +02:00
Zeno Rogue b58c491f4d fixup to cellname debug 2020-07-07 22:31:31 +02:00
Zeno Rogue 5c85f22ef3 the -to-fq option allows specifying prime 2020-07-07 22:25:09 +02:00
Zeno Rogue 436fe7f367 expansion in reg3::in_rule() activable 2020-07-07 22:23:20 +02:00
Zeno Rogue 8538ec695a honeycomb_rule_generator:: extra options 2020-07-07 22:18:59 +02:00
Zeno Rogue 17e056cdb4 ray:: volumetric raycasting 2020-07-07 22:16:38 +02:00
Zeno Rogue 3c8d5979f1 debug_cellnames option 2020-07-07 21:25:27 +02:00
Zeno Rogue f900ec7443 new sound effects 2020-07-07 21:24:56 +02:00
Zeno Rogue 0ced76c4f2 fix compile error with MAXMDIM 3 2020-07-06 05:18:37 +02:00
Zeno Rogue 48338f0539 comment fix 2020-07-05 23:17:52 +02:00
Zeno Rogue d30be41fa6 in_rule() with MAXMDIM==3 2020-07-05 14:02:28 +02:00
Zeno Rogue 8195a866a5 reg3 expansion fixup 2020-07-05 01:02:15 +02:00
Zeno Rogue 50be2133d1 expansion:: rule-based honeycombs 2020-07-05 00:55:56 +02:00
Zeno Rogue 6f2e7e90d5 expansion analyzer now can use libgmp for better analysis 2020-07-05 00:55:56 +02:00
Zeno Rogue 2d7571034b reg3:: extra_verification 2020-07-05 00:55:56 +02:00
Zeno Rogue 906c47c511
Merge pull request #120 from still-flow/hyperroid_music
Add missing hyperroid lower-quality music
2020-07-04 13:38:10 +02:00
Zeno Rogue 3f53698f36 fixed unused variables in mapeditor 2020-07-04 13:33:14 +02:00
Zeno Rogue 8a16659857 added honeycomb rules for 353 2020-07-04 13:13:37 +02:00
Zeno Rogue 64a78b1886 updated honeycomb-rule-generator to work with 353, and also heavily commented it 2020-07-04 13:12:01 +02:00
Zeno Rogue eb2a8d0dfb rogueviz:: reverted include qtm.cpp 2020-07-03 16:06:25 +02:00
Zeno Rogue 2bb98a4243 added qtm to rogueviz-all 2020-07-03 15:40:35 +02:00
Zeno Rogue 39ac36c4aa arcm:: more efficient when actually regular 2020-07-03 15:40:26 +02:00
Zeno Rogue 02ebc8a96a perfect linewidth option (sometimes does not work correctly -- need to check) 2020-07-03 15:39:52 +02:00
Zeno Rogue ad65ac4aa4 shot:: using models::is_3d 2020-07-03 15:39:52 +02:00
Zeno Rogue 9648642dd2 shot:: new options 2020-07-03 15:39:52 +02:00
Zeno Rogue abd5a0b943 fixed the graphical sizes of wolves and orbs 2020-07-03 15:39:52 +02:00
Zeno Rogue e15f0f381f random pattern: if rwalls > 100, player also is on wall 2020-07-03 15:39:52 +02:00
Zeno Rogue ab714a836e makeEmpty do nothing in Canvas 2020-07-03 15:39:52 +02:00
Zeno Rogue 26f4a1e6f4 fake in rhombic 2020-07-03 15:39:52 +02:00
Zeno Rogue b8444a7fa2 fake:: ordered modes 2020-07-03 15:39:35 +02:00
Zeno Rogue 7d874890ac ray:: extra options, fixes 2020-07-03 15:39:35 +02:00
Zeno Rogue dc0ec050af ray:: get_ms function 2020-07-03 15:39:24 +02:00
Zeno Rogue d0823b70ec fixup to guards 2020-07-03 15:39:24 +02:00
Zeno Rogue f3c35de400 more guards cont. 2020-07-03 14:48:36 +02:00
Zeno Rogue f09ed715f1 small bug fix in inverse_exp 2020-07-03 14:42:56 +02:00
Zeno Rogue 89585f004b fixed some guards (in progress) 2020-07-03 14:42:33 +02:00
Zeno Rogue cbd0c1f934 euc:: Hantzsche-Wendt manifold 2020-06-16 01:31:41 +02:00
Zeno Rogue 2da94c3986 fieldval_uniq for euc::in(3) 2020-06-16 01:17:28 +02:00
Zeno Rogue f00ce7f857 magmahep:: fixed spiral 2020-06-08 12:57:34 +02:00
Zeno Rogue 5dcd8d120c magmahep:: hashing for quicker generation 2020-06-08 12:57:13 +02:00
Zeno Rogue bcdd404e42 magmahep: generalized to not only heptagons, debug disable 2020-06-08 12:25:27 +02:00
Zeno Rogue 295bda1438 style improved 2020-06-08 01:59:34 +02:00
Zeno Rogue 1fdcb42195 style improved 2020-06-08 01:56:53 +02:00
Zeno Rogue 89aa64d52b better centering 2020-06-08 01:54:55 +02:00
Zeno Rogue f74e2f1ae8 magmahep: switch 2020-06-08 01:52:37 +02:00
Zeno Rogue 9265fe197b fix 2020-06-08 01:52:27 +02:00
Zeno Rogue dfe78c51d0 draw using hooks_fram not hooks_drawcell 2020-06-08 01:50:09 +02:00
Zeno Rogue 67360d8d5f magmahep 2020-06-08 01:31:21 +02:00
Zeno Rogue 3f95a0fce8 11.3p 2020-06-06 19:19:31 +02:00
Zeno Rogue f6e617535e fixed to_other_side in sphere 2020-06-06 19:11:47 +02:00
Zeno Rogue f8f166eb08 added option -tes as a synonym for -arbi 2020-06-06 18:43:09 +02:00
Zeno Rogue 8ec8ebc1d7 fixed arb and fake without CAP_TEXTURE 2020-06-06 18:42:58 +02:00
Zeno Rogue 0f6ec6e6f5 arb:: do not double sublines 2020-06-06 18:42:43 +02:00
Zeno Rogue 5cc58b2fcb arb:: verify indexes in Conway 2020-06-06 18:42:34 +02:00
Zeno Rogue f2381688c5 parser:: number missing exception now includes where() 2020-06-06 18:42:21 +02:00
Zeno Rogue 3df2f6bf26 arb:: removed some debugs 2020-06-06 18:42:05 +02:00
Zeno Rogue 123b49e0f3 arb:: removed angleofs function, 'legacy' variable for the old behavior 2020-06-06 18:41:36 +02:00
Zeno Rogue 0739a7c16e export hr_polygon_error 2020-06-06 18:40:08 +02:00
Zeno Rogue 66b2b3277a new tessellation samples 2020-06-06 01:10:03 +02:00
Zeno Rogue c05aa5d57a removed the tessellations included (see https://github.com/zenorogue/tes-catalog instead) 2020-06-06 01:08:21 +02:00
Zeno Rogue 244ba53b95 ray:: fix a bug 2020-06-03 17:40:16 +02:00
Zeno Rogue 1ac116909f ray:: special case for WDIM==2 triangles 2020-06-03 16:43:11 +02:00
Zeno Rogue 449966903e function project_on_triangle 2020-06-03 16:42:35 +02:00
Zeno Rogue b04061f8a8 implemented swapdim for arb 2020-06-03 16:42:26 +02:00
Zeno Rogue 15465d417f arb:: after sliding, geom3::apply_always3() 2020-06-03 16:42:13 +02:00
Zeno Rogue 4b946136f0 fixed orthogonal_move for points which are already moved 2020-06-03 16:11:59 +02:00
Zeno Rogue 8443095d47 in canvas land, walls are generated if GDIM==3, not only if WDIM==3 2020-06-03 15:45:25 +02:00
Zeno Rogue b34af64efd debugging mode option -g 2020-06-03 15:44:47 +02:00
Zeno Rogue 511eef0517 ray:: fixed a glitch on movement 2020-06-03 15:44:34 +02:00
Zeno Rogue 6ad9d520db reset raycaster if wo>=rays 2020-06-03 15:13:30 +02:00
Zeno Rogue 2a0b0101fd raycasting in 2D 2020-06-03 15:11:20 +02:00
Zeno Rogue fad1c650c7 fix radar_grid in fake::split() 2020-06-03 12:22:50 +02:00
Zeno Rogue a189fd9ca8 cleaned up findbaseAround 2020-06-03 11:54:28 +02:00
Zeno Rogue 86154347ec stopped the player from obscuring view in fake 2020-06-03 11:53:29 +02:00
Zeno Rogue 4ef3f31c8f fixed a crash when using -gfake without game 2020-06-03 11:49:04 +02:00
Zeno Rogue 24440d42df reg3::in() used GDIM instead of WDIM 2020-06-03 11:48:07 +02:00
Zeno Rogue ffa4589705 fake:: fixed some bugs with patterns working incorrectly 2020-06-03 11:46:50 +02:00
Zeno Rogue bc63ca3f81 arb:: disable some lands 2020-06-03 11:46:16 +02:00
Zeno Rogue df2fc6726a option -WT to teleport to a land, but without safety generation 2020-06-03 11:45:52 +02:00
Zeno Rogue b4b891a6dc arb:: counts as weirdhyperbolic 2020-06-03 11:45:18 +02:00
Zeno Rogue b9623e3fff fixed crashes with boats when no direction set 2020-06-03 11:44:19 +02:00
Zeno Rogue efe4e20cd4 arb:: set sliders from command line 2020-06-03 11:44:00 +02:00
Zeno Rogue e3664c79a3 throw an exception when file does not exist 2020-06-03 11:43:48 +02:00
Zeno Rogue 0ae3ab3c9b fake::split() = fake::in() or arb::in_slided() is used when both are applicable for a condition 2020-06-03 11:43:35 +02:00
Zeno Rogue ab379435d4 with unfitting sliders, also fix shmup 2020-06-02 02:37:30 +02:00
Zeno Rogue b55503dc9f arb:: sliders 2020-06-02 02:29:31 +02:00
Zeno Rogue c8ce9c9826 fixed the meaning of patterninfo::symmetries 2020-06-02 02:27:53 +02:00
Zeno Rogue d2c2140cc9 shmup better with fake 2020-06-02 02:27:06 +02:00
Zeno Rogue 87974ac1f4 hr_polygon_error::generate_error 2020-06-02 02:26:28 +02:00
Zeno Rogue 9729dbcbfc texture remapped when changing fake 2020-06-02 02:25:12 +02:00
Zeno Rogue d6e98ecf2a fixed guards 2020-05-31 18:04:43 +02:00
Zeno Rogue b0c6c95305 fixed unused capture warning 2020-05-31 17:45:02 +02:00
Zeno Rogue dacc93ee50 added limits.h 2020-05-31 17:31:16 +02:00
Zeno Rogue 26374cc205 improved changelog description 2020-05-31 17:24:37 +02:00
Zeno Rogue ff893eb5f6 11.3o 2020-05-31 17:22:18 +02:00
Zeno Rogue a8a0805b6f added some missing MAXMDIM guards 2020-05-31 17:21:16 +02:00
Zeno Rogue b4687213c3 fixed a crash when changing wall quality in some geometries 2020-05-31 17:12:45 +02:00
Zeno Rogue d91f37780b edit random/singlecolor wall probability 2020-05-31 17:12:31 +02:00
Zeno Rogue 5bc60b9d10 debug removed 2020-05-31 17:12:11 +02:00
Zeno Rogue 773bcfe29c colordialog now has reaction_final (called when selected or cancelled) 2020-05-31 17:11:59 +02:00
Zeno Rogue b720355438 fixed virtualRebase in nil 2020-05-31 16:47:22 +02:00
Zeno Rogue 9edd841595 better tiling_name for fake Arcm 2020-05-31 16:45:06 +02:00
Zeno Rogue bac89fb9f9 fake:: new config options, changed option name, seen in menu when available, prevent cheat 2020-05-31 16:44:44 +02:00
Zeno Rogue 8f0f224605 cheat_if_confirmed now auto-disables while in a forbidden-cheat mode 2020-05-31 16:43:36 +02:00
Zeno Rogue 5238959cbd fake:: support Archimedean pure 2020-05-31 16:18:44 +02:00
Zeno Rogue b17c75ccec fake:: draw both walls in 3D too 2020-05-31 03:38:52 +02:00
Zeno Rogue dfa01c8fe5 fixed the raycaster in Nil 2020-05-31 03:31:05 +02:00
Zeno Rogue 38418bd73a fake:: limit cells drawn 2020-05-31 03:30:51 +02:00
Zeno Rogue b0e82dd515 in fake geometries, show all edges 2020-05-31 03:30:40 +02:00
Zeno Rogue 4a830f469b fake geometry in 2D 2020-05-31 03:30:14 +02:00
Zeno Rogue 8c796e64c4 o_key:: texture mode option while in texture mode 2020-05-31 03:28:49 +02:00
Zeno Rogue bd44eab6f0 textures:: redone using the new dialog functions 2020-05-31 03:27:23 +02:00
Zeno Rogue 9f9752ee39 parser:: test shows more detailed value 2020-05-31 03:26:39 +02:00
Zeno Rogue 01caa6316f edge_angles function 2020-05-31 03:26:27 +02:00
Zeno Rogue 18d4165f64 arb:: symmetries 2020-05-31 03:24:41 +02:00
Zeno Rogue 6de3bface4 texture:: when true_remapping, just clear the texture_map 2020-05-30 20:08:22 +02:00
Zeno Rogue 6cc988ca08 texture:: fixed zoom/scale to scale/rotate 2020-05-30 20:08:05 +02:00
Zeno Rogue edc86a70d1 texture:: save arb filename 2020-05-30 20:07:50 +02:00
Zeno Rogue 4f70b5ceff patterns now know about arb 2020-05-30 20:06:58 +02:00
Zeno Rogue 067f0c3032 hr_polygon_error now informs about the end matrix 2020-05-30 20:06:28 +02:00
Zeno Rogue 1f1d8edeaa arb:: remember filename 2020-05-30 20:00:44 +02:00
Zeno Rogue 21e256fe12 arb:: new command cscale 2020-05-30 20:00:09 +02:00
still-flow 31d836b2a9 restructure scheduling intervals
so that there is just one pause for every sweep of the workforce,
so that upper bound on idle time doesn't grow
proportionally to the number of workers
2020-05-30 17:17:51 +03:00
still-flow d6de73a1dc remove unnecessary goto
which is a bit of a shame
2020-05-30 16:44:46 +03:00
Zeno Rogue 07b1eaeda5 fixed in older compiler 2020-05-29 10:49:38 +02:00
Zeno Rogue 823eb8ad79 11.3n 2020-05-29 10:47:36 +02:00
Zeno Rogue e7a4c645b8 auto-increase texture step in 2D ideal 2020-05-29 10:47:18 +02:00
Zeno Rogue 2c79a6aeff fixed freeze while drawing the sky in {n,infty} FPP 2020-05-29 10:29:13 +02:00
Zeno Rogue c11d36089d randpat mode for Zebra, Wet and Frog 2020-05-29 02:55:44 +02:00
Zeno Rogue 6a6de08ac8 fixed possible crash when doing 'underlying tree' in some geometries 2020-05-29 02:44:14 +02:00
Zeno Rogue fca9834d02 fixed some bugs when faking Euclidean 2020-05-29 02:43:30 +02:00
Zeno Rogue ce299c1a0c monster list in Snake Nest 2020-05-29 02:43:04 +02:00
Zeno Rogue 7bb4407273 flip_dark 2020-05-29 02:42:54 +02:00
Zeno Rogue 6621752a05 qtm:: -one-line and -two-line patterns 2020-05-29 01:59:05 +02:00
Zeno Rogue aa2cf6dbf5 fixed a crash when 'drawing underlying tree' in crystal3 2020-05-29 01:58:15 +02:00
Zeno Rogue c6f2391033 added addBack() in showQuotientConfig 2020-05-29 01:53:39 +02:00
Zeno Rogue c268949c9b added fixmatrix in fake 2020-05-29 01:53:20 +02:00
Zeno Rogue 0e8a5f6065 patterns in Crystal bitruncated {6,4}; also fixes graphics 2020-05-29 01:53:08 +02:00
Zeno Rogue 4f1742f21f fixed Euclidean celldistalt 2020-05-29 01:52:47 +02:00
still-flow 72008a7e85 change tasks into pairs of ids and do_work functions 2020-05-28 20:41:42 +03:00
still-flow b2a930f0f6 -lpthread -> -pthread for mymake target 2020-05-28 20:00:33 +03:00
still-flow 4386f86efb add diagnostic message showing batch size 2020-05-28 18:34:27 +03:00
still-flow dcf81ee468
change default behavior to multi-tasking 2020-05-28 15:28:50 +03:00
still-flow 9ef8b28129 fix order of options to g++ in Makefile.simple 2020-05-28 15:13:45 +03:00
Zeno Rogue 98b1e659a5 hyperbolic raycast: fix the matrices 2020-05-28 13:44:32 +02:00
Zeno Rogue 91338d047e fixed some bugs with ultra mirrors 2020-05-28 13:44:02 +02:00
still-flow 61d824803c add simple concurrent compilation
using something similar to round-robin scheduling
2020-05-28 13:29:03 +03:00
Zeno Rogue 384a6bb806 to -to-fq added cgi.require_basics() 2020-05-28 01:52:03 +02:00
Zeno Rogue 188596860a ultra_mirror_dist and step values in parser 2020-05-28 01:51:46 +02:00
Zeno Rogue 7a4f573e34 dirs_adjacent to S7 not 12 2020-05-28 01:51:28 +02:00
Zeno Rogue 5a57031269 fixup to ultra_mirrors 2020-05-28 01:51:08 +02:00
Zeno Rogue 6a19ec2a85 ray:: increased gms_limit, and added CLI option -ray-hard 2020-05-28 01:50:53 +02:00
Zeno Rogue 9c4a1d6d4e new linepattern for ultra, and also better edge drawer 2020-05-28 01:50:31 +02:00
Zeno Rogue 4217c7ccc7 reg3:: ultra-mirrors 2020-05-28 01:50:00 +02:00
Zeno Rogue 89bba619f0 farlands: do not create farlands in quotient spaces 2020-05-28 01:41:54 +02:00
Zeno Rogue 4c3703026f prime shown in showQuotientConfig3 2020-05-28 01:41:17 +02:00
Zeno Rogue 2a9a2b68cc fake:: set qIDEAL, qULTRA, and tiling_name correctly 2020-05-28 01:40:52 +02:00
Zeno Rogue 77a39dd072 getcurrfp set for new spaces, and increased max p to 19 for unknown spaces 2020-05-28 01:40:15 +02:00
Zeno Rogue e579db31de CLI option -gridoff 2020-05-28 01:39:13 +02:00
Zeno Rogue af7e828b08 CLI options -face-face and -face-vertex 2020-05-28 01:38:21 +02:00
Zeno Rogue 9466539cd6 qULTRA flag and 355 honeycomb 2020-05-28 01:37:56 +02:00
Zeno Rogue 890f5b56aa newly supported honeycombs in menu 2020-05-27 00:54:30 +02:00
Zeno Rogue 57d69e639d support for {3,5,x} and ultra-vertex honeycombs 2020-05-27 00:54:15 +02:00
Zeno Rogue eb5023cfbb reverb:: example commandlines 2020-05-26 17:40:30 +02:00
Zeno Rogue d8a72e31ab reverb:: animation with ideal vertices 2020-05-26 17:40:22 +02:00
Zeno Rogue 93b425ac11 reverb:: extra options 2020-05-26 00:38:15 +02:00
Zeno Rogue 52912e9b65 reverb:: updated comment 2020-05-26 00:03:11 +02:00
Zeno Rogue 0c33e303a2 edge display uses cellshape 2020-05-26 00:02:52 +02:00
Zeno Rogue e6743fc478 reverb:: option to change and auto-change sample length 2020-05-26 00:02:31 +02:00
Zeno Rogue 96d5309743 auto-animation and some other parameters 2020-05-26 00:02:06 +02:00
Zeno Rogue 522ab46051 reverb:: load audio from all formats supported by SDL_Mixer 2020-05-25 23:59:39 +02:00
Zeno Rogue d5d6fd0f28 when recording audio for video, keep the level constant 2020-05-25 23:59:12 +02:00
Zeno Rogue 14ecca8529 bird flaps (fixup) 2020-05-25 23:58:42 +02:00
Zeno Rogue 5393994920 frequency setting 2020-05-25 23:58:33 +02:00
Zeno Rogue f6a9cad299 reverb:: bird flaps its wings according to music 2020-05-25 23:57:39 +02:00
Zeno Rogue 173af678e8 don't try to play inHighQual 2020-05-25 23:54:57 +02:00
Zeno Rogue 0924e4a2d9 changed default speed_of_sound to .25 2020-05-25 23:54:46 +02:00
Zeno Rogue 2f28939466 fixed material for non-SH/SL geometries 2020-05-25 23:53:31 +02:00
Zeno Rogue 6b7a055fd3 spherical raycasting: combine with non-raycasted graphics 2020-05-25 23:53:05 +02:00
Zeno Rogue 4bd60d64f5 fixed the naming of X-Cell tessellations, which also fixed 16-cell 2020-05-25 23:52:47 +02:00
still-flow 22cbcfe3d6 add missing hyperroid lowres music 2020-05-25 13:26:53 +03:00
Zeno Rogue d10a3251ed added the non-Euclidean balls visualization 2020-05-25 02:33:22 +02:00
Zeno Rogue 07fdd929c1 added the reverb visualization 2020-05-25 02:33:07 +02:00
Zeno Rogue 9aeece0fa4 added the plane immersion visualization 2020-05-25 02:32:44 +02:00
Zeno Rogue 7e416eaef2 EX default_model() 2020-05-25 02:32:29 +02:00
Zeno Rogue 72b3f78185 an option to add hooks after video 2020-05-25 02:32:15 +02:00
Zeno Rogue 31fba0fb6e fixed the shot:: commands 2020-05-25 02:32:06 +02:00
Zeno Rogue a6acc5375e added one CAP_COMPLEX2 guard 2020-05-25 02:31:57 +02:00
Zeno Rogue b5084d91d5 rogueviz:: draw a rolling ball along impossible ring 2020-05-25 02:27:54 +02:00
Zeno Rogue b785a0a7cc frustum_culling can now be disabled 2020-05-25 02:27:23 +02:00
Zeno Rogue 0ca6153cc9 BADMODEL and WINGS can now be -Defined 2020-05-25 02:27:04 +02:00
Zeno Rogue d94ed622b7 exported hooks_drawqueue 2020-05-25 02:26:50 +02:00
Zeno Rogue 5ef7d744f9 POLY_ONE_LEVEL to draw only one level of SL2 2020-05-25 02:26:35 +02:00
Zeno Rogue d35e2ebb30 control:: sc_ticks exported so that visualizations can perfectly synchronize 2020-05-25 02:23:55 +02:00
Zeno Rogue 5654e632ce added CAP_SDLAUDIO guard 2020-05-22 21:41:24 +02:00
Zeno Rogue 4aa7bc9506 fixed a warning in collatz 2020-05-22 20:41:31 +02:00
Zeno Rogue 2af93287ec export reg3::in() 2020-05-22 20:38:13 +02:00
Zeno Rogue 9d0dd1e386 CAP_COMPLEX2 in rv 2020-05-22 20:38:02 +02:00
Zeno Rogue ddf60c623f reg3::in() with MAXMDIM==3 2020-05-22 16:52:46 +02:00
Zeno Rogue c39700d8de added CAP_COMPLEX2 guards 2020-05-22 16:52:30 +02:00
Zeno Rogue 8a28d1483b added CAP_EDIT guards to arbitrile 2020-05-22 16:52:02 +02:00
Zeno Rogue 90cfc59c88 silenced an uninitialized value warning 2020-05-22 15:28:54 +02:00
Zeno Rogue 2c7ab21151 fixed more warnings 2020-05-22 15:27:33 +02:00
Zeno Rogue e3c24eb731 fixed some warnings 2020-05-22 15:11:30 +02:00
Zeno Rogue b0d1de01e5 option -animvideo now only available with CAP_VIDEO 2020-05-22 14:52:12 +02:00
Zeno Rogue 4a1f6c8314 fixed array initializations 2020-05-22 14:51:54 +02:00
Zeno Rogue 12dd3d68ac screenshot formats 2020-05-22 14:50:23 +02:00
Zeno Rogue d74fb28ff9 handle system calls 2020-05-22 14:50:10 +02:00
Zeno Rogue 236abdbbc8 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2020-05-22 14:32:59 +02:00
Zeno Rogue e4a0a10158 more changes to manual-animation 2020-05-22 14:31:19 +02:00
Zeno Rogue 11ce15a67b CAP_VIDEO 2020-05-22 14:30:45 +02:00
Zeno Rogue 1953902e53
Merge pull request #114 from rpljwi/patch-1
Fix .dat filenames in Makefile.am
2020-05-20 11:45:59 +02:00
rpljwi df10c16db0
fix .dat filenames in Makefile.am 2020-05-19 21:19:53 +03:00
Zeno Rogue 64fb9ed24a in mymake, changed tests to use isalnum 2020-05-19 17:44:38 +02:00
Zeno Rogue 0813fb65ca
Merge pull request #112 from rpljwi/make-j1
Some fixes to mymake and Makefile.simple
2020-05-19 16:36:45 +02:00
rpljwi e05a2f9b87 add more escaping to -D option,
to allow e.g. specifying HYPERPATH
2020-05-19 11:40:18 +03:00
rpljwi 1ac8aa2bc6 invoke make for just the first Makefile from list 2020-05-19 11:39:26 +03:00
rpljwi ac0f42367f add dependency of autohdr on language-data 2020-05-19 11:28:54 +03:00
Zeno Rogue 4cee27ae76 fixed a good-length check 2020-05-16 15:34:56 +02:00
Zeno Rogue 4958bc45d3 11.3m 2020-05-16 12:04:40 +02:00
Zeno Rogue 76dfee3e42 no_code set for hybrid and fake 2020-05-16 11:26:03 +02:00
Zeno Rogue 8641eafd96 xcode no_code listed explicitly if not assigned 2020-05-16 11:24:30 +02:00
Zeno Rogue ae59e50b80 in fake, adjust sizes 2020-05-16 11:22:09 +02:00
Zeno Rogue 5f9ad96959 fake:: improved view matrix adjustment 2020-05-16 11:16:49 +02:00
Zeno Rogue a401f8a555 fake:: removed debug 2020-05-16 11:16:36 +02:00
Zeno Rogue 0cb4914ac9 fixed a bug in gl_FragDepth computation in raycaster 2020-05-16 11:16:24 +02:00
Zeno Rogue 823fb3a0e6 warning when honeycomb too complex 2020-05-16 10:56:11 +02:00
Zeno Rogue f69b6f0795 fixed Orb of Safety in multiplayer 2020-05-16 02:38:13 +02:00
Zeno Rogue 67bf4586ac fake:: available from the menu 2020-05-16 02:15:34 +02:00
Zeno Rogue 57c4bd0514 fake:: improved selection 2020-05-16 02:14:24 +02:00
Zeno Rogue c6527f4b87 fake:: multiple done correctly 2020-05-16 02:13:10 +02:00
Zeno Rogue 3e7f4374a6 shift_arg_formula now calls t automatically 2020-05-16 02:12:34 +02:00
Zeno Rogue cbb98c7899 fixed some bugs in celldistance with regards to fake 2020-05-16 02:12:20 +02:00
Zeno Rogue bf83959b4a allow setting the resource dir; autoconf should move *.dat file to resource dir 2020-05-16 01:30:33 +02:00
Zeno Rogue 61e249a3af fixed skies in the new lands 2020-05-16 01:06:47 +02:00
Zeno Rogue c0f5701a8a fixed Frog model in FPP 2020-05-16 01:05:11 +02:00
Zeno Rogue 2b6155bcc6 fixed Frog shadow 2020-05-16 01:00:37 +02:00
Zeno Rogue 71f9786607 fixed 3D Sun 2020-05-16 01:00:28 +02:00
Zeno Rogue eb296636e6 affine geometry name now displayed correctly 2020-05-15 23:50:27 +02:00
Zeno Rogue d4de598dee arb:: spheres are now known to be bounded 2020-05-15 23:46:44 +02:00
Zeno Rogue 88381b9eef full suppport for affine geometry in arb 2020-05-15 23:46:30 +02:00
Zeno Rogue a282c767ed fixed invalid_matrix in affine 2020-05-15 22:53:52 +02:00
Zeno Rogue afe4d58cbb split fixmatrix into cases 2020-05-15 22:53:24 +02:00
Zeno Rogue f6448a994f imporved hyperpoint::operator[] const 2020-05-15 22:53:09 +02:00
Zeno Rogue 033a9099d6 improved discrete animation while affine 2020-05-15 22:52:52 +02:00
Zeno Rogue 8b89374421 generalized SL2 raycaster 2020-05-15 18:32:14 +02:00
Zeno Rogue 3f20ba9d29 getCdata and getBits: prod -> hybri 2020-05-15 18:31:32 +02:00
Zeno Rogue 58a4583bb7 fixed Goldberg hybrid spaces 2020-05-15 17:40:42 +02:00
Zeno Rogue 470c4aed3d GOLDBERG world size no longer crashes the game in geom-exp 2020-05-15 17:30:21 +02:00
Zeno Rogue ed6cd3cec6 rewritten the o-key functionality to let the user choose from several applicable options 2020-05-15 15:53:29 +02:00
Zeno Rogue 437722fe58 'light' movestar now has size adjusting to geometry 2020-05-15 15:30:04 +02:00
Zeno Rogue 9c676d082a WASD keys and VI keys as help for keyboard users options 2020-05-15 15:28:59 +02:00
Zeno Rogue f9c6638b95 more elegant implementation of keyboard control 2020-05-15 15:11:24 +02:00
Zeno Rogue ab29609b19 fixed material for SL2 2020-05-15 15:00:07 +02:00
Zeno Rogue 9be05182fe fixup to music_out_of_focus 2020-05-15 14:54:45 +02:00
Zeno Rogue 9b4821619a hpxy was bugged in rotspaces -> fixed 2020-05-15 14:54:33 +02:00
Zeno Rogue e8461d8661 fixed legs in rotspaces being drawn far away 2020-05-15 14:54:11 +02:00
Zeno Rogue 10e03be159 music_out_of_focus now configurable via menu 2020-05-15 14:53:56 +02:00
Zeno Rogue 8af09e21ee fixed reverse legs in rotspaces 2020-05-15 14:53:10 +02:00
Zeno Rogue 036502f63e confusingGeometry() now returns true in elliptic (rotspaces have elliptic but not quotient) 2020-05-15 14:48:08 +02:00
Zeno Rogue 4d54057108
Merge pull request #105 from Quuxplusone/mymake
Make "mymake" work on OSX, and add it to Travis
2020-05-15 12:15:48 +02:00
Zeno Rogue 5ec85100e9
Merge branch 'master' into mymake 2020-05-15 12:14:04 +02:00
Zeno Rogue e4567c289c rogueviz:: removed ts2 -- it is obsolete by now 2020-05-15 12:05:35 +02:00
Zeno Rogue b5219ad0fe moved CAP_NCONF and CAP_RVSLIDES back to rogueviz 2020-05-15 12:04:29 +02:00
Zeno Rogue 021dd34647 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2020-05-15 11:55:14 +02:00
Zeno Rogue 78871fc736 exp_parser:: fixed a bug with ../ 2020-05-15 11:53:30 +02:00
Zeno Rogue 4a8e3285c7 fixed a potential buffer overflow in loadsave() 2020-05-15 11:52:51 +02:00
Zeno Rogue 83943bb968 rogueviz::magiccube:: minor improvements 2020-05-15 11:52:05 +02:00
Zeno Rogue 40e7f80ca9 qtm:: fixed a crash on small spheres, and created new patterns -two-way and -one-center 2020-05-15 11:51:33 +02:00
Zeno Rogue 2f76a23d99 rogueviz::magiccube:: updated to conform with new rogueviz 2020-05-15 11:51:03 +02:00
Zeno Rogue c750bc9573 'j' pattern in Euclidean 2020-05-15 11:49:25 +02:00
Zeno Rogue aea3ac848b hybrid:: in draw underlying, use a longer range in H2 2020-05-15 11:48:04 +02:00
Zeno Rogue 5f85adc556 mymake:: allow -f* options 2020-05-15 11:47:27 +02:00
Zeno Rogue ba828ee54c fixed a potential crash in clearshadow() 2020-05-15 11:47:14 +02:00
Zeno Rogue 81a60b6f17 do not show deprecated geometries in select_quotient_screen() 2020-05-15 11:46:50 +02:00
Zeno Rogue 1b96658a05 fake curvature 2020-05-15 11:46:26 +02:00
Zeno Rogue a5a49ce5c9 functions 'material' and 'ultra_normalize' 2020-05-15 11:43:13 +02:00
Zeno Rogue b2d0980091 separated cgi_string() from check_cgi() 2020-05-15 11:41:30 +02:00
Zeno Rogue 711b9d37de euc:: moved Euclidean honeycomb shape definitions to euclid.cpp 2020-05-15 11:40:57 +02:00
Zeno Rogue 4cde3e0984 in rotate_view do not change which_copy when in rug::rugged 2020-05-15 11:38:52 +02:00
Zeno Rogue 81350f4e51 arb:: initial commit for affine 2020-05-15 11:38:20 +02:00
Zeno Rogue daeff80ff5
Merge pull request #108 from Quuxplusone/ifdef
Move all defaulting-of-`CAP_FOO` to sysconfig.h
2020-05-15 11:32:38 +02:00
Zeno Rogue e644ebf1ea qtm:: rainbow colored hyperbolic 2020-05-09 18:33:53 +02:00
Zeno Rogue 29c7faa264 stretch < -1 (seems not to be working correctly) 2020-05-09 18:33:37 +02:00
Zeno Rogue c35705cc5c fixed hybrid bitruncated ray: works after clear map 2020-05-09 18:32:16 +02:00
Zeno Rogue 306d8c3ace added function to_glsl to convert ld to GLSL strings 2020-05-09 18:30:36 +02:00
Zeno Rogue 4e13e05d6a advanced parameters easier to set for acm and crystal 2020-05-09 18:29:09 +02:00
Zeno Rogue fd9ea8793e stretch:: renamed rots_twist to stretch, also implemented for slr 2020-05-09 10:41:15 +02:00
Zeno Rogue ecb88d8501 qtm:: fixed 2020-05-09 02:35:15 +02:00
Zeno Rogue 83c0ade9d6 revert hyperbolic qtm 2020-05-09 00:57:59 +02:00
Zeno Rogue a30f4a89f7 rots::draw_underlying in screenshot 2020-05-08 21:21:42 +02:00
Zeno Rogue 3f0dcaaa0a pattern 'H' which marks masters 2020-05-08 21:21:01 +02:00
Zeno Rogue a4d3ebb06d ray:: CLI options -ray-range and -ray-sol 2020-05-08 21:20:33 +02:00
Zeno Rogue ee0f57f28b qtm:: spheredemo included 2020-05-08 21:20:06 +02:00
Zeno Rogue e3cff7f383 qtm:: striped variants 2020-05-08 21:19:56 +02:00
Zeno Rogue 54804bc08b stretched spherical geometry 2020-05-08 21:18:47 +02:00
Zeno Rogue 02de6fa330 ray:: bitruncated product 2020-05-08 21:14:31 +02:00
Zeno Rogue 5de9c4cc16 added #define rotspace 2020-05-08 20:26:30 +02:00
Zeno Rogue 3a8a3cf035 added kz(vector) 2020-05-08 20:26:23 +02:00
Arthur O'Dwyer 36136dab6a Fix some unguarded bits of CAP_BT and CAP_CRYSTAL.
Found by trying to build with `-DISMINI=0`, not that that
comes even close to working.
2020-05-03 21:21:46 -04:00
Arthur O'Dwyer 3e3457bd81 Eliminate some use of CAP_FOO and ISFOO outside of the preprocessor.
The old code worked, but it's strange to use these macros as if
they were C++ `bool` variables at runtime.
2020-05-03 20:57:34 -04:00
Arthur O'Dwyer f2b7746c1b Move all defaulting-of-`CAP_FOO` to sysconfig.h.
- The phrase `#ifdef CAP_` should never appear anywhere.

- The phrase `#ifndef CAP_` should appear only in sysconfig.h.

- The phrases `#if CAP_` and `#if !CAP_` may appear wherever,
    as long as "sysconfig.h" is included first.

The rules for `CAP_FOO` equally apply to `ISFOO`.

There are many one-off macros still tested with `#ifdef`,
including `HAVE_ACHIEVEMENTS`, `PRINT_ACHIEVEMENTS`,
`FAKEWEB`, `FAKE_SDL`, `EASY`, and `WHATEVER`. I don't
have much grasp on what these are used for or how they're
configured, so I'm leaving them alone.
2020-05-03 15:12:12 -04:00
Arthur O'Dwyer f56e0fe2e3 Silence an unused-lambda-capture warning. 2020-05-03 15:12:12 -04:00
Zeno Rogue 2333537f11 fixed primes in connection_debugger 2020-05-01 19:35:50 +02:00
Zeno Rogue cef94da632 11.3l 2020-05-01 18:58:16 +02:00
Zeno Rogue 5c1ae3654c index verification 2020-05-01 18:31:04 +02:00
Zeno Rogue 3109d168cf arb:: connection debugger 2020-05-01 18:11:48 +02:00
Zeno Rogue ea8a3ea7d2 nicer print for cld 2020-05-01 17:27:13 +02:00
Zeno Rogue ee6b500822 validate_real in arb 2020-05-01 17:27:06 +02:00
Zeno Rogue cc93dd0732 exp_parser:: reals are now validated. Also regangle now accepts complex multiplication and non-integer edges. 2020-05-01 17:23:29 +02:00
Zeno Rogue 3c82c4d9e3 print cld's 2020-05-01 17:22:30 +02:00
Zeno Rogue fc1b590655 just in case complex values are now accepted as dist and angle. 2020-05-01 17:14:49 +02:00
Zeno Rogue d95615bea2 arb:: parameters shown 2020-05-01 17:12:13 +02:00
Zeno Rogue d8d7bf01bd arb:: factored out load_tile 2020-05-01 17:10:53 +02:00
Zeno Rogue c556c23276 more equal_weights 2020-05-01 16:41:36 +02:00
Zeno Rogue c6665470aa do not do Farlands outside of hyperbolic geometry 2020-05-01 12:28:16 +02:00
Zeno Rogue c5a7b15e98 an option to start in draw editor, and to clear shapes 2020-05-01 12:27:49 +02:00
Zeno Rogue 595511d66e rogueviz:: growthrate improvements 2020-05-01 11:34:53 +02:00
Zeno Rogue 4a57ec002a more precise edge computation, using binary search 2020-05-01 11:34:17 +02:00
Zeno Rogue 194e314069 triangle:: generators shown 2020-05-01 11:33:40 +02:00
Zeno Rogue f355006b2b fixed virtualRebase for Nil 2020-05-01 11:32:12 +02:00
Zeno Rogue fcad5d3f34 rogueviz:: fixes in noniso visualizations 2020-05-01 10:49:06 +02:00
Zeno Rogue c9650cda2c crystal:: changed condition from cheater to allowIncreasedSight 2020-05-01 10:46:38 +02:00
Zeno Rogue a024626593 export crystal_period 2020-05-01 10:42:28 +02:00
Zeno Rogue a6d1be0a92 fixed scrolling destroying which_copy 2020-05-01 10:42:15 +02:00
Zeno Rogue 1f31c2cd7a more safe clipping in Sol 2020-04-29 15:19:25 +02:00
Zeno Rogue d0ac2612d5 fixed linewidth step in patterns 2020-04-29 15:18:43 +02:00
Zeno Rogue 8ddb67b285 patterns:: extended configuration of 'r' and 'J' patterns 2020-04-29 15:16:12 +02:00
Zeno Rogue a6a0995e85 SOLV_ALL 2020-04-29 15:15:18 +02:00
Zeno Rogue 39f82e55ba 'special' geometry change 2020-04-29 15:14:36 +02:00
Zeno Rogue 99e2d95e82 exp_parser:: fixed skipping whitespace 2020-04-29 15:13:44 +02:00
Zeno Rogue ee014030fb fixup 2020-04-29 15:13:16 +02:00
Zeno Rogue 7cabb8aaf4 exp_parser:: user-defined variables take precedence 2020-04-29 15:13:09 +02:00
Zeno Rogue fa11bc6c27 rug:: added missing EX 2020-04-29 15:12:51 +02:00
Zeno Rogue c488599745 arbi:: debug messages for let commands with DF_GEOM 2020-04-29 15:10:07 +02:00
Zeno Rogue 52bd8f12f6 handlePanning handled keys even if smooth_scrolling was on 2020-04-29 15:09:46 +02:00
Zeno Rogue bbdebb14ef fat honeycomb edges 2020-04-29 15:09:22 +02:00
Zeno Rogue dc3eeba73c arcm:: using hyperbolic trigonometry instead of binary search 2020-04-29 15:09:02 +02:00
Zeno Rogue 97c9be0dde better centering screenshot, 'rotate PC' option 2020-04-26 11:07:06 +02:00
Zeno Rogue 500df60990 In animation, 'monster turns' can be configured 2020-04-26 11:03:49 +02:00
Zeno Rogue 4648780eb1 fixed Butterflies in non-orientable geometries 2020-04-26 11:02:27 +02:00
Zeno Rogue e4a38d8aa9 editor launched in case of polygon error 2020-04-26 11:02:03 +02:00
Zeno Rogue 38d668ee7c text in drawing tool (not yet addable) 2020-04-26 11:01:45 +02:00
Zeno Rogue 5b26fd0059 removed ref to leftclick 2020-04-22 14:15:50 +02:00
Zeno Rogue 6cf15d644f removed extra ; 2020-04-22 13:45:28 +02:00
Zeno Rogue e59a2ad517 11.3k 2020-04-22 01:46:45 +02:00
Zeno Rogue b53e85d1ff fixed Rug in arb:: 2020-04-22 01:45:13 +02:00
Zeno Rogue 1914a3c1bc fixed Great Walls in 534 2020-04-22 01:45:04 +02:00
Zeno Rogue 95aa4d8fe5 fixed ESC in 3D 2020-04-22 01:44:53 +02:00
Zeno Rogue c19c9446b4 fixed Hypersian Rug in standard binary tiling 2020-04-21 23:52:49 +02:00
Zeno Rogue 109efec4ff expansion:: dfWorld returns celldistAlt in canvas 2020-04-21 23:37:38 +02:00
Zeno Rogue 93f1090891 vertex debug 2020-04-21 23:37:25 +02:00
Zeno Rogue 052be86915 fixed celldistAlt in bitruncated {4,x} 2020-04-20 03:50:13 +02:00
Zeno Rogue d09acee7a8 more accurate mouse when in 2D projections 2020-04-19 23:22:41 +02:00
Zeno Rogue fc9adf8960 shift+mousewheel for zoom works in rug 2020-04-19 23:01:09 +02:00
Zeno Rogue 1b87043aa7 fixed zoom to do the correct zoom in rug 2020-04-19 22:59:29 +02:00
Zeno Rogue d50daa6863 zoom is Home/End not Page keys 2020-04-19 22:58:45 +02:00
Zeno Rogue 001f9c6cf3 improved keyboard help screen 2020-04-19 22:54:40 +02:00
Zeno Rogue 286f378c41 fixed shift-clicking for orbs 2020-04-19 22:50:31 +02:00
Zeno Rogue 009b05c919 reworked some modifier keys 2020-04-19 22:43:16 +02:00
Zeno Rogue 5e0aac5e92 lshift+arrows now rotate the model in rug 2020-04-19 22:42:29 +02:00
Zeno Rogue f1a38b8389 shift+PageUp/Down now zooms 2020-04-19 22:42:19 +02:00
Zeno Rogue 4575a672d6 rug can now be mouse-rotated with Ctrl 2020-04-19 22:08:30 +02:00
Zeno Rogue db65898859 mouseaim now uses full_rotate_camera 2020-04-19 22:02:22 +02:00
Zeno Rogue c33887a313 smoother in 3D Gravity 2020-04-19 22:00:29 +02:00
Zeno Rogue fc7563e388 cleaned up keep_vertical_orientation; camera rotation is now nicer if yes 2020-04-19 21:56:26 +02:00
Zeno Rogue 5d89f8ee4b Orb of the Sword now destroys shrubs 2020-04-19 16:06:51 +02:00
Zeno Rogue fcbe13cd5f panning enabled in the rug menu 2020-04-19 15:45:02 +02:00
Zeno Rogue cc88c03f5a rug:: fixed gethyper when the rug is moved 2020-04-19 15:44:53 +02:00
Zeno Rogue 634641bc94 removed outdated documentation from rug 2020-04-19 15:40:28 +02:00
Zeno Rogue 730be4b36a Home no longer recenters 2020-04-19 15:30:45 +02:00
Zeno Rogue c3ecb9bdc5 improvements to camera 2020-04-19 15:20:56 +02:00
Zeno Rogue be8d12fd8e improved arrows and PAGEUP/DOWN 2020-04-19 15:16:43 +02:00
Zeno Rogue 427410b5cb added #include <cassert> 2020-04-19 14:00:15 +02:00
Zeno Rogue 62e0aab0bf rug now displays geometry correctly 2020-04-19 14:00:06 +02:00
Zeno Rogue 2e160110b3 typo fix 2020-04-19 13:54:00 +02:00
Zeno Rogue 36b255e459
Merge pull request #101 from Quuxplusone/translations
langen: Handle repeated strings better.
2020-04-19 13:40:51 +02:00
Zeno Rogue 07710758aa
Merge pull request #106 from Quuxplusone/hooks-naming
Various severable "hookset" cleanups
2020-04-19 13:39:18 +02:00
Zeno Rogue 6f6586b3f2
Merge branch 'master' into hooks-naming 2020-04-19 13:39:07 +02:00
Zeno Rogue 4ffbe27784 pen width and paint color are now defined in mapeditor.cpp not texture.cpp 2020-04-18 16:10:56 +02:00
Zeno Rogue f504eef7df fixed the lacking virtual desctructor 2020-04-18 14:32:54 +02:00
Zeno Rogue 3ffe8d1f4d updated geodesic tables 2020-04-17 21:01:31 +02:00
Zeno Rogue a258eac0c7 11.3j 2020-04-17 21:00:49 +02:00
Zeno Rogue 72a46b9029 save/load rug in menus 2020-04-17 20:49:30 +02:00
Zeno Rogue 244188283b one more to rogueviz 2020-04-17 20:49:08 +02:00
Zeno Rogue 700d1bec5f crystal rug rotate 2020-04-17 20:48:41 +02:00
Zeno Rogue 894abf218f rogueviz:: adjusted to pconf 2020-04-17 20:45:00 +02:00
Zeno Rogue c24658bf38 more drawing tool improvements; no crash drawing tool; restart editors will ask for confirmation 2020-04-17 20:34:49 +02:00
Zeno Rogue 62c6651392 drawing tool improvements 2020-04-17 20:18:50 +02:00
Zeno Rogue ad233a1e19 drawing tool 2020-04-17 20:04:33 +02:00
Zeno Rogue 5c98118da3 gpushxto0 no longer returns an incorrect result in nonisotropic 2020-04-17 17:44:42 +02:00
Zeno Rogue 87168241ee devmods/tests:: added -test-push 2020-04-17 17:44:22 +02:00
Zeno Rogue 9050cee2fb adjusted tests 2020-04-17 17:44:14 +02:00
Zeno Rogue 3c02100d79 rug:: fixed gethyper 2020-04-17 17:29:50 +02:00
Zeno Rogue 4a4ce13246 fixup 2020-04-17 17:18:24 +02:00
Zeno Rogue 44cfe1af59 rug:: nonisotropic native geometry 2020-04-17 17:17:22 +02:00
Zeno Rogue 0a6c80e909 refactored flat_model_enabler 2020-04-17 15:54:48 +02:00
Zeno Rogue 9c61da86f3 removed unused global variable 2020-04-17 15:48:10 +02:00
Zeno Rogue 32ec5db152 stretch no longer affects text 2020-04-17 15:47:50 +02:00
Zeno Rogue 873f2f657a rug:: the basics work even if MAXMDIM == 3 2020-04-17 15:38:09 +02:00
Zeno Rogue d7ceb89ed8 MDIM is now constant 3 if MAXMDIM == 3 2020-04-17 15:37:31 +02:00
Zeno Rogue 31f1699e51 fixed the comment in TwoPoint parameter 2020-04-17 15:37:02 +02:00
Zeno Rogue ec6d93b425 wrl:: added missing MAXMDIM guards 2020-04-17 15:36:47 +02:00
Zeno Rogue 7c9e37031e added missing MAXMDIM guards in fieldpattern 2020-04-17 15:36:32 +02:00
Zeno Rogue a246e53d2c added imssing MAXMDIM guards in racing 2020-04-17 15:35:48 +02:00
Zeno Rogue 51de394193 added missing CAP_SOLV guards in racing 2020-04-17 15:35:34 +02:00
Zeno Rogue db4be83091 all save boxes are now named (fakeboxes start with @) 2020-04-17 15:04:27 +02:00
Zeno Rogue 14cb26b986 fixed the Handsome Gardener's Flower 2020-04-17 15:03:23 +02:00
Zeno Rogue c0115e60e9 added some more debug lines to DF_GRAPH 2020-04-17 15:03:05 +02:00
Zeno Rogue 7a71132806 shaded rug 2020-04-17 15:01:55 +02:00
Zeno Rogue 09ce04bd4a changed rug clip defaults to show more 2020-04-17 15:01:02 +02:00
Zeno Rogue 64ee50523d more model fixes 2020-04-17 02:29:03 +02:00
Zeno Rogue 466b81f854 fixed central inversion in 3D models 2020-04-17 02:22:01 +02:00
Zeno Rogue 7f96c67755 improved Rug in various models 2020-04-17 02:21:44 +02:00
Zeno Rogue e978ed9eac Home no longer resets view in rug 2020-04-17 00:54:13 +02:00
Zeno Rogue 0472bf764f moved all projection-related parameters to a special struct; another copy of that struct created for rug 2020-04-17 00:53:58 +02:00
Zeno Rogue f8cbf67a8e shift+arrows now strafe in 3D modes 2020-04-16 21:31:59 +02:00
Zeno Rogue 2a69afddb7 rogueviz:: adjusted to rug naming changes 2020-04-16 21:01:03 +02:00
Zeno Rogue 63d244ce9f rug::rg* constants are now exported 2020-04-16 21:00:41 +02:00
Zeno Rogue 84cf5d6e3a added missing guards, mostly for CAP_WRL 2020-04-16 21:00:28 +02:00
Zeno Rogue 45bffedfbb better error information from arb 2020-04-16 20:59:34 +02:00
Zeno Rogue 75f2a84333 fixed CLI for tree to -tree not -tol 2020-04-16 20:59:05 +02:00
Zeno Rogue a380134d29 WRL selectable in menus, fixed some issues 2020-04-16 14:36:45 +02:00
Zeno Rogue 0ef619739e textures in wrl export 2020-04-16 03:36:48 +02:00
Zeno Rogue bf2eece2d8 wrl:: rug texture 2020-04-15 18:09:27 +02:00
Zeno Rogue c8495c7fdb wrl:: transparency 2020-04-15 18:08:55 +02:00
Zeno Rogue a866d1fca5 wrl:: fixed color 2020-04-15 17:07:50 +02:00
Zeno Rogue db916f8c95 printable rug 2020-04-15 17:07:39 +02:00
Zeno Rogue de5c64d080 CLI option -fat-edges 2020-04-15 16:21:49 +02:00
Zeno Rogue 7f08ca01a2 fat edges are now printable 2020-04-15 16:21:30 +02:00
Zeno Rogue 2fb865346d generate 'printable' models or not 2020-04-15 16:21:02 +02:00
Zeno Rogue 3e8d00f097 fixup EX coverage 2020-04-15 11:49:43 +02:00
Zeno Rogue f150245a72 basic WRL export (no menus) 2020-04-15 11:49:29 +02:00
Zeno Rogue 4413743ff3 rug:: fixed start_game after PHASE in -rugon 2020-04-15 01:43:45 +02:00
Zeno Rogue c2d70bb61c rug:: rugsave and rugload options 2020-04-15 01:43:28 +02:00
Zeno Rogue bcbdc8c838 fixup: debug removed 2020-04-15 01:43:14 +02:00
Zeno Rogue 7e58a718e2 fixup: flat to native in crystal 2020-04-15 01:42:46 +02:00
Zeno Rogue f903d3c8ea rug:: using HyperRogue general renderer 2020-04-14 17:46:40 +02:00
Zeno Rogue 9bf1a76a8b rug:: using HyperRogue standard 3D geometry routines 2020-04-14 16:44:56 +02:00
Zeno Rogue fef6894bbd geo_dist_q : like geo_dist but gives correct distance in elliptic space 2020-04-14 16:42:11 +02:00
Zeno Rogue 5c96a82f80 removed Janko from the web version since it does not work for some reason 2020-04-12 20:42:48 +02:00
Zeno Rogue 85a404bfe8 CA awards Orb of Aether automatically 2020-04-12 20:38:17 +02:00
Zeno Rogue 493be6c55b simulate CA on every step if animating 2020-04-12 20:35:16 +02:00
Zeno Rogue 6619586efa rogueviz:: updated to inverse_exp changes 2020-04-12 20:35:00 +02:00
Zeno Rogue 37ceb0bcbc fixup export chessvalue 2020-04-12 20:34:45 +02:00
Zeno Rogue 68ee90fcba export get_acceleration 2020-04-12 20:34:39 +02:00
Zeno Rogue ce441eb4bc more accurate lazy for SolNih 2020-04-12 20:34:16 +02:00
Zeno Rogue 8f99715f0d CLI option -smooths 1 2020-04-12 20:34:02 +02:00
Zeno Rogue 11d119766d CA for infinite 2020-04-12 20:33:53 +02:00
Zeno Rogue 43e1204e18 CLI option -carun 2020-04-12 20:33:31 +02:00
Zeno Rogue 4cbffbd8df chessboard/threecolor pattern for CA 2020-04-12 20:32:37 +02:00
Arthur O'Dwyer d1458b3ee5 Replace the `hookset` typedef with a full-blown class type. NFC.
This restricts the "API surface area" of `hookset` to just these three
accessor methods; there's no longer any way to break into a hookset and
iterate it manually, or erase elements from a hookset, or ask for its
size, or anything else that you could have done given the raw `std::map *`.
2020-04-12 10:50:43 -04:00
Arthur O'Dwyer 961a8919c6 Use callhandlers() instead of manual loop in menus.cpp. NFCI. 2020-04-12 10:50:19 -04:00
Arthur O'Dwyer 83f5412916 Use callhandlers() instead of manual loop in commandline.cpp. NFCI. 2020-04-12 10:50:19 -04:00
Arthur O'Dwyer 0d42168139 Make hookset<T> a pointer type, just like purehookset.
No more declaring `hookset<T> *hooks_foo`; now it's just
`hookset<T> hooks_foo` at global scope. This clears the way to
make `hookset<T>` into a class type if we want.
2020-04-12 10:50:18 -04:00
Arthur O'Dwyer 934e3d9a42 Consistently name every hookset with prefix `hooks_`. NFC.
I'm sure this causes massive merge-conflicts in the non-public code,
but I think it'd be a good idea, if only to avoid confusion between
e.g. `clearMemory` and the-variable-formerly-known-as `clearmemory`.
2020-04-12 10:49:32 -04:00
Arthur O'Dwyer 84881f0e04 Remove a stray `#include <functional>` from hyper.h.
This seems to be causing `hookset` to use `std::function` instead of
`hr::function`. Removing this one line shrinks the normal hyperrogue
binary from 9695484 bytes to 9669956 bytes.
2020-04-12 10:49:00 -04:00
Arthur O'Dwyer a49c40cee7 Make "mymake" work on OSX, and add it to Travis.
Fix a -Wformat bug exposed by compiling with Clang.

To preprocess C++11 code, you need `g++ -E -std=c++11`, not just
`g++ -E`. (The old code worked for GCC 6+ and Clang 6+ because they
changed the default mode from C++03 to C++14. But for GCC 5, we still
need `-std=c++11`. And regardless, it's a good idea.)

Add a "-mac" option to mymake, and cleanly factor out `set_mac`,
`set_linux`, and `set_win`. When you build mymake using
`make -f Makefile.simple mymake`, you get a mymake that knows what
platform it's on. This means you don't have to pass `mymake -mac`
on OSX, nor `mymake -win` on Windows.

The old code put `INCLUDE(___hyper-main.cpp)` into a C++ file that
would be preprocessed, which doesn't work because libSDL does
essentially `-Dmain=SDL_main`, which turns this into
`INCLUDE(___hyper-SDL_main.cpp)`, which gives us
a "file not found" error from mymake. The solution is to put
filenames into quotation marks, so that the string "main" never
appears as a token in the C++ file. (Alternatively, we could have
renamed "hyper-main.cpp" to "hypermain.cpp".)

Add several new "mymake" entries in the Travis build matrix,
and add the "mymake" builds' badge to the README.
2020-04-12 09:56:46 -04:00
Arthur O'Dwyer 6e4b6ee93c Remove the definition of _Unwind_Resume on OSX.
This is unnecessary for me when using Makefile.simple, as far as I can tell.
And it's actively harmful when using "mymake", because then we get this
non-inline variable defined in every .o file, which leads to
multiple-definition errors at link time.

Maybe it's no longer needed?
2020-04-12 09:56:46 -04:00
Zeno Rogue 71513369ea RK4 in raycaster 2020-04-12 00:40:15 +02:00
Zeno Rogue 825a8aba82 nisot:: parallel_transport now also uses RK4 2020-04-11 15:28:22 +02:00
Zeno Rogue e4a8b73819 nisot:: nicer precision setting 2020-04-11 15:08:24 +02:00
Zeno Rogue c5d7479d00 nisot:: geodesic_step is now based on RK4 instead of midpoint 2020-04-11 15:01:01 +02:00
Zeno Rogue 85443a14ab Grigorchuk slide and improvements 2020-04-11 01:37:17 +02:00
Zeno Rogue 5ae5395ce1 added the Janko group 2020-04-11 00:43:43 +02:00
Zeno Rogue 85c45ccf8c rogueviz::grigorchuk::improved 2020-04-11 00:43:22 +02:00
Zeno Rogue 50c6a4d366 added hooks_initialize 2020-04-11 00:42:53 +02:00
Zeno Rogue 721a4beddc auto-switch to pure 2020-04-11 00:42:41 +02:00
Zeno Rogue c0e0e1562f export wrap_drawfullmap 2020-04-11 00:41:57 +02:00
Zeno Rogue 1688bfcfb0 compute Euler characteristics when worldsize known 2020-04-11 00:41:48 +02:00
Zeno Rogue 9914ddf3ee rogueviz::banachtarski:: revived 2020-04-11 00:00:31 +02:00
Zeno Rogue d00498ad0b fixed unused capture warning 2020-04-10 12:14:43 +02:00
Zeno Rogue 9a0024b1c4 fixed compiling with MAXMDIM==3 2020-04-10 10:52:24 +02:00
Zeno Rogue 4d77c25dba changed VLA to vector 2020-04-10 02:13:38 +02:00
Zeno Rogue ac6548684c parser:: ../ for spline interpolation 2020-04-09 08:09:11 +02:00
Zeno Rogue 64914067dc option ..| to specify animations with sharp changes 2020-04-09 07:46:39 +02:00
Zeno Rogue 19c7c63677 rug:: a change to -rugv CLI option now acts immediately 2020-04-09 07:40:47 +02:00
Zeno Rogue cb25dd27be removed rogueviz::cspin (conflicts with hr::cspin and unused) 2020-04-09 07:40:12 +02:00
Zeno Rogue d5b46839cd rogueviz:🌻:more improvements 2020-04-08 17:38:21 +02:00
Zeno Rogue ee4f38e0c9 rogueviz:: rvtour priorities 2020-04-08 17:33:57 +02:00
Zeno Rogue 3515117aa8 rogueviz:🌻: correct colors 2020-04-08 01:36:22 +02:00
Zeno Rogue fca3a79839 rogueviz:🌻: RogueViz slide, infer one of three parameters from the other two, auto-adjust rug scale when changing density, auto-resize arrays 2020-04-08 01:36:08 +02:00
Zeno Rogue 2fbccb4a84 rogueviz:: added Impossible Triangle slides 2020-04-08 00:39:44 +02:00
Zeno Rogue 24f0f1b707 smooth_scrolling feature did not work correctly in non-isotropic geometries 2020-04-08 00:39:16 +02:00
Zeno Rogue 348f1afcb0 updated Android to 11.3i 2020-04-07 22:46:45 +02:00
Zeno Rogue 5dbbf233fa rogueviz:: added impossible ring (slide/config) 2020-04-07 17:41:47 +02:00
Zeno Rogue 750b91cfd9 exporting eMovementAnimation 2020-04-07 17:17:45 +02:00
Zeno Rogue 373a7c3469 rogueviz:: moved other viz to unsorted/ 2020-04-07 17:17:35 +02:00
Zeno Rogue 357117ce35 rogueviz::snow:: o-key menu 2020-04-07 17:16:03 +02:00
Zeno Rogue 58510299de in roguevizslide, do not call t() again on GeometryReset with QUICKGEO 2020-04-07 17:15:40 +02:00
Zeno Rogue dc46f42fa8 added snow to rogueviz-all 2020-04-07 17:15:17 +02:00
Zeno Rogue 9ba42a1db2 CLI option -tour disables startmenu 2020-04-07 17:14:45 +02:00
Zeno Rogue 72f84a1cf7 subcategory 'hyperbolic geometry and data' 2020-04-07 14:07:41 +02:00
Zeno Rogue 776364a2aa CAP_SOLV needed in snow 2020-04-07 14:07:08 +02:00
Zeno Rogue e7936a94c1 rogueviz::snow:: added slides 2020-04-07 14:06:30 +02:00
Zeno Rogue d695aee00d tour:: a system for easier restoration of slide-changed values 2020-04-07 14:06:00 +02:00
Zeno Rogue 7438fbf4c8 slide help is now string 2020-04-07 14:05:47 +02:00
Zeno Rogue 30dcfe9ada subfolder system to organize presentations 2020-04-07 11:43:59 +02:00
Zeno Rogue a57b2b9d7f Android version code 2020-04-07 11:43:25 +02:00
Zeno Rogue 736a18f0ea Android update 2020-04-06 14:03:19 +02:00
Zeno Rogue fcf22ea525 one more Android fixup 2020-04-06 14:03:10 +02:00
Zeno Rogue edeed6858a new music arrangements for Android 2020-04-06 14:03:00 +02:00
Zeno Rogue 67d057e8cf Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2020-04-06 13:23:29 +02:00
Zeno Rogue 3eca481b75 11.3h 2020-04-06 13:23:10 +02:00
Zeno Rogue 30c583822e Android music 2020-04-06 13:22:47 +02:00
Zeno Rogue d790374e93 ... but disable outline on eyes 2020-04-06 11:29:28 +02:00
Zeno Rogue b1e3b0cbdf if outline is set and no texture, wireframes are drawn 2020-04-06 11:25:55 +02:00
Zeno Rogue eca6a77753 CLI option -neonnf 2020-04-06 11:25:10 +02:00
Zeno Rogue 4e30c79c37 fixup to neon disabling textures 2020-04-06 11:24:57 +02:00
Zeno Rogue 5c414af31b bt:: direct_tmatrix are now saved in cgi 2020-04-06 11:24:11 +02:00
Zeno Rogue f4f6903321 renamed 'line width' option to 'vector graphics mode', and it is now available outside of OpenGL 2020-04-06 10:44:56 +02:00
Zeno Rogue 805c153c9f neon_nofill option; added XLAT to vector options; neon now also disables textured triangles 2020-04-06 10:44:27 +02:00
Zeno Rogue c1ed54763b 3D geometries should now render without OpenGL 2020-04-06 10:43:28 +02:00
Zeno Rogue 43fd94bed6 fixed flashes disappearing 2020-04-06 09:48:34 +02:00
Zeno Rogue a7347bdd20 Blizzard special heat rules are now only active if both lands are Blizzard 2020-04-06 09:36:57 +02:00
Zeno Rogue 8609389281 gain_once fixup 2020-04-06 09:36:41 +02:00
Zeno Rogue b79eb4de1d fixed cellcount 2020-04-06 09:26:59 +02:00
Zeno Rogue 97fc244ba9 changed some achievement_gain to achievement_gain_once (this also fixes achievements awarded too soon) 2020-04-06 09:22:05 +02:00
Zeno Rogue a1053d7eea fixed collection achievements 2020-04-06 09:13:20 +02:00
Zeno Rogue 577cdef203 Wetland rebalanced 2020-04-06 09:13:20 +02:00
Zeno Rogue 7fc0d5b051 less awkward map position in portrait 2020-04-06 09:13:20 +02:00
Zeno Rogue 134d7493ed added margins for mobiles 2020-04-06 09:13:20 +02:00
Zeno Rogue c76114face android: libz dependency 2020-04-06 09:13:20 +02:00
Zeno Rogue 29bc05552a arb:: cannot be chosen in mobile/web 2020-04-06 09:13:20 +02:00
Zeno Rogue 0fd30b7acc fixed the missing message when PC could not stay in place 2020-04-06 09:13:20 +02:00
Zeno Rogue cfbd5f830c fixed some warnings and errors with ll to int assignment 2020-04-06 09:13:20 +02:00
Zeno Rogue 1b9cdab98c added missing CAP_COMMANDLINE guards 2020-04-06 09:13:20 +02:00
Zeno Rogue 9a84dfb497 adjusted mobile to the new system 2020-04-06 09:13:20 +02:00
Zeno Rogue 548f1d3c1e separated function set_land_for_geometry 2020-04-05 10:58:56 +02:00
Zeno Rogue b6ecc15e1a enqueue_c 2020-04-05 10:58:56 +02:00
Zeno Rogue 9d292e59fc fixed potential crash in moveIvy 2020-04-05 10:58:56 +02:00
Zeno Rogue bacdacbb7f perspective_to_psace in 3D 2020-04-05 10:58:56 +02:00
Zeno Rogue 233adddd36 moved reg3 values to cgi 2020-04-05 10:58:56 +02:00
Zeno Rogue 8b7f2f3969 11.3g 2020-04-05 10:58:56 +02:00
Zeno Rogue 974a98e32c movegen in -cmove 2020-04-05 10:58:56 +02:00
Zeno Rogue 8eba146750 The powers you get for Orb of Yendor are now consistent with useless/dangerous/forbidden rules 2020-04-05 10:58:56 +02:00
Zeno Rogue c5e6c26fb4
Merge pull request #104 from Quuxplusone/red
Get the build green again. Fix a bug in the Travis config.
2020-04-04 01:03:16 +02:00
Zeno Rogue c623f6a6fc
Merge pull request #102 from Quuxplusone/make-clean
Makefile.simple: Delete some more build products in `make clean`
2020-04-04 01:02:33 +02:00
Arthur O'Dwyer a708c10f1d Get the build green again. Fix a bug in the Travis config.
The `HYPERROGUE_USE_ROGUEVIZ=1` build now uses inline variables.
So we pass `-std=c++17` in the Makefile. But GCC 5.4.0 (Travis's
default system compiler on Ubuntu Xenial) doesn't recognize
inline variables even in `-std=c++17` mode. Therefore, we must
pass `dist: bionic` to Travis, to get it to use Ubuntu Bionic,
whose system compiler is GCC 7.4.0. But we do this only for the
one entry in the build matrix that builds RogueViz with GCC
on Linux. Nobody else needs `dist: bionic`.

The bug was that my hack to support `g++-5` accidentally prevented
Travis from ever using `clang++`! So all our "Clang" builds were quietly
using regular `g++` instead. This is now fixed, and in fact I've removed
the `g++-5` build because its GCC 5.5.0 is not significantly different
from the regular `g++` build's GCC 5.4.0.

Also, add two more configurations to the build matrix.
Since `HYPERROGUE_USE_ROGUEVIZ=1` now uses `-std=c++17`, we want to
make sure that we run builds on every platform both with `HYPERROGUE_USE_ROGUEVIZ=1`
(to prove that the RogueViz code compiles) and without (to prove that
the non-RogueViz code still compiles as `-std=c++11`).
2020-04-03 17:18:24 -04:00
Zeno Rogue 0d00c70ed6 history animation is now allowed if allowIncreasedRange 2020-04-02 12:59:30 +02:00
Zeno Rogue 6817ed42ad allowIncreasedSight now returns true after gameover 2020-04-02 12:56:26 +02:00
Zeno Rogue a8b4ad3a85 namespace comment 2020-04-01 12:02:26 +02:00
Zeno Rogue 5c78ba8837 fixed the hotkey in 3d->camera rotation 2020-04-01 12:02:09 +02:00
Zeno Rogue 650604227a face/edge/vertex centering 2020-04-01 12:01:55 +02:00
Zeno Rogue dc2658a98c rogueviz::snow:: options -snow-color and -snow-intense 2020-04-01 11:28:20 +02:00
Zeno Rogue 94be9c850c rogueviz::snow:: hybrid geometries 2020-04-01 11:28:06 +02:00
Zeno Rogue f5ce50cc9e fixed compiling without CAP_RVSLIDES 2020-04-01 11:27:26 +02:00
Zeno Rogue abc2c057c8 fixed a crash bug with Zebra quotient 2020-04-01 11:27:13 +02:00
Zeno Rogue c60714f145 slr::lift_matrix as a separate function 2020-04-01 11:26:58 +02:00
Zeno Rogue 9b014ab824 constants are not static const not constexpr as older compilers do not like it 2020-04-01 11:26:45 +02:00
Zeno Rogue e53f61a8be history:: specifically mark starting position 2020-04-01 11:26:19 +02:00
Zeno Rogue fee3734c6b fixed -draw: start_game() was missing 2020-04-01 11:25:13 +02:00
Zeno Rogue 669d9a1d8a nicer 3D snowballs 2020-04-01 11:25:01 +02:00
Zeno Rogue 0abb296e06 commandline option -cmove 2020-04-01 11:03:36 +02:00
Zeno Rogue 08032809a2 rogueviz::snow:: random_snow_matrix as a separate function 2020-03-31 22:19:19 +02:00
Zeno Rogue 00735cac90 rogueviz::snow:: disable texture 2020-03-31 22:14:38 +02:00
Arthur O'Dwyer 73d1232a8f Makefile.simple: Delete some more build products in `make clean`. 2020-03-31 15:53:01 -04:00
Arthur O'Dwyer 8564e53d08 langen: Handle repeated strings better.
If a translation file contains two copies of the same English string,
with the same translation, then we don't care at all; just throw out
the second copy.

If a translation file contains two copies of the same English string,
with DIFFERENT translations, then (according to how the game does
translation) one of those translations must be inappropriate. Give
a warning in that case; and again, throw out the second copy because
we are forced to pick ONE translation for use within the game.

Also fix some minor typos I noticed in the strings.
2020-03-31 15:48:03 -04:00
Zeno Rogue a2f7c90a19 snow visualization added 2020-03-31 20:07:23 +02:00
Zeno Rogue 90895f29ec fixed random_spin() in three dimensions 2020-03-31 20:07:03 +02:00
Zeno Rogue 0a6aae0776 added area_auto and wvolarea_auto functions 2020-03-31 20:06:37 +02:00
Zeno Rogue af10592616 moved binsearch to hyper.h 2020-03-31 20:06:18 +02:00
Zeno Rogue 0446e25ebf added some more useful math constants to hyperpoint.cpp 2020-03-31 19:02:25 +02:00
Zeno Rogue cad1bccd1a fixed a crash in some horospherical tessellations 2020-03-31 18:59:16 +02:00
Zeno Rogue 2588438052 fixed the grid display in 3:2 2020-03-31 18:58:34 +02:00
Zeno Rogue dceb834f10 bt:: in gHoroHex, do not display debug data without DF_GEOM 2020-03-31 18:58:21 +02:00
Zeno Rogue 4e7aadf540 added tests for bt::normalized_at, and some old tests for distances 2020-03-31 18:57:22 +02:00
Zeno Rogue 8e865d1a69 bt:: the function normalized_at and its auxiliary functions 2020-03-31 18:55:43 +02:00
Zeno Rogue 6c4ca2254c Twisted S2xE 2020-03-29 17:38:37 +02:00
Zeno Rogue 3d3bde6e29 rogueviz:: some exports were missing 2020-03-29 17:37:08 +02:00
Zeno Rogue 46655ac4b5 ray:: removed unused uTest 2020-03-29 17:36:44 +02:00
Zeno Rogue 74b777b937 mymake now has commandline option -rv to add all RogueViz files 2020-03-29 17:36:20 +02:00
Zeno Rogue 76e6dc2002 utilities to create geometry raytracers which use only HyperRogue's control scheme 2020-03-29 17:35:42 +02:00
Zeno Rogue 409f171ca7 rogueviz:: added the Impossible Ring visualization 2020-03-29 16:13:23 +02:00
Zeno Rogue c0e11b731a rogueviz.cpp now includes only rogueviz core while rogueviz-all includes all; rogueviz modules can be included separately now 2020-03-29 16:03:31 +02:00
Zeno Rogue de0218b732 removed ../hyper.h from rogueviz.cpp 2020-03-29 15:38:06 +02:00
Zeno Rogue 220d23124b moved cname() to sag 2020-03-29 15:37:56 +02:00
Zeno Rogue 57eff8bc97 fixup to spiral move 2020-03-29 15:37:48 +02:00
Zeno Rogue 0c47c909ea fixup to remove kind: rogueviz.h was not commited 2020-03-29 15:37:26 +02:00
Zeno Rogue 133bbe5b93 rogueviz:: spiral to a separate file 2020-03-29 15:36:43 +02:00
Zeno Rogue 8a5c4b0887 rogueviz:: fixed init 2020-03-29 15:24:37 +02:00
Zeno Rogue 427df5e8fe patterns export patPalace, patZebraTriangles, patZebraLines 2020-03-29 15:23:18 +02:00
Zeno Rogue a1f7fa05f8 fixup fullnet comment 2020-03-29 15:15:18 +02:00
Zeno Rogue 0a7e413f87 rogueviz:: fullnet as separate file 2020-03-29 15:14:48 +02:00
Zeno Rogue 24dd8c9376 replaced rogueviz::kind with rogueviz::vizid and rogueviz::vizflags 2020-03-29 15:14:23 +02:00
Zeno Rogue 2b4b035604 fixup to last 2020-03-29 14:42:07 +02:00
Zeno Rogue 2d39bac2ef rogueviz:: removed dep on collatz 2020-03-29 14:41:24 +02:00
Zeno Rogue ed58bc9c6c removed tree and sag from rogueviz.h 2020-03-29 14:38:30 +02:00
Zeno Rogue 27df09e9b7 fixed some dependencies 2020-03-29 14:37:39 +02:00
Zeno Rogue d3d99d8a87 fixed some dependencies 2020-03-29 14:37:14 +02:00
Zeno Rogue 9cae1cce92 removed refs to kohonen from readcolor 2020-03-29 14:37:04 +02:00
Zeno Rogue dc7b19ebc8 rogueviz:: more cleanup 2020-03-29 14:10:50 +02:00
Zeno Rogue 0f3b00835e perfect forwarding in callhooks and callhandlers 2020-03-29 14:06:52 +02:00
Zeno Rogue 4384f65962 moved the remaining slides away from rogueviz.cpp 2020-03-29 13:52:10 +02:00
Zeno Rogue 505046e32f files actually added 2020-03-29 13:41:56 +02:00
Zeno Rogue 1e4a7ca6a3 rogueviz:: moved some slides to their files 2020-03-29 13:40:31 +02:00
Zeno Rogue b3329208c4 redesigned multiple slideshows in HyperRogue, and how rvslides is generated in RogueViz 2020-03-29 13:31:22 +02:00
Zeno Rogue 336d04fed8 moved SAG, tree and Collatz from rogueviz.cpp to separate files 2020-03-29 13:09:10 +02:00
Zeno Rogue c0f57c28bc added start_game() to -rugon 2020-03-29 12:03:07 +02:00
Zeno Rogue cfffdbcf24 fixed rug shading 2020-03-29 12:02:57 +02:00
Zeno Rogue 425cbef846 lerp for hyperpouint 2020-03-29 12:01:55 +02:00
Zeno Rogue d9e4ba62ec lalign function in hprint 2020-03-29 12:01:29 +02:00
Zeno Rogue d613f394cd additional Archimedean samples 2020-03-29 12:00:33 +02:00
Zeno Rogue e33852c60f arcm:: additional checking 2020-03-29 11:59:03 +02:00
Zeno Rogue 4e1f955d67 brief fixup 2020-03-27 21:54:15 +01:00
Zeno Rogue 6feec1307f brief fixup 2020-03-27 21:51:21 +01:00
Zeno Rogue 920f26e1e7 brief fixup 2020-03-27 21:49:57 +01:00
Zeno Rogue 14cc3652de brief fixup 2020-03-27 21:49:20 +01:00
Zeno Rogue 81c350d5dd more brief 2020-03-27 21:48:31 +01:00
Zeno Rogue 0412f077e6 added/fixed some \brief descriptions 2020-03-27 21:47:09 +01:00
Zeno Rogue eadd1d90c0 added some comments in drawing.cpp 2020-03-27 21:32:43 +01:00
Zeno Rogue edbd71cdff inv comments fixup 2020-03-27 21:14:09 +01:00
Zeno Rogue cb003fb051 added some comments to hr::inv 2020-03-27 21:10:55 +01:00
Zeno Rogue 2e6e715144 presentation comment fixup 2020-03-27 21:10:38 +01:00
Zeno Rogue 00bbdef12e added some comments in hr::tour 2020-03-27 20:54:21 +01:00
Zeno Rogue a331779e72 one more fixup 2020-03-27 20:37:43 +01:00
Zeno Rogue b7bb5c59f0 fixup system -> scores 2020-03-27 20:24:01 +01:00
Zeno Rogue d21ffedcb5 added some comments to system.cpp; also fixed a bug with the three new orbs not being saved correctly in OSM 2020-03-27 20:21:08 +01:00
Zeno Rogue 67f64e2d91 load/save stuff is now in namespace scores 2020-03-27 20:05:58 +01:00
Zeno Rogue 63c9cc1060 removed tactic::trailer 2020-03-27 19:57:57 +01:00
Zeno Rogue 32baf01192 removed the variable 'showoff' 2020-03-27 19:53:59 +01:00
Zeno Rogue a2b7da728a unused variable 'gamecount' removed 2020-03-27 19:46:36 +01:00
Zeno Rogue c6f9b1b7e2 added some comments in system 2020-03-27 19:39:46 +01:00
Zeno Rogue 8b37a9ffbf added inline for voidp 2020-03-27 19:39:33 +01:00
Zeno Rogue 4d4c904d3b neon_mode is now an enum 2020-03-27 19:38:15 +01:00
Zeno Rogue d68ff2eeda Triangle vizualization now includes the network 2020-03-27 13:47:48 +01:00
Zeno Rogue f4130ec730 fixed false positive warnings with _GLIBCXX_ASSERTIONS 2020-03-27 12:32:46 +01:00
Zeno Rogue a589b09fe4
Merge pull request #100 from V02460/doublebuffer
Fix setting doublebuffering
2020-03-27 12:06:00 +01:00
Zeno Rogue b5a70c1bc6
Merge pull request #92 from Quuxplusone/pedantic
Add `-pedantic` to the Makefile, and fix all resulting warnings
2020-03-27 12:04:40 +01:00
Zeno Rogue f03b7bd1b0 version in README 2020-03-27 11:50:57 +01:00
Kai A. Hiller f0cdc21dea Fix setting doublebuffering 2020-03-26 11:17:27 +01:00
Zeno Rogue bcc96ffa11 11.3f 2020-03-25 13:52:32 +01:00
Zeno Rogue c3928fdc01 fixed a crash in paracompact honeycombs 2020-03-25 13:47:52 +01:00
Zeno Rogue 1ecd525217 fixed a crash bug in {4,3,5} 2020-03-25 13:47:06 +01:00
Zeno Rogue dbfce6cf31 fixed a (broken) help screen displayed when mousing over another land in the Guided Tour 2020-03-25 13:46:34 +01:00
Zeno Rogue a967de75e0 fixed the interaction of Orb of Chaos and Orb of Time 2020-03-25 13:45:45 +01:00
Zeno Rogue f9580d29f6 fixed a bug in inverse_exp in Solv (caused wobbling) 2020-03-25 13:44:51 +01:00
Zeno Rogue 3caf700868 solv:: fixed another potential problem 2020-03-25 13:43:35 +01:00
Zeno Rogue eb747e761f in mymake updated the filename to savepng.o 2020-03-25 13:43:07 +01:00
Zeno Rogue 3c3aa2b061 updated the number of lands in Tour 2020-03-25 13:42:38 +01:00
Zeno Rogue 95a032eeb6 fixed a serious bug (it caused crashes in Solv racing, but it could cause other issues too) 2020-03-25 13:41:45 +01:00
Arthur O'Dwyer 14c098eaf9 Add whitespace to silence Clang's `-Wmisleading-indentation`. NFC.
./fieldpattern.cpp:440:5: error: misleading indentation;
    statement is not part of the previous 'if' [-Werror,-Wmisleading-indentation]
        if(isize(res) > limitp) return res;
        ^
2020-03-23 15:07:46 -04:00
Arthur O'Dwyer f49c57c4f0 Fix a bug found by Clang's `-Wtautological-overlap-compare`.
./help.cpp:880:89: error: overlapping comparisons always evaluate to false [-Werror,-Wtautological-overlap-compare]
        if(!((c->wall == waCavefloor || c->wall == waCavewall) && (c->land == laEmerald && c->land == laCaves)))
                                                                   ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
2020-03-23 14:48:56 -04:00
Arthur O'Dwyer 5cc8a41beb Turn C-style casts into reinterpret_casts for clarity. NFC. 2020-03-23 14:48:41 -04:00
Arthur O'Dwyer 2461b29ea2 Include <sstream> for the benefit of "hprint.cpp". 2020-03-23 14:45:59 -04:00
Arthur O'Dwyer af69faa646 Fix a harmless misuse of `DEBBI`. 2020-03-23 14:39:30 -04:00
Arthur O'Dwyer b450ca1596 Add `-pedantic` to the compiler options, and clean up some cruft. 2020-03-23 14:39:30 -04:00
Arthur O'Dwyer e59d22e399 Silence some pedantic format warnings from Clang.
rogueviz/rogueviz.cpp: In function ‘hr::color_t rogueviz::parse1(const string&)’:
    rogueviz/rogueviz.cpp:76:75: error: format ‘%x’ expects argument
    of type ‘unsigned int*’, but argument 3 has type ‘int*’ [-Werror=format=]
         sscanf(s.c_str(), "R%x,%x,%x,%d,%d", &mh, &minh, &alpha, &step, &start);
                                                                               ^

I believe these three variables should have been `color_t` all along.
I think this fix doesn't change any of the arithmetic, but I could be wrong.
2020-03-23 14:39:30 -04:00
Arthur O'Dwyer 364c33b1d8 Fix a (likely harmless) integer overflow in shmup.cpp.
shmup.cpp: In function ‘void hr::shmup::moveMonster(hr::shmup::monster*, int)’:
    shmup.cpp:1851:41: error: overflow in implicit constant conversion [-Werror=overflow]
         else killMonster(m, moNone, AF_CRUSH);
                                             ^
2020-03-23 14:39:30 -04:00
Arthur O'Dwyer 561a3ebade Silence a pedantic GCC warning by adding reinterpret_cast<void*>.
Here we're casting a function pointer to `void*`, which is not doable
with our implicit-conversions-only `hr::voidp(x)` helper, and is
not even doable with a `static_cast`; we must `reinterpret_cast`.
2020-03-23 14:39:30 -04:00
Arthur O'Dwyer 7a706478dc Add a helper function `voidp` to silence GCC warnings about `%p`.
We must fully qualify calls to `hr::voidp` because the expression
`voidp(x)` is ambiguous or worse. "/usr/include/zconf.h" defines
`voidp` in the global namespace as a typedef for `void*`.
We don't want an unsafe functional-style cast to `void*`;
we want to call our nice safe helper function. So we qualify the name.
2020-03-23 14:39:28 -04:00
Arthur O'Dwyer 13bf666e29 Lambdas can't have default arguments until C++14.
Arguably this is a reason to upgrade from C++11 to C++14,
or to give up completely on `-pedantic`, but I think it's
easy enough to eliminate these few nits.
2020-03-23 14:38:57 -04:00
Arthur O'Dwyer 41669ab720 Eliminate `-Wmissing-field-initializers` warnings. 2020-03-23 14:38:57 -04:00
Arthur O'Dwyer a0da10b408 Remove extraneous semicolons to quiet pedantic GCC warnings. 2020-03-23 14:38:57 -04:00
Zeno Rogue 14d2237c01 11.3e 2020-03-22 12:03:09 +01:00
Zeno Rogue 8aaeb4ea69 sight range changing no longer considered cheating in arb 2020-03-22 12:02:58 +01:00
Zeno Rogue 3bc2a8447a new tessellations 2020-03-22 11:43:31 +01:00
Zeno Rogue e55289e317 exp_parser:: replaced 'return' to 'res = ' (allows adding etc.), changed useless 'cld = rparse' to 'ld = rparse' 2020-03-22 11:27:59 +01:00
Zeno Rogue 32c6228319 arb:: utilities for making Archimedean tilings 2020-03-22 11:27:06 +01:00
Zeno Rogue 3b5e31156d arb:: a bit nicer 2020-03-22 10:15:57 +01:00
Zeno Rogue 0153cb905a fixed a bug in some spherical tilings 2020-03-22 10:15:03 +01:00
Zeno Rogue b2a6ae304d fixed a bug in loading maps from old versions 2020-03-22 09:48:24 +01:00
Zeno Rogue aa8906d6dd added some documentation 2020-03-22 09:47:56 +01:00
Zeno Rogue f1d84c248e added documentation for changes_t 2020-03-22 09:47:13 +01:00
Zeno Rogue d9b1461c81 tortoise:: moving over other tortoises no longer clones them 2020-03-22 09:46:51 +01:00
Zeno Rogue 11447fcb7b tortoise:: shading now can be disabled 2020-03-22 09:46:13 +01:00
Zeno Rogue 33bacc8731 updated version and documentation link in README 2020-03-22 00:24:52 +01:00
Zeno Rogue 85e6be8cab do not reset whichShape to 0 in special geometries 2020-03-21 19:06:54 +01:00
Zeno Rogue 862d2c7e65 exporting arb::load 2020-03-21 19:05:44 +01:00
Zeno Rogue c3fdc34f7c fixed CAP_RAY guards 2020-03-21 19:05:17 +01:00
Zeno Rogue 02112cb636 CLI option -precw 2020-03-21 19:04:23 +01:00
Zeno Rogue 64c63b7899 CAP_RAY 2020-03-21 10:49:07 +01:00
Zeno Rogue c131ed52ad fixed the Slime cheese in the Wetland 2020-03-21 10:37:00 +01:00
Zeno Rogue e21cbbd207 rogueviz:: export createViz 2020-03-21 10:15:11 +01:00
Zeno Rogue e70915de9d fixed distance computation in 3D fieldquotient 2020-03-21 10:14:54 +01:00
Zeno Rogue 7096d152be product:: shmup:: monsters rotate correctly 2020-03-21 09:35:54 +01:00
Zeno Rogue 2cc1de4a02 flocking:: product geometries 2020-03-21 09:34:50 +01:00
Zeno Rogue e3a1079a32 kohonen:: no longer display rings in 3D if we are not in Kohonen 2020-03-21 09:34:04 +01:00
Zeno Rogue c91209620e fire-related orbs are now useless in Wetland 2020-03-21 09:32:28 +01:00
Zeno Rogue 766c7389d5 Orb of the Fish is no longer useless in Wetland and Frog Park 2020-03-21 09:29:32 +01:00
Zeno Rogue 0d5625221e product: fixed hpxy in S2xE -- the bug caused asymmetric models 2020-03-21 09:29:08 +01:00
Zeno Rogue 5bd291784b kite:: sidewalls were not arranged correctly 2020-03-21 09:28:16 +01:00
Zeno Rogue 4e52804d45 moved spin_to and spin_from implementations outside of hr_map 2020-03-21 09:27:12 +01:00
Zeno Rogue 1bf12411bb flocking:: -flockspd option 2020-03-20 19:50:23 +01:00
Zeno Rogue c66fbe9ea0 flocking:: prevent crash in follow=2 when no boids found 2020-03-20 19:50:15 +01:00
Zeno Rogue 7449a48198 flocking:: nonisotropic 2020-03-20 19:49:59 +01:00
Zeno Rogue 8503104470 flocking:: updated the comment 2020-03-20 19:48:21 +01:00
Zeno Rogue 1d76e455e1 fixed some errors 2020-03-17 03:44:35 +01:00
Zeno Rogue 808bbe05a0 11.3d 2020-03-16 21:48:03 +01:00
Zeno Rogue 269ff6c74f fixed the missing messages (and click sound) when interacting with Orb of Yendor 2020-03-16 21:42:26 +01:00
Zeno Rogue bd065c3e90 changes: you no longer immediately die in LoEM 2020-03-16 21:40:27 +01:00
Zeno Rogue abf1b81a45 changes: fixed item disappearing with Orb of Winter 2020-03-16 21:38:27 +01:00
Zeno Rogue ed015de6c9 changes: fixed items disappearing with Orb of Magnetism 2020-03-16 21:38:13 +01:00
Zeno Rogue ca59e464b1 fixed Baby Tortoise colors in tour/PTM 2020-03-16 21:33:37 +01:00
Zeno Rogue b9a1ddbde9 fixed Tortoises losing their colors 2020-03-16 21:33:22 +01:00
Zeno Rogue edaa14e6a5 fixed Orb of Chaos losing Hive colors 2020-03-16 21:15:47 +01:00
Zeno Rogue d027969f70 added the missing lands to PTM 2020-03-16 21:14:46 +01:00
Zeno Rogue 227171ca05 nconf: highlight cursor 2020-03-16 21:11:15 +01:00
Zeno Rogue 5f93ac20b9 web version did not draw lines for some reason 2020-03-16 21:11:03 +01:00
Zeno Rogue 90393f8c99 inHighQual does not draw pixels for some reason 2020-03-16 21:10:45 +01:00
Zeno Rogue fedcd95708 nconf: save animation with shift+X 2020-03-16 21:09:25 +01:00
Zeno Rogue 558d7f9bba nconf: changing the pattern 2020-03-16 21:08:24 +01:00
Zeno Rogue c8f47407fd nconf: genellipse 2020-03-16 21:07:07 +01:00
Zeno Rogue 7a5178e8a6 added #include hyper.h to newconf 2020-03-16 21:06:46 +01:00
Zeno Rogue bd5fe67e17 mymake: -I is a compiler flag not a linger flag; added -DMYMAKE 2020-03-16 21:06:11 +01:00
Zeno Rogue 95aace3566 Windy: no more treasures with reptilecheat 2020-03-16 21:05:11 +01:00
Zeno Rogue 2347e07900 changes: removed buggy 'return true' from actual_move 2020-03-16 21:04:51 +01:00
Zeno Rogue 734fb385d4 11.3c 2020-03-12 10:35:54 +01:00
Zeno Rogue 6447333d03 Frog Park is no longer generated adjacent to Land of Motion 2020-03-12 10:33:03 +01:00
Zeno Rogue 83407fe2db Frogs are not generated until you are in Frog Park or have treasure 2020-03-12 10:31:25 +01:00
Zeno Rogue b9b2bbcd1e Orb of Safety is now marked dangerous in Wetland 2020-03-12 10:24:09 +01:00
Zeno Rogue 0381999842 Orb of Chaos no longer despecializes Tortoises 2020-03-12 10:22:46 +01:00
Zeno Rogue b3c105de0c 11.3b 2020-03-11 11:36:37 +01:00
Zeno Rogue f5600a65ff fixed a potential problem in floorshapes 2020-03-11 11:33:47 +01:00
Zeno Rogue f6b5d068fd Thumpers are now still considered when one cell outside the game range 2020-03-11 10:34:20 +01:00
Zeno Rogue 0d87481d29 fixed revolvers 2020-03-11 10:27:33 +01:00
Zeno Rogue 1e43d1e052 fixed Orb of Chaos in Terracotta Army 2020-03-11 10:10:35 +01:00
Zeno Rogue d6578cd074 you can no longer try to change the adjacency rule in infinite-order tilings 2020-03-11 10:09:23 +01:00
Zeno Rogue 0915c1074d fixed Dragon doublecounting 2020-03-11 10:06:12 +01:00
Zeno Rogue 3539d43690 fixed a crash in some tilings when drawing plain sidewalls 2020-03-11 09:53:53 +01:00
Zeno Rogue 28f8412604 clear memory correctly in wfc 2020-03-11 09:53:10 +01:00
Zeno Rogue bbf942ce56 fixed typo remembler 2020-03-11 09:52:54 +01:00
Zeno Rogue e956ea11d9 music added 2020-03-11 09:40:44 +01:00
Zeno Rogue 5f19b8cb40 mingw threads are used if OLD_MINGW is used, not for all WINDOWS 2020-03-08 11:57:51 +01:00
Zeno Rogue 6389614712 11.3a 2020-03-08 01:51:03 +01:00
Zeno Rogue c45a7b37cf USE_ZLIB=1 in Makefile.simple 2020-03-08 01:31:03 +01:00
Zeno Rogue b31e0db6df fixed centering lost after Eternal Motion in shmup 2020-03-08 01:24:34 +01:00
Zeno Rogue 41be224049 fixed centering disabled after Orb of Safety in shmup 2020-03-08 01:24:13 +01:00
Zeno Rogue 13c807c938 main menu cancels quit visualizations 2020-03-08 00:59:42 +01:00
Zeno Rogue cf968c8be1 optimized drawing side walls 2020-03-08 00:33:18 +01:00
Zeno Rogue e6b5a333ba fixed pushing in shmup 2020-03-08 00:02:00 +01:00
Zeno Rogue 2dca5c2d43 Warp Gates are now untouchable 2020-03-08 00:01:40 +01:00
Zeno Rogue cef474469a Orb of Chaos: fixed landparam switching 2020-03-07 23:54:48 +01:00
Zeno Rogue a8d2b97c27 changes: fixed Orb of Impact 2020-03-07 23:52:25 +01:00
Zeno Rogue b05f1759c9 moved Rose Garden back to R90 2020-03-07 23:50:47 +01:00
Zeno Rogue 40d0c7e5e2 fixed Swords moving randomly when having Orb of the Frog 2020-03-07 23:47:31 +01:00
Zeno Rogue c99c109a6e fixup to land_validity 2020-03-07 23:47:11 +01:00
Zeno Rogue 5f6eb39a9e export void teleportTo 2020-03-07 23:45:30 +01:00
Zeno Rogue 62c91688fc removed debug comment 2020-03-07 23:45:16 +01:00
Zeno Rogue 550d711f66 Frog has the same validity rules as Zebra 2020-03-07 23:44:34 +01:00
Zeno Rogue 76fd1a5da6 disabled Frog in shmup 2020-03-07 23:44:22 +01:00
Zeno Rogue 664db4ae39 fixed incorrect Raider killing 2020-03-07 23:44:13 +01:00
Zeno Rogue a0abb831f3 typo fixes 2020-03-07 23:44:00 +01:00
Zeno Rogue 99c497e86b fixed kill counting 2020-03-07 15:13:32 +01:00
Zeno Rogue 92f682596e fixed value_set 2020-03-07 13:23:57 +01:00
Zeno Rogue 15864644df tessellations added 2020-03-07 12:24:50 +01:00
Zeno Rogue d0f39ae9a8 ZLIB is now always required 2020-03-07 12:21:25 +01:00
Zeno Rogue a9febe3122 fixed a bug with Greater Demons in shmup 2020-03-07 12:21:12 +01:00
Zeno Rogue 2923008a0b fixed a crash in Orb of Plague 2020-03-07 12:20:30 +01:00
Zeno Rogue bf7abab85d changes: value_keep hrngen 2020-03-07 12:20:17 +01:00
Zeno Rogue b5509daf8e autoplay updated 2020-03-07 12:19:25 +01:00
Zeno Rogue a961499fbe update 11.3 2020-03-07 04:47:11 +01:00
Zeno Rogue 2eb3e2aef2 changes: fixed flipplayer 2020-03-07 04:47:11 +01:00
Zeno Rogue 1beec8792a fixed rosesmellstand message spam 2020-03-07 04:47:11 +01:00
Zeno Rogue 1ca2847c59 translated shape names 2020-03-07 04:47:11 +01:00
Zeno Rogue 0291c2ade3 dnameof now returns string 2020-03-07 04:47:11 +01:00
Zeno Rogue 35dbeea702 fixed ambush size 2020-03-07 04:47:11 +01:00
Zeno Rogue 4828623960 added people to the credits 2020-03-07 04:47:11 +01:00
Zeno Rogue 362489d629 named Knights 2020-03-07 04:47:11 +01:00
Zeno Rogue fcbb65b27e fixed missing error messages on move 2020-03-07 04:47:11 +01:00
Zeno Rogue 4a913485d0 changes: fixed Ivy 2020-03-07 04:47:11 +01:00
Zeno Rogue 633cfd25d2 KILLMUTANT achievement 2020-03-07 04:47:11 +01:00
Zeno Rogue 554b54e256 fixed a bug with Princess and Orb of Chaos 2020-03-07 04:47:11 +01:00
Zeno Rogue ca7f0cb4c3 achievement_gain_once 2020-03-07 04:47:11 +01:00
Zeno Rogue e53ff34cec fixed achievement names 2020-03-07 04:47:11 +01:00
Zeno Rogue 8d5a358b38 reg3:: added celldistance_534 2020-03-07 04:47:11 +01:00
Zeno Rogue 581d26ef45 added a comment to hyperbolic_celldistance 2020-03-07 04:47:11 +01:00
Zeno Rogue d4dfdc1a43 pcmove:: dont attack tree if you have flash 2020-03-07 04:47:11 +01:00
Zeno Rogue c87dc5a1f0 transl fixup 2020-03-07 04:47:11 +01:00
Zeno Rogue 0f0a164050 Eclectic in anormal is pattern_not_implemented_weird 2020-03-07 04:47:11 +01:00
Zeno Rogue 124ee9a467 fixed no-GL crash again 2020-03-07 04:47:11 +01:00
Zeno Rogue a053da7da2 setdist in moveWorm to prevent moving through ungenerated land 2020-03-07 04:47:11 +01:00
Zeno Rogue 8e0c066e33 rollback Hunting Dog 2020-03-07 04:47:11 +01:00
Zeno Rogue c590532d3a translation update 2020-03-07 04:47:11 +01:00
Zeno Rogue fc0c69c54e Lazurite color 2020-03-07 04:47:11 +01:00
Zeno Rogue f0e132f57a replaced parameters of geo_dist in precise_mouseover to fix incorrect working sometimes 2020-03-07 04:47:11 +01:00
Zeno Rogue d077dc959c do not generate Hunter Guards on top of other monsters, e.g. sandworms 2020-03-07 04:47:11 +01:00
Zeno Rogue 75bbbe6b42 changes:: ambush 2020-03-07 04:47:11 +01:00
Zeno Rogue 6e3e9e3eca ambush sizes 2020-03-07 04:47:11 +01:00
Zeno Rogue 229b3b812e improved the Palace component of Eclectic City 2020-03-07 04:47:11 +01:00
Zeno Rogue 6700e7e0dc Plague spreads out in all directions if you have side-attack orbs 2020-03-07 04:47:11 +01:00
Zeno Rogue be85de1ba0 bugfix: allies spread Plague even without Empathy 2020-03-07 04:47:11 +01:00
Zeno Rogue a8b53352d8 Ivies transmit Plague 2020-03-07 04:47:11 +01:00
Zeno Rogue 2b3091540e ... Empathy also protects from Chaos-stun 2020-03-07 04:47:11 +01:00
Zeno Rogue 56258c7239 fixup 2020-03-07 04:47:11 +01:00
Zeno Rogue db5bcef578 Orb of Empathy now protects your allies from your indirect attacks 2020-03-07 04:47:11 +01:00
Zeno Rogue 1a7ba1b556 fixed/changed some descriptions 2020-03-07 04:47:11 +01:00
Zeno Rogue 50123e42c7 fixed kraken head 2020-03-07 04:47:11 +01:00
Zeno Rogue 7067a501c8 changes: in Yendor 2020-03-07 04:47:11 +01:00
Zeno Rogue 3cb729f6a3 changes: flipplayer should be preserved on checkonly 2020-03-07 04:47:11 +01:00
Zeno Rogue 39703c1c15 Orb of Plague was too frequent 2020-03-07 04:47:11 +01:00
Zeno Rogue ced8e540d1 Wetland and Desert no longer can start together 2020-03-07 04:47:11 +01:00
Zeno Rogue a76cbaaf7c changes: fixed Holy Grail 2020-03-07 04:47:11 +01:00
Zeno Rogue 67f18080b4 fixed generating inside an enclosure in Eclectic 2020-03-07 04:47:11 +01:00
Zeno Rogue 5ff63bbb43 changes: fix for paired monsters 2020-03-07 04:47:11 +01:00
Zeno Rogue f98b422aa6 fixed Red Raiders killed incompletely by Orb of Chaos 2020-03-07 04:47:11 +01:00
Zeno Rogue ce8aae916f fixup: fixed moYellowSkipper existing 2020-03-07 04:47:10 +01:00
Zeno Rogue 88de3b8396 fixed native monster information for Ocean 2020-03-07 04:47:10 +01:00
Zeno Rogue ab82f36280 reduced the treasure reqs for Frog Pond 2020-03-07 04:47:10 +01:00
Zeno Rogue 304265c5ec fixed Water Lily color 2020-03-07 04:47:10 +01:00
Zeno Rogue 9ded3f8c7c changes:: fixed Galapagos 2020-03-07 04:47:10 +01:00
Zeno Rogue a33c4b8e50 fixed wrong treasure used for Frog balance 2020-03-07 04:47:10 +01:00
Zeno Rogue d84d8610b2 eclectic: disable charged and sandstone walls next to other lands 2020-03-07 04:47:10 +01:00
Zeno Rogue 10f63743ab elec: charged walls are destroyed if they are adjacent to grounded walls 2020-03-07 04:47:10 +01:00
Zeno Rogue 97d47c06fe changes: when monster stabbing 2020-03-07 04:47:10 +01:00
Zeno Rogue 7c9fa25743 fixed Great Walls in WFC 2020-03-07 04:47:10 +01:00
Zeno Rogue 477b0e4ed4 changes:: fixed mimics 2020-03-07 04:47:10 +01:00
Zeno Rogue d0bae23b6d Red Walls in Eclectic are now Eclectic Red 2020-03-07 04:47:10 +01:00
Zeno Rogue 63a770ba3b debug line removed in bignum::randomized_div 2020-03-07 04:47:10 +01:00
Zeno Rogue 248eecf960 new lands appear 2020-03-07 04:47:10 +01:00
Zeno Rogue 12c9113561 fixed Lancers 2020-03-07 04:47:10 +01:00
Zeno Rogue d18a05558a Safety in Farlands return to Icy 2020-03-07 04:47:10 +01:00
Zeno Rogue 5e48af2bb3 world turtles 2020-03-07 04:47:10 +01:00
Zeno Rogue a9a5a0c9c2 fixed checkmate rule in Jelly Kingdom 2020-03-07 04:47:10 +01:00
Zeno Rogue 406e289c1f added flag do_not_touch_this_wall 2020-03-07 04:47:10 +01:00
Zeno Rogue 62868fd752 fixed allies handling Demons incorrectly 2020-03-07 04:47:10 +01:00
Zeno Rogue 4415db42c2 fixed monster cloned after pushing 2020-03-07 04:47:10 +01:00
Zeno Rogue 4af00c37e8 fixed wrong facing direction after failed attack 2020-03-07 04:47:10 +01:00
Zeno Rogue 73e7d4dda9 changes:: LHU is rollbacked (important in Minefield and Brownian) 2020-03-07 04:47:10 +01:00
Zeno Rogue 6e4b041f6b changes:: princess::reviveAt was not kept 2020-03-07 04:47:10 +01:00
Zeno Rogue f04a73695d made Farlands more interesting 2020-03-07 04:47:10 +01:00
Zeno Rogue 613577935c fixed XLAT used incorrectly for leaves cut 2020-03-07 04:47:10 +01:00
Zeno Rogue 44c79a468c comments about imputed and direct 2020-03-07 04:47:10 +01:00
Zeno Rogue b0eb4e816b location.cpp now defines constants global_distance_limit and iteration_limit 2020-03-07 04:47:10 +01:00
Zeno Rogue c1c4cea31f replaced clearing::buggyplant with bpdata::buggy 2020-03-07 04:47:10 +01:00
Zeno Rogue 103a3a3411 more changes.ccell added 2020-03-07 04:47:10 +01:00
Zeno Rogue 806a224f91 changes:: changes.value_keep(imputed) for Mutant, not for normal Ivy 2020-03-07 04:47:10 +01:00
Zeno Rogue 831cadcb1d changes: in mapeffects and environment 2020-03-07 04:47:10 +01:00
Zeno Rogue 069d09d2b0 fixed a crash on buggy items 2020-03-07 04:47:10 +01:00
Zeno Rogue eedc976b20 fixed Orb of Plague was GUEST not NATIVE 2020-03-07 04:47:10 +01:00
Zeno Rogue 277f29f608 limited the world size to 10^7553 2020-03-07 04:47:10 +01:00
Zeno Rogue de60f18636 frog power is described in help 2020-03-07 04:47:10 +01:00
Zeno Rogue 5c32589a3a descriptions of the new content 2020-03-07 04:47:10 +01:00
Zeno Rogue 70d7fde8d4 clearing:: fixed some bugs when reached too far into the center 2020-03-07 04:47:10 +01:00
Zeno Rogue 62734bbfc5 charge help, and fixed a bug in help in weird geometry warped cells 2020-03-07 04:47:10 +01:00
Zeno Rogue 89fe310154 Orb of Slaying makes shrubs attackable 2020-03-07 04:47:10 +01:00
Zeno Rogue 561ce1a141 Orb of Vaulting and Dark Frogs can now jump over trees and explosive barrels 2020-03-07 04:47:10 +01:00
Zeno Rogue 3f5af1f5bd items[0] no longer is raised and is no longer displayed 2020-03-07 04:47:10 +01:00
Zeno Rogue 06e9808eb4 giant frogs are now allowed to jump 1 cell 2020-03-07 04:47:10 +01:00
Zeno Rogue 0c6b9aa696 fixed some bugs with frog orbs 2020-03-07 04:47:10 +01:00
Zeno Rogue 20910ec364 refactored frog_power and a minor fix 2020-03-07 04:47:10 +01:00
Zeno Rogue c390b63e0a colorful Plague 2020-03-07 04:47:10 +01:00
Zeno Rogue 2585affdf3 factored out orb_auxiliary_color 2020-03-07 04:47:10 +01:00
Zeno Rogue 688fc50036 Orb of Plague improved 2020-03-07 04:47:10 +01:00
Zeno Rogue ca60e463b3 undo: fixed Mimics rotation 2020-03-07 04:47:10 +01:00
Zeno Rogue 796975e8c7 more Orb fixes 2020-03-07 04:47:10 +01:00
Zeno Rogue 2636b195a2 fixed Orbs in undo 2020-03-07 04:47:10 +01:00
Zeno Rogue a36fb633b2 filename in pcmove documentation 2020-03-07 04:47:10 +01:00
Zeno Rogue 6b5481b876 rewritten undo: part 1a 2020-03-07 04:47:10 +01:00
Zeno Rogue e564622a48 rewritten undo: part 1 2020-03-07 04:47:10 +01:00
Zeno Rogue eb15070ac4 more map effects for the new stuff 2020-03-07 04:47:10 +01:00
Zeno Rogue 395d56f581 rebalanced Frog Orbs 2020-03-07 04:47:10 +01:00
Zeno Rogue a636138ef7 rebalanced Frog Park 2020-03-07 04:47:10 +01:00
Zeno Rogue 2a092b9624 hrand >= 90 not > 2020-03-07 04:47:10 +01:00
Zeno Rogue 421d04e98e wandering monsters 2020-03-07 04:47:10 +01:00
Zeno Rogue 03dcd5fa17 canReachPlayer now can put frogs 2020-03-07 04:47:10 +01:00
Zeno Rogue 3597342f28 marked new lands as 'not_implemented' for SC 2020-03-07 04:47:10 +01:00
Zeno Rogue 164d964bab removed unused #define LAND_YENDOR_CHAOS 2020-03-07 04:47:10 +01:00
Zeno Rogue 9a2f8e1529 new lands in the lists and in YC 2020-03-07 04:47:10 +01:00
Zeno Rogue cca9dacf13 achievements and leaderboards for new treasures 2020-03-07 04:47:10 +01:00
Zeno Rogue c55fddbdc9 error message when polydata is incorrect 2020-03-07 04:47:10 +01:00
Zeno Rogue 45bc731a5b colored Frog Jump Legs 2020-03-07 04:47:10 +01:00
Zeno Rogue 7121742d7c readMonster returns Pike for 'Pike' instead of Pikeman 2020-03-07 04:47:10 +01:00
Zeno Rogue a12bdf5d40 3D models for Frogs and Pikes 2020-03-07 04:47:10 +01:00
Zeno Rogue aec3589260 adjusted Frog Park to other geometries 2020-03-07 04:47:10 +01:00
Zeno Rogue 22127cadcd eclectic:: improvements 2020-03-07 04:47:10 +01:00
Zeno Rogue ff44063ef4 wfcgen:: record the original walls 2020-03-07 04:47:10 +01:00
Zeno Rogue 6d29728326 replaced weaSea with seaDeepWater in Galapagos and Irradiated, and adjusted the rules -- effects like snakepile now create shallow water 2020-03-07 04:47:10 +01:00
Zeno Rogue 8d8972e314 Shallow water coloring 2020-03-07 04:47:10 +01:00
Zeno Rogue 44be6bc583 inv:: multiplicity for Orb of Impact 2020-03-07 04:47:10 +01:00
Zeno Rogue 5e1464b6bd extracted is_zebra_trapdoor as a function 2020-03-07 04:47:10 +01:00
Zeno Rogue 1402ff17fb adjusting Eclectic City to Euclidean and Pure 2020-03-07 04:47:10 +01:00
Zeno Rogue e62705787e ungenerated land is now Isolator 2020-03-07 04:47:10 +01:00
Zeno Rogue 3ee3c471ca fixed a possible crash while drawing ClosedGates 2020-03-07 04:47:10 +01:00
Zeno Rogue 0de0714ba5 colors for Orb of Chaos and Orb of Plague 2020-03-07 04:47:10 +01:00
Zeno Rogue 6317101d66 Orb of Plague 2020-03-07 04:47:10 +01:00
Zeno Rogue e13a604418 emscripten uses ZLIB 2020-03-07 04:47:10 +01:00
Zeno Rogue ca54d909db Orb of the Swamp (yet unimplemented) 2020-03-07 04:47:10 +01:00
Zeno Rogue aff0b864eb orbgen information for the new Orbs 2020-03-07 04:47:10 +01:00
Zeno Rogue 6eb3270900 qtm rewritten 2020-03-07 04:47:10 +01:00
Zeno Rogue 02017ef88b load/save boxes for the new features 2020-03-07 04:47:10 +01:00
Zeno Rogue f4b7810b10 Orb of Earth effects in the new lands 2020-03-07 04:47:10 +01:00
Zeno Rogue 04b3d5e8d4 inv:: missing char explained 2020-03-07 04:47:10 +01:00
Zeno Rogue 8393128106 on-activation effect for Orb of Digging in OSM 2020-03-07 04:47:10 +01:00
Zeno Rogue 98d11d7ba1 new Orbs in OSM 2020-03-07 04:47:10 +01:00
Zeno Rogue b31e81f442 fixed a crash bug while drawing 2020-03-07 04:47:10 +01:00
Zeno Rogue b34df21540 Eclectic in 3D 2020-03-07 04:47:10 +01:00
Zeno Rogue d725c2b17c Gold Ball looks like ball 2020-03-07 04:47:10 +01:00
Zeno Rogue 2ccb48f765 WFC can be experimented with 2020-03-07 04:47:10 +01:00
Zeno Rogue 3cfa608c4a implemented Rusalka and Pike 2020-03-07 04:47:10 +01:00
Zeno Rogue 511a8e9157 onemore fixup to ElectricLand 2020-03-07 04:47:10 +01:00
Zeno Rogue 0a1d29ad1a fixup to isElectricLand 2020-03-07 04:47:10 +01:00
Zeno Rogue a1eab8d183 heat in Eclectic 2020-03-07 04:47:10 +01:00
Zeno Rogue 7e75c28fc1 Frogs implemented 2020-03-07 04:47:10 +01:00
Zeno Rogue 73bd3c7369 fixup to new lands defined 2020-03-07 04:47:10 +01:00
Zeno Rogue 8cdb45ec01 adjusted elec to Eclectic City 2020-03-07 04:47:10 +01:00
Zeno Rogue 0dc63ee0ba killing Frogs gives orb powers 2020-03-07 04:47:10 +01:00
Zeno Rogue 92deb5e6b1 adjusting Miners for Eclectic 2020-03-07 04:47:10 +01:00
Zeno Rogue d1bbc6e83e wfcgen, and generating laEclectic 2020-03-07 04:47:10 +01:00
Zeno Rogue f7135800b6 generating laWet and laFrog 2020-03-07 04:47:10 +01:00
Zeno Rogue 833c8080ff set ipd via CLI 2020-03-07 04:47:10 +01:00
Zeno Rogue f84f51e972 new utility functions: (de)serialize, as_cstring 2020-03-07 04:47:10 +01:00
Zeno Rogue 8cf90ef848 added the new monsters to killtable 2020-03-07 04:47:10 +01:00
Zeno Rogue 5d9fdd83a8 fixed ODS; non-isotropic ODS 2020-03-07 04:47:10 +01:00
Zeno Rogue 00e436f0e2 variant:: cleaner implementation 2020-03-07 04:47:10 +01:00
Zeno Rogue bc12d35053 fixup to ElectricLand 2020-03-07 04:47:10 +01:00
Zeno Rogue d08c5ea0c4 genderswitch for Rusalka/Topielec 2020-03-07 04:47:10 +01:00
Zeno Rogue 8fb66450dd Rusalka/Topielec graphics 2020-03-07 04:47:10 +01:00
Zeno Rogue 5622901b5a consistent coloring of Frog-orbs and Impact 2020-03-07 04:47:10 +01:00
Zeno Rogue 513750a028 vector graphics of Frogs and Pikes 2020-03-07 04:47:10 +01:00
Zeno Rogue 40dc80df9c implemented Orb of Chaos 2020-03-07 04:47:09 +01:00
Zeno Rogue b96eb32246 cleaned up jumping orbs; implemented Orb of Impact 2020-03-07 04:47:09 +01:00
Zeno Rogue 99e64d862d shallow water graphics and mechanics 2020-03-07 04:47:09 +01:00
Zeno Rogue 87254a551e new lands declared 2020-03-07 04:47:09 +01:00
Zeno Rogue 5707fac1a7 new ring shape: shFrogRing 2020-03-07 04:47:09 +01:00
Zeno Rogue 04e5a47371 all chaos modes can now be used for achievements 2020-02-26 00:54:25 +01:00
Zeno Rogue acfd182913 cleaned up getNewLand 2020-02-25 12:28:24 +01:00
Zeno Rogue 36f218f1bf Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2020-02-17 10:34:10 +01:00
Zeno Rogue d673ae41b7 changed the default 'how' to 8 2020-02-17 10:33:56 +01:00
Zeno Rogue 155c2f38d0
Merge pull request #90 from Quuxplusone/gl-deprecation
Define `GL_SILENCE_DEPRECATION` on OSX
2020-02-16 17:53:50 +01:00
Arthur O'Dwyer 3f129ff6e5 Define `GL_SILENCE_DEPRECATION` on OSX.
This is gross and inexplicable, but Xcode now spews warnings whenever
you use any part of OpenGL on Mac.
https://www.reddit.com/r/opengl/comments/b44tyu/apple_is_deprecating_opengl/
https://www.reddit.com/r/opengl/comments/8okcf1/opengl_deprecated_in_macos_1014/
Fortunately the workaround for now is to just suppress the warnings.

    In file included from hyper.cpp:26:
    ./glhr.cpp:21:20: error: 'glGetError' is deprecated: first deprecated
          in macOS 10.14 - OpenGL API deprecated. (Define GL_SILENCE_DEPRECATION
          to silence these warnings) [-Werror,-Wdeprecated-declarations]
      GLenum errCode = glGetError();
                       ^
2020-02-16 10:10:50 -05:00
Zeno Rogue 3b10c95a32
Merge pull request #89 from Quuxplusone/gcc54
Remove all GCC 4.6 support, and for other purposes
2020-02-16 11:09:35 +01:00
Arthur O'Dwyer e7ce5e3084 Fix some typos in the README. 2020-02-15 23:01:25 -05:00
Arthur O'Dwyer 6089a8b391 Const-correctness in langen.cpp. 2020-02-15 22:59:04 -05:00
Arthur O'Dwyer d0a6212fd4 Remove all GCC 4.6 support; new minimum is GCC 5.4. 2020-02-15 16:22:15 -05:00
Zeno Rogue 8c87f123a0 CAP_ZLIB to tell whether we need ZLIB 2020-02-15 14:10:49 +01:00
Zeno Rogue 33e6242f36
Merge pull request #88 from Quuxplusone/unbreak-travis
Fix several minor issues causing TravisCI to be red
2020-02-15 13:54:12 +01:00
Arthur O'Dwyer e6ac60b356 Fix a typo-bug in f20a6bf2: s/phtread/pthread/
However, this does not unbreak the build on Emscripten.
Emscripten doesn't know where to find <zlib.h> at all:

    ./sysconfig.h:429:10: fatal error: 'zlib.h' file not found
    #include <zlib.h>
             ^~~~~~~~
2020-02-14 13:17:42 -05:00
Arthur O'Dwyer fe53cd09ad Silence a warning to fix the build break on `clang++ -std=c++11 -Wall`.
./rogueviz/rewriting.cpp:120:37: error: suggest braces around initialization of subobject [-Werror,-Wmissing-braces]
      ginf[gInfOrderMixed].distlimit = {1, 1};
                                        ^~~~
                                        {   }
2020-02-14 13:14:48 -05:00
Arthur O'Dwyer a07e1d0809 Fix a compiler error from `g++-4.6 -std=c++0x`.
reg3.cpp:1129:47: error: expected primary-expression before ‘{’ token

This doesn't completely fix the build break on gcc46.
It's probably time to retire that build from TravisCI.
2020-02-14 13:12:04 -05:00
Zeno Rogue ed15d381aa added -O3 to mymake suggestion 2020-02-13 12:12:37 +01:00
Zeno Rogue aa02d6808b rogueviz:: impossible triangle viz 2020-02-13 12:09:42 +01:00
Zeno Rogue a241a3df61 nilv:: get_heptagon_at 2020-02-13 11:09:27 +01:00
Zeno Rogue e133fffd5d nilv:: nilwidth option 2020-02-13 11:09:18 +01:00
Zeno Rogue 42f4167a26 CLI option -mgen-off to disable wandering monster 2020-02-13 11:08:39 +01:00
Zeno Rogue 3441d86d2c reptilecheat disables stuff in the Minefield 2020-02-13 11:07:28 +01:00
Zeno Rogue 86009d1e49 improved bucketer 2020-02-13 11:06:54 +01:00
Zeno Rogue 1712914771 manual-animation: mrec_first and mrec_last actually taken into account 2020-02-13 11:05:10 +01:00
Zeno Rogue 689adb8681 manual-animation: 'u' now can clear the whole recording 2020-02-13 11:04:52 +01:00
Zeno Rogue 541448ca38 manual-animation: save the route in Nil 2020-02-13 11:03:35 +01:00
Zeno Rogue 1e0f8f45b1 manual-animation: b4_distance only in Solv 2020-02-13 11:03:22 +01:00
Zeno Rogue cb4f0e3984 manual-animation: spinaround and fix-orientation features 2020-02-13 11:02:56 +01:00
Zeno Rogue bdb5c7b7b6 fixed mine colors in ASCII 2020-02-13 11:01:20 +01:00
Zeno Rogue 6f9b5d693a 3D ascii was not actually available 2020-02-08 11:22:16 +01:00
Zeno Rogue 04f69c4c9a patterns: J (j with changes) 2020-02-08 10:50:04 +01:00
Zeno Rogue 97ff8166f5 11.2x 2020-02-08 10:49:47 +01:00
Zeno Rogue 8cba24fb20 11.2x 2020-02-07 19:45:47 +01:00
Zeno Rogue 81ad14061b fixed a crash in S^3 2020-02-07 19:45:20 +01:00
Zeno Rogue 1acfe8becb fixed bucketer in H2xE 2020-02-07 19:45:07 +01:00
Zeno Rogue fba1953f63 fixed getcurrfp in horospherical hyperbolic 2020-02-07 19:44:44 +01:00
Zeno Rogue 759fed36f9 raycaster: correct centering 2020-02-07 19:13:18 +01:00
Zeno Rogue 2a01728d19 'j' pattern: works in Nil, takes canvasback into account 2020-02-07 18:36:37 +01:00
Zeno Rogue ea55f43abf better centering in cheatmode 2020-02-07 18:35:24 +01:00
Zeno Rogue 5cbe61a823 fixed a crash when displaying inventory with OpenGL off 2020-02-07 18:34:47 +01:00
Zeno Rogue 602ee9df0c fixed rotspace 2020-02-07 18:34:19 +01:00
Zeno Rogue 4b4c21cfa4 neonmodes work better with bordcolor changed 2020-02-07 18:33:58 +01:00
Zeno Rogue c9401baff3 nicer side plainwalls in binary tiling 2020-02-07 18:33:03 +01:00
Zeno Rogue 771fc5617f dpgen:: no timer ghosts 2020-01-30 17:46:20 +01:00
Zeno Rogue e07f5fed0c dual:: when one side is Euclidean, only the other one rotates 2020-01-30 17:45:51 +01:00
Zeno Rogue 8005b39f6f ASCII/3D mode, also reacts to neon settings 2020-01-30 17:45:05 +01:00
Zeno Rogue 34d5ec2242 horo_distance naming conflict, renamed to horo_gen_distance 2020-01-29 19:32:32 +01:00
Zeno Rogue ea29b1cb99 11.2w 2020-01-29 19:29:16 +01:00
Zeno Rogue 79038b12f8 in configure.ac, used deflate instead of deflateInit (since deflateInit is a macro) 2020-01-29 19:27:20 +01:00
Zeno Rogue 61d76622a4 reg3:: rule:: optimized link_structures 2020-01-29 19:23:31 +01:00
Zeno Rogue 64f9718a54 increased layer size and decreased wall quantity (replaced with rubble) in rule Temples 2020-01-29 19:23:00 +01:00
Zeno Rogue 0b18865654 horocycle generation distance reduced in rule 2020-01-29 19:20:25 +01:00
Zeno Rogue d6dddec4dc fixup MAXMDIM 2020-01-29 19:04:54 +01:00
Zeno Rogue 9d2d7fbde8 fixed a warning on hwrite string 2020-01-29 18:21:35 +01:00
Zeno Rogue 081fee1907 fixed lmouseover computation destroying dual geometry 2020-01-29 18:21:12 +01:00
Zeno Rogue c925dc162c no other emeraldval in 535 2020-01-29 18:20:14 +01:00
Zeno Rogue 5ba7b4ce11 changed Pointer_stringify to UTF8ToString in screenshot.cpp 2020-01-29 18:19:10 +01:00
Zeno Rogue f05fa60400 added MAXMDIM guards 2020-01-29 18:18:51 +01:00
Zeno Rogue 3500d67af6 11.2v and adjust to older compilers 2020-01-28 20:21:23 +01:00
Zeno Rogue d79c06e9d1 more efficient find_emeraldval 2020-01-28 19:47:41 +01:00
Zeno Rogue 7b6cde592b fixed a problem with create_pattern() when not using currfp 2020-01-28 19:47:27 +01:00
Zeno Rogue e2f944c6d2 reg3: reduced barlev inside cyclic lands 2020-01-28 19:46:42 +01:00
Zeno Rogue da2bcb1694 randomized Camelot in honeycombs 2020-01-28 19:45:46 +01:00
Zeno Rogue 37ff798ee4 default_levs() in honeycombs can be 0 2020-01-28 19:45:24 +01:00
Zeno Rogue 9c25804a05 added dual geometry puzzle generator 2020-01-28 17:58:55 +01:00
Zeno Rogue 27e19ca5ca mapeditor:: canvas_default_wall can be set now 2020-01-28 17:58:55 +01:00
Zeno Rogue fa64573971 fixed the thread locking 2020-01-28 17:58:55 +01:00
Zeno Rogue 109b57df14 added a comma in shmup help text 2020-01-28 17:58:55 +01:00
Zeno Rogue 610ec5a51f Temple rings shown in the help screen 2020-01-28 17:58:55 +01:00
Zeno Rogue 6be19024bb reg3:: emeraldval and fiftyval computed in rule-based maps based on currfp 2020-01-28 17:58:55 +01:00
Zeno Rogue 96f872dd18 reg3:: bounded_celldistance used in create_patterns() 2020-01-28 17:58:55 +01:00
Zeno Rogue 100b8f3534 cellrotations are now structs, and include inverses 2020-01-28 17:58:55 +01:00
Zeno Rogue 7fd199dd49 reg3:: nice Zebra and Graveyard patterns 2020-01-28 17:58:55 +01:00
Zeno Rogue be90304f12 better display of trapdoors in Zebra 3D 2020-01-28 17:58:55 +01:00
Zeno Rogue b931e5e333 fixed z-fighting when drawing Onyx in 3D 2020-01-28 17:58:55 +01:00
Zeno Rogue a5a9104abf reg3:: Camelot 2020-01-28 17:58:55 +01:00
Zeno Rogue c556d21434 renamed/documented/improved the rule generators, and the rules now include centers for all fieldvals 2020-01-28 17:58:55 +01:00
Zeno Rogue 3df5eff7f8 function 'relative_matrix_recursive' for reg3_rule and arbi 2020-01-28 17:58:55 +01:00
Zeno Rogue 370cdafaf8 Updir and updir_alt functions. Also no more double edges in structure trees 2020-01-28 17:58:55 +01:00
Zeno Rogue 59a36709f8 fixup to celldistAlt (masterAlt) 2020-01-28 17:58:55 +01:00
Zeno Rogue 3804d2bfb7 reg3:: added DEBB(DF_GEOM) 2020-01-28 17:58:55 +01:00
Zeno Rogue 0e86f60806 reg3:: correct alt-maps in rule 2020-01-28 17:58:55 +01:00
Zeno Rogue e806e9a738 arcm:: fixed uninitialized variables 2020-01-28 17:58:55 +01:00
Zeno Rogue 970d0c4699 fixed the trivial generation of Camelot in {even,x} tilings 2020-01-28 17:58:55 +01:00
Zeno Rogue 32a5368241 generateAlts: fixed generation in some geometries 2020-01-28 17:58:55 +01:00
Zeno Rogue 570272fd7a separated bounded_distance and clueless_distance into functions 2020-01-28 17:58:55 +01:00
Zeno Rogue 4287ddf883 default_levs() as a function 2020-01-28 17:58:55 +01:00
Zeno Rogue 00262e8f6a reg3:: hrmap_reg3_rule (alt not working correctly yet) 2020-01-28 17:58:55 +01:00
Zeno Rogue 891fd3b0aa generate honeycomb rules 2020-01-28 17:58:55 +01:00
Zeno Rogue 6a5b71cbdc reg3:: hrmap_field3: do not generate pattern planes in 436 2020-01-28 17:58:55 +01:00
Zeno Rogue cb53253a26 reg3:: hrmap_field3 is now parametrized by fp 2020-01-28 17:58:55 +01:00
Zeno Rogue 62990a765e shstream:: initialize from a string 2020-01-28 17:58:55 +01:00
Zeno Rogue b58138cd94 fieldpattern:: load found solutions from shstreams 2020-01-28 17:58:55 +01:00
Zeno Rogue 9f947c70a7 fat edges in linepatterns in 3D 2020-01-28 17:58:55 +01:00
Zeno Rogue f20a6bf2f6 zlib used for (de)compression 2020-01-26 00:30:13 +01:00
Zeno Rogue 76a0ea8795 patterns W and X 2020-01-25 19:24:51 +01:00
Zeno Rogue 9e2a9604bd fieldpattern: fixed Prime in 536, also added small quotients as comments in 435 and 534 2020-01-25 19:23:37 +01:00
Zeno Rogue 3e78fd4599 manual-animation: configure sightrange settings 2020-01-25 19:22:43 +01:00
Zeno Rogue ecc8aa8192 added CLI option -no-stamp 2020-01-25 19:22:26 +01:00
Zeno Rogue bcfb622288 added gSpace436 2020-01-25 19:22:08 +01:00
Zeno Rogue 88c71d8f21 hwrite/hread string now works with long strings (over 255 characters) 2020-01-25 19:21:56 +01:00
Zeno Rogue 7027905dcc update to rewriting 2020-01-19 21:52:14 +01:00
Zeno Rogue 2878cc5730 fixed a warning on clang 2020-01-19 11:54:35 +01:00
Zeno Rogue 790275e3e5 string rewriting puzzle 2020-01-19 11:50:04 +01:00
Zeno Rogue 6ebf2545d6 web: get_value function 2020-01-19 11:49:49 +01:00
Zeno Rogue 4b7739e80d fixed a freeze when drawing offscreen grid lines 2020-01-19 11:49:35 +01:00
Zeno Rogue e925f6e93c added rewriting to RogueViz 2020-01-19 00:34:38 +01:00
Zeno Rogue dfca9751d3 11.2u 2020-01-19 00:34:07 +01:00
Zeno Rogue 29a2cb58ef fixed CAP_THREAD==0 2020-01-19 00:33:57 +01:00
Zeno Rogue 24b3d17eb4 mixed infinite order 2020-01-19 00:13:54 +01:00
Zeno Rogue 4fd196c6d8 added _WIN32_WINNT as required by mingw threads 2020-01-18 17:21:33 +01:00
Zeno Rogue 756f4b3cd9 in hpcpush further increased error_threshold unless Euclidean 2020-01-18 17:19:58 +01:00
Zeno Rogue fbd978598e getcurrfp returns fp_invalid for other quotient spaces 2020-01-18 17:16:16 +01:00
Zeno Rogue c5f1eb27c0 crystal:: in relative_matrix, h2==h1 handled 2020-01-18 17:15:29 +01:00
Zeno Rogue 090a0ebdef manual-animation:: smoothening, configuration via CLI 2020-01-18 17:15:03 +01:00
Zeno Rogue 3daa6cd34c fixed reflection facing in Hall of Mirrors 2020-01-18 17:12:37 +01:00
Zeno Rogue ca3232c3bb extended 'linewidth' setting: illustration mode, hint about Alt, disable shadows, bright mode, colorblind simulation 2020-01-18 17:11:57 +01:00
Zeno Rogue 6f89d2176f removed the MAX_EDGE limitation 2020-01-18 16:59:16 +01:00
Zeno Rogue 2271a67506 removed the MAX_EDGE limit 2020-01-18 16:03:32 +01:00
Zeno Rogue a6da5ded75 netgen:: hide rotation 2020-01-16 19:20:34 +01:00
Zeno Rogue 3f2c9ded4b netgen:: uses OpenGL, triangles and lines are now drawn even without SDLGFX 2020-01-16 19:20:22 +01:00
Zeno Rogue cb338ca607 changed mutex to recursive_mutex 2020-01-16 19:19:44 +01:00
Zeno Rogue 5b38b07e8c pthread added to configure.ac 2020-01-16 19:19:32 +01:00
Zeno Rogue 61cc2451b2 changelog update 2020-01-16 18:12:48 +01:00
Zeno Rogue b5d43fd480 threads in MinGW 2020-01-16 18:11:59 +01:00
Zeno Rogue 9444401ffa fixup to last 2020-01-16 18:11:01 +01:00
Zeno Rogue 3a2bb7bd09 model on OSX 2020-01-16 18:08:23 +01:00
Zeno Rogue 7c9dd4ea59 11.2t 2020-01-16 17:26:47 +01:00
Zeno Rogue 72424bdb0f extra tes files 2020-01-16 17:25:25 +01:00
Zeno Rogue 0d307c011c racing:: in 3D modes, show 3D configuration instead of 'config projection' 2020-01-16 17:13:57 +01:00
Zeno Rogue 209b21bc31 small debug 2020-01-16 17:13:57 +01:00
Zeno Rogue bf128219c0 strafe: cmove not move 2020-01-16 17:13:57 +01:00
Zeno Rogue 5382038c4e field quotient discovery 2020-01-16 17:13:57 +01:00
Zeno Rogue a587a3c6a4 added the missing solv-geodesics table, updated other geodesics tables 2020-01-16 17:13:57 +01:00
Zeno Rogue 43f4122d6e solv-table:: sample invocations 2020-01-16 17:13:57 +01:00
Zeno Rogue dadd817417 solv-table:: -iz-list applies dimZ 2020-01-16 17:13:57 +01:00
Zeno Rogue 50d7a725d4 solvtable:: unittest added 2020-01-16 17:13:57 +01:00
Zeno Rogue 1962900ce0 fixup nonisotropic.cpp 2020-01-16 17:13:57 +01:00
Zeno Rogue dd0b4ec414 sn:: cleanup, also changed z_to_iz function from tanh to Poincare-based 2020-01-16 17:13:57 +01:00
Zeno Rogue 8e7b2780b8 reset memory in nearer/furthest map 2020-01-16 17:13:57 +01:00
Zeno Rogue 18206fa55f patterns:: furthest_map (Y) 2020-01-16 17:13:57 +01:00
Zeno Rogue 7038df605c field:: quick distance computations in 3D 2020-01-16 17:13:57 +01:00
Zeno Rogue 9d12289933 ray:: unsuccessful attempt to adjust the raycaster to web 2020-01-16 17:13:57 +01:00
Zeno Rogue 2e5ee99570 shader:: added missing mediump 2020-01-16 17:13:57 +01:00
Zeno Rogue bd3a8ae3bb 'nearer' pattern 2020-01-16 17:13:57 +01:00
Zeno Rogue 1b87a22874 adjusted sn shader 2020-01-16 17:13:57 +01:00
Zeno Rogue 7b3c835429 fixed lineanimation for arb 2020-01-16 17:13:57 +01:00
Zeno Rogue 19769feaaf fieldpattern:: error detection in EASY 2020-01-16 17:13:47 +01:00
Zeno Rogue b12e1a71dd fieldpattern:: matrix now based on std::array 2020-01-16 17:13:47 +01:00
Zeno Rogue 80b6b536fc sn:: solv-table generator: improve table (to compute shortest geodesics), bugfixer, visualizer 2020-01-16 17:13:47 +01:00
Zeno Rogue e964ede86d sn:: solv-table generator: more precise ix_to_x 2020-01-16 17:13:47 +01:00
Zeno Rogue 549aa5bdb1 sn:: changed table presentation to Poincare 2020-01-16 17:13:47 +01:00
Zeno Rogue 9ab5c7d98f updated solv_table 2020-01-16 17:13:47 +01:00
Zeno Rogue 31c13bcb57 colorize for gSeifertCover 2020-01-16 17:13:47 +01:00
Zeno Rogue cd98e0314c deprecated gTorus, gField435 and gField534 2020-01-16 17:13:47 +01:00
Zeno Rogue 59a9605b13 arb::relative_matrix 2020-01-16 17:13:37 +01:00
Zeno Rogue 6956808dea arb:: fixed the bad performance 2020-01-15 17:55:36 +01:00
Zeno Rogue 13c1d85439 arbi:: check errors 2020-01-15 17:55:04 +01:00
Zeno Rogue 20c962ef9f arbi:: fixmatrix 2020-01-15 17:54:54 +01:00
Zeno Rogue c08462b5a2 extra tessellations 2020-01-07 00:05:49 +01:00
Zeno Rogue 0af6ef46ab fixed a bug with arb spherical plain floors 2020-01-07 00:03:57 +01:00
Zeno Rogue 12d28b43f5 added missing CAP_RACING guards 2020-01-06 23:01:11 +01:00
Zeno Rogue 2ebef9e754 missing override added 2020-01-06 22:18:10 +01:00
Zeno Rogue 0cd2765da4 11.2s 2020-01-06 22:12:44 +01:00
Zeno Rogue 80ae41edf6 extra tessellation files 2020-01-06 22:12:19 +01:00
Zeno Rogue 87b8f585d4 improved effciency of 535h by covering seifert_cover 2020-01-06 22:10:44 +01:00
Zeno Rogue 2ec37a4a6d Steam rich presence 2020-01-06 22:03:45 +01:00
Zeno Rogue 9d0d0fb182 single-cell quotient spaces 2020-01-06 21:24:21 +01:00
Zeno Rogue 7e2e4928e9 factored hrmap_quotient3::initialize 2020-01-06 21:23:17 +01:00
Zeno Rogue 88e6043e1b new geometry: gSeifertCover 2020-01-06 20:53:09 +01:00
Zeno Rogue a3fd44f9a9 arb:: fixed spherical 2020-01-06 20:37:00 +01:00
Zeno Rogue 8f1a65c9d7 operators - and * in crystal::coord 2020-01-06 20:36:42 +01:00
Zeno Rogue 6a1911ef01 crystal:: ctable is now C array 2020-01-03 02:37:10 +01:00
Zeno Rogue a63d64dcc0 added more tessellation files 2020-01-02 19:06:45 +01:00
Zeno Rogue 717d7b8167 11.2r 2020-01-02 19:04:48 +01:00
Zeno Rogue 938e4628a3 fixed the unused capture warnings 2020-01-02 19:03:57 +01:00
Zeno Rogue 0d4ab601d0 arb:: fixed mirrors 2020-01-02 18:55:17 +01:00
Zeno Rogue 6496b3f8b6 arb:: 'nonorientable' tiles 2020-01-02 18:53:57 +01:00
Zeno Rogue 61261a5acc removed debug 2020-01-02 17:20:37 +01:00
Zeno Rogue b70e68c574 change Crystal settings when Crystal is selected from quotient spaces 2020-01-02 17:20:26 +01:00
Zeno Rogue 17c4e82d55 Crystal torus 2020-01-02 17:15:38 +01:00
Zeno Rogue 572e3cb398 fixed the incorrect negative digits in bignum::randomized_div 2020-01-02 16:57:45 +01:00
Zeno Rogue 3ee0956fd7 added hooks_anim 2020-01-02 16:57:18 +01:00
Zeno Rogue 2cb1e2cb04 export anim::moved 2020-01-02 16:57:12 +01:00
Zeno Rogue 9b7fbc2ab3 export calcparam_rug 2020-01-02 16:56:58 +01:00
Zeno Rogue e582fb8504 fixed the heptagon-based linepatterns: master_relative was missing 2020-01-02 16:56:44 +01:00
Zeno Rogue c51534f2d9 fixup @ 2020-01-02 16:56:25 +01:00
Zeno Rogue 2e2eb4e212 clearing:: reptilecheat now disables fruits and Foxes 2020-01-02 16:56:13 +01:00
Zeno Rogue 57e10dfca8 models:: perspective_to_space now actually uses the alpha parameter (instead of vid.alpha) and is exported 2020-01-02 16:56:01 +01:00
Zeno Rogue f1dd349cee static_bubbles (always false) 2020-01-02 16:54:28 +01:00
Zeno Rogue 7b6ffd689c export drawPlayer 2020-01-02 16:54:16 +01:00
Zeno Rogue f6d90db750 crystal::colorize: added '@', changed colors in '=' 2020-01-02 16:53:59 +01:00
Zeno Rogue a5df7eb0dc manual-animation: keys , and . for zoom 2020-01-02 16:52:42 +01:00
Zeno Rogue 66e040bbc9 f key no longer works outside of normal 2020-01-02 16:52:23 +01:00
Zeno Rogue 0d2e660fa4 manual-animation: updated to new names 2020-01-02 16:52:12 +01:00
Zeno Rogue 11a65b0094 save linepattern colors and multipliers 2020-01-02 16:51:43 +01:00
Zeno Rogue a37457ead9 precise_width for nicer long lines 2020-01-02 16:51:32 +01:00
Zeno Rogue ddc3666fb4 correctly remove Clearing score memory 2020-01-02 16:50:15 +01:00
Zeno Rogue b4b325e009 6D Crystal, 535 and 536 2020-01-02 16:50:01 +01:00
Zeno Rogue c168cf295b arbi:: sublines optionally accepts epsilon, and also fixed a bug with int instead of ld 2020-01-02 16:40:30 +01:00
Zeno Rogue 7d66ad3d6f tessellation fixes 2019-12-27 23:41:45 +01:00
Zeno Rogue e53bdb7db1 11.2q 2019-12-27 23:40:06 +01:00
Zeno Rogue e00e117278 fixed a crash bug on loading file tessellations 2019-12-27 23:38:28 +01:00
Zeno Rogue d3d1d689fa arb:: pattern Sublines 2019-12-27 23:34:41 +01:00
Zeno Rogue 2805c6308c fixed the Recall Yendor Challenge 2019-12-27 23:02:07 +01:00
Zeno Rogue 8672720773 fixed the plain graphics for {4,oo} 2019-12-27 23:01:55 +01:00
Zeno Rogue 3330d6060b minor fixes to OINF 2019-12-27 23:00:38 +01:00
Zeno Rogue bdcad95f73 arb:: Conway notation command 2019-12-27 23:00:07 +01:00
Zeno Rogue bf80ef7451 arb:: unittile command 2019-12-27 22:59:59 +01:00
Zeno Rogue e4b2453313 arb:: patterns configuration 2019-12-27 22:59:50 +01:00
Zeno Rogue c7ec3585ad arb:: fixed reloading 2019-12-27 22:59:02 +01:00
Zeno Rogue e3e2c664d4 added start anim to changelog 2019-12-27 14:11:32 +01:00
Zeno Rogue 12b0169318 circumvent compiler bug 2019-12-27 14:10:02 +01:00
Zeno Rogue 756b5a6690 treasure bubbles did not appear 2019-12-27 14:03:33 +01:00
Zeno Rogue 6a3cf8f28e FPP animation actually added 2019-12-27 14:03:17 +01:00
Zeno Rogue 17ffe53839 clearing:: clear memory on new game 2019-12-27 14:02:21 +01:00
Zeno Rogue 089115ee69 fixed a bug in regradius 2019-12-27 13:11:40 +01:00
Zeno Rogue ec6ffded34 older compilers 2019-12-27 13:11:31 +01:00
Zeno Rogue e44c8ee53b moved normalize_flat to hyperpoint.cpp 2019-12-27 12:55:21 +01:00
Zeno Rogue 87933c6487 11.2p 2019-12-27 12:51:07 +01:00
Zeno Rogue 1cfeba9666 adjusted Rogueviz to HR changes 2019-12-27 12:50:56 +01:00
Zeno Rogue 0aa94f073a the 'types' pattern is now choosable in the patterns menu when in arcm or arb 2019-12-27 12:42:36 +01:00
Zeno Rogue 3e33aadba4 gridline now automatically improves the precision when edges are long 2019-12-27 12:42:16 +01:00
Zeno Rogue 998abd2f77 nicer Greatwall grid lines 2019-12-27 12:41:54 +01:00
Zeno Rogue d35221e849 arb:: fixed virtualRebase in hyperbolic arb 2019-12-27 12:11:52 +01:00
Zeno Rogue 9da8708835 arb:: fixed not recreating the geometry 2019-12-27 12:05:28 +01:00
Zeno Rogue 31b9310552 fixup mineadj -> mine_adjacency_rule 2019-12-27 11:57:23 +01:00
Zeno Rogue cacfa8dee9 oldstyle joystick: smoothening input, ignoring next input 2019-12-27 11:57:08 +01:00
Zeno Rogue cb4ce17598 mapeditor:: read/write mineadj 2019-12-27 11:33:22 +01:00
Zeno Rogue 86050df3da land distance shows the correct values in equidistant-based lands in Euclidean 2019-12-27 11:31:10 +01:00
Zeno Rogue e319d953ea fixed distance calculation in bitruncated {4,4} 2019-12-27 11:30:42 +01:00
Zeno Rogue 432583d6ce fixed euc::full_coords2 in bitruncated {4,4} 2019-12-27 11:30:27 +01:00
Zeno Rogue e8ff75b239 easier floor in gravity lands in bitruncated {4,4} 2019-12-27 11:30:09 +01:00
Zeno Rogue aeac634abd downseek works in Euclidean now 2019-12-27 11:14:25 +01:00
Zeno Rogue d8cf05bdb8 tessellation examples 2019-12-27 10:14:26 +01:00
Zeno Rogue 70910539b3 do not save arb tilings 2019-12-27 02:08:19 +01:00
Zeno Rogue ce2d8d3d29 arb:: selectable in geom-exp 2019-12-27 02:08:04 +01:00
Zeno Rogue 3afae980fd arb:: comment displayed in geom-exp 2019-12-27 02:07:44 +01:00
Zeno Rogue 5940851f59 arb:: reset to pure 2019-12-27 01:52:28 +01:00
Zeno Rogue e9862831ca performing product on Catalan tilings no longer drops 'dual' 2019-12-27 01:52:14 +01:00
Zeno Rogue e6c0504beb geom-exp: do not show faces per vertex in kd2 and arb 2019-12-27 01:45:58 +01:00
Zeno Rogue 15fe6c1aee no variations for arbi 2019-12-27 01:45:38 +01:00
Zeno Rogue 3d4b7a074a geom-exp: in info about, 'pure' is no longer displayed when no variations available 2019-12-27 01:45:24 +01:00
Zeno Rogue 7d96ea9c54 fixed 'faces per vertex' display for gBinary4 and gTernary 2019-12-27 01:44:52 +01:00
Zeno Rogue 07bca8059d arb:: error when unrecognized command, instead of hanging 2019-12-27 01:44:16 +01:00
Zeno Rogue ab283002f1 arb:: comments, named tilings 2019-12-27 01:43:58 +01:00
Zeno Rogue 3f69ffa58c fixed history band render 2019-12-27 01:19:37 +01:00
Zeno Rogue 2b154edbdb fixed line animation 2019-12-27 01:19:14 +01:00
Zeno Rogue 1fc05a99b8 queuechr fixup 2019-12-27 00:50:54 +01:00
Zeno Rogue da051e766a fixed fix_the_band when changing model_orientation 2019-12-27 00:50:46 +01:00
Zeno Rogue 2e0cf7fe53 band_shift correctly applied in shader-based band model 2019-12-27 00:49:58 +01:00
Zeno Rogue c247936e34 removed the functions queuechr -- use queuestr now 2019-12-26 23:38:28 +01:00
Zeno Rogue c4528bf954 bubbles react to neon 2019-12-26 23:32:27 +01:00
Zeno Rogue 7396024c38 arg:: option -neon 2019-12-26 23:32:18 +01:00
Zeno Rogue 6c61162392 merge 2019-12-26 22:40:41 +01:00
Zeno Rogue 1f575a4347 hpcpush: limit 10 was too small 2019-12-26 22:34:51 +01:00
Zeno Rogue 43cba3b071 edge and regradius functions shown 2019-12-26 22:31:22 +01:00
Zeno Rogue 4a7b09b25e regradius function 2019-12-26 22:30:48 +01:00
Zeno Rogue 688021ee1c edge function 2019-12-26 22:29:29 +01:00
Zeno Rogue 7f1f5ccb43 arb:: specify H2 or S2 tilings, extra functions 2019-12-26 22:28:46 +01:00
Zeno Rogue 0b7faa4b46 adjacency rule now also affects: slime spill, storms, heat, dry, live caves 2019-12-26 19:04:32 +01:00
Zeno Rogue 9173c255ab InfOrder4 2019-12-26 18:30:17 +01:00
Zeno Rogue db3168c07f 123 keys in Euclidean adjust the scale 2019-12-26 18:28:01 +01:00
Zeno Rogue 0b1425dac3 subdir set correctly when mouse-moving in multiplayer 2019-12-26 10:30:02 +01:00
Zeno Rogue 2f9419615d fixed turn-based multiplayer 2019-12-26 10:29:41 +01:00
Zeno Rogue 9fe2622043 Mutant Ivy regrow 2019-12-26 09:57:09 +01:00
Zeno Rogue b53b98f0d5 fixed a bug in drawBubble 2019-12-26 09:40:28 +01:00
Zeno Rogue 78930f08f9 no clearing::imput on bounded 2019-12-26 09:40:16 +01:00
Zeno Rogue 873c679c01 strengthened the Clearing walls 2019-12-26 09:40:07 +01:00
Zeno Rogue 2ba4afc09a missing bubbles_special 2019-12-26 09:39:50 +01:00
Zeno Rogue 80b702ab76 fixed XLAT 2019-12-25 23:10:59 +01:00
Zeno Rogue dd95d8070c better bubbles 2019-12-25 23:10:36 +01:00
Zeno Rogue 3a2ea8629d dead Ivy counting 2019-12-25 23:08:41 +01:00
Zeno Rogue f4613e9945 more bubbles, SE config 2019-12-25 23:04:07 +01:00
Zeno Rogue 5cdafd4488 ivy_total fix 2019-12-25 23:03:46 +01:00
Zeno Rogue 6f409f3de7 text bubbles on ivy kills 2019-12-25 22:03:17 +01:00
Zeno Rogue e8ec32d078 text bubbles 2019-12-25 22:01:57 +01:00
Zeno Rogue 4848cb1b87 show the big numbers in the Clearing 2019-12-25 21:57:25 +01:00
Zeno Rogue e5e4db5ef1 bignum: operator > 2019-12-25 21:50:57 +01:00
Zeno Rogue 6c3348c9f3 util to autohdr 2019-12-25 21:50:07 +01:00
Zeno Rogue 35f076a171 conversion from ld to bignum 2019-12-25 21:49:09 +01:00
Zeno Rogue 454024a42c moved bignum to util.cpp 2019-12-25 21:49:09 +01:00
Zeno Rogue 14a70fe1bf fixup 2019-12-23 22:29:32 +01:00
Zeno Rogue b6f9298f0a removed classes.h 2019-12-23 22:21:04 +01:00
Zeno Rogue 86d8eb759e classes.cpp first in makeh 2019-12-23 21:56:59 +01:00
Zeno Rogue d2fb937275 arb:: new tes file format 2019-12-23 21:49:54 +01:00
Zeno Rogue 8aede89c24 new parser function: sqrt 2019-12-23 21:49:37 +01:00
Zeno Rogue 4144c2b928 parser:: factored out next_token() 2019-12-23 21:49:17 +01:00
Zeno Rogue 15000034fd parser:: error handling now uses exceptions 2019-12-23 21:44:51 +01:00
Zeno Rogue a83220c34e parser:: 'deg' as a default constant 2019-12-23 21:18:45 +01:00
Zeno Rogue bce9dbda7d parser:: convenience functions rparse and iparse 2019-12-23 21:18:35 +01:00
Zeno Rogue c70c082f36 parser:: skip_white 2019-12-23 21:18:26 +01:00
Zeno Rogue 26b565702c arb:: exhaustive_distance_appropriate 2019-12-23 20:53:09 +01:00
Zeno Rogue c3332bfb52 shot:: hooks_take 2019-12-23 20:52:41 +01:00
Zeno Rogue 94fd788316 pattern 'P' now uses permanent_long_distances 2019-12-23 20:52:25 +01:00
Zeno Rogue 97ea8f8c4b arb:: fixed get_corner_position to work with negative cid 2019-12-23 20:51:36 +01:00
Zeno Rogue 7a0e8ec022 floorshapes clear memory 2019-12-23 20:51:15 +01:00
Zeno Rogue e92eda4bad crystal:: export told 2019-12-23 20:50:51 +01:00
Zeno Rogue 7dc57d587a ldcoord as friends 2019-12-23 20:50:42 +01:00
Zeno Rogue b3fe4f102b arb fixup: added missing arb::in to standard_tiling 2019-12-23 20:49:12 +01:00
Zeno Rogue dc87666a98 arb:: debug removed 2019-12-23 20:48:54 +01:00
Zeno Rogue a2b294e38b FPP startanim added 2019-12-14 14:17:10 +01:00
Zeno Rogue 6603fe3c9e random animations in the start menu now have their names displayed, and some are explorable 2019-12-14 14:10:34 +01:00
Zeno Rogue 2006104650 the random option in the start menu is now designated 2019-12-14 14:09:58 +01:00
Zeno Rogue 6ee57aa758 cleaned up linepatterns 2019-12-14 13:33:25 +01:00
Zeno Rogue 91b22e2d62 fixup to TEMPLE_EACH remove 2019-12-14 12:35:28 +01:00
Zeno Rogue 9d88528939 replaced TEMPLE_EACH with function temple_layer_size() 2019-12-14 12:35:03 +01:00
Zeno Rogue 7f09bb6259 replaced macro VALENCE with function valence() 2019-12-14 12:31:20 +01:00
Zeno Rogue 769982040d renamed solnihv:: to sn:: and solnih to sn::in() 2019-12-14 12:28:45 +01:00
Zeno Rogue 3f0e8851ae removed #define ALPHA from hyper.h 2019-12-14 12:18:24 +01:00
Zeno Rogue be5be7e59f fixup 2019-12-14 12:12:50 +01:00
Zeno Rogue 8cfc5a578f renamed penrose.cpp to kite.cpp and 'penrose' to 'kite::in()' 2019-12-14 12:12:24 +01:00
Zeno Rogue 1d6576ef92 fixup one more euc::in() 2019-12-14 12:05:12 +01:00
Zeno Rogue d5c8aebf16 renamed binary:: to bt:: and binarytiling to bt::in() 2019-12-14 12:05:01 +01:00
Zeno Rogue c73c7a6855 distcolors used for the P-pattern 2019-12-14 11:57:23 +01:00
Zeno Rogue fe52cb6ea9 hassert macro 2019-12-14 11:57:23 +01:00
Zeno Rogue 059953fe58 removed hint def from hyper.h 2019-12-14 11:57:23 +01:00
Zeno Rogue f772f9b7fd replaced 'archimedean' with 'arcm::in()' 2019-12-14 11:57:23 +01:00
Zeno Rogue d529449999 arbitrary tilings 2019-12-14 11:57:23 +01:00
Zeno Rogue 0a9ec78c18 remplace euclid6, euclid4, 'euclid && \!archimedean && \!penrose' with standard_tiling(), euc::in(dimension, s7) 2019-12-14 11:57:23 +01:00
Zeno Rogue 7568accff7 where to download 2019-12-10 12:49:29 +01:00
Zeno Rogue 886d9d1619 rug:: conformal tori 2019-12-09 00:40:51 +01:00
Zeno Rogue 9736068810 11.2o 2019-12-08 20:07:02 +01:00
Zeno Rogue 4dc45c92ed fixed for older compilers 2019-12-08 20:07:02 +01:00
Zeno Rogue e5d99582ee print hrmap* 2019-12-08 20:07:02 +01:00
Zeno Rogue e5a2116958 fixed hunting flashes 2019-12-08 20:07:02 +01:00
Zeno Rogue 26fb19e7a8 subdivided game.cpp; split movepcto into separate functions 2019-12-08 20:07:02 +01:00
Zeno Rogue 2fb1210811 irr torus works only in orientable for now -- disabled for other 2019-12-08 20:07:02 +01:00
Zeno Rogue f03c5b5c1d Euclidean irregular maps can now be mapped to supergroups 2019-12-08 20:07:02 +01:00
Zeno Rogue 3a5a2236de euc:: fixed adj(c,i) in 3D 2019-12-08 11:25:27 +01:00
Zeno Rogue 206dc25ed6 euc:: further cleanup 2019-12-08 11:25:14 +01:00
Zeno Rogue e8a39e6663 replaced euclid3:: with euc:: 2019-12-08 11:01:28 +01:00
Zeno Rogue ddb5d07ff6 cleanup in Euclidean 2019-12-08 10:59:09 +01:00
Zeno Rogue fe180cb6c3 fixed facing in E^3 2019-12-07 11:13:58 +01:00
Zeno Rogue 2678ac4743 neon mode (see the 'line width' setting in graphics) 2019-12-07 11:13:09 +01:00
Zeno Rogue 17cd694952 improved CA simulator 2019-12-07 11:12:46 +01:00
Zeno Rogue 0b385dd7f4 fixed renderer problem 2019-12-06 14:45:35 +01:00
Zeno Rogue 225c43b141 11.2n 2019-12-06 14:14:36 +01:00
Zeno Rogue e092690448 subtler default out-of-range color in raycasting 2019-12-06 14:14:27 +01:00
Zeno Rogue 1a6516196f subtler default out-of-range color 2019-12-06 14:09:03 +01:00
Zeno Rogue f2efa016d0 updated landscapes_when 2019-12-06 14:07:11 +01:00
Zeno Rogue 30e5353e42 added Ralith to credits 2019-12-06 14:07:04 +01:00
Zeno Rogue 59e58693f4 mapeditor:: correct and efficient ghosts when using a larger range or quotient spaces 2019-12-06 14:03:54 +01:00
Zeno Rogue 1539d85a45 added <unordered_set> 2019-12-06 14:03:12 +01:00
Zeno Rogue 8386a14d6a 'circles' are now drawn on all copies in quotient geometries 2019-12-06 14:03:02 +01:00
Zeno Rogue c8db8a328d invalid_matrix in product spaces now allows very small values 2019-12-06 13:06:32 +01:00
Zeno Rogue e9a0d7f817 removed fixing hdist0 in elliptic spaces 2019-12-06 13:06:11 +01:00
Zeno Rogue 415922ff1b fixed precise_mouseover for hybrid (something weird there?) and confusing spaces 2019-12-06 13:05:54 +01:00
Zeno Rogue 49460ba379 changed the default axes3 to true 2019-12-06 13:05:11 +01:00
Zeno Rogue 9ed9c84b33 changed gmatrix to simply use hdist0 instead of case-based 2019-12-06 13:04:57 +01:00
Zeno Rogue 8ce6135599 fixed optimization in S2xE 2019-12-06 13:04:17 +01:00
Zeno Rogue dafb4ae582 correctly display/rotate the PC in product 2019-12-06 12:15:33 +01:00
Zeno Rogue 90926c3bc6 disable setdist in afterplayermoved in racing 2019-12-06 12:15:14 +01:00
Zeno Rogue bfe78fece7 racing:: generate less cells 2019-12-06 12:15:04 +01:00
Zeno Rogue 6b90261f2f fixed celldistance in sl2 2019-12-06 12:14:03 +01:00
Zeno Rogue 56a96581eb updated manual-animation 2019-12-06 12:13:47 +01:00
Zeno Rogue 63c4886722 replaced product drawing with the general routine 2019-12-06 12:13:09 +01:00
Zeno Rogue ac9d18adfb simplified the drawing algo for product 2019-12-06 11:47:26 +01:00
Zeno Rogue 99ab57086b in_wallopt(): auto in racing 2019-12-06 11:45:19 +01:00
Zeno Rogue 4d5928fcc0 fixed a potential crash caused by reentrant hybrid::link 2019-11-30 19:45:43 +01:00
Zeno Rogue 56e9f95656 fixed freeze when enabling cspin/cmirror without enabling csteps 2019-11-30 19:32:43 +01:00
Zeno Rogue 6e7cf99d07 too long dialog values are now reduced size 2019-11-30 19:28:55 +01:00
Zeno Rogue f243b61d72 fixed a crash when changing to product 2019-11-30 19:28:28 +01:00
Zeno Rogue 31f6f28012 fixup to Rogueviz 2019-11-30 19:02:43 +01:00
Zeno Rogue 568593d7f8 11.2m 2019-11-30 19:01:01 +01:00
Zeno Rogue ab3992f58f adjusted rogueviz 2019-11-30 19:01:01 +01:00
Zeno Rogue 0cc24cf982 removed MAXMDIM == 4 guards in Euclidean 2019-11-30 18:55:02 +01:00
Zeno Rogue f46967efb9 removed assignment of gp::loc to tie as Clang does not like it 2019-11-30 18:55:02 +01:00
Zeno Rogue 56e575369b missing override markers 2019-11-30 18:48:44 +01:00
Zeno Rogue 89cfc2bce1 adjusted for older compilers 2019-11-30 18:48:44 +01:00
Zeno Rogue 42125679a7 added shnourok to credits 2019-11-30 18:06:48 +01:00
Zeno Rogue c3b12328e0 renamed hrmap_rotation_space::relative_matrix to adj 2019-11-30 18:06:48 +01:00
Zeno Rogue f69ea5ec8d irr:: Euclidean guarding 2019-11-30 18:06:48 +01:00
Zeno Rogue b8cf027b7a fixed GP(n,n) on minimal 2019-11-30 18:06:48 +01:00
Zeno Rogue 48111329a3 in land_validity stdeucx to disallow torus 2019-11-30 18:06:48 +01:00
Zeno Rogue aef7e7ef37 fixed potential crash in get_umap 2019-11-30 18:06:48 +01:00
Zeno Rogue ca40458f44 export in help 2019-11-30 18:06:48 +01:00
Zeno Rogue 1341ab025b removed gTorus from select_tiling list 2019-11-30 18:06:48 +01:00
Zeno Rogue 4bd4e11c7e may combile with ISSTEAM but no CAP_DAILY 2019-11-30 18:06:48 +01:00
Zeno Rogue 2ae2796f78 exported torus stuff 2019-11-30 18:06:48 +01:00
Zeno Rogue 4a9fe001ee removed reference to gTorus 2019-11-30 18:06:48 +01:00
Zeno Rogue 411dffb601 fixed mymake with -DCAP_DAILY=1 2019-11-30 18:06:48 +01:00
Zeno Rogue 0f546c43a7 debugging pattern P 2019-11-30 18:06:48 +01:00
Zeno Rogue 46892a35c4 hybrid:: celldistance 2019-11-30 18:06:48 +01:00
Zeno Rogue 77c1e95701 product:: cspin and also cmirror 2019-11-30 18:06:48 +01:00
Zeno Rogue 1518d406b5 product:: cspin is now validated 2019-11-30 18:06:48 +01:00
Zeno Rogue 42a41835dc product config dialog 2019-11-30 18:06:48 +01:00
Zeno Rogue fedfb5dd20 product turn-space: raycasting 2019-11-30 18:06:48 +01:00
Zeno Rogue 25bc0f56de kth-turn product space (via CLI) 2019-11-30 18:06:48 +01:00
Zeno Rogue 638f408d05 renamed as_gp and as_coord to to_loc and to_coord 2019-11-30 18:06:48 +01:00
Zeno Rogue 16eb050788 euclid:: relative_matrix takes hint into account 2019-11-30 18:06:48 +01:00
Zeno Rogue be71cd0d97 RPM and OSM are no longer considered incompatible 2019-11-30 18:06:48 +01:00
Zeno Rogue ea16b82c30 Allies are now immune to friendly Beauty. 2019-11-30 18:06:48 +01:00
Zeno Rogue bd89c1b91a third turn space improvements 2019-11-30 18:06:48 +01:00
Zeno Rogue e258b923c6 fixed the third-turn space 2019-11-30 18:06:48 +01:00
Zeno Rogue c9ee645120 fixed optimal_axes 2019-11-30 18:06:48 +01:00
Zeno Rogue 4f2a7cd199 added bool ldebug (for print-debugging) and moved breakhere (breakpoint helper) to debug.cpp 2019-11-30 18:06:48 +01:00
Zeno Rogue 7080ff379b master_to_c7_angle() no longer returns non-zero in 3D 2019-11-30 18:06:48 +01:00
Zeno Rogue b904fdde1e removed the difference between euclid3::coord and array<int,3> -- euclid3::coord is now array<int,3> 2019-11-30 18:06:48 +01:00
Zeno Rogue 90177343a4 euclid:: third turn space (first try) 2019-11-30 18:06:48 +01:00
Zeno Rogue ba2814a88b adjusted wall textures to increased Euc size 2019-11-30 18:06:48 +01:00
Zeno Rogue 8489b03814 ray:: e2xe 2019-11-30 18:06:48 +01:00
Zeno Rogue d7eed402a7 fixed E2xE quotient spaces 2019-11-30 18:06:48 +01:00
Zeno Rogue 78ecc9e960 fixed some crashes in E2xE 2019-11-30 18:06:48 +01:00
Zeno Rogue 937fdcd0e2 fixed a crash in kd2xE 2019-11-30 18:06:48 +01:00
Zeno Rogue 5585831b27 fixed Archimedean and Penrose 2019-11-30 18:06:48 +01:00
Zeno Rogue 2b62b23888 product:: adj 2019-11-30 18:06:48 +01:00
Zeno Rogue f3c97f9342 product:: works with Euclidean 2019-11-30 18:06:48 +01:00
Zeno Rogue 5add972bdd product:: using in_h2xe() and in_s2xe() more consistently 2019-11-30 18:06:48 +01:00
Zeno Rogue d63b14da5c PIU now works in the underlying map -- underlying geometry only is too fragile 2019-11-30 18:06:47 +01:00
Zeno Rogue 30329df05c euclid:: fixed relative_matrix 2019-11-30 18:06:47 +01:00
Zeno Rogue 91875f2b74 rug:: torus rug corrected and simplified 2019-11-30 18:06:47 +01:00
Zeno Rogue 20d230cadb rug:: euclid quotient auto-rotates correctly 2019-11-30 18:06:47 +01:00
Zeno Rogue 9f6ca746cd euclid:: fixed the orientable flag 2019-11-30 18:06:47 +01:00
Zeno Rogue 149ab92976 hypersian rug option mode in Euclidean 2019-11-30 18:06:47 +01:00
Zeno Rogue 22bfbf17db 'standard rotation' option in Euclidean 2019-11-30 18:06:47 +01:00
Zeno Rogue ecde911db2 models:: Spiral projection now spins together in Euclidean 2019-11-30 18:06:47 +01:00
Zeno Rogue 1329ec6b04 setting Euclidean no longer sets bitruncated 2019-11-30 18:06:47 +01:00
Zeno Rogue a854bbd5c6 optional quotient spaces are no longer prevented from appearing in lists 2019-11-30 18:06:47 +01:00
Zeno Rogue 661b9db9c4 fixed master_relative on small bitruncated spaces 2019-11-30 18:06:47 +01:00
Zeno Rogue 293d881afa fixed the blank lines for Power OSM description 2019-11-30 18:06:47 +01:00
Zeno Rogue 723be3f16b fixed the highlights in variation menu 2019-11-30 18:06:47 +01:00
Zeno Rogue beb3a06461 Hyperstone-optional lands are now clearly marked in the Overview, and the Hunting Grounds and Galapagos are now optional in Euclidean 2019-11-30 18:06:47 +01:00
Zeno Rogue 2acf7b572c fixed Euclidean Torus Land of Storm 2019-11-30 18:06:47 +01:00
Zeno Rogue 1e290ba48a swapped the periods in single_row_torus 2019-11-30 18:06:47 +01:00
Zeno Rogue 7d99bc8c73 euclid:: set the qSMALL flag 2019-11-30 18:06:47 +01:00
Zeno Rogue 07477e2b23 inv:: buffed up the Orb of Intensity 2019-11-30 18:06:47 +01:00
Zeno Rogue e82f1906e1 fixed the displayed Gold requirement for the Dead Caves in OSM 2019-11-30 18:06:47 +01:00
Zeno Rogue aa297504a8 on-petrify crash should be fixed 2019-11-30 18:06:47 +01:00
Zeno Rogue 0ff27cc5b8 save torus periods 2019-11-30 18:06:47 +01:00
Zeno Rogue 4644d54987 reimplemented sdxy 2019-11-30 18:06:47 +01:00
Zeno Rogue d6a38524a0 euclid:: sample tori 2019-11-30 18:06:47 +01:00
Zeno Rogue 9ce5687f57 replaced first_period by ::T0 use 2019-11-30 18:06:47 +01:00
Zeno Rogue 66164d873c implemented euc2_coordinates and at_euc2_coordinates 2019-11-30 18:06:47 +01:00
Zeno Rogue 97adbc28c0 Euclidean distance restored 2019-11-30 18:06:47 +01:00
Zeno Rogue 4cb9980c58 world size for Euclidean 2019-11-30 18:06:47 +01:00
Zeno Rogue 81647181ae fixed ZebraTriangle in Euclidean 2019-11-30 18:06:47 +01:00
Zeno Rogue cf16ca9639 fixed torus references in models 2019-11-30 18:06:47 +01:00
Zeno Rogue 71ae45c81e fixed Tentacle riding 2019-11-30 18:06:47 +01:00
Zeno Rogue e01411f98f display the fundamental domain in the Euclidean torus setting 2019-11-30 18:06:47 +01:00
Zeno Rogue 999eec6650 irregular maps in Euclidean 2019-11-30 18:06:47 +01:00
Zeno Rogue 51c1d49628 fixed crash in irregular tilings 2019-11-30 18:06:47 +01:00
Zeno Rogue 1cba452f07 rewritten the Euclidean geometry 2019-11-30 18:06:47 +01:00
Zeno Rogue aed8df0d04 hrmap_standard now can be 3D maps 2019-11-30 18:05:23 +01:00
Zeno Rogue a1fbfb2946 gp:: adjm to fix the confusion in quotient spaces 2019-11-30 18:05:23 +01:00
Zeno Rogue 6bb3a076da gp::loc now better 2019-11-30 18:05:23 +01:00
Zeno Rogue 0cb93afad7 createMov: bitruncation works on non-orientable with S7%2 == 0 2019-11-30 18:05:23 +01:00
Zeno Rogue 7e8ede4bd6 relative_matrix and adj changed 2019-11-30 18:05:23 +01:00
Zeno Rogue f3beb9d2ac fixed farcorner in non-orientable 2019-11-30 18:04:54 +01:00
Zeno Rogue a08b67d780 fixed Goldberg construction 2019-11-30 18:04:54 +01:00
Zeno Rogue 622b683e33 drawcell parameter is now cell, not cellwalker (need to check half-elliptic) 2019-11-30 18:04:54 +01:00
Zeno Rogue 3f76943453 geomexp:: if you are in elliptic geometry, elliptic variants will appear on the list 2019-11-30 18:03:00 +01:00
Zeno Rogue ae92566255 actions on title click allowed (unused) 2019-11-30 18:03:00 +01:00
Zeno Rogue 6331ca1e1d field:: {3,12} base available 2019-11-30 18:03:00 +01:00
Zeno Rogue a88ede59cf archimedean:: filtering by geometry 2019-11-30 18:03:00 +01:00
Zeno Rogue 1b8d9a5a24 geomexp:: dimension shown in geometry choice 2019-11-30 18:03:00 +01:00
Zeno Rogue e60e21b923 geomexp:: more intuitive geometry selection 2019-11-30 18:03:00 +01:00
Zeno Rogue 6a1523e95e removed the no longer used geometry lists 2019-11-30 18:03:00 +01:00
Zeno Rogue da6fdf071e
Merge pull request #85 from shnourok/master
Slightly improved russian translation
2019-11-30 18:00:48 +01:00
soup 0c558924df Slightly improved russian translation 2019-11-28 22:32:40 +02:00
Zeno Rogue 40bbd25905 fixed Hall of Mirrors 2019-11-24 00:46:08 +01:00
Zeno Rogue b53854fdcf rogueviz:: adjusted 2019-11-23 23:52:04 +01:00
Zeno Rogue cba7782e64 ray:: fixed guards 2019-11-23 23:51:52 +01:00
Zeno Rogue 5354c92c1a 11.2l 2019-11-23 23:48:09 +01:00
Zeno Rogue 95c41684df movei in more functions, also fixed wind crows 2019-11-23 23:37:52 +01:00
Zeno Rogue 9b329ef901 fixed loading product maps (especially Archimedean product maps) 2019-11-23 23:09:06 +01:00
Zeno Rogue 222e4aa78b mapeditor:: save geometry details 2019-11-23 21:08:47 +01:00
Zeno Rogue 5a2a893254 fixup to 982f01e6e : removed debug 2019-11-23 20:41:56 +01:00
Zeno Rogue bc2ce4f3dc alternative honeycomb in Nil 2019-11-23 20:39:38 +01:00
Zeno Rogue 2f353a844c tracking in nonisotropic geometries 2019-11-23 20:16:53 +01:00
Zeno Rogue 982f01e6e5 tracking the specific copy of the player in confusing geometries 2019-11-23 19:05:24 +01:00
Zeno Rogue edcf160a28 centerpc: moved rerotate outside 2019-11-23 19:01:00 +01:00
Zeno Rogue 4f0cf57092 centerpc:: removed a special case for Euclidean -- no longer a special case 2019-11-23 19:00:18 +01:00
Zeno Rogue 021f99aafa save compatibility: field quotient configured 2019-11-22 23:16:06 +01:00
Zeno Rogue 9529ee6bbb removed the buggy Ruby in Yendor 2019-11-22 23:10:36 +01:00
Zeno Rogue b731796ab4 fixed generating monsters on the player in some geometries 2019-11-22 23:10:23 +01:00
Zeno Rogue b38caa0ec8 fixed a bug where disabling the cheat mode while the land is changed in Geometry Experiments would produce weird lands 2019-11-22 23:10:02 +01:00
Zeno Rogue ee0c8fa253 fixed birds not approaching the player in boats when shielded (and similar cases) 2019-11-22 23:09:00 +01:00
Zeno Rogue efa22ac125 fixed specifying -tparx SingleHex 2019-11-22 19:47:31 +01:00
Zeno Rogue 6ea7698304 torus:: allowed one-wide tori 2019-11-22 19:47:11 +01:00
Zeno Rogue 3139feb50c animateMovement: correct even if moved to the same cell 2019-11-22 19:39:50 +01:00
Zeno Rogue d537b05fb3 torus generates spin correctly (orientable only) 2019-11-22 19:39:36 +01:00
Zeno Rogue 939c979f19 movement arrows drawn correctly only in the target direction even if multiple 2019-11-22 19:00:11 +01:00
Zeno Rogue bf584b5429 more movei 2019-11-22 18:48:51 +01:00
Zeno Rogue e6853e6540 old moveMonster removed 2019-11-22 18:19:22 +01:00
Zeno Rogue 9521b622e1 movei from cellwalker, old empathyMove removed 2019-11-22 18:12:50 +01:00
Zeno Rogue 6d44105fef more movei. Also animated Friendly Ivy growth 2019-11-22 18:07:16 +01:00
Zeno Rogue 2172ca6fd7 movei used in more places, also improved push in shmup 2019-11-22 17:31:23 +01:00
Zeno Rogue 8ddd95d44e locations improvement 2019-11-22 17:02:40 +01:00
Zeno Rogue a1c7b8db3d animateMov YA fixup 2019-11-22 16:46:37 +01:00
Zeno Rogue 441b6180db removed old animateAttack 2019-11-22 16:46:25 +01:00
Zeno Rogue 6a4c4b21f6 fixup locations 2019-11-22 16:37:43 +01:00
Zeno Rogue d05ec40014 fixup animateMovement 2019-11-22 16:37:32 +01:00
Zeno Rogue 4fb6563f27 fixup mouse control 2019-11-22 16:37:21 +01:00
Zeno Rogue 3078451283 used movei in movement animations; also replaced animateReplacement with indAnimateMovement 2019-11-22 16:32:05 +01:00
Zeno Rogue 8ac9562c31 quotient:: refactored to allow easier building of new quotient spaces 2019-11-22 16:30:57 +01:00
Zeno Rogue 4f078a8763 Orb of Choice is now useless in Land of Motion 2019-11-22 16:30:27 +01:00
Zeno Rogue c6bf25b5b6 location:: movei structure 2019-11-22 16:29:53 +01:00
Zeno Rogue 2458ec715d removed calc_relative_matrix with direction hint; used adj in more places 2019-11-22 14:34:56 +01:00
Zeno Rogue 8fad2bc9d5 replaced compute_relamatrix and some cases of calc_relativematrix with adj 2019-11-22 14:25:13 +01:00
Zeno Rogue eb2f9cbf8a fixed and simplified spin_angle 2019-11-22 14:00:45 +01:00
Zeno Rogue 95e2c860f4 CLI option -fi-at 2019-11-22 14:00:22 +01:00
Zeno Rogue d0855db6c6 reg3:: marked as DF_GEOM 2019-11-17 13:52:34 +01:00
Zeno Rogue 313df871bb fixup to last 2019-11-17 13:52:20 +01:00
Zeno Rogue d63aebb9d7 reg3:: moved hrmap_field3 output to DF_FIELD 2019-11-17 13:50:06 +01:00
Zeno Rogue 4333acf54d more elegant advanced field parameters 2019-11-17 13:47:13 +01:00
Zeno Rogue 82083ba83d fieldpattern:: made the prime lists equal -- 6 primes 2019-11-17 13:46:42 +01:00
Zeno Rogue aa44ff82e3 fixed cgi for field quotient 2019-11-17 13:35:18 +01:00
Zeno Rogue 6f541c0a3e field quotient generalized 2019-11-17 13:35:07 +01:00
Zeno Rogue 362b11a383 more elegant fpattern::solve() 2019-11-17 11:12:06 +01:00
Zeno Rogue fb557282f4 more guard fix 2019-11-16 14:46:12 +01:00
Zeno Rogue 16f6266b7e fixed guard placement 2019-11-16 08:39:51 +01:00
Zeno Rogue bf198bdaba 11.2k true 2019-11-16 03:39:57 +01:00
Zeno Rogue 267d853b2e fixed Orb of Speed confusion 2019-11-16 03:39:14 +01:00
Zeno Rogue 39332b61eb fixed addparam for old compiler 2019-11-16 03:39:00 +01:00
Zeno Rogue b1f3686bdf 11.2k 2019-11-16 03:11:00 +01:00
Zeno Rogue 928e369977 ray:: stereo modes 2019-11-16 03:04:01 +01:00
Zeno Rogue 838d6a583a removed namespace stereo which is no longer used 2019-11-16 03:03:09 +01:00
Zeno Rogue c60b96c1b8 added the missing fixmatrix 2019-11-16 01:41:44 +01:00
Zeno Rogue 4affb01062 fixed the clipping in Poincare Ball model 2019-11-16 01:40:49 +01:00
Zeno Rogue e898f0ccf0 crystal:: fixed Crystal344 2019-11-16 01:40:27 +01:00
Zeno Rogue c021e74ba0 ray:: save configuration 2019-11-16 01:40:14 +01:00
Zeno Rogue cba1408021 config:: hooks for extending the config file, added asonov/nilv settings 2019-11-16 01:39:58 +01:00
Zeno Rogue 90c0260d5f parser:: random 2019-11-16 01:39:31 +01:00
Zeno Rogue eaffa3a66f patterns:: innerwalls setting 2019-11-16 01:38:55 +01:00
Zeno Rogue e5e9e88da2 fixed error reported by clang 2019-11-15 14:54:34 +01:00
Zeno Rogue ad501869f1 added some missing guards 2019-11-15 14:52:21 +01:00
Zeno Rogue e74ee1ae37 racing:: reduced the solnihv::solranges in Thurston racing 2019-11-15 14:36:50 +01:00
Zeno Rogue aa3bb4369e 11.2j 2019-11-15 14:30:07 +01:00
Zeno Rogue 89225f4632 missing override attributes 2019-11-15 14:24:17 +01:00
Zeno Rogue 9bfe53fb48 added asonov to Thurston racing 2019-11-15 14:19:05 +01:00
Zeno Rogue ce805164b6 fixed resetview facing after attack 2019-11-15 14:14:06 +01:00
Zeno Rogue 00bc3f2304 formula pattern: now available from the commandline 2019-11-15 13:50:23 +01:00
Zeno Rogue e075bc8c6d formula pattern: extra parameters available, also shielded some parameters from crashes 2019-11-15 13:50:23 +01:00
Zeno Rogue 4dfa168ce4 parser/texture:: txp function 2019-11-15 13:50:23 +01:00
Zeno Rogue 388ac890bf pattern formula:: wallif function 2019-11-15 13:50:23 +01:00
Zeno Rogue be5dc871b6 relative_matrix in Sol variants (other than cat) 2019-11-15 13:50:23 +01:00
Zeno Rogue 8bc4cb5207 fixed the bug in the Prairie which caused the Bulls not to attack correctly 2019-11-15 13:50:23 +01:00
Zeno Rogue 610d6ee1b3 fixed the Haunted Woods unlock in OSM. 2019-11-15 11:17:10 +01:00
Zeno Rogue f9cc30a67a removed debug from optimizeview 2019-11-15 03:00:50 +01:00
Zeno Rogue f70d7a4f27 allcells no longer generates too long list in S2xE 2019-11-15 02:54:53 +01:00
Zeno Rogue d10a6d10b5 use_exhaustive_distance used in Yendor under same rules 2019-11-15 02:51:25 +01:00
Zeno Rogue f36fee9faa racing:: better bounded tracks 2019-11-15 02:36:14 +01:00
Zeno Rogue 9c61d80248 indenter:: default value for 'b' 2019-11-15 02:20:46 +01:00
Zeno Rogue 3c42a9c081 racing:: fixed asonov racing 2019-11-15 02:19:53 +01:00
Zeno Rogue 6655a73e5e qHUGE_BOUNDED to detect bounded geometries not to be computed fully 2019-11-15 02:19:26 +01:00
Zeno Rogue 577ab0e1d4 asonov:: substraction op used for efficient celldistance 2019-11-15 02:16:54 +01:00
Zeno Rogue c4a4bb7f48 asonov:: subtraction operator 2019-11-15 02:16:29 +01:00
Zeno Rogue 2b4f4bd29e asonov:: relative_matrix 2019-11-15 00:26:00 +01:00
Zeno Rogue cd023e982e szgmod used in relative_matrix in binary 2019-11-14 22:36:04 +01:00
Zeno Rogue a712abecac simplified (and fixed) virtualRebase for euclid/sphere 2019-11-14 22:33:00 +01:00
Zeno Rogue 0712a69750 fixed binary4 and ternary walls, also ternary walls did not work previously 2019-11-14 22:24:36 +01:00
Zeno Rogue dca98d5879 ray:: mediump 2019-11-14 21:21:17 +01:00
Zeno Rogue 3bdbea30e3 fixed irregular map 2019-11-14 21:18:50 +01:00
Zeno Rogue 4dcac4bb3a fixed ggmatrix 2019-11-14 21:15:18 +01:00
Zeno Rogue ac8eebf179 fixed the 'dual grid' pattern 2019-11-14 20:59:58 +01:00
Zeno Rogue 9168abd1a7 adjusted RogueViz 2019-11-14 20:26:07 +01:00
Zeno Rogue 45ba2f0229 shmup:: sharks on dry land now die/transform 2019-11-14 20:20:35 +01:00
Zeno Rogue a6d36228b7 shmup:: Butterflies are no longer killable 2019-11-14 20:11:16 +01:00
Zeno Rogue ef98e048bb shmup:: incorrect cpid protection (just in case) 2019-11-14 20:08:23 +01:00
Zeno Rogue 7602048b06 inv computed in shmup 2019-11-14 19:51:25 +01:00
Zeno Rogue aead4b64f9 checkmove (called by initGame and on safety) no longer crashes the shmup mode 2019-11-14 19:51:16 +01:00
Zeno Rogue b95672fb26 fixed a crash when generating horocycles 2019-11-14 19:50:12 +01:00
Zeno Rogue 234677c5eb inverse ddspin back to iddspin 2019-11-14 19:34:09 +01:00
Zeno Rogue 012d833f50 removed the tohex parameter 2019-11-14 19:33:55 +01:00
Zeno Rogue decd30164d fixed product : spin_to/spin_from 2019-11-14 19:24:54 +01:00
Zeno Rogue df4e700676 fixed resetview in 3D including product 2019-11-14 19:24:42 +01:00
Zeno Rogue 8a2e9b7a73 fixed iddspin 2019-11-14 19:23:27 +01:00
Zeno Rogue 1f9501f746 fixed product spaces 2019-11-14 19:06:48 +01:00
Zeno Rogue f96b497d2e fixed product 2019-11-14 18:22:48 +01:00
Zeno Rogue b46d647752 current_display macros now work outside namespace hr 2019-11-14 17:21:53 +01:00
Zeno Rogue 3eee611eca nisot::local_perspective moved to display_data 2019-11-14 17:20:55 +01:00
Zeno Rogue 0f84ec8dc8 Orb of Recall now recalls the original orientation 2019-11-14 17:16:54 +01:00
Zeno Rogue 9a35342625 correct resetview facing in 3D/nonorientable 2019-11-14 17:08:00 +01:00
Zeno Rogue 5ff7266877 Crosses in the Graveyard are now arranged in a symmetric pattern 2019-11-14 16:58:36 +01:00
Zeno Rogue 320ab79a27 some junk from the '^' pattern 2019-11-14 16:52:08 +01:00
Zeno Rogue aeaaf7586a refactored map functions: ddspin, iddspin, spacedist, spin_angle, virtualRebase[simple], adj 2019-11-14 16:51:50 +01:00
Zeno Rogue 4e534261f0 hrmap_binary no longer inherits from hrmap_hyperbolic (Liskov substitution fail) 2019-11-14 13:08:20 +01:00
Zeno Rogue 9f6f3232b5 the orientation after recentering is now always 'player facing upwards' 2019-11-14 00:43:36 +01:00
Zeno Rogue 1e6d221e0a fixed_facing_dir saved 2019-11-14 00:42:36 +01:00
Zeno Rogue 4118704cb6 removed some junk from racing.cpp 2019-11-14 00:28:17 +01:00
Zeno Rogue 109dd9823c simplified ddspin/iddspin/cellgfxdist, replaced cellrelmatrix with adj/iadj 2019-11-14 00:27:59 +01:00
Zeno Rogue ef9e2236ba viewctr is no more... major reduction of redundancy/complexity 2019-11-14 00:26:50 +01:00
Zeno Rogue 74a139ca3e Z period in product geometries 2019-11-13 20:48:38 +01:00
Zeno Rogue b0e481cc0a removed debug 2019-11-13 20:47:55 +01:00
Zeno Rogue bee727071e racing in periodic? to test 2019-11-09 18:03:32 +01:00
Zeno Rogue cc9e03ddb8 product:: product projections 2019-11-09 13:14:42 +01:00
Zeno Rogue 6dfec2140e mdHorocyclic is named 'simple model' in Nil 2019-11-09 12:50:38 +01:00
Zeno Rogue 416ee95aac horocyclic coordinates model 2019-11-09 12:49:00 +01:00
Zeno Rogue 97c9673b30 fixed simple perspective in nonisotropic 2019-11-09 12:33:13 +01:00
Zeno Rogue dac132b094 fixed Poincare ball in nonisotropic 2019-11-09 12:33:00 +01:00
Zeno Rogue e17747791e sol:: correct rotation in simple model 2019-11-09 12:32:37 +01:00
Zeno Rogue c7f735f3ac asonov:: correct geometry shown 2019-11-09 12:32:21 +01:00
Zeno Rogue da33270fae asonov:: renamed to full name 2019-11-09 12:32:10 +01:00
Zeno Rogue cbc4cff5bc asonov:: mirrors in ray 2019-11-09 12:12:16 +01:00
Zeno Rogue 93e8d6f92a asonov:: affected by binary_width 2019-11-09 12:00:44 +01:00
Zeno Rogue f99b52358e rogueviz::kohonen:: colored rings in 3D 2019-11-09 11:21:13 +01:00
Zeno Rogue 5d5dc62f9e fixed bug 2019-11-09 11:20:51 +01:00
Zeno Rogue d47c09de12 glhr:: export current_linewidth for minimizing 2019-11-09 11:20:43 +01:00
Zeno Rogue f1532591d4 fixed possible crash when drawing empty textures 2019-11-09 11:20:30 +01:00
Zeno Rogue 374d52bb58 default allcells builds the list on all quotient spaces, and generates some list if there is no dcal 2019-11-09 11:20:18 +01:00
Zeno Rogue e6be9231c9 noGUI taken into account in more places 2019-11-09 11:18:52 +01:00
Zeno Rogue 68e3d98f88 improved asonov debug output 2019-11-09 11:17:42 +01:00
Zeno Rogue 6dd47c903d nilv:: works with small periods 2019-11-08 15:42:31 +01:00
Zeno Rogue f7fc9d7d5d asonov:: works even with small periods 2019-11-08 15:35:23 +01:00
Zeno Rogue add037d4e8 asonov:: changed direct checking of gArnoldCat to asonov::in() 2019-11-08 15:34:51 +01:00
Zeno Rogue 9cb2a753de pattern 'exclamation mark' marks cells adjacent to start according to their neighbor id 2019-11-08 15:02:03 +01:00
Zeno Rogue d199411248 new tiling: Arnold's cat 2019-11-08 15:01:03 +01:00
Zeno Rogue 2cf540cfbc ray:: fixed left/arrow keys doing nothing when editing exp range 2019-11-08 15:00:09 +01:00
Zeno Rogue 97d4e45996 ray:: fixing the vectors (commented off) 2019-11-08 14:59:44 +01:00
Zeno Rogue effe35dd34 ray:: hard limit 2019-11-08 14:59:19 +01:00
Zeno Rogue 45d74296b3 exporting *_current() 2019-11-08 14:58:46 +01:00
Zeno Rogue 83f8216fdc nilv:: comment about periodicity 2019-11-08 14:57:56 +01:00
Zeno Rogue 73197c86c6 nilv:: qSMALL flag set for Nil quotients when appropriate 2019-11-08 14:57:44 +01:00
Zeno Rogue afe031aa24 levellines: do not use levellines for the underlying map in Rug 2019-11-08 14:57:22 +01:00
Zeno Rogue 04746c9248 CLI option -mvol 2019-11-08 14:57:02 +01:00
Zeno Rogue b80caa11a6 moved zgmod to util 2019-11-08 14:56:54 +01:00
Zeno Rogue af9b049057 fixed the rug becoming black on some computers when resizing window or during the start animation 2019-11-03 15:52:19 +01:00
Zeno Rogue 1eb27b3393 prevent losing Rug texture on open/close window 2019-11-03 15:13:40 +01:00
Zeno Rogue cf66dade1a 11.2i 2019-11-03 14:55:43 +01:00
Zeno Rogue 341934d1c5 s2xe:: removed old junk 2019-11-03 14:44:40 +01:00
Zeno Rogue 55c41463dd s2xe:: fixed unfilled shapes 2019-11-03 14:44:26 +01:00
Zeno Rogue a080be76ad added missing CAP_SOLV and CAP_TEXTURE guards 2019-11-03 14:20:24 +01:00
Zeno Rogue a0edba1922 removed outlines from falling stuff 2019-11-03 14:19:56 +01:00
Zeno Rogue a9c08d76fb fixed CAP_VERTEXBUFFER 2019-11-03 14:19:37 +01:00
Zeno Rogue 43bf7c5cfe fixed MAXMDIM guards 2019-11-03 14:19:11 +01:00
Zeno Rogue 02bb9d5ea5 fixed 'locked with powerful magic' message spam; OoY not movable through land with OoWater; you can jump out of an OoY boat using OoFish/OoAether/OoGravity 2019-11-03 14:08:45 +01:00
Zeno Rogue c7dfdaef4c hell unlock message on 10th shard 2019-11-03 13:56:42 +01:00
Zeno Rogue 7a70fc717d ray:: well-defined bounds in for loops in shaders 2019-11-03 13:36:40 +01:00
Zeno Rogue 3725b06d0b levellines feature 2019-11-03 13:36:06 +01:00
Zeno Rogue d1d8ee07a1 fixed texture overlay 2019-11-03 11:00:56 +01:00
Zeno Rogue 8d10336c63 ray:: disabled in texture 2019-11-03 11:00:47 +01:00
Zeno Rogue ade5c9c39f 11.2h 2019-11-03 02:24:35 +01:00
Zeno Rogue ffd1295d3a ray:: config hotkey 2019-11-03 02:24:26 +01:00
Zeno Rogue c25de99e10 ray:: color_out_of_range configurable via CLI 2019-11-02 22:31:50 +01:00
Zeno Rogue fa933a6661 alternate races 2019-11-02 22:31:37 +01:00
Zeno Rogue 9b63408af5 fixup missing try 2019-11-02 22:31:29 +01:00
Zeno Rogue 3f18d91643 raycaster reset on hybrid::configure 2019-11-02 22:31:15 +01:00
Zeno Rogue 2760e5aaf0 racing:: better track generation in periodic Euclidean/Nil 2019-11-02 22:21:53 +01:00
Zeno Rogue 47a1d77ee4 racing:: track length reduced if there are problems 2019-11-02 22:21:25 +01:00
Zeno Rogue d4b2e0f88b niltorus improvements 2019-11-02 22:19:32 +01:00
Zeno Rogue 8ba303f0f4 nil:: fixed zgmod 2019-11-02 22:18:28 +01:00
Zeno Rogue 377fd3f8bd torus3 improvements 2019-11-02 22:17:57 +01:00
Zeno Rogue e8de4d088c fixed a possible crash in hybrid 2019-11-02 20:28:52 +01:00
Zeno Rogue 96224b5c44 fixed an issue in pure product shmup 2019-11-02 20:28:33 +01:00
Zeno Rogue 7298c8b71e fixed a possible crash in ghostmove 2019-11-02 20:28:02 +01:00
Zeno Rogue cca689641a euclid3::set_torus added 2019-11-02 20:27:44 +01:00
Zeno Rogue ed7b1c0651 GitHub sponsor added 2019-11-02 15:45:42 +01:00
Zeno Rogue 9ff70d568c ray:: NIH geometries 2019-11-02 11:51:44 +01:00
Zeno Rogue 6fa60e67c7 random pattern no longer generates wall on start 2019-11-02 11:51:16 +01:00
Zeno Rogue add21e134a ray:: do not create through walls 2019-11-02 10:41:42 +01:00
Zeno Rogue 72789f5a52 some patterns 2019-11-02 10:40:47 +01:00
Zeno Rogue 272c628229 ray:: horospherical hyperbolic honeycombs 2019-11-02 10:40:22 +01:00
Zeno Rogue bde53b5c78 fixup 2019-11-02 10:37:23 +01:00
Zeno Rogue bed19cad51 fieldval in gBinary3 and gHoroRec 2019-11-02 09:39:13 +01:00
Zeno Rogue 4294f48422 fixup 2019-10-29 13:21:34 +01:00
Zeno Rogue 2d5f671a38 funding configuration 2019-10-29 13:16:06 +01:00
Zeno Rogue d375328096 fixed S2xE and H2xE 2019-10-28 17:34:16 +01:00
Zeno Rogue 2002845f8a option -ray-comp 2019-10-28 17:33:54 +01:00
Zeno Rogue f1e31b961b ray:: product spaces 2019-10-28 17:33:17 +01:00
Zeno Rogue 72b52e178f underlying space view is now available in product space 2019-10-28 17:26:59 +01:00
Zeno Rogue e6a1279544 debug_gl fixup 2019-10-28 17:24:25 +01:00
Zeno Rogue 79cdbf7a53 correct cgi.wallstart in hybrid 2019-10-28 17:20:28 +01:00
Zeno Rogue f3035bb1f5 3D version of tmtogl_transpose 2019-10-28 17:19:30 +01:00
Zeno Rogue 33f17e345a option -dgl to debug shaders 2019-10-28 17:18:59 +01:00
Zeno Rogue d7c57d3b6b updated rogueviz to changes in HyperRogue 2019-10-27 13:14:40 +01:00
Zeno Rogue af5d961b1d 11.2g 2019-10-27 02:48:50 +01:00
Zeno Rogue 0320b07496 debugScreen:: display pointer with index 2019-10-27 02:44:01 +01:00
Zeno Rogue 08c08f9d6c fixed worm movement (prairie::no_worms returned true outside prairie) 2019-10-27 02:43:47 +01:00
Zeno Rogue 5939d5e6d2 acid gull from Brownian no longer generates just after Safety 2019-10-27 02:45:32 +02:00
Zeno Rogue 0d80fea18b prevented Gadflies, Hunting Dogs and Vine Beasts from appearing after using Orb of Safety 2019-10-27 02:43:28 +02:00
Zeno Rogue b1665ab23b Thumpers now attract monsters with special movement rules 2019-10-27 02:37:41 +02:00
Zeno Rogue 62634e1dc3 Z-cheat now rotates boat images too 2019-10-27 02:30:00 +02:00
Zeno Rogue 9979d240d8 fixed boats 2019-10-27 02:29:49 +02:00
Zeno Rogue ebba7a2a82 ray:: configurable reflective walls 2019-10-27 02:23:20 +02:00
Zeno Rogue a766abdff7 ray:: auto-entered sizes of uWall* uniforms 2019-10-27 00:58:02 +02:00
Zeno Rogue 41107f13d6 fixed singular matrix in raywall 2019-10-27 00:57:06 +02:00
Zeno Rogue e9ea32645c removed debug 2019-10-27 00:56:46 +02:00
Zeno Rogue 29d1427154 fixed confusion in 3D elliptic spaces 2019-10-27 00:45:34 +02:00
Zeno Rogue d0ef1c7578 fixed generation of 3D elliptic spaces 2019-10-27 00:45:24 +02:00
Zeno Rogue 09acbc5fb2 generate crystal 2019-10-27 00:45:00 +02:00
Zeno Rogue 2daad158ca fixed selecting gCrystal344 2019-10-27 00:42:18 +02:00
Zeno Rogue dd4602e139 11.2f 2019-10-26 18:39:30 +02:00
Zeno Rogue 79cbebf22f ray:: reduced default max_cells 2019-10-26 18:25:14 +02:00
Zeno Rogue a9d3efe02c solnihv:: set result[3] to zero, as otherwise it may become infinite 2019-10-26 18:24:45 +02:00
Zeno Rogue fde37d56a9 ray:: replace GL_RGBA32F with actual value 2019-10-26 17:03:29 +02:00
Zeno Rogue 4df677f22f ray:: reset raycaster on geometry change 2019-10-26 17:03:10 +02:00
Zeno Rogue d24971fef0 GLERR now uses hlog 2019-10-26 17:02:54 +02:00
Zeno Rogue d560dd1283 added #undef c to celldrawer.cpp 2019-10-26 17:02:30 +02:00
Zeno Rogue 68c7514c2c clear shaders on resetGL 2019-10-26 17:02:20 +02:00
Zeno Rogue 2645eae237 ray:: rudimentary comments 2019-10-26 15:42:38 +02:00
Zeno Rogue c9e45e0db3 patterns: selectable '/' pattern 2019-10-26 15:42:20 +02:00
Zeno Rogue 5f9970fce2 raycasting takes fog into account 2019-10-26 15:33:57 +02:00
Zeno Rogue 391f421b98 reduce sightrange in gCrystal344 (assume raycasting) 2019-10-26 15:33:28 +02:00
Zeno Rogue b5bbb05d07 warning on entering pits 2019-10-26 14:47:22 +02:00
Zeno Rogue 3d427cac61 fixed Orb of Speed saving on the first move 2019-10-26 14:40:15 +02:00
Zeno Rogue 3477371ffd const version of glmatrix::as_stdarray 2019-10-26 14:34:44 +02:00
Zeno Rogue 93f145adb0 fixed pushdown (?) 2019-10-26 14:34:22 +02:00
Zeno Rogue 9cc4f627cf ray:: fixed distance in Sol 2019-10-26 14:19:53 +02:00
Zeno Rogue 6d38362bbc ray:: take cview() into account 2019-10-26 14:17:50 +02:00
Zeno Rogue 45639c557b fixup debug removed 2019-10-26 14:17:22 +02:00
Zeno Rogue 3c4fe13fac ray:: set depth to match primitive-based shader 2019-10-26 14:11:44 +02:00
Zeno Rogue 852c45e429 ray:: trailing space 2019-10-26 10:55:35 +02:00
Zeno Rogue deb98cba7f ray:: reflective walls (turned off) 2019-10-26 10:55:19 +02:00
Zeno Rogue ee06fdc326 ray:: removed extra #define PI 2019-10-26 10:54:59 +02:00
Zeno Rogue df48abe6b1 ray:: transparent walls 2019-10-26 10:54:26 +02:00
Zeno Rogue f044544c24 ray:: texture mapping 2019-10-26 10:32:44 +02:00
Zeno Rogue 368fbcbf72 ray:: replaced uniform uN with a constant 2019-10-26 09:25:55 +02:00
Zeno Rogue 74ff8c7192 ray:: use get_darkval 2019-10-26 09:14:38 +02:00
Zeno Rogue 64330fab93 optimize racing mode (old renderer) 2019-10-26 01:09:25 +02:00
Zeno Rogue 8560f2322c ray:: minstep and maxstep configurable 2019-10-26 00:43:15 +02:00
Zeno Rogue 5c335fb281 ray:: no render past walls in racing 2019-10-26 00:27:31 +02:00
Zeno Rogue 1f1b04bf93 out-of-range color configurable 2019-10-26 00:17:58 +02:00
Zeno Rogue 5c884dbfc1 ray:: CLI options 2019-10-26 00:12:40 +02:00
Zeno Rogue fc9e2391dc ray:: max cells and rays_generate configurable 2019-10-26 00:12:30 +02:00
Zeno Rogue 7879a4abe1 ray:: two-dimensional cell lists 2019-10-26 00:01:12 +02:00
Zeno Rogue e0f243b11c ray:: fixed order 2019-10-25 23:24:31 +02:00
Zeno Rogue 0e7c5055ae fixed incorrect mouse interpretation in spherical ortho 2019-10-25 23:24:21 +02:00
Zeno Rogue fcebfdbcf3 number of iterations configurable 2019-10-25 15:18:31 +02:00
Zeno Rogue 4e8e904ae2 compressed the uniform array uM 2019-10-25 15:11:44 +02:00
Zeno Rogue 8e5cf373cf ray:: range configurable 2019-10-25 15:05:17 +02:00
Zeno Rogue bd7805e68d ray:: namespace and basic configurator 2019-10-25 14:50:48 +02:00
Zeno Rogue 38414c65b4 devmods/edit-shaders:: resolved name conflict 2019-10-25 14:50:03 +02:00
Zeno Rogue 72e6859dd5 Penrose staircase pattern in Nil, and diagonal pattern in Crystal 2019-10-25 12:47:03 +02:00
Zeno Rogue 85a08d205d refactored celldraw 2019-10-25 12:44:41 +02:00
Zeno Rogue 4d5fb13b32 removed BUILDZEBRA from drawcell 2019-10-25 09:22:19 +02:00
Zeno Rogue fd8f363b8f nil:: quotient spaces 2019-10-25 08:52:18 +02:00
Zeno Rogue 8337a83568 raycasting::: ray_comparison_mode 2019-10-23 23:10:50 +02:00
Zeno Rogue 0905117869 raycasting:: Nil using geodesic formulas 2019-10-23 23:09:49 +02:00
Zeno Rogue be9cea07b3 raytracing:: better Solv, and Nil 2019-10-23 18:52:57 +02:00
Zeno Rogue 2f15d0f013 no more local_perspective taken into account for SF_PIXELS 2019-10-22 22:43:07 +02:00
Zeno Rogue 3943b1937b raycaster for Solv 2019-10-22 22:42:48 +02:00
Zeno Rogue 08700803c0 wall coordinate reading 2019-10-22 12:07:38 +02:00
Zeno Rogue ae2d825075 kleinize for GDIM3 2019-10-22 12:05:47 +02:00
Zeno Rogue 80a6c4a580 no more weird acting on loadConfig when the file is empty 2019-10-22 12:05:22 +02:00
Zeno Rogue 0e3fc3a0f9 fixed R3 shader 2019-10-22 10:52:30 +02:00
Zeno Rogue ed5a86a1b8 raycasting:: Euclidean 2019-10-22 10:52:17 +02:00
Zeno Rogue edbbb51135 basic raycaster implementation 2019-10-22 00:37:57 +02:00
Zeno Rogue 315e93a76a junk comments removed 2019-10-22 00:37:37 +02:00
Zeno Rogue be3d755d09 exports for raycasting 2019-10-22 00:37:24 +02:00
Zeno Rogue 655af58ae1 use shared_ptr consistently 2019-10-22 00:36:44 +02:00
Zeno Rogue d7a8cbe0be GLprogram junk 2019-10-22 00:35:34 +02:00
Zeno Rogue ea65beb5c0 crystal::get_dim() typo fixup 2019-10-21 23:00:04 +02:00
Zeno Rogue 7bc02b8b1e rogueviz/magiccube:: used 'back' color instead of 0 2019-10-21 22:45:55 +02:00
Zeno Rogue 301d4664fe rogueviz/magiccube:: works with gCrystal344 2019-10-21 22:45:38 +02:00
Zeno Rogue 77c45f4e85 rogueviz/magiccube:: added header 2019-10-21 22:45:08 +02:00
Zeno Rogue 423a1fae39 crystal::get_dim() 2019-10-21 22:44:18 +02:00
Zeno Rogue bb7e96a3d0 atan/atan2 functions in slshader 2019-10-21 22:43:19 +02:00
Zeno Rogue aff0f4a69e ODS fixup 2019-10-21 22:43:03 +02:00
Zeno Rogue a6c01a2e96 animallegs cleanup NFC 2019-10-21 22:42:50 +02:00
Zeno Rogue c527d4e613 ODS in hyperbolic 2019-10-21 22:42:27 +02:00
Zeno Rogue 30eda241a8 shader fixup 2019-10-21 22:40:56 +02:00
Zeno Rogue 25d2f6242e manual-animation:: cleaner skipping 2019-10-21 22:39:29 +02:00
Zeno Rogue 8f6f7bec71 manual-animation:: added [] to save animation (works in crystal) 2019-10-21 22:38:51 +02:00
Zeno Rogue ace7214ee4 manual-animation:: more messages in general 2019-10-21 22:37:37 +02:00
Zeno Rogue e81f697705 junk remove 2019-10-21 22:36:48 +02:00
Zeno Rogue 9a74cb2019 manual-animation:: number keys now show what specifically changed 2019-10-21 22:36:21 +02:00
Zeno Rogue f3f61a1337 manual-animation:: crosshair displayed only when keys_on 2019-10-21 22:35:45 +02:00
Zeno Rogue 51e1fe06b3 in crystal3, quick relative_matrix for adjacent 2019-10-21 22:35:04 +02:00
Zeno Rogue d68ce01b63 gradient function considers 4 coordinates 2019-10-21 22:34:37 +02:00
Zeno Rogue 09fcd14aa7 redesigned shader system 2019-10-21 22:34:20 +02:00
Zeno Rogue 7babf20ef4 rogueviz/magiccube:: removed repeated definitions 2019-10-12 19:10:12 +02:00
Zeno Rogue bf691001ab added missing guards 2019-10-12 19:09:53 +02:00
Zeno Rogue 58c1c04697 fixed uninitialized variable 2019-10-12 14:42:57 +02:00
Zeno Rogue 6a94eef6aa fixed the # and = pattern keys not working 2019-10-12 14:40:42 +02:00
Zeno Rogue 4fc3c73855 fixed the racing marker in Crystal344 2019-10-12 14:40:33 +02:00
Zeno Rogue d7cb0b1bd2 fixed some compiler issues 2019-10-12 14:04:46 +02:00
Zeno Rogue ecdb1aa6e7 11.2e 2019-10-12 14:02:58 +02:00
Zeno Rogue bcbc36f38b fieldval_uniq returns 0 for paracompact 2019-10-12 13:48:44 +02:00
Zeno Rogue c78da19a98 fixed 3-dim geometries not generating the land for the first 50 cells 2019-10-12 13:48:26 +02:00
Zeno Rogue edfb8084cf debug removed 2019-10-12 13:48:04 +02:00
Zeno Rogue 5ba9788e53 sightranges set for the new geometries 2019-10-12 13:47:58 +02:00
Zeno Rogue 74e52b0617 experimental status removed 2019-10-12 13:47:49 +02:00
Zeno Rogue 7246605329 do not do walls if walls not implemented 2019-10-12 13:47:41 +02:00
Zeno Rogue ad15ecf3e6 reg3:: optimized non-crystal 344 2019-10-12 13:19:58 +02:00
Zeno Rogue 924a8b1e87 fixed the regular octahedral and dodecahedral honeycombs: side[i] and side[i+S7/6] are now opposite 2019-10-12 13:19:18 +02:00
Zeno Rogue 48f0162e69 increased vertex_distance to 13 in 334 2019-10-12 13:16:22 +02:00
Zeno Rogue 31861cc45a reduced corner_bonus in 334 2019-10-12 13:16:09 +02:00
Zeno Rogue 60ff50e8e2 crystal334: help line shows coordinates in the cheat mode 2019-10-12 13:15:46 +02:00
Zeno Rogue 06cfce6e23 in 3DIM, do_draw is now always called if cells_drawn < 50 2019-10-12 13:15:15 +02:00
Zeno Rogue 94857cad86 fixed an issue in optimizeview for crystal334 2019-10-12 13:14:38 +02:00
Zeno Rogue 8ebeb60bcb increased default vid.texture_step in paracompact honeycombs 2019-10-12 13:13:09 +02:00
Zeno Rogue ddc0fa538e fixed view_coordinates and compass in Crystal334 2019-10-12 13:12:47 +02:00
Zeno Rogue 48b1773f0d new patterns for 4D Crystal 2019-10-12 13:12:15 +02:00
Zeno Rogue 300fb6bcbd increased the default cell generation limit to 250 2019-10-12 13:11:28 +02:00
Zeno Rogue 075278adea cell/heptagon pointers are now indexed when printed 2019-10-12 11:25:56 +02:00
Zeno Rogue d2b3df57c6 crystal {3,4,4} 2019-10-12 11:24:29 +02:00
Zeno Rogue 352f9ed8a9 reg3:: cellrotations 2019-10-12 11:22:13 +02:00
Zeno Rogue 0a465a7af5 export adjcheck, strafedist 2019-10-12 11:21:46 +02:00
Zeno Rogue 54a9345777 glhr:: a more efficient stringbuilder (previous version caused stack overflow in web) 2019-10-12 11:21:29 +02:00
Zeno Rogue adee8aa699 wall optimization option (-wallopt): do not draw things behind walls 2019-10-12 11:21:00 +02:00
Zeno Rogue e80869e14e fixed a bug in octahedral honeycombs 2019-10-10 13:49:35 +02:00
Zeno Rogue 671990731c ideal 3D honeycombs 2019-10-10 13:49:35 +02:00
Zeno Rogue da4846f216 reg3:: improved the comments, also prepared for ideal 2019-10-10 13:49:35 +02:00
Zeno Rogue 57a8c93a82 reg3:: using quotient_map based on whether quotient_map exists 2019-10-10 13:49:35 +02:00
Zeno Rogue b33f85d423 shortcut macros cginf and cgflags 2019-10-10 13:49:35 +02:00
Zeno Rogue 7a29d015b3 inforder:: some settings in polygons.cpp to draw procedural graphics correctly 2019-10-10 13:49:35 +02:00
Zeno Rogue 76ca5a8dac inforder:: correctly draw patTree and patAltTree (also fix a bug in binary tiling) 2019-10-10 13:49:35 +02:00
Zeno Rogue 9a3be468be inforder:: fixed too large HUD 2019-10-10 13:49:35 +02:00
Zeno Rogue 8150fd3e7d inforder:: remap floorshapes correctly 2019-10-10 13:49:35 +02:00
Zeno Rogue 51ffd708d0 camelot_monster() and emerald_monster() to prevent wandering monster generating incorrect monsters 2019-10-10 13:49:35 +02:00
Zeno Rogue 43f629e9c4 inforder:: wall generation 2019-10-10 13:49:35 +02:00
Zeno Rogue b5f6e6f3f5 inforder basics 2019-10-10 13:08:06 +02:00
Zeno Rogue e799f76e5d rogueviz:: legend color is now changeable 2019-10-07 00:10:42 +02:00
Zeno Rogue e2cbf80986 fixed save_compressed and load_compressed: did not work because of internal format change 2019-10-07 00:10:25 +02:00
Zeno Rogue 07abd6384a option 'permaside' (-pside) to permanently move the model to the left side 2019-10-07 00:08:37 +02:00
Zeno Rogue 5664e51bde fixup 2019-10-06 15:02:47 +02:00
Zeno Rogue 216adba04c in disk models of 3D, walls are still drawn if the adjacent cell is a wall but not drawn 2019-10-06 14:29:51 +02:00
Zeno Rogue e37f7fcf60 removed debug from 'rainbow by distance' pattern 2019-10-06 14:08:16 +02:00
Zeno Rogue a5908620ce 11.2d 2019-10-06 13:05:53 +02:00
Zeno Rogue 77cbae6b63 'rainbow by distance' pattern 2019-10-06 13:05:39 +02:00
Zeno Rogue 9850dd557e in 3D geometries, patterns may create walls 2019-10-06 13:05:39 +02:00
Zeno Rogue f0ca277b10 geometry_supports_cdata() always returned false in hybrid 2019-10-06 13:05:39 +02:00
Zeno Rogue d400bc845e selecting bounded geometry no longer disables racing 2019-10-06 12:13:30 +02:00
Zeno Rogue 528cf9867a fixed read_model() which was crashing 2019-10-06 12:13:30 +02:00
Zeno Rogue d11b768bf1 removed destucking code as stucking was fixed by another bugfix 2019-10-06 12:13:30 +02:00
Zeno Rogue cd04b3f8e8 precision argument for parallel_transport, and reducing it when used many times 2019-10-06 12:10:43 +02:00
Zeno Rogue 54487eb6f3 buffer enforced for the player in 3D shmup 2019-10-06 12:10:43 +02:00
Zeno Rogue 3d1d799153 improved default model selection 2019-10-06 12:10:43 +02:00
Zeno Rogue e38e001454 better distance approximation in Nil 2019-10-06 12:10:43 +02:00
Zeno Rogue 69d0284745 fixed c->land == waBoat to wall 2019-10-05 19:59:59 +02:00
Zeno Rogue cbd8c77636 fixed distance computation in Nil 2019-10-05 18:55:11 +02:00
Zeno Rogue 5a4f936769 11.2c 2019-10-05 18:55:11 +02:00
Zeno Rogue 4bee342e8c added stretched geometries to 'racing in Thurston' 2019-10-05 18:55:11 +02:00
Zeno Rogue 68489d35b1 Orb of Fish is no longer marked useless in Warped Coast/Sea, Cocytus, Brown Islands, and Irradiated Fields 2019-10-05 18:55:11 +02:00
Zeno Rogue 05d97dd014 free Orbs of Safety in the Land of Eternal Motion in Orb Strategy Chaos Mode (combo) 2019-10-05 18:55:11 +02:00
Zeno Rogue 8674b3bc23 in randomwalk/total chaos modes, special graphics are no longer used for Warped Coast 2019-10-05 18:55:11 +02:00
Zeno Rogue f5b26cc07a fixed an exploit in Orb Strategy Mode (a trick to gain extra Golems) 2019-10-05 18:55:11 +02:00
Zeno Rogue f5ee8f3c98 added Saplou to credits 2019-10-05 18:55:11 +02:00
Zeno Rogue db6203b5db added ssol and shyp geodesic files to repo; removed hiding from ge_select_tiling 2019-10-05 18:55:11 +02:00
Zeno Rogue f69962d2b1 fixed year 20019 in changelog 2019-10-05 18:55:11 +02:00
Zeno Rogue 0fcdd8ee4c added ShadeBlade to credits 2019-10-05 18:55:11 +02:00
Zeno Rogue 0ace8d9805 fixed wrong display of prize Orb spawn rates 2019-10-05 18:55:11 +02:00
Zeno Rogue 43d8cd3b80 boats remain boats in makeEmpty 2019-10-05 18:55:11 +02:00
Zeno Rogue b8fd4e1199 set landparam = 1 on recall in Brownian just in case 2019-10-05 18:55:11 +02:00
Zeno Rogue 0e759f9da9 ladders no longer disappear on recall 2019-10-05 18:55:11 +02:00
Zeno Rogue 51ef84f0b2 fire in Brownian no longer generates level-0 walls 2019-10-05 18:55:11 +02:00
Zeno Rogue b419aab0a1 fixed a possible crash in Archimedean geometries 2019-10-05 18:55:11 +02:00
Zeno Rogue e192506943 fixed mimics in 3D nonisotropic 2019-10-05 18:55:11 +02:00
Zeno Rogue 7f9ffe14af racing:: in 3D, you now reflect off blocking walls 2019-10-05 18:55:11 +02:00
Zeno Rogue a023003560 stuck prevention and wall sliding 2019-10-05 18:55:11 +02:00
Zeno Rogue 82f7ae05d2 findbase now gets a parameter which tells how many steps to make 2019-10-05 18:55:11 +02:00
Zeno Rogue 6d4b61f0c0 new CLI options for racing 2019-10-05 18:55:11 +02:00
Zeno Rogue 4e1abe964f print for horo_distance 2019-10-05 18:55:11 +02:00
Zeno Rogue 282ca884c4 less aggressive backwall optimization in Solv 2019-10-05 18:55:11 +02:00
Zeno Rogue afa65ee525 fixed racing in stretched hyperbolic 2019-10-05 18:55:11 +02:00
Zeno Rogue eead4af644 fixed horodistance in nih 2019-10-05 18:55:11 +02:00
Zeno Rogue e873f731d3 devmods:: easier to use solv-table 2019-10-05 18:53:51 +02:00
Zeno Rogue eb591f5dc8 stabilized file names for tabled inverse files 2019-10-05 18:53:51 +02:00
Zeno Rogue 455985687b CLI option -PM now accepts names 2019-10-05 18:53:51 +02:00
Zeno Rogue 0b629c7bb2 option -geo now accepts short names 2019-10-05 18:53:51 +02:00
Zeno Rogue 0e1b9c6720 option -win in mymain to compile for Windows (local use, does not work) 2019-10-05 12:38:35 +02:00
Zeno Rogue a415732188 debug removed 2019-10-05 12:37:36 +02:00
Zeno Rogue a48aea7b8e used EX for space_to_perspective 2019-10-05 12:34:36 +02:00
Zeno Rogue cfc36c7bda fisheye and ball models in nonisotropic spaces 2019-10-05 12:34:14 +02:00
Zeno Rogue 08108c342c aura in the fisheye projection, also minor optimization 2019-10-05 12:33:00 +02:00
Zeno Rogue 13ea55b233 fisheye has parameter 2019-10-05 12:32:16 +02:00
Zeno Rogue a5579af826 disabled marking log(2) and log(3) as constexpr 2019-10-04 17:42:25 +02:00
Zeno Rogue 09a4849a72 devmods:: fixed naming in manual-animation 2019-10-04 17:11:00 +02:00
Zeno Rogue 6dfb531f9d racing:: Crossroads in 3D geometries 2019-10-04 14:22:19 +02:00
Zeno Rogue 35cf9ac57f devmods:: fixed filenames in manual-animation 2019-10-04 13:05:50 +02:00
Zeno Rogue 78c0d8b3c4 devmods:: fixed filenames in edit-shaders 2019-10-04 13:05:38 +02:00
Zeno Rogue 038a19e4d8 renamed NIH geometries to stretched 2019-10-04 13:05:20 +02:00
Zeno Rogue ec465b2afc separate shader for stretched Sol, to avoid glitches 2019-10-04 13:03:50 +02:00
Zeno Rogue ac8b866978 yet another 2019-10-03 20:36:15 +02:00
Zeno Rogue c1a12172ae yet another weird bug 2019-10-03 20:31:28 +02:00
Zeno Rogue f94a262d71 fixed geometry_name() for NIH 2019-10-03 20:24:27 +02:00
Zeno Rogue f56c3b79f2
Merge pull request #83 from reinerh/make_dependency
Add language-data.cpp as dependency for autohdr.h
2019-10-03 20:19:06 +02:00
Zeno Rogue 558d5596af removed WIP geometries from the menu 2019-10-03 20:13:04 +02:00
Zeno Rogue 71e3bc4759 removed useless debug output 2019-10-03 20:12:53 +02:00
Zeno Rogue 67aceb80a5 fixup 2019-10-03 20:12:25 +02:00
Zeno Rogue 73267486e9 more elegant solv-table 2019-10-03 20:11:24 +02:00
Zeno Rogue d69cb4e946 SolN manifold 2019-10-03 20:10:48 +02:00
Zeno Rogue 4872ad01f4 fixed music 2019-10-03 20:08:07 +02:00
Reiner Herrmann 5d16f7aa0a Add language-data.cpp as dependency for autohdr.h
When building in parallel, it could happen that autohdr.h is generated
before language-data.cpp was available and the compilation fails.
2019-10-03 17:34:27 +02:00
Zeno Rogue 46d127401e nih improvements 2019-10-02 19:22:43 +02:00
Zeno Rogue d6ab96f821 non-isotropic hyperbolic space 2019-10-01 05:03:46 +02:00
Zeno Rogue 255186840f ternary tiling 2019-09-30 23:36:15 +02:00
Zeno Rogue a971ffd427 fix to 11.2b 2019-09-30 03:15:10 +02:00
Zeno Rogue e2fde2afcf noblow for Friendly Ivy 2019-09-30 03:05:47 +02:00
Zeno Rogue 0405584e6d intester shift was interpreted as zero and did not prevent zeros 2019-09-30 02:59:50 +02:00
Zeno Rogue ddae7b9ce8 11.2b 2019-09-30 01:51:44 +02:00
Zeno Rogue aef1787daf fixed a bug with monster placement in shmup 2019-09-30 01:51:28 +02:00
Zeno Rogue 2e571ab337 devmods:: autoplay added 2019-09-30 01:51:16 +02:00
Zeno Rogue d396e323c1 added missing CAP_RACING guards 2019-09-28 21:59:10 +02:00
Zeno Rogue 0c72130ed8 mymake accepts modules with *.cpp extension 2019-09-28 18:18:00 +02:00
Zeno Rogue a4418d6dcc 11.2a 2019-09-28 17:33:59 +02:00
Zeno Rogue 77cf19fadc fixed spherity 2019-09-28 16:53:35 +02:00
Zeno Rogue 566a323eb4 racing and Thurston racing as start menu options 2019-09-28 16:16:49 +02:00
Zeno Rogue 5735645c23 racing in Thurston geometries as a menu option 2019-09-28 16:16:39 +02:00
Zeno Rogue 00eb83901d F5 in start menu changes the daily_mode 2019-09-28 16:16:20 +02:00
Zeno Rogue 7b3b2e0573 free space to make start menu consistent 2019-09-28 16:15:10 +02:00
Zeno Rogue 2d6ce7c2dc some fixup 2019-09-28 15:06:08 +02:00
Zeno Rogue 7528acfb23 shmup:: fixed a bug with going through walls 2019-09-28 14:58:38 +02:00
Zeno Rogue 9de1481b2a bounded racing improved 2019-09-28 14:57:57 +02:00
Zeno Rogue 4a0f5dfb22 racing in bounded geometries 2019-09-28 14:19:29 +02:00
Zeno Rogue 7ed8e16974 racing in bounded worlds 2019-09-28 14:18:58 +02:00
Zeno Rogue b1273dd704 do not show Reptile Tail 2019-09-28 14:18:23 +02:00
Zeno Rogue 77aa05c3f9 racing no longer disables S2xE 2019-09-27 18:19:16 +02:00
Zeno Rogue bb1e9ef91c racing in SL2 2019-09-27 18:18:50 +02:00
Zeno Rogue bd7d08f9db separate modecodes for product and rotspace 2019-09-27 18:05:01 +02:00
Zeno Rogue 1359dfcd62 setting Racing while in Solv no longer resets geometry 2019-09-27 18:04:49 +02:00
Zeno Rogue 5febec0843 racing in Nil 2019-09-27 18:04:19 +02:00
Zeno Rogue 8d9511ae79 racing forces standard_centering in quotient/nil/hybrid geometries 2019-09-27 18:04:04 +02:00
Zeno Rogue ce9f1c02f1 dialogs:: itsh(ld) fixed 2019-09-27 18:03:10 +02:00
Zeno Rogue 9ed730e10d racing:: fixed handing incorrectly built track 2019-09-27 17:35:14 +02:00
Zeno Rogue 4fe1fe8c38 racing:: removed obsolete commented out code 2019-09-27 17:34:59 +02:00
Zeno Rogue bc789e8c18 racing:: fixed racing to use modecode_t not int 2019-09-27 17:34:42 +02:00
Zeno Rogue 3d7242e918 added more people to credits 2019-09-27 17:34:16 +02:00
Zeno Rogue 85504de44b shmup:: no more orb usage after death 2019-09-27 17:06:12 +02:00
Zeno Rogue f45b90bad4 fixed being able to phase into a chasm (and possibly some other issues) 2019-09-27 17:00:37 +02:00
Zeno Rogue 267c2475d8 stop disabling music in the mercury river 2019-09-27 16:47:57 +02:00
Zeno Rogue 39d5099ca7 marked the Orb of Water as useless in Free Fall 2019-09-27 16:47:42 +02:00
Zeno Rogue 321a54bc27 fixed accessing Emerald Mines from Irradiated even though it was not unlocked 2019-09-27 16:47:31 +02:00
Zeno Rogue 42e5de4654 Elemental marked as native-treasure in their Elemental Planes 2019-09-27 16:47:09 +02:00
Zeno Rogue 234906439c seeps marked as native-non-treasure in Emerald Mine 2019-09-27 16:46:47 +02:00
Zeno Rogue 5c3742efc7 fixed the standard binary tiling 2019-09-27 16:34:24 +02:00
Zeno Rogue 4c0f2d0ea7 changed the use of m->type == moAsteroid to inertia_based 2019-09-26 13:23:44 +02:00
Zeno Rogue e296004448 disabled CAP_HOLDKEYS in WEB 2019-09-26 13:23:44 +02:00
Zeno Rogue 128e063e27 fixed rug buggy in web 2019-09-26 13:23:44 +02:00
Zeno Rogue 1215c65e40 mymake: support -l and -I 2019-09-26 13:23:44 +02:00
Zeno Rogue a741446b7b better rendering of Solv into the glitchy region 2019-09-26 13:23:44 +02:00
Zeno Rogue fd67768234 reverse_directions for heptagons 2019-09-26 13:23:44 +02:00
Zeno Rogue dca95aa2aa RogueViz stuff 2019-09-26 13:23:10 +02:00
Zeno Rogue c3975e80ef fixed a crash in RogueViz 2019-09-26 13:23:10 +02:00
Zeno Rogue 5c1568d288 added CAP_VR 2019-09-26 13:23:10 +02:00
Zeno Rogue a59dc8be58 fixed binocular vision (isotropic only for now) 2019-09-26 13:23:10 +02:00
Zeno Rogue 39a6c2131b added #undef self 2019-09-23 01:07:03 +02:00
Zeno Rogue 8bb1c132bc added missing CAP_RVSLIDES 2019-09-23 01:06:57 +02:00
Zeno Rogue ef8a961e71 added new HyperRogue music 2019-09-13 21:53:53 +02:00
Zeno Rogue 3b7e929f73 fixed yet another warning 2019-09-13 20:23:43 +02:00
Zeno Rogue 8b77e2fb64 added -Wno-unknown-warning-option 2019-09-13 20:09:48 +02:00
Zeno Rogue d3783a2ebe add -Wno-maybe-uninitialized to Travis autotools test 2019-09-13 20:08:26 +02:00
Zeno Rogue 44f42f7681 version 11.2 2019-09-13 19:54:55 +02:00
Zeno Rogue 1d189b75ca rogueviz:: fixed some warnings 2019-09-13 19:54:49 +02:00
Zeno Rogue 24b55fdbb1 added -Wno-maybe-uninitialized 2019-09-13 19:54:36 +02:00
Zeno Rogue a46f4b1d63 fixed -musicfocus without CAP_SDLAUDIO 2019-09-13 19:50:24 +02:00
Zeno Rogue 8833251c8b added some missing CAP_SOLV guards 2019-09-13 19:50:12 +02:00
Zeno Rogue 90baab83eb added autohdr.h to emscripten sources 2019-09-13 19:38:04 +02:00
Zeno Rogue 1c0db70191 fixed incorrect utfsize 2019-09-13 19:36:27 +02:00
Zeno Rogue a47be2f89f fixed more warnings 2019-09-13 19:36:16 +02:00
Zeno Rogue e1d6f547a4 fixed GCC46 testing 2019-09-13 19:23:22 +02:00
Zeno Rogue 4b47bdb07c added -DGCC46 to Travis config 2019-09-13 19:08:54 +02:00
Zeno Rogue 51f1bba9c8 changed NO_THREADS to USE_THREADS 2019-09-13 19:07:31 +02:00
Zeno Rogue d4df8a970c improved ONLY_GCC46 2019-09-13 19:07:19 +02:00
Zeno Rogue a3137a3f7c fixed Makefile.am 2019-09-13 18:56:54 +02:00
Zeno Rogue cf0b13b5b2 fixed some warnings in RogueViz 2019-09-13 18:53:19 +02:00
Zeno Rogue 973d8cb451 fixed some warnings 2019-09-13 18:53:12 +02:00
Zeno Rogue cf25bd83b5 changed TOTAL_MEMORY to the new format: 128MB 2019-09-13 18:48:17 +02:00
Zeno Rogue 2400a2f1dc RogueViz adjustments 2019-09-13 18:46:08 +02:00
Zeno Rogue 09ff50ba45 order in autohdr.h 2019-09-13 18:41:49 +02:00
Zeno Rogue 5bc7254a04 addedd AC_PROG_CC 2019-09-13 18:36:50 +02:00
Zeno Rogue 7560d62699 one more update for older compilers 2019-09-13 18:33:15 +02:00
Zeno Rogue 31fb9d4b8b fixed makeh for older compilers 2019-09-13 18:30:05 +02:00
Zeno Rogue 6237bcbed6 added missing dependency 2019-09-13 18:26:51 +02:00
Zeno Rogue 9f868ec1e5 added makeh to Makefile.am and Makefile.simple 2019-09-13 18:20:50 +02:00
Zeno Rogue 4d2a65c276 fixed some text errors 2019-09-13 18:13:39 +02:00
Zeno Rogue e5ac34e211 Merge branch 'master' of https://github.com/zenorogue/hyperrogue 2019-09-13 18:05:50 +02:00
Zeno Rogue d3802ed9e9 renamed Tutorial to Guided tour 2019-09-13 18:01:28 +02:00
Zeno Rogue d0955c20ac Hyperweb is 3D, but RogueViz is 4D 2019-09-13 17:46:07 +02:00
Zeno Rogue c10842cce0 CLI option -musicfocus 2019-09-13 17:45:44 +02:00
Zeno Rogue 2a950369ba solv:: CAP_SOLV 2019-09-13 17:45:31 +02:00
Zeno Rogue a4579e95c1 added qtm to RogueViz 2019-09-13 09:35:18 +02:00
Zeno Rogue 334ffd644a hyperweb compiles 2019-09-13 03:47:55 +02:00
Zeno Rogue 978022025a geometry_information wall functions compile without MAXMDIM >= 4 2019-09-13 03:47:18 +02:00
Zeno Rogue a3d9711ec2 more adjustments to disabled CAP_* 2019-09-13 03:10:26 +02:00
Zeno Rogue 9a0507ba58 pattern 'k' option 2019-09-13 00:32:05 +02:00
Zeno Rogue d1faa2011c updating emscripten build 2019-09-13 00:31:54 +02:00
Zeno Rogue 562fe72629 fixed some } to EX } 2019-09-13 00:31:32 +02:00
Zeno Rogue 8a8f25ee11 Doxygen files added 2019-09-12 23:35:04 +02:00
Zeno Rogue ec5b16691e updated the README.md file 2019-09-12 23:34:44 +02:00
Zeno Rogue 8024142035 Czech translation updated 2019-09-12 23:17:49 +02:00
Zeno Rogue 3caec11dfa added some devmods 2019-09-12 23:14:51 +02:00
Zeno Rogue dfbdc57b44 Polish translation updated 2019-09-12 22:50:16 +02:00
Zeno Rogue bfa29e6d47 improved some messages 2019-09-12 22:50:16 +02:00
Zeno Rogue e97d1c966e added MagmaMcFry to thanks 2019-09-12 22:50:16 +02:00
Zeno Rogue 08fa984b5c fixed 'heptagonal mode' in the start menu 2019-09-12 22:50:16 +02:00
Zeno Rogue 8a85e8261c renamed 'geometry experiments' to 'experiment with geometry' 2019-09-12 22:50:16 +02:00
Zeno Rogue d17b259422 nonisotropic geometries show the world overview 2019-09-12 22:50:16 +02:00
Zeno Rogue c1f9826dca fixed the 'heptagonal mode' option 2019-09-12 22:50:16 +02:00
Zeno Rogue d1bf6fef5e replaced product::product_sphere() 2019-09-12 22:50:16 +02:00
Zeno Rogue dbc95ed7a4 refactored geometry_name() 2019-09-12 22:50:16 +02:00
Zeno Rogue d5a99e67e0 more intuitive tiling selection 2019-09-12 22:50:16 +02:00
Zeno Rogue 165a55d93c 11.1p 2019-09-12 22:50:16 +02:00
Zeno Rogue f6dfcba8fe export shot_aa 2019-09-12 22:50:16 +02:00
Zeno Rogue 30988be557 mymake:: select existing Makefile, fixed incorrect 'file not found' error, added/removed some comments 2019-09-12 22:50:16 +02:00
Zeno Rogue 8078e5903d fixed 'view the underlying' option for older compilers 2019-09-12 22:50:16 +02:00
Zeno Rogue 99cb3f5a61 s2xe:: improved, also works with textures 2019-09-12 22:50:16 +02:00
Zeno Rogue 8927f66968 Y/Z rotation option visible in product 2019-09-12 22:50:16 +02:00
Zeno Rogue e8c7285cc2 product:: lands in S2xE 2019-09-12 22:50:16 +02:00
Zeno Rogue 0785d970f1 hybrid::fixed precise_mouseover 2019-09-12 22:50:16 +02:00
Zeno Rogue 85ea29e2df fixed optimizeview in S2xE 2019-09-12 22:50:16 +02:00
Zeno Rogue 3e6e1cd6ed hybrid:: fixed queuecircleat 2019-09-12 22:50:16 +02:00
Zeno Rogue 5ad1be2962 crosshair option 2019-09-12 22:50:16 +02:00
Zeno Rogue bc76bc472c prettylinesub no longer tries to be pretty if flat 2019-09-12 22:50:16 +02:00
Zeno Rogue e628465eaa replaced "NO" with ONOFF for translation 2019-09-12 22:50:16 +02:00
Zeno Rogue 3ba485d502 rots::underlying_scale saved to config 2019-09-12 22:50:16 +02:00
Zeno Rogue f8963a1c75 rots:: show the underlying geometry 2019-09-12 22:50:16 +02:00
Zeno Rogue e600c0af0a improved the rendering of S2xE rings 2019-09-12 22:50:16 +02:00
Zeno Rogue f1eb4b9ab7 rogueviz:: added Grigorchuk 2019-09-12 22:50:16 +02:00
Zeno Rogue be17f575ca experimental maps are not saved in saveStats 2019-09-12 22:50:16 +02:00
Zeno Rogue 3ca08cff9a hook in generateCanvas 2019-09-12 22:50:16 +02:00
Zeno Rogue 1621b0b556 standard can be changed in mymake 2019-09-12 22:50:16 +02:00
Zeno Rogue 2bad9afc54 export hooks_newmap 2019-09-12 22:50:16 +02:00
Zeno Rogue cbdfc35e10 hooks_display_dialog used in RogueViz 2019-09-12 22:50:16 +02:00
Zeno Rogue 8f8fb8a217 replaced hooks_startmenu and hooks_mainmenu with a general hooks_display_dialog 2019-09-12 22:50:16 +02:00
Zeno Rogue ca9a025e45 added -Wno-implicit-fallthrough 2019-09-12 22:50:16 +02:00
Zeno Rogue 916d88c1de fixup in hyper.cpp 2019-09-12 22:50:16 +02:00
Zeno Rogue cbcc0f28ed renamed the RogueViz files 2019-09-12 22:50:16 +02:00
Zeno Rogue 30311e3929 fixup to extern 2019-09-12 22:50:16 +02:00
Zeno Rogue 7c56ff19c8 natchars should be const char* 2019-09-12 22:50:16 +02:00
Zeno Rogue ebc44af74c mymake, comments moved 2019-09-12 22:50:16 +02:00
Zeno Rogue c7f070fe76 rogueviz includes hyper.h 2019-09-12 22:50:16 +02:00
Zeno Rogue 7b76991dcd hybrid::do_draw 2019-09-12 22:50:16 +02:00
Zeno Rogue bd9c19d1b7 exported interface for horo_distance 2019-09-12 22:50:16 +02:00
Zeno Rogue 83fa6334d3 made classflag inline 2019-09-12 22:50:16 +02:00
Zeno Rogue f934943732 changed some shmup:: to multi:: 2019-09-12 22:50:16 +02:00
Zeno Rogue 848eb8f48b export everything: modules compiled separately 2019-09-12 22:50:16 +02:00
Zeno Rogue e96d24e8c2 netgen:: renamed SCALE to nscale (conflict) 2019-09-12 22:50:16 +02:00
Zeno Rogue eb5392a434 fixed obsolete stuff in rogueviz 2019-09-12 22:50:16 +02:00
Zeno Rogue 82f24b4b6c exporting necessary stuff all over (in progress) 2019-09-12 22:50:16 +02:00
Zeno Rogue caf838ed22 accessors created for shader uniforms 2019-09-12 22:50:16 +02:00
Zeno Rogue 339f6820fe removed referring to specific map subtypes 2019-09-12 22:50:16 +02:00
Zeno Rogue fedb170b55 struct fpattern exported 2019-09-12 22:50:16 +02:00
Zeno Rogue 9647cbd47e added #include hyper.h to all cpp files 2019-09-12 22:50:16 +02:00
Zeno Rogue 19a54cfa9d hyper.h is now the only file to include 2019-09-12 22:50:16 +02:00
Zeno Rogue fbe32b0459 moved hyper.cpp to hyper-main.cpp and compileunits.h to hyper.cpp 2019-09-12 22:50:16 +02:00
Zeno Rogue 98ddecc63e removed init.cpp 2019-09-12 22:50:16 +02:00
Zeno Rogue 9df8f76b53 extra configuration for svg text 2019-09-12 22:50:16 +02:00
Zeno Rogue 561c8e975c reduced glitches in slr 2019-09-12 22:50:16 +02:00
Zeno Rogue e38f012e63 no more changing clicks on HUD elements in the top line to help 2019-09-12 22:50:16 +02:00
Zeno Rogue a60b88f7ba fixed an issue in textures causing compilation error 2019-09-12 22:50:16 +02:00
Zeno Rogue 634c0635d3 some missing exports 2019-09-12 22:50:16 +02:00
Zeno Rogue f4f7b195ff smoother coloring in Crystal 2019-09-12 22:50:16 +02:00
Zeno Rogue b2fa6703f1 11.1o 2019-09-12 22:50:16 +02:00
Zeno Rogue ecc6908807 fixes for older compilers 2019-09-12 22:50:16 +02:00
Zeno Rogue 443ba65730 rots:: fixed the confusion when switching tilings 2019-09-12 22:50:16 +02:00
Zeno Rogue c6ca145d43 arcm:: removed useless debug 2019-09-12 22:50:16 +02:00
Zeno Rogue de356a1679 fixed spin_towards in nonisotropic-non-geodesic 2019-09-12 22:50:16 +02:00
Zeno Rogue ba94bc94b6 less aggressive gcd in archimedean -- steps needs to divide by all f's 2019-09-12 22:50:16 +02:00
Zeno Rogue a0fa8c85c4 only the Geodesic model available in SL2 2019-09-12 22:50:16 +02:00
Zeno Rogue 4dc5ae455c fixed a crash when switching Archimedean modes 2019-09-12 22:50:15 +02:00
Zeno Rogue 8adaa7fe49 welcome messages for the new geometries 2019-09-12 22:50:15 +02:00
Zeno Rogue c766e27bf2 geodesic movement cannot be disabled in SL 2019-09-12 22:50:15 +02:00
Zeno Rogue 88c1e0444b correct world sizes for rotspaces, also number of levels shown 2019-09-12 22:50:15 +02:00
Zeno Rogue 46dfd50a40 fixed a crash in Archimedean sl2 due to Cdata 2019-09-12 22:50:15 +02:00
Zeno Rogue f6f37b1e45 Archimedean precise analyzer 2019-09-12 22:50:15 +02:00
Zeno Rogue 142566a5bd not working correctly auto-animation in slr 2019-09-12 22:50:15 +02:00
Zeno Rogue c01cef0de9 disabled compass in slr 2019-09-12 22:50:15 +02:00
Zeno Rogue f7c4d102df slr:: movement animation (not rotation nor attack animation though) 2019-09-12 22:50:15 +02:00
Zeno Rogue 19ba287b75 changed creaturescale for hybrid 2019-09-12 22:50:15 +02:00
Zeno Rogue 04a1c2242b rots:: optimization of matrices 2019-09-12 22:50:15 +02:00
Zeno Rogue b0b843fc22 rots:: fixed ordering of vertices on walls 2019-09-12 22:50:15 +02:00
Zeno Rogue 8b5c0f923d fix relative_matrix in elliptic 3D 2019-09-12 22:50:15 +02:00
Zeno Rogue ea67cd88f1 record underlying in cgi string 2019-09-12 22:50:15 +02:00
Zeno Rogue 2e066c106c renamed gSL2 to gRotSpace 2019-09-12 22:50:15 +02:00
Zeno Rogue c33c79a902 generalized PSL2 to spherical rotation spaces too 2019-09-12 22:50:15 +02:00
Zeno Rogue 2bedd5f2ce fix for Archimedean hybrid 2019-09-12 22:50:15 +02:00
Zeno Rogue d046211a9c better flagging of geometries, and isometry spaces nicely selectable 2019-09-12 22:50:15 +02:00
Zeno Rogue 689020ee6d starting in Crossroads II now works in hybrid 2019-09-12 22:50:15 +02:00
Zeno Rogue afa3cd599d SLR works with Archimedean 2019-09-12 22:50:15 +02:00
Zeno Rogue 7bd80dab18 archimedean::get_nom_denom factored out 2019-09-12 22:50:15 +02:00
Zeno Rogue 0311210576 arg:: slr:: configurable slrange 2019-09-12 22:50:15 +02:00
Zeno Rogue a0140254c8 slr:: works with bitruncated tilings (Archimedean not tested) 2019-09-12 22:50:15 +02:00
Zeno Rogue 86ca34669a slr:: generalized to other regular 2019-09-12 22:50:15 +02:00
Zeno Rogue a546b3a62e fixed shift_view_towards in nonisotropic 2019-09-12 22:50:15 +02:00
Zeno Rogue 599346f436 fixed possible crash in iddspin 2019-09-12 22:50:15 +02:00
Zeno Rogue 86967c1ee0 fixed the humanoid legs in product 2019-09-12 22:50:15 +02:00
Zeno Rogue 54934b9871 product:: fixed backwall optimization in TPP view 2019-09-12 22:50:15 +02:00
Zeno Rogue b82a0a8dba shmup:: fixed the keyboard rotation direction inconsistency in 3D 2019-09-12 22:50:15 +02:00
Zeno Rogue c5fe3b38d3 removed useless debug 2019-09-12 22:50:15 +02:00
Zeno Rogue 54b12a3c5e fixed legs in product 2019-09-12 22:50:15 +02:00
Zeno Rogue 465e93ec57 shmup:: fixed distance checking for product 2019-09-12 22:50:15 +02:00
Zeno Rogue a33a35ad00 makeh:: linenumber improvements 2019-09-12 22:50:15 +02:00
Zeno Rogue 61ea588ffb shmup for product: player movement 2019-09-12 22:50:15 +02:00
Zeno Rogue a6951d1dbb fixed shift_view in product 2019-09-12 22:50:15 +02:00
Zeno Rogue ce46243b55 get_shiftview_of used gpush instead of rgpush; fixed wallradar 2019-09-12 22:50:15 +02:00
Zeno Rogue db351d9511 fixed direct_exp in 2D 2019-09-12 22:50:15 +02:00
Zeno Rogue 3e7a604408 fixup to know actual_geometry 2019-09-12 22:50:15 +02:00
Zeno Rogue f224cc1027 no Hedgehog Warriors in SL2 2019-09-12 22:50:15 +02:00
Zeno Rogue 7feb2ddcb3 hybrid knows actual geometry 2019-09-12 22:50:15 +02:00
Zeno Rogue 3e715440cb slr:: awesome default range values 2019-09-12 22:50:15 +02:00
Zeno Rogue afac8bf24a fixup to shaders and everything 2019-09-12 22:50:15 +02:00
Zeno Rogue d4ac431004 slr:: default texturestep 4 2019-09-12 22:50:15 +02:00
Zeno Rogue 71669e3a14 shader debug support 2019-09-12 22:50:15 +02:00
Zeno Rogue c5acaacc8d makeh:: linenumbers for EX 2019-09-12 22:50:15 +02:00
Zeno Rogue 02269267c9 slr:: drawing of looped images, better shader in general, special sightrange setting 2019-09-12 22:50:15 +02:00
Zeno Rogue 4d01632bb6 mirror shWolf2 just in case 2019-09-12 22:50:15 +02:00
Zeno Rogue a3da1d327d disabled wall gridlines in 3D geometries 2019-09-12 22:50:15 +02:00
Zeno Rogue 3c254e7f55 PSL2 in geometry list 2019-09-12 22:50:15 +02:00
Zeno Rogue 29a54ab5d9 nilv:: simpler honeycomb 2019-09-12 22:50:15 +02:00
Zeno Rogue 91199595d6 slr:: fixed centering in shmup 2019-09-12 22:50:15 +02:00
Zeno Rogue c7a5de1477 revZ in hybri 2019-09-12 22:50:15 +02:00
Zeno Rogue 2acc866958 slr:: virtualRebase 2019-09-12 22:50:15 +02:00
Zeno Rogue 47d309e408 fixed hdist computation in SL, also fixed hpxy and hpxy 2019-09-12 22:50:15 +02:00
Zeno Rogue 50052f27f5 pointing-to-directions now checks for the cell which is the most towards the given direction 2019-09-12 22:50:15 +02:00
Zeno Rogue 96d7496043 refactored all the operations on View 2019-09-12 22:50:15 +02:00
Zeno Rogue 65ce70cb2c product:: removed useless debug 2019-09-12 22:50:15 +02:00
Zeno Rogue fd42b45fce sl2:: 3d-models 2019-09-12 22:50:15 +02:00
Zeno Rogue 1e6970ca28 hybrid:: refactored the common parts of prod and sl2, also used them when applicable 2019-09-12 22:50:15 +02:00
Zeno Rogue ab80b28782 constexpr on hyperpoints 2019-09-12 22:50:15 +02:00
Zeno Rogue 136b931609 PSL(2,R) 2019-09-12 22:50:15 +02:00
Zeno Rogue e0852419fc inverse uses MDIM not GDIM 2019-09-12 22:50:15 +02:00
Zeno Rogue 429909bd56 improved documentation in hyperpoint 2019-09-12 22:50:15 +02:00
Zeno Rogue 3c5875d4cd langen:: replaced %zu with %d since it is not available in some versions of MinGW 2019-09-12 22:50:15 +02:00
Zeno Rogue a03eb0d913 fixed new geometry handling for Archimedean 2019-09-12 22:50:15 +02:00
Zeno Rogue 2f954d0538 nicer handling of WDIM, GDIM, MDIM, sig 2019-09-12 22:50:15 +02:00
Zeno Rogue 89413ae42a 11.1n 2019-09-12 22:50:15 +02:00
Zeno Rogue 59971b7048 11.1m 2019-09-12 22:50:15 +02:00
Zeno Rogue 0ab4a30406 product:: backwall optimization 2019-09-12 22:50:15 +02:00
Zeno Rogue 3aefce498c product:: clipping fixup 2019-09-12 22:50:15 +02:00
Zeno Rogue 87ec57f974 clipping fixup 2019-09-12 22:50:15 +02:00
Zeno Rogue b978031443 no more product-invalid lands generated 2019-09-12 22:50:15 +02:00
Zeno Rogue 63656212e6 arg:: correct cheat in -each 2019-09-12 22:50:15 +02:00
Zeno Rogue d75b0cdb0b product:: fix crashes because buildAnotherEquidistant called 2019-09-12 22:50:15 +02:00
Zeno Rogue 9de77a2280 just in case, remove invalid points from radar 2019-09-12 22:50:15 +02:00
Zeno Rogue b97666980e fixed a bug with radarpoints obscuring screen due to NaNs 2019-09-12 22:50:15 +02:00
Zeno Rogue 86d3e8f4b1 fixed non-extern variable 2019-09-12 22:50:15 +02:00
Zeno Rogue 313bfa2829 reptilecheat disables knights in Camelot 2019-09-12 22:50:15 +02:00
Zeno Rogue 21a38293d0 monster facing in product 2019-09-12 22:50:15 +02:00
Zeno Rogue 5724b30140 product:: fixed a bug in model clothing 2019-09-12 22:50:15 +02:00
Zeno Rogue 4b7e565355 product:: fixed 3dmodel arms 2019-09-12 22:50:15 +02:00
Zeno Rogue 712f740657 product:: fixed cosh to cos_auto 2019-09-12 22:50:15 +02:00
Zeno Rogue 597140e28d product:: wallradar and TPP 2019-09-12 22:50:15 +02:00
Zeno Rogue 47823ef0fb cview() called outside of draw -- this way it works with product 2019-09-12 22:50:15 +02:00
Zeno Rogue 6c75c2687d product:: virtualRebase 2019-09-12 22:50:15 +02:00
Zeno Rogue 201098efe9 convenience functions zforward_dir and zpush0 2019-09-12 22:50:15 +02:00
Zeno Rogue afa6d722dd no crash in draw_s2xe if empty shape to draw, also moved npoly to draw_s2xe 2019-09-12 22:50:14 +02:00
Zeno Rogue 161db58988 11.1l 2019-09-12 22:50:14 +02:00
Zeno Rogue 157a85c3fc product:: disable armor for now 2019-09-12 22:50:14 +02:00
Zeno Rogue 5a45c1c062 fixed a crash due to not using PIU in fieldval_uniq_rand 2019-09-12 22:50:14 +02:00
Zeno Rogue 7aed1b8551 modecode for product geometries 2019-09-12 22:50:14 +02:00
Zeno Rogue 63bd06e75c product games not saved 2019-09-12 22:50:14 +02:00
Zeno Rogue 50fdc8324e modecode() returns modecode_t not int 2019-09-12 22:50:14 +02:00
Zeno Rogue 62214a26e1 fixed the bug with black creatures in 3D 2019-09-12 22:50:14 +02:00
Zeno Rogue fe266d3485 compilation in C++11 2019-09-12 22:50:14 +02:00
Zeno Rogue 599783d4ab hud:: increased alpha/scale in prod to prevent some bad display 2019-09-12 22:50:14 +02:00
Zeno Rogue c4b851f71b product: disabled model selection 2019-09-12 22:50:14 +02:00
Zeno Rogue 45659d0432 product:: land validity 2019-09-12 22:50:14 +02:00
Zeno Rogue c5fec49cb6 animations in product (untested) 2019-09-12 22:50:14 +02:00
Zeno Rogue db42409878 product:: land generation for various lands 2019-09-12 22:50:14 +02:00
Zeno Rogue d91adc45a5 product:: in_underlying functions now simply call f when not in product 2019-09-12 22:50:14 +02:00
Zeno Rogue ce36413968 product:: incompatible with Shmup -- disable other for now 2019-09-12 22:50:14 +02:00
Zeno Rogue 10352c95c1 product:: lazy Yendor 2019-09-12 22:50:14 +02:00
Zeno Rogue e8cdb9e616 product:: fixed straightDownSeek 2019-09-12 22:50:14 +02:00
Zeno Rogue 38ee044e70 product:: do not show marker under player 2019-09-12 22:50:14 +02:00
Zeno Rogue b480286aa9 product:: move other face_the_player stuff 2019-09-12 22:50:14 +02:00
Zeno Rogue 4fd8a18e09 product:: fixed radar 2019-09-12 22:50:14 +02:00
Zeno Rogue 508742e7a9 product:: set missing hexvdist 2019-09-12 22:50:14 +02:00
Zeno Rogue 33cb21f203 product:: fixed a potential crash 2019-09-12 22:50:14 +02:00
Zeno Rogue 0811f8f2d0 product:: no crash on load when saved 2019-09-12 22:50:14 +02:00
Zeno Rogue 1778fd5d8e product:: using precomputed windmap 2019-09-12 22:50:14 +02:00
Zeno Rogue 78cbec039b product:: fixed reversed 3d models 2019-09-12 22:50:14 +02:00
Zeno Rogue d5d1780c3f product:: fixed_yz works 2019-09-12 22:50:14 +02:00
Zeno Rogue c83b5b9ad8 product:: draw editor 2019-09-12 22:50:14 +02:00
Zeno Rogue 42b2aa7596 nisot:: functions get product functions 2019-09-12 22:50:14 +02:00
Zeno Rogue 988adb8259 product:: horocycles now have base altitude 2019-09-12 22:50:14 +02:00
Zeno Rogue 3528d8efa3 product:: debug removed from wall generation 2019-09-12 22:50:14 +02:00
Zeno Rogue a25bf14cff added missing clearmemory in nonisotropic geometries; this also fixed a crash in Archimedean 2019-09-12 22:50:14 +02:00
Zeno Rogue 123a972261 product:: correct walls in Archimedean 2019-09-12 22:50:14 +02:00
Zeno Rogue 23f9736722 point_behind returns true if point is too close to z=0 2019-09-12 22:50:14 +02:00
Zeno Rogue 9c7c60dcfa product: Orb of the Sword 2019-09-12 22:50:14 +02:00
Zeno Rogue 33a236195d product:: applymodel 2019-09-12 22:50:14 +02:00
Zeno Rogue 872abace91 product:: nice ivies 2019-09-12 22:50:14 +02:00
Zeno Rogue 6705e0286c product:: correct SD3 and SD7 2019-09-12 22:50:14 +02:00
Zeno Rogue 6e599112c2 product:: made cpush0 work correctly 2019-09-12 22:50:14 +02:00
Zeno Rogue f0d9ae226f product:: texture shading improved 2019-09-12 22:50:14 +02:00
Zeno Rogue 4ba654600f fixup to targetting 2019-09-12 22:50:14 +02:00
Zeno Rogue 7ffe119975 improved 3D models 2019-09-12 22:50:14 +02:00
Zeno Rogue 2267355daa product:: precise_mouseover fixed 2019-09-12 22:50:14 +02:00
Zeno Rogue e5fb06e6cd product:: HUD items displayed correctly 2019-09-12 22:50:14 +02:00
Zeno Rogue 3e1fc42dc5 product:: ishept 2019-09-12 22:50:14 +02:00
Zeno Rogue 1a1725dec8 product:: selectable from menu 2019-09-12 22:50:14 +02:00
Zeno Rogue 14b70224a8 product:: changed plevel_factor default yet again 2019-09-12 22:50:14 +02:00
Zeno Rogue bfc573dc55 product:: fixed too high creatures 2019-09-12 22:50:14 +02:00
Zeno Rogue 17f7cef678 product:: fixmatrix 2019-09-12 22:50:14 +02:00
Zeno Rogue b0f954f422 product:: animations fixed 2019-09-12 22:50:14 +02:00
Zeno Rogue 3c5a5f455a product:: more fixes to s2xe view 2019-09-12 22:50:14 +02:00
Zeno Rogue 7920446969 smaller plevel_factor default 2019-09-12 22:50:14 +02:00
Zeno Rogue cb6cd1bea9 product:: fixed gen count in draw_s2xe 2019-09-12 22:50:13 +02:00
Zeno Rogue 31baf32f50 product:: fixed windmap crash on Goldberg 2019-09-12 22:50:13 +02:00
Zeno Rogue d27f628527 adjust number of levels drawn 2019-09-12 22:50:13 +02:00
Zeno Rogue c28fac248b yet another fixup : plevel -> current_view_level 2019-09-12 22:50:13 +02:00
Zeno Rogue 890f23c00c product:: darkval 2019-09-12 22:50:13 +02:00
Zeno Rogue aaadf953ea product:: item placement 2019-09-12 22:50:13 +02:00
Zeno Rogue ecfef817a9 auto-adjusted plevel 2019-09-12 22:50:13 +02:00
Zeno Rogue da87291ea4 no more bad plevel in do_draw 2019-09-12 22:50:13 +02:00
Zeno Rogue 32b2f5169d makeh:: fixed line numbering 2019-09-12 22:50:13 +02:00
Zeno Rogue 64d0742343 fixed in_underlying_map not geometry in optimizeview() 2019-09-12 22:50:13 +02:00
Zeno Rogue 8e943486d9 product:: fixed randomly disappearing things 2019-09-12 22:50:13 +02:00
Zeno Rogue a2919f5a9c product:: works for bitruncated tilings 2019-09-12 22:50:13 +02:00
Zeno Rogue ebcaabf692 miniwalls generated with create_wall3d 2019-09-12 22:50:13 +02:00
Zeno Rogue e02290ec98 product:: 'flat' wall faces 2019-09-12 22:50:13 +02:00
Zeno Rogue 43a3d0130e product:: shader-side H2xE 2019-09-12 22:50:13 +02:00
Zeno Rogue e59e180b87 product:: some computations need gmatrix0 for underlying geometry 2019-09-12 22:50:13 +02:00
Zeno Rogue 3c8e9a5c94 removed incorrect timestamping of cgi's 2019-09-12 22:50:13 +02:00
Zeno Rogue 9d84d5393b product:: prevented underlying_cgip from being freed 2019-09-12 22:50:13 +02:00
Zeno Rogue d79a6faa6f yet better S2xE renderer 2019-09-12 22:50:13 +02:00
Zeno Rogue e636d3f40c preliminary S2xE 2019-09-12 22:50:13 +02:00
Zeno Rogue 081bb55202 in_underlying_map, not PIU in distance functions 2019-09-12 22:50:13 +02:00
Zeno Rogue f40072511b product:: big stuff 2019-09-12 22:50:13 +02:00
Zeno Rogue fb0f5872c8 3d models in product space 2019-09-12 22:50:13 +02:00
Zeno Rogue 00f4f4fca5 fully turnable product spaces 2019-09-12 22:50:13 +02:00
Zeno Rogue 52f19a26a8 solmul when mousewheel-scroll 2019-09-12 22:50:13 +02:00
Zeno Rogue 481b1de5f9 reg3:: some junk removed 2019-09-12 22:50:13 +02:00
Zeno Rogue 2d75a7d6be moveh:: line numbers for easier debugging 2019-09-12 22:50:13 +02:00
Zeno Rogue 6c19c6eadf viewcenter() in product (fix for product) 2019-09-12 22:50:13 +02:00
Zeno Rogue 95da7ff09e using viewcenter() consistently 2019-09-12 22:50:13 +02:00
Zeno Rogue 6958cbcbd9 product:: preliminary version (no turning) 2019-09-12 22:50:13 +02:00
Zeno Rogue f3dd779947 no more crash when saving config in arcm 2019-09-12 22:50:13 +02:00
Zeno Rogue 5a9f3f57e6 improvements in model boundaries 2019-09-12 22:50:13 +02:00
Zeno Rogue 06fa66bb46 fixed a crash in pure {4,4} 2019-09-12 22:50:13 +02:00
Zeno Rogue 9dd131d00a args:: creaturescale and character selection 2019-09-12 22:50:13 +02:00
Zeno Rogue 96bf478482 renamed DIM to GDIM 2019-09-12 22:50:13 +02:00
Zeno Rogue 21b6f22de4 11.1k 2019-09-12 22:50:13 +02:00
Zeno Rogue 51efb7e3ff added missing history.cpp 2019-09-12 22:50:13 +02:00
Zeno Rogue 161ed6a9a9 models:: fixed errors on poles in CentralCyl 2019-09-12 22:50:13 +02:00
Zeno Rogue 43bcc4e2bd nisot:: azimuthal equidistant projection 2019-09-12 22:50:13 +02:00
Zeno Rogue d1b366a1f9 models:: back to previous screen from models list 2019-09-12 22:50:13 +02:00
Zeno Rogue d20b8108af removed unused comment 2019-09-12 22:50:13 +02:00
Zeno Rogue 4f88a7c727 disabled clipping test in mdPerspective in sol 2019-09-12 22:50:13 +02:00
Zeno Rogue 932c9bac6c models:: less hacky implementation of looping in pseudocylindrical projections 2019-09-12 22:50:13 +02:00
Zeno Rogue 876ece1ff6 renamed fixMercator to cyl::adjust, and its variables accordingly 2019-09-12 22:50:13 +02:00
Zeno Rogue df9c01f276 models:: Collignon projection 2019-09-12 22:50:13 +02:00
Zeno Rogue 2c073c1ec1 cleanup of mercator_fix 2019-09-12 22:50:13 +02:00
Zeno Rogue 9d573ebd07 models:: central cylindrical and in-progress Collignon 2019-09-12 22:50:13 +02:00
Zeno Rogue 9e79872780 mdPseudocylindrical flag 2019-09-12 22:50:13 +02:00
Zeno Rogue 7f967ba30d nicer model flag naming 2019-09-12 22:50:13 +02:00
Zeno Rogue 2693298825 fixed 'individual width' option working incorrectly, and displayed incorrectly when editing 2019-09-12 22:50:13 +02:00
Zeno Rogue 77d666ab15 fixed a bug in heptdistance for standard tilings (correct X) 2019-09-12 22:50:13 +02:00
Zeno Rogue 4f38f30e59 models:: new handling of the models menu 2019-09-12 22:50:13 +02:00
Zeno Rogue d8d32d19b0 duplicate keys in dialogs are now fixed correctly 2019-09-12 22:50:13 +02:00
Zeno Rogue 3d813e83b9 split the projection menu into two screens 2019-09-12 22:50:13 +02:00
Zeno Rogue 10a8b8660b Mollweide projection 2019-09-12 22:50:13 +02:00
Zeno Rogue 843a53d07c fixed a bug with Archimedean hyperbolic tilings 2019-09-12 22:50:13 +02:00
Zeno Rogue 1a7d7c8db8 11.1j 2019-09-12 22:50:13 +02:00
Zeno Rogue cd4bee08f7 disabled just_direction in mapeditor distances 2019-09-12 22:50:13 +02:00
Zeno Rogue 49d7c1e588 fixed the incorrect encoding in models.cpp 2019-09-12 22:50:13 +02:00
Zeno Rogue aede994403 mapeditor:: geodesic spheres and constant X/Y/Z in nonisotropic, also the grid is configurable 2019-09-12 22:50:13 +02:00
Zeno Rogue 0b4cba3c23 mapeditor:: geodesic spherical coordinates in nisot, works correctly in 3D 2019-09-12 22:50:13 +02:00
Zeno Rogue 3d119f39de nisot::get_exp, just_direction parameter for inverse_exp, nsiot::geo_dist 2019-09-12 22:50:13 +02:00
Zeno Rogue cc0584f7d1 mapeditor:: fixed UI elements crashing into each other 2019-09-12 22:50:13 +02:00
Zeno Rogue a1faa299df nisot:: face_the_player implemented 2019-09-12 22:50:13 +02:00
Zeno Rogue dabd7889e8 fixed the lack of bound on lives in the shmup mode 2019-09-12 22:50:13 +02:00
Zeno Rogue af08d169d8 more featured -debf option 2019-09-12 22:50:13 +02:00
Zeno Rogue cfecf4a80d added missing hprint.cpp 2019-09-12 22:50:13 +02:00
Zeno Rogue 437c4e4cdd flag 'experimental' for new geometries 2019-09-12 22:50:13 +02:00
Zeno Rogue 50e4990a76 improvements in documentation 2019-09-12 22:50:13 +02:00
Zeno Rogue 8b1c7bffe4 initial reformatting of comments for Doxygen 2019-09-12 22:50:13 +02:00
Zeno Rogue 4450cb5a08 replaced the ugly temps/tempval with tempmonsters 2019-09-12 22:50:13 +02:00
Zeno Rogue 0ef57dde15 further cleanup 2019-09-12 22:50:13 +02:00
Zeno Rogue ad03115097 further cleanup 2019-09-12 22:50:13 +02:00
Zeno Rogue 609d1b91d3 further cleanup 2019-09-12 22:50:13 +02:00
Zeno Rogue a0fcdb0c54 more header cleanup 2019-09-12 22:50:13 +02:00
Zeno Rogue b0f2e7b6b9 header cleanup Yendor 2019-09-12 22:50:12 +02:00
Zeno Rogue 4ec7652861 cleanup mapeditor 2019-09-12 22:50:12 +02:00
Zeno Rogue 4422b910c0 header cleanup: rug 2019-09-12 22:50:12 +02:00
Zeno Rogue 5ea055b39e split namespace conformal into models and history 2019-09-12 22:50:12 +02:00
Zeno Rogue 6ed530c50c header cleanup (conformal/polygonal) 2019-09-12 22:50:12 +02:00
Zeno Rogue a9ff4e64f8 moved transpose to hyperpoint 2019-09-12 22:50:12 +02:00
Zeno Rogue aa1b3f3057 moved hyperpoint inlines to hyperpoint.cpp 2019-09-12 22:50:12 +02:00
Zeno Rogue 19a01caf55 moved ctof to pattern2 2019-09-12 22:50:12 +02:00
Zeno Rogue 245ee5878f removed function dirfromto as it was equal to neighborId 2019-09-12 22:50:12 +02:00
Zeno Rogue 986bf0ee9a removed the dhypot functions 2019-09-12 22:50:12 +02:00
Zeno Rogue e77a6f3440 removed unused and incorrect function queuemarkerat 2019-09-12 22:50:12 +02:00
Zeno Rogue 9a84d94282 removed operator == (already defined for arrays) 2019-09-12 22:50:12 +02:00
Zeno Rogue 2cf6abb273 removed rotmatrix as it did exactly the same as cspin 2019-09-12 22:50:12 +02:00
Zeno Rogue 9588dfcc50 changed argument type in displaycolor to color_t 2019-09-12 22:50:12 +02:00
Zeno Rogue f723a8d419 further cleanup, separated multi.cpp from shmup.cpp 2019-09-12 22:50:12 +02:00
Zeno Rogue a76a5dd265 further cleanup 2019-09-12 22:50:12 +02:00
Zeno Rogue 65c4e6a31c further cleanup 2019-09-12 22:50:12 +02:00
Zeno Rogue 05bd7a905c more header cleanup 2019-09-12 22:50:12 +02:00
Zeno Rogue e1194ff588 more header cleanup 2019-09-12 22:50:12 +02:00
Zeno Rogue a423dbd2da more header cleanup 2019-09-12 22:50:12 +02:00
Zeno Rogue cb666fb24a more header shifting 2019-09-12 22:50:12 +02:00
Zeno Rogue 1c6b8ad3f0 utilities for printing moved to new file hprint.cpp 2019-09-12 22:50:12 +02:00
Zeno Rogue f0bf7096da makeh:: accept #if inside #if HDR 2019-09-12 22:50:12 +02:00
Zeno Rogue c2d56fb9bc autohdr.h applied in more files 2019-09-12 22:50:12 +02:00
Zeno Rogue 64824390fe makeh:: automatic if/endif detection 2019-09-12 22:50:12 +02:00
Zeno Rogue 85e9e7cd11 changed //EX to #if HDR; removed #if EX 2019-09-12 22:50:12 +02:00
Zeno Rogue 24a2e6178a unused function displaynum removed 2019-09-12 22:50:12 +02:00
Zeno Rogue a290f7c1c0 autoheader used for nisot 2019-09-12 22:50:12 +02:00
Zeno Rogue ac680b39c2 started using auto-header generator 2019-09-12 22:50:12 +02:00
Zeno Rogue f4eda1d76e removed function fixdir 2019-09-12 22:50:12 +02:00
Zeno Rogue b57c4c8d4e walker now automatically fixes spin 2019-09-12 22:50:12 +02:00
Zeno Rogue 661743a19b removed the obsolete *MovR functions 2019-09-12 22:50:12 +02:00
Zeno Rogue ef89c7ed9d removed functions fix6 and fix7 2019-09-12 22:50:12 +02:00
Zeno Rogue 0e57fd1cc0 fixed Racing desync in Crossroads due to Ruins 2019-09-12 22:50:12 +02:00
Zeno Rogue c131e21198 namespace hyperpoint_vec removed 2019-09-12 22:50:12 +02:00
Zeno Rogue d77c44e48b 11.1i 2019-09-12 22:50:12 +02:00
Zeno Rogue 956b820d6e Nil selectable in geom-exp 2019-09-12 22:50:12 +02:00
Zeno Rogue dd10a03e09 nilv:: fixed model list 2019-09-12 22:50:12 +02:00
Zeno Rogue 9435748762 fixed missing braces warning 2019-09-12 22:50:12 +02:00
Zeno Rogue d68a5bf760 nisot:: fixed shmup and view in non-geodesic mode 2019-09-12 22:50:12 +02:00
Zeno Rogue 20f064de83 nilv:: land validity 2019-09-12 22:50:12 +02:00
Zeno Rogue c87631544f improved the compass color to be more visible 2019-09-12 22:50:12 +02:00
Zeno Rogue 650e5a5c7f fixed the 'targeted cell' in Sol/Nil 2019-09-12 22:50:12 +02:00
Zeno Rogue 2fbca25361 disabled heptamarkers blocking the view in 3D 2019-09-12 22:50:12 +02:00
Zeno Rogue ad4c219002 improved Red Rock and other heights display in 3D 2019-09-12 22:50:12 +02:00
Zeno Rogue 5a3a408831 fixed numerical artifacts in Nil 2019-09-12 22:50:12 +02:00
Zeno Rogue 6ab7535088 sight range for Nil 2019-09-12 22:50:12 +02:00
Zeno Rogue d3fd28874c junk commented out code removed 2019-09-12 22:50:12 +02:00
Zeno Rogue 69387d40ef fixed Ruined City discrepancy (affected Racing) 2019-09-12 22:50:12 +02:00
Zeno Rogue e5c00b2df3 fixed Racing in Crossroads 2019-09-12 22:50:12 +02:00
Zeno Rogue 60bf28f359 transmatrix back to old definition (some weird bugs?) but improved 2019-09-12 22:50:12 +02:00
Zeno Rogue 64e212cd42 compass in Nil/Sol 2019-09-12 22:50:12 +02:00
Zeno Rogue 1f9a79d45d shots:: take now sets cells_generated_limit only in single shots via GUI 2019-09-12 22:50:12 +02:00
Zeno Rogue 362daec90c fixed a memory leak when taking postprocessed screenshots 2019-09-12 22:50:12 +02:00
Zeno Rogue 990bddb58d nilv:: lazy inverse_exp does 5 steps 2019-09-12 22:50:12 +02:00
Zeno Rogue 4d64618600 nilv:: geodesic wall surfaces 2019-09-12 22:50:12 +02:00
Zeno Rogue 21a7869e0b land validity: Reptiles now ugly_version_nofull in sol 2019-09-12 22:50:12 +02:00
Zeno Rogue 5a7f789d8c changed reptilecheat in Ice 2019-09-12 22:50:12 +02:00
Zeno Rogue 1a3e676310 reduced the frequency of Seeps/Parrots/VineSpirits in 3D modes, also removed them with reptilecheat 2019-09-12 22:50:12 +02:00
Zeno Rogue 0dab4aee57 solnil -> nonisotropic 2019-09-12 22:50:12 +02:00
Zeno Rogue a16d0fc0e0 hyper_main separate (no real need yet) 2019-09-12 22:50:12 +02:00
Zeno Rogue ae62073799 arg:: -genlimit 2019-09-12 22:50:12 +02:00
Zeno Rogue 2c63d4869f fixed incorrect computation in bignum 2019-09-12 22:50:12 +02:00
Zeno Rogue 64ad97cf2f shmup:: no longer ignores frame limit (just sets it to 30) 2019-09-12 22:50:12 +02:00
Zeno Rogue 32bf6e959e nilv:: darkval 2019-09-12 22:50:12 +02:00
Zeno Rogue 23e147a731 nilv:: projection names 2019-09-12 22:50:12 +02:00
Zeno Rogue e62a3c0d8e nilv:: geodesic sightrange 2019-09-12 22:50:12 +02:00
Zeno Rogue 1eacccd587 solv:: fixed Temple generation 2019-09-12 22:50:12 +02:00
Zeno Rogue 602e6f27db generating various lands in Sol 2019-09-12 22:50:12 +02:00
Zeno Rogue 632957b678 solv:: chaos mode did not work 2019-09-12 22:50:11 +02:00
Zeno Rogue 6bd4d748f0 factored elementalXY 2019-09-12 22:50:11 +02:00
Zeno Rogue 4d66505b66 nilv:: simpler honeycomb 2019-09-12 22:50:11 +02:00
Zeno Rogue 8ac64fc2a0 nilv:: Nil shader, and improved geodesics 2019-09-12 22:50:11 +02:00
Zeno Rogue 9350053c49 renamed mdSolPerspective to mdGeodesic 2019-09-12 22:50:11 +02:00
Zeno Rogue 4f27b12ca2 nilv:: preliminary implementation 2019-09-12 22:50:11 +02:00
Zeno Rogue 3605a7a4e1 geom-exp:: geometryclass constant names used 2019-09-12 22:50:11 +02:00
Zeno Rogue ad5ec24e7b transmatrix now implemented as an array of hyperpoints 2019-09-12 22:50:11 +02:00
Zeno Rogue c1b1e61069 renamed sol.cpp to nonisotropic.cpp 2019-09-12 22:50:11 +02:00
Zeno Rogue 78116c6383 solv:: removed pt, only hyperpoint now 2019-09-12 22:50:11 +02:00
Zeno Rogue 36dbe1d63b solv:: added missing fixmatrix 2019-09-12 22:50:11 +02:00
Zeno Rogue 7eae04e2ea hyperpoint:: ortho_error 2019-09-12 22:50:11 +02:00
Zeno Rogue d0589fc1e4 racing:: some junk removed 2019-09-12 22:50:11 +02:00
Zeno Rogue 18376d2a48 legacy in top_land 2019-09-12 22:50:11 +02:00
Zeno Rogue 14e86830b3 11.1h 2019-09-12 22:50:11 +02:00
Zeno Rogue 4b3ada46fd racing:: distance not displayed in unknown 2019-09-12 22:50:11 +02:00
Zeno Rogue b6c2457a13 racing::standard_centering auto-disabled in Solv 2019-09-12 22:50:11 +02:00
Zeno Rogue b97326cfa8 inscreenrange in sol now just returns gmatrix count 2019-09-12 22:50:11 +02:00
Zeno Rogue a9f02623d5 racing:: track generation in Solv 2019-09-12 22:50:11 +02:00
Zeno Rogue d612872d80 added missing inline 2019-09-12 22:50:11 +02:00
Zeno Rogue e7cf9692d9 solv:: third person perspective works now 2019-09-12 22:50:11 +02:00
Zeno Rogue bcd0a9ed50 solv:: correct geodesics 2019-09-12 22:50:11 +02:00
Zeno Rogue 875af54063 approx_distance in Sol 2019-09-12 22:50:11 +02:00
Zeno Rogue 5d7ea94246 binary:: celldistance3_approx works without cells too 2019-09-12 22:50:11 +02:00
Zeno Rogue d6d613687b yendor:: more interesting path in Solv 2019-09-12 22:50:11 +02:00
Zeno Rogue 0720c93974 racing:: in set_view(), reduce steps to 10 in PURE geometreis 2019-09-12 22:50:11 +02:00
Zeno Rogue e8edff6ef7 solv:: increased guaranteed drawing (without clipping) range 2019-09-12 22:50:11 +02:00
Zeno Rogue 1c63518fff solv:: pseudohept for Graveyard 2019-09-12 22:50:11 +02:00
Zeno Rogue 01647a34cf Yendor marker displays an approximate if celldistance returns DISTANCE_UNKNOWN 2019-09-12 22:50:11 +02:00
Zeno Rogue 40e5f7f930 celldistance now returns DISTANCE_UNKNOWN instead of 64 if it does not know 2019-09-12 22:50:11 +02:00
Zeno Rogue bca567cc10 updir used in heptdistance 2019-09-12 22:50:11 +02:00
Zeno Rogue 29d3410aa6 correct updir in gBinaryTiling 2019-09-12 22:50:11 +02:00
Zeno Rogue 3cb39a0f8c binary:: relative_matrix now uses updir 2019-09-12 22:50:11 +02:00
Zeno Rogue 5491848ee9 fixed emeraldval computation in binary4 / sol 2019-09-12 22:50:11 +02:00
Zeno Rogue fc143970c0 racing:: disabled track-relative centering in kitedart3 2019-09-12 22:50:11 +02:00
Zeno Rogue bc912a2fbb setdist with d > BARLEV no longer pointlessly calls itself recursively 2019-09-12 22:50:11 +02:00
Zeno Rogue 9f51df9720 removed unneeded setdist 2019-09-12 22:50:11 +02:00
Zeno Rogue 9f664568ab penrose3 fixup 2019-09-12 22:50:11 +02:00
Zeno Rogue bc1cc7e2ca one more celldistance switch 2019-09-12 22:50:11 +02:00
Zeno Rogue fac3866d7e provided celldistance_approx for binary4 and kitedart3 2019-09-12 22:50:11 +02:00
Zeno Rogue 17ae3917e4 fixed updir 2019-09-12 22:50:11 +02:00
Zeno Rogue 05a01c280e top_land no longer computes celldist if no top_land is used 2019-09-12 22:50:11 +02:00
Zeno Rogue cbce59d5d2 fixed race generation in complex Euclidean tilings 2019-09-12 22:50:11 +02:00
Zeno Rogue 149a08a746 fixed Orb of Yendor generation in complex Euclidean tilings 2019-09-12 22:50:11 +02:00
Zeno Rogue 8830770982 fixed celldistance parameter order (to a more popular c1) in two instances 2019-09-12 22:50:11 +02:00
Zeno Rogue aa9d9cf54a racing:: increased byat array size just in case 2019-09-12 22:50:11 +02:00
Zeno Rogue 9565ce198f fixed a crash on loading saved maps 2019-09-12 22:50:11 +02:00
Zeno Rogue 1ad5c422fc removed Land of Storms from 3D games in full geometries 2019-09-12 22:50:11 +02:00
Zeno Rogue eec4399076 removed Warped Coast from full games in 3D geometries 2019-09-12 22:50:11 +02:00
Zeno Rogue f5dd6a6b7e disabled the non-tree-fixer in non-hyperbolic geometries 2019-09-12 22:50:11 +02:00
Zeno Rogue 4dc83af688 fixed a crash when generating Rose Garden in 3D geometries 2019-09-12 22:50:11 +02:00
Zeno Rogue 0be99b931f fixed actualV in penrose 2019-09-12 22:50:11 +02:00
Zeno Rogue 96e160df78 yendor:: removed break when looking for keycell -- the furthest cell is selected by default now 2019-09-12 22:50:11 +02:00
Zeno Rogue a50725b3b7 fixed centerview not computed in masterful euclidean 2019-09-12 22:50:11 +02:00
Zeno Rogue f96101c86a disabled COMEBACK achievement outside of standard geometry 2019-09-12 22:50:11 +02:00
Zeno Rogue 94f4cd24af fixed build_shortest_path in arcm/Penrose euclidean 2019-09-12 22:50:11 +02:00
Zeno Rogue 908bd13660 getHeptagonCdata_legacy to keep Racing working 2019-09-12 22:50:11 +02:00
Zeno Rogue 158030c5de improved exhaustive distance computation for geometries such as Archimedean/Penrose E2 2019-09-12 22:50:11 +02:00
Zeno Rogue e1ec5dbf03 disabled Camelot in 3D fullgames 2019-09-12 22:50:11 +02:00
Zeno Rogue 639afffcda fixed incorrect memory warnings 2019-09-12 22:50:11 +02:00
Zeno Rogue 1dd8a09bfd fixed inverse_exp being used in non-Sol in makeradar 2019-09-12 22:50:11 +02:00
Zeno Rogue a077e075b9 11.1g 2019-09-12 22:50:11 +02:00
Zeno Rogue b47525b623 some emerald implementation in sol 2019-09-12 22:50:11 +02:00
Zeno Rogue 2f0448dbc3 fixed clipping: do not do it in 2D! 2019-09-12 22:50:11 +02:00
Zeno Rogue dc54135d5f radarrange configurable 2019-09-12 22:50:11 +02:00
Zeno Rogue a6b71facfb fixed spin_towards 2019-09-12 22:50:11 +02:00
Zeno Rogue 794f8b679e solv:: applymodel takes local_perspective into account 2019-09-12 22:50:11 +02:00
Zeno Rogue 44b9968ff8 cleaned up invis_point -> point_behind and invalid_point(transmatrix), also implemented for Solv 2019-09-12 22:50:11 +02:00
Zeno Rogue 4a8ec3b3c4 fixed key conflict in 3D menu 2019-09-12 22:50:11 +02:00
Zeno Rogue 3b08b0c7fb sol:: fixup inv_exp 2019-09-12 22:50:11 +02:00
Zeno Rogue 774c871c74 sol:: basic shmup works 2019-09-12 22:50:10 +02:00
Zeno Rogue 06a5309468 solv:: horo_distance implemented 2019-09-12 22:50:10 +02:00
Zeno Rogue cc5768b6b3 fixup local_perspective 2019-09-12 22:50:10 +02:00
Zeno Rogue 1e81ed606d solv:: graphical coordinates are now always standard -- local_perspective used in all models 2019-09-12 22:50:10 +02:00
Zeno Rogue 537f9455ee solv:: options -solgeo and -solnogeo 2019-09-12 22:50:10 +02:00
Zeno Rogue cc46c3bd18 fixed -solglitch 2019-09-12 22:50:10 +02:00
Zeno Rogue 0a47daa87f solv:: reduced the default range 2019-09-12 22:50:10 +02:00
Zeno Rogue 3933447ffa fixup extern noclipped 2019-09-12 22:50:10 +02:00
Zeno Rogue 03119d0dd5 solv:: behind-camera optimization 2019-09-12 22:50:10 +02:00
Zeno Rogue 3ae542b241 solv:: fixed lazy inv_exp 2019-09-12 22:50:10 +02:00
Zeno Rogue d4ad45c4da also cells_drawn_limit displayed in add_cells_drawn 2019-09-12 22:50:10 +02:00
Zeno Rogue ea3e33f23d noclipped cells displayed in add_cells_drawn 2019-09-12 22:50:10 +02:00
Zeno Rogue b898365d68 solv:: lazy version of inv_exp 2019-09-12 22:50:10 +02:00
Zeno Rogue 8ba99c42a0 solv:: fixup to ilocal_perspective removal, to work in mdPerspective too 2019-09-12 22:50:10 +02:00
Zeno Rogue 49c3a643ae solv:: backward wall optimization 2019-09-12 22:50:10 +02:00
Zeno Rogue 90aa7b5c02 solv:: removed ILP for simplicity and better performance 2019-09-12 22:50:10 +02:00
Zeno Rogue 5c42c2f8e5 sandworms no longer explode in 3D 2019-09-12 22:50:10 +02:00
Zeno Rogue 8da3556448 added a missing definition of atanh in GLSL 2019-09-12 22:50:10 +02:00
Zeno Rogue c9ac8738f6 added missing override 2019-09-12 22:50:10 +02:00
Zeno Rogue d64c3ea125 more pro filename for solv geodesics table 2019-09-12 22:50:10 +02:00
Zeno Rogue d3aab384d2 11.1f 2019-09-12 22:50:10 +02:00
Zeno Rogue b773ecc9d9 fixed incorrect pushing in some geometries (also caused crash when next to Thumper in Solv) 2019-09-12 22:50:10 +02:00
Zeno Rogue 6682c760a9 hopefully fixed a bug with prairie in Chaos Mode 2019-09-12 22:50:10 +02:00
Zeno Rogue f07801f2b3 solv:: fixed incorrect alt 2019-09-12 22:50:10 +02:00
Zeno Rogue 148db6b84c fixed a bug with recall+safety in Shmup 2019-09-12 22:50:10 +02:00
Zeno Rogue a95eb81b33 shmup:: collect items when bumping into them in a boat 2019-09-12 22:50:10 +02:00
Zeno Rogue 5c221d72b3 solv:: crossed out Elemental Planes 2019-09-12 22:50:10 +02:00
Zeno Rogue 235fdef973 limited_generation applied in sol 2019-09-12 22:50:10 +02:00
Zeno Rogue bbabd47ad0 solv:: fixmatrix 2019-09-12 22:50:10 +02:00
Zeno Rogue 3b7d80bb17 solv:: Vineyard 2019-09-12 22:50:10 +02:00
Zeno Rogue 487f5a0d24 solv:: fixed minemarks obscuring the view 2019-09-12 22:50:10 +02:00
Zeno Rogue d36bd6977b fixed crash on displaying Rugs in inventory in 3D geometries 2019-09-12 22:50:10 +02:00
Zeno Rogue c61b556730 fixed pushing thumpers in sol 2019-09-12 22:50:10 +02:00
Zeno Rogue 1801fbd048 scale_at is 1 in sol 2019-09-12 22:50:10 +02:00
Zeno Rogue 1528d63d29 arg:: -fov parameter 2019-09-12 22:50:10 +02:00
Zeno Rogue 917fbac4a2 configurable Sol sight range, and glitch removal 2019-09-12 22:50:10 +02:00
Zeno Rogue 60778a6896 new renderer for Solv 2019-09-12 22:50:10 +02:00
Zeno Rogue 8bc15578b4 changelog updated 2019-09-12 22:50:10 +02:00
Zeno Rogue a3a22598ba delete[] xbuffer 2019-09-12 22:50:10 +02:00
Zeno Rogue 6ac5091526 11.1e 2019-09-12 22:50:10 +02:00
Zeno Rogue 15e83f6b83 some junk removed 2019-09-12 22:50:10 +02:00
Zeno Rogue 2f804e9f1e fixes for older compilers 2019-09-12 22:50:10 +02:00
Zeno Rogue f6c0bf0304 disabled cyclic lands in penrose 2019-09-12 22:50:10 +02:00
Zeno Rogue 21a6e64e96 more ddspin/nearcorner bugfixes 2019-09-12 22:50:09 +02:00
Zeno Rogue fa7585606d sol:: in_table_range used only in mdSolPerspective 2019-09-12 22:50:09 +02:00
Zeno Rogue ca3ad7af82 showEuclideanMenu fixup add/action 2019-09-12 22:50:09 +02:00
Zeno Rogue a0ab3335e5 fixup debug removed in sol 2019-09-12 22:50:09 +02:00
Zeno Rogue 4fb0f7b30d epsilon added in in_table_range 2019-09-12 22:50:09 +02:00
Zeno Rogue 9f9ff6e6b3 Solv naming 2019-09-12 22:50:09 +02:00
Zeno Rogue dc20dc4cff land validity refinement 2019-09-12 22:50:09 +02:00
Zeno Rogue 5367e15b43 disabled cyclic lands in the list in Euclidean/Sol 2019-09-12 22:50:09 +02:00
Zeno Rogue 502e307667 disabled boundary in sol 2019-09-12 22:50:09 +02:00
Zeno Rogue 5a0d84683a fixed crash in (i)ddspin: move to cmove 2019-09-12 22:50:09 +02:00
Zeno Rogue d60de0306b disabled mirrors in penrose and sol 2019-09-12 22:50:09 +02:00
Zeno Rogue eea22ebf75 disabled Nowall attempts in Binary4 2019-09-12 22:50:09 +02:00
Zeno Rogue c97ab10700 pushed unimplemented Product 2019-09-12 22:50:09 +02:00
Zeno Rogue 0054dbc118 utilities:: kz 2019-09-12 22:50:09 +02:00
Zeno Rogue 7ba8b2d680 utilities:: lerp 2019-09-12 22:50:09 +02:00
Zeno Rogue cfbabcff80 animations:: clearup 2019-09-12 22:50:09 +02:00
Zeno Rogue 80ae0d7bd6 faster Penrose 2019-09-12 22:50:09 +02:00
Zeno Rogue 0a2a033e7e unlocking Irradiated Fields no longer requires 60 treasure 2019-09-12 22:50:09 +02:00
Zeno Rogue 42b61e0053 ambush restriction no longer considers friendly, slow, or multi-tile monsters 2019-09-12 22:50:09 +02:00
Zeno Rogue 9616b76848 allies now prefer escaping unsafe locations to attacking 2019-09-12 22:50:09 +02:00
Zeno Rogue 9b8b2f638c allies did not avoid 1-stunned lancers 2019-09-12 22:50:09 +02:00
Zeno Rogue 5f82d164cf fixed allies evading Demons incorrectly 2019-09-12 22:50:09 +02:00
Zeno Rogue 17c9c751f6 restricted model keys in model menu 2019-09-12 22:50:09 +02:00
Zeno Rogue 393f299074 arg:: -grotate 2019-09-12 22:50:09 +02:00
Zeno Rogue ca76e7c217 title comment in binary-tiling.cpp 2019-09-12 22:50:09 +02:00
Zeno Rogue 017afc59f1 denser Crossroads in Sol 2019-09-12 22:50:09 +02:00
Zeno Rogue 598603c937 geodesics in Sol 2019-09-12 22:50:09 +02:00
Zeno Rogue 9326b9594b fixed transwall coloring inconsistencies 2019-09-12 22:50:09 +02:00
Zeno Rogue 31ab7e63d7 smaller stuff in sol 2019-09-12 22:50:09 +02:00
Zeno Rogue fff0cd1d3e land improvements in Sol/Penrose/B4 2019-09-12 22:50:09 +02:00
Zeno Rogue b2e8a869cb updir and expansion functions in binarytiling 2019-09-12 22:50:09 +02:00
Zeno Rogue 0908d1d974 foxed cellgfxdist in Archimedean 2019-09-12 22:50:09 +02:00
Zeno Rogue 877067e84c Sol in the list of 3D geometries 2019-09-12 22:50:09 +02:00
Zeno Rogue 94c170d691 added some missing modecodes 2019-09-12 22:50:09 +02:00
Zeno Rogue cf496e8940 kite-and-dart tiling 2019-09-12 22:50:09 +02:00
Zeno Rogue f72da51b38 3D:: support for drawing walls on multiple types of cells 2019-09-12 22:50:09 +02:00
Zeno Rogue 24a23e477b support for weighted 3dwalls 2019-09-12 22:50:09 +02:00
Zeno Rogue 9cb955757e fixed ggmatrix for masterless Euclidean tilings 2019-09-12 22:50:09 +02:00
Zeno Rogue 45ba083185 celldist in sol uses celldistance 2019-09-12 22:50:09 +02:00
Zeno Rogue 816320da94 sol:: solmul 2019-09-12 22:50:09 +02:00
Zeno Rogue 2c3341bf67 sol:: fixed return too early 2019-09-12 22:50:09 +02:00
Zeno Rogue d6c53f933f binary:: fixed incorrectly computed use_direct 2019-09-12 22:50:09 +02:00
Zeno Rogue dd5d317cb3 Sol geometry 2019-09-12 22:50:09 +02:00
Zeno Rogue 946570da31 moved zpush from 3dmodels to hyperpoint 2019-09-12 22:50:09 +02:00
Zeno Rogue 856e1147a1 floor textures now work with >8 sides 2019-09-12 22:50:09 +02:00
Zeno Rogue 2d30f3830c standard binary tiling, also improved the looks of variant binary tiling, and optimized shvid for pure 2019-09-12 22:50:09 +02:00
Zeno Rogue 2598bbcdd5 rogueviz::newconf:: changed the title conformal maps to newconformist 2019-09-12 22:50:09 +02:00
Zeno Rogue a1e1240d33 creature_scale can now be changed in all geometries except standard non-cheater shmup 2019-09-12 22:50:09 +02:00
Zeno Rogue d1fb9f3564 simplified and generalized cdata 2019-09-12 22:50:09 +02:00
Zeno Rogue a5dc6d40e6 fixed wrong degree() in binary tiling root 2019-09-12 22:50:09 +02:00
Zeno Rogue bb1fb4bd74 arg:: -twopoint 2019-09-12 22:50:09 +02:00
Zeno Rogue 47fd094c6f binary4 (WIP) 2019-09-12 22:50:09 +02:00
Zeno Rogue 3a065a4356 POLY_DEBUG flag 2019-09-12 22:50:09 +02:00
Zeno Rogue feaeee86f0 fixed a bug with linewidth in mdUnchanged 2019-09-12 22:50:09 +02:00
Zeno Rogue 4fb2440543 tanh used for better TwopointHybrid 2019-09-12 22:50:09 +02:00
Zeno Rogue 7baf97521c linewidth multipliers for grid and ring 2019-09-12 22:50:09 +02:00
Zeno Rogue 5149dbeefd rogueviz::nconf:: some fixes 2019-09-12 22:50:09 +02:00
Zeno Rogue 9f6d2a5d89 rogueviz:: newconformist explorable explanation added 2019-09-12 22:50:09 +02:00
Zeno Rogue 54f1ad4163 CAP_MEMORY_RESERVE disabled in WEB 2019-09-12 22:50:09 +02:00
Zeno Rogue b3020eb06d added missing CAP_SDLAUDIO guard 2019-09-12 22:50:09 +02:00
Zeno Rogue b4e700c455 a (slow) vertices_texture implemented with CAP_VERTEXBUFFER 2019-09-12 22:50:09 +02:00
Zeno Rogue 1a411f0ebf rogueviz::pentagonal:: animations possible, keys now work only in sm::NORMAL 2019-09-12 22:50:09 +02:00
Zeno Rogue 4665e7ca14 hyperweb:: default arguments possible 2019-09-12 22:50:09 +02:00
Zeno Rogue 37dd9cb208 hyperweb:: resolution backed up 2019-09-12 22:50:09 +02:00
Zeno Rogue 1d7892ff80 missing MAXMDIM guard 2019-09-12 22:50:09 +02:00
Zeno Rogue 31c99e486f CAP_NOSHADER 2019-09-12 22:50:09 +02:00
Zeno Rogue 2e77224c56 rug warning now can be disabled 2019-09-12 22:50:09 +02:00
Zeno Rogue f677bce4ad exporting queuecircle 2019-09-12 22:50:09 +02:00
Zeno Rogue 2ff2917184 quickqueue clears curvedata 2019-09-12 22:50:09 +02:00
Zeno Rogue 65244d11d5 glflush on queuereset 2019-09-12 22:50:09 +02:00
Zeno Rogue d67316454c linewidth bugs fixed when MINIMIZE_GL_CALLS 2019-09-12 22:50:09 +02:00
Zeno Rogue 392611045a dialog::DONT_SHOW to prevent showing the map in number dialogs 2019-09-12 22:50:08 +02:00
Zeno Rogue e58e3c9bcb editNumber(int) now accepts floating point step 2019-09-12 22:50:08 +02:00
Zeno Rogue 1875e1641e more responsible onscreen keyboard 2019-09-12 22:50:08 +02:00
Zeno Rogue 3c913b91b9 removed bad apply_orientation 2019-09-12 22:50:08 +02:00
Zeno Rogue ec82e5695b extra two-point projections 2019-09-12 22:50:08 +02:00
Zeno Rogue e5e0dfbac1 correct gdpushing of UTF8 224-240 2019-09-12 22:50:08 +02:00
Zeno Rogue b1fd71cf78 11.1d 2019-09-12 22:50:08 +02:00
Zeno Rogue ee0266c488 some keyboard tuning 2019-09-12 22:50:08 +02:00
Zeno Rogue efe82291d1 no start animations without OpenGL/shaders 2019-09-12 22:50:08 +02:00
Zeno Rogue 5476b33e94 fixed to work on OPENGL 1.0 2019-09-12 22:50:08 +02:00
Zeno Rogue c07e22ca5e onscreen keyboards where applicable 2019-09-12 22:50:08 +02:00
Zeno Rogue 3db34f26ac fixed a bug with bad start in Euclidean Crossroads 2019-09-12 22:50:08 +02:00
Zeno Rogue 02d209e723 fixed uninitialized direction[3] in surface.cpp 2019-09-12 22:50:08 +02:00
Zeno Rogue 77bd96e6b5 switch_to_text, needed for iOS 2019-09-12 22:50:08 +02:00
Zeno Rogue d5109fc3bb maTranslationRotation animation 2019-09-12 22:50:08 +02:00
Zeno Rogue 4ae3560dda fixed some unused/uninitialized variables in rogueviz 2019-09-12 22:50:08 +02:00
Zeno Rogue 1a08948c32 linepatterns now can have widths set individually 2019-09-12 22:50:08 +02:00
Zeno Rogue 1d8c086169 more exports, inlines exported 2019-09-12 22:50:08 +02:00
Zeno Rogue 664ca63acc configuration of type colors 2019-09-12 22:50:08 +02:00
Zeno Rogue 75dd6bbc02 fixed a bug with resetting stereo modes in 3D 2019-09-12 22:50:08 +02:00
Zeno Rogue aec019a29b ORS improvement 2019-09-12 22:50:08 +02:00
Zeno Rogue a7e1418ffd scaleSinh100, used in IPD config 2019-09-12 22:50:08 +02:00
Zeno Rogue fc43a4716b new pmodel: Central Inversion (for Euclidean) 2019-09-12 22:50:08 +02:00
Zeno Rogue 15a9b6135b 11.1c changelog 2019-09-12 22:50:08 +02:00
Zeno Rogue e92b8c7512 wclick fixup 2019-09-12 22:50:08 +02:00
Zeno Rogue 4689b7a79a no below-centering in native perspective 2019-09-12 22:50:08 +02:00
Zeno Rogue de06aede33 fixed movement in mobile 3D, also WAIT if held for 250-500 ms in full 3D geometry 2019-09-12 22:50:08 +02:00
Zeno Rogue 0d65b73227 correction of CAP_SDL guard 2019-09-12 22:50:08 +02:00
Zeno Rogue 13b5223ffb fixed missing 3 to SHDIM in shaders.cpp 2019-09-12 22:50:08 +02:00
Zeno Rogue 76d82d4e9a fixed matrix sequence in rug.cpp 2019-09-12 22:50:08 +02:00
Zeno Rogue a2073d97a2 hr::SDL_GetTicks() in hyper.h 2019-09-12 22:50:08 +02:00
Zeno Rogue 0dea0e1458 11.1b 2019-09-12 22:50:08 +02:00
Zeno Rogue 77f7b42856 camera movement in mobile/orientation/DRAG 2019-09-12 22:50:08 +02:00
Zeno Rogue 9edb1de098 glhr::init() in fakemobile 2019-09-12 22:50:08 +02:00
Zeno Rogue a602dcc593 added missing CAP_TEXTURE guard 2019-09-12 22:50:08 +02:00
Zeno Rogue 8aea5eebb4 removed a special case in Android graphics which should not be a special case 2019-09-12 22:50:08 +02:00
Zeno Rogue f0d04f6bc2 removed incorrect CAP_TEXTURE guards 2019-09-12 22:50:08 +02:00
Zeno Rogue 680a3cc867 move by clicking (or stay by clicking down) in 3D 2019-09-12 22:50:08 +02:00
Zeno Rogue 4a65e11c1d camera rotation by device orientation in 3D 2019-09-12 22:50:08 +02:00
Zeno Rogue 93813f4cf1 ors:: fixed a crash when enabling spherical VR 2019-09-12 22:50:08 +02:00
Zeno Rogue 07058956ba added missing CAP_COMMANDLINE guards 2019-09-12 22:50:08 +02:00
Zeno Rogue b260cbb91f doubled texture for the second eye 2019-09-12 22:50:08 +02:00
Zeno Rogue 22b8a88e07 'scrolling by device rotation' no longer appears in 3D 2019-09-12 22:50:08 +02:00
Zeno Rogue e1731fce02 'back' button in mouse config 2019-09-12 22:50:08 +02:00
Zeno Rogue fe635cc7d8 CAP_MEMORY_RESERVE and memory reserve handled in mobile (if CAP_MEMORY_RESERVE was 1) 2019-09-12 22:50:08 +02:00
Zeno Rogue 977c5f2d69 CAP_MOUSEGRAB 2019-09-12 22:50:08 +02:00
Zeno Rogue de05d11cbd BADMODEL 2019-09-12 22:50:08 +02:00
Zeno Rogue 08145d5446 11.1a 2019-09-12 22:50:08 +02:00
Zeno Rogue 925d06a2b8 dead zones are now configured via number dialog 2019-09-12 22:50:08 +02:00
Zeno Rogue b1d8388795 2D3D:: improved controller panning 2019-09-12 22:50:08 +02:00
Zeno Rogue 7b69046125 2.5D: keyboard/controller movement works better now 2019-09-12 22:50:08 +02:00
Zeno Rogue c390c1c111 a hack to make sky work correctly in stereo 2019-09-12 22:50:08 +02:00
Zeno Rogue 0f98146d20 3D:: correct shift matrix in stereo mode 2019-09-12 22:50:08 +02:00
Zeno Rogue a6d9f8f679 added frozenlake to credits 2019-09-12 22:50:08 +02:00
Zeno Rogue 9d93da1472 fixed Up/Down in shmup mode, also reversed Left/Right for intuitiveness 2019-09-12 22:50:08 +02:00
Zeno Rogue 25999229a4 2D3D: fixed_yz now works when scrolling 2019-09-12 22:50:08 +02:00
Zeno Rogue db988058de added a separate option axes3 for highlighting forward, and in different location 2019-09-12 22:50:08 +02:00
Zeno Rogue 5d88c1706a unambiguous sword in non-{4,3,*} 3D geometreis 2019-09-12 22:50:08 +02:00
Zeno Rogue eb4156fe29 fixed a crash bug with Bulls pushing things offscreen 2019-09-12 22:50:08 +02:00
Zeno Rogue e6efc8fabc dual:: 3D:: dual works in 3D 2019-09-12 22:50:08 +02:00
Zeno Rogue ff584bb74c fixed a bug with texturing in stereo 2019-09-12 22:50:08 +02:00
Zeno Rogue 3a4e84effe Orb of the Sword in non-shmup 3D geometries 2019-09-12 22:50:08 +02:00
Zeno Rogue 84df837855 fixed drawing the sky in stereo 2019-09-12 22:50:08 +02:00
Zeno Rogue 2153f48119 correct depthtest/depthwrite/fogbase not only for triangles 2019-09-12 22:50:08 +02:00
Zeno Rogue 1e8e8d9fa3 fixed incorrect bridges on mercury rivers 2019-09-12 22:50:08 +02:00
Zeno Rogue 7451d1886f improved the ceiling above the mercury rivers 2019-09-12 22:50:08 +02:00
Zeno Rogue 06573ea3c8 shadow of the player character is always shown 2019-09-12 22:50:08 +02:00
Zeno Rogue 8ec38e36e2 improved Tortoise graphics in 3D, Baby Tortoises appear 2019-09-12 22:50:08 +02:00
Zeno Rogue 2c16564663 camera level higher when riding dragon 2019-09-12 22:50:08 +02:00
Zeno Rogue 66560a6e9f fixed the vertical placement of Jiangshi 2019-09-12 22:50:08 +02:00
Zeno Rogue 084a7d0469 added a message when trying to perform an impossible skip-turn 2019-09-12 22:50:08 +02:00
Zeno Rogue fcb7308aa4 fixed weird coloring of ghost-on-tentacle 2019-09-12 22:50:08 +02:00
Zeno Rogue dd212d756b fixed the monster color in the minimap for Dragons etc 2019-09-12 22:50:08 +02:00
Zeno Rogue 8c21e450b0 fixed the Land of Storms not working correctly in dual geometry mode 2019-09-12 22:50:07 +02:00
Zeno Rogue fc32d46df2 fixed the deprecated-copy warning 2019-09-12 22:50:07 +02:00
Zeno Rogue c3e749ee57 11.1 2019-09-12 22:50:07 +02:00
Zeno Rogue 66e9a20d19 11.1 2019-09-12 22:50:07 +02:00
Zeno Rogue c289345c79 fixup cgi timestamps 2019-09-12 22:50:07 +02:00
Zeno Rogue 99aeb04185 reduced the number of bird animation frames 2019-09-12 22:50:07 +02:00
Zeno Rogue b9693553bf using wingphase in rogueviz 2019-09-12 22:50:07 +02:00
Zeno Rogue 488c25ecea halved animatedbird space usage 2019-09-12 22:50:07 +02:00
Zeno Rogue 9a1858e2f9 clear cgis, fixed missing textures 2019-09-12 22:50:07 +02:00
Zeno Rogue adf0f36ea1 fixed a possible buffer overflow while in finishshape() 2019-09-12 22:50:07 +02:00
Zeno Rogue 9a0b8935a3 shading of all humanoid models 2019-09-12 22:50:07 +02:00
Zeno Rogue 380a8e8eda dual::mayboth when changing geometry 2019-09-12 22:50:07 +02:00
Zeno Rogue 2b2c07a0e7 removed 'work in progress' messages 2019-09-12 22:50:07 +02:00
Zeno Rogue 770fb1f5e1 line animation:: loops in quotient spaces 2019-09-12 22:50:07 +02:00
Zeno Rogue 44890b4fb2 extra safety in dual 2019-09-12 22:50:07 +02:00
Zeno Rogue 9bec1bc96e CR4 achievement should be fixed 2019-09-12 22:50:07 +02:00
Zeno Rogue 524982605e arrows from arrow traps now visible in 3D 2019-09-12 22:50:07 +02:00
Zeno Rogue 52a3fcf86f added explanation 'floors in 3D geometries' to tstep 2019-09-12 22:50:07 +02:00
Zeno Rogue 05b81b8c7d more stars in R'Lyeh 2019-09-12 22:50:07 +02:00
Zeno Rogue 63154dbcbf fixed an OpenGL error caused by negative linewidth 2019-09-12 22:50:07 +02:00
Zeno Rogue 9b721d25d6 eyecolor saved 2019-09-12 22:50:07 +02:00
Zeno Rogue d0a84e4e40 Czech translation updated 2019-09-12 22:50:07 +02:00
Zeno Rogue 486dd2bb52 added rdococ to thanks 2019-09-12 22:50:07 +02:00
Zeno Rogue c039f229e3 better sky for R'Lyeh, Temple, and Ruined City 2019-09-12 22:50:07 +02:00
Zeno Rogue b7e84ec04c fixed the Z-placement of the Tentacle tail 2019-09-12 22:50:07 +02:00
Zeno Rogue 55aa0da142 fixed a bug with worm shadows 2019-09-12 22:50:06 +02:00
Zeno Rogue 91a83035da 3D:: flatten Z in the correct direction in full 3D 2019-09-12 22:50:06 +02:00
Zeno Rogue 4e4a3a65a7 3D:: mscale no longer does something weird in Flatten 2019-09-12 22:50:06 +02:00
Zeno Rogue 37f3b122c3 3D:: no more FACE-direction changing in HUD 2019-09-12 22:50:06 +02:00
Zeno Rogue ecfaa7c49d ascii: no more animations in low graphics 2019-09-12 22:50:06 +02:00
Zeno Rogue 48f772698d one princess enough for gold 2019-09-12 22:50:06 +02:00
Zeno Rogue 0cedcc23f5 ascii: fixed monster coloring including Mimics 2019-09-12 22:50:06 +02:00
Zeno Rogue 2db7dc4b6b ascii: fixed compasses 2019-09-12 22:50:06 +02:00
Zeno Rogue 40b1e7bab1 ascii: fixed a bug with grid 2019-09-12 22:50:06 +02:00
Zeno Rogue e19d7e2e64 ascii: better warped/normal border 2019-09-12 22:50:06 +02:00
Zeno Rogue c7620974a1 easier Chaos Mode + Inv 2019-09-12 22:50:06 +02:00
Zeno Rogue 687b19df43 line animations take extra_line_steps into account 2019-09-12 22:50:06 +02:00
Zeno Rogue 7b547a6a77 fixed some shapes in 3D (like Mine Mark) 2019-09-12 22:50:06 +02:00
Zeno Rogue a63fdc993f fixed ocean wandering albatross generation, and added Orbs of Safety 2019-09-12 22:50:06 +02:00
Zeno Rogue 1da7a9b815 reduced Trollheim/Hive generation in new submodes of Chaos 2019-09-12 22:50:06 +02:00
Zeno Rogue 54df32589c translation fixes 2019-09-12 22:50:06 +02:00
Zeno Rogue 481aa198ad CLI option: -tstep 2019-09-12 22:50:06 +02:00
Zeno Rogue daeffa3647 line animation records in reverse if lvspeed < 0, and no longer goes to far 2019-09-12 22:50:06 +02:00
Zeno Rogue e8becb8ba2 eyes on warrior statues 2019-09-12 22:50:06 +02:00
Zeno Rogue fe5936874e 11.0z2 2019-09-12 22:50:06 +02:00
Zeno Rogue 609fc29119 memory settings saved; adjusted for the lack of get_new_handler on steam 2019-09-12 22:50:06 +02:00
Zeno Rogue b93fe4e792 fixed the PTM version of Brown Islands 2019-09-12 22:50:06 +02:00
Zeno Rogue d5d3d396b6 fixed a crash when using formula pattern in spherical geometry 2019-09-12 22:50:06 +02:00
Zeno Rogue f35e383214 fixed a crash in draw editor 2019-09-12 22:50:06 +02:00
Zeno Rogue 3da305b4ca fog is now affected by the background color 2019-09-12 22:50:06 +02:00
Zeno Rogue 57470eafe4 better sky in Irradiated 2019-09-12 22:50:06 +02:00
Zeno Rogue 6b3f2a94e4 fixed 'extra knife' orbs in 3D 2019-09-12 22:50:06 +02:00
Zeno Rogue cecd362915 Orb of Matter no longer 'works' in the Free Fall 2019-09-12 22:50:06 +02:00
Zeno Rogue 96bd13aec9 3D:: fixed the orb display in 3D 2019-09-12 22:50:06 +02:00
Zeno Rogue d7d5f02a05 3D:: conformal::rotation is now used to get the initial rotation right in 3D 2019-09-12 22:50:06 +02:00
Zeno Rogue 9eae663fe3 3D:: better conformal::rotation system 2019-09-12 22:50:06 +02:00
Zeno Rogue 635c02803c fixed Clearing 2019-09-12 22:50:06 +02:00
Zeno Rogue 45c39c6fd8 fixed the multiplayer config screen 2019-09-12 22:50:06 +02:00
Zeno Rogue 47d8255b8a CLI setting -record-only 2019-09-12 22:50:06 +02:00
Zeno Rogue 6185ed674e CLI setting -shotaa 2019-09-12 22:50:06 +02:00
Zeno Rogue 2db8eec411 hell/Alchemist brighter 2019-09-12 22:50:05 +02:00
Zeno Rogue c1f69187e4 added rotation_yz (not editable) 2019-09-12 22:50:05 +02:00
Zeno Rogue 69de3354fe fixed dog stripes 2019-09-12 22:50:05 +02:00
Zeno Rogue 5de371f1f7 fixed adding things to non-existent sky 2019-09-12 22:50:05 +02:00
Zeno Rogue a1d0cef847 fixed worm shadows 2019-09-12 22:50:05 +02:00
Zeno Rogue 5fc24ac17a a bit higher sky, and Great Walls with more elements 2019-09-12 22:50:05 +02:00
Zeno Rogue 688ad336ae rug:: fixed depthwrite 2019-09-12 22:50:05 +02:00
Zeno Rogue 06301d73fc new memory handling 2019-09-12 22:50:05 +02:00
Zeno Rogue fc47ec3338 11.0z1 2019-09-12 22:50:05 +02:00
Zeno Rogue e61930c0b1 clearing unused TriheptaSpecial shapes to fix a crash on iOS 2019-09-12 22:50:05 +02:00
Zeno Rogue db744db786 flattened reptiles on non-standard tilings 2019-09-12 22:50:05 +02:00
Zeno Rogue 4aa004e640 fixed generation of Turquoises on non-three-valent tilings 2019-09-12 22:50:05 +02:00
Zeno Rogue 7ce26fd5ec Hunting Grounds in >4-valent tilings 2019-09-12 22:50:05 +02:00
Zeno Rogue 29278101ba fixed a bug with drawing Rosebushes 2019-09-12 22:50:05 +02:00
Zeno Rogue 5f1e0001a2 dual:: moved the Land of Power to the hyperbolic world 2019-09-12 22:50:05 +02:00
Zeno Rogue 25cbf1129b fixed ambushes in non-three-valent geometries 2019-09-12 22:50:05 +02:00
Zeno Rogue d23af4b71b fixed a crash in Terracotta 2019-09-12 22:50:05 +02:00
Zeno Rogue f7a5d8fa70 line:: animation to current view stops at actual current view, not cell center (to test) 2019-09-12 22:50:05 +02:00
Zeno Rogue ba1708fddd protected popScreen crashing from multiple exit 2019-09-12 22:50:05 +02:00
Zeno Rogue 101707e2ad fixed rose 2019-09-12 22:50:05 +02:00
Zeno Rogue 8a1ca8e05d anims:: fixed hotkey clash and fallthrough 2019-09-12 22:50:05 +02:00
Zeno Rogue bd0ca960c4 more roses in total chaos 2019-09-12 22:50:05 +02:00
Zeno Rogue a848617991 more visible rose waves 2019-09-12 22:50:05 +02:00
Zeno Rogue d235540647 improved 3D settings: more adapted help text, added eye editing 2019-09-12 22:50:05 +02:00
Zeno Rogue d864c8cc1e racing:: speedometer 2019-09-12 22:50:05 +02:00
Zeno Rogue 3d08d359ee no more bugs in the Prairie 2019-09-12 22:50:05 +02:00
Zeno Rogue 01763d4f12 2D3D:: eye level 2019-09-12 22:50:05 +02:00
Zeno Rogue 5d7a01febe 3D:: dog stripes 2019-09-12 22:50:05 +02:00
Zeno Rogue 1077abf223 red power aura in Land of Power 2019-09-12 22:50:05 +02:00
Zeno Rogue b1276e2184 removed the 2D info from the projection dialog in 3D 2019-09-12 22:50:05 +02:00
Zeno Rogue 7c8cf2e065 modern push/pop in rogueviz 2019-09-12 22:50:05 +02:00
Zeno Rogue cbe6a7f827 rogueviz:: improved highlighting 2019-09-12 22:50:05 +02:00
Zeno Rogue f4f6d2c028 rogueviz:: highlighting correctly 2019-09-12 22:50:04 +02:00
Zeno Rogue 3102dbd7e7 rogueviz:: ggamma is back (better tuning possible with both alpha and gamma) 2019-09-12 22:50:04 +02:00
Zeno Rogue 0cf61a901d rogueviz:: use bitmaps on vertices 2019-09-12 22:50:04 +02:00
Zeno Rogue 212c0f54c4 no more enabling of Chaos if not unlocked 2019-09-12 22:50:04 +02:00
Zeno Rogue 5a44320585 disabled dualgeom and special chaos in WEB 2019-09-12 22:50:04 +02:00
Zeno Rogue 41dc9dfa61 changed geom:: to vid in hyperweb.cpp 2019-09-12 22:50:04 +02:00
Zeno Rogue 10529af236 web:: changed Pointer_stringify to UTF8ToString as suggested 2019-09-12 22:50:04 +02:00
Zeno Rogue 0489cde78e added some missing externs 2019-09-12 22:50:04 +02:00
Zeno Rogue 4325274e40 added some missing override 2019-09-12 22:50:04 +02:00
Zeno Rogue eed8df5982 better sky, sky color variation 2019-09-12 22:50:04 +02:00
Zeno Rogue 0ec99c92af 11.0z (without sky color) 2019-09-12 22:50:04 +02:00
Zeno Rogue 306ebd575c fixed a bug with usershape_state 2019-09-12 22:50:04 +02:00
Zeno Rogue 5519252fd0 added some missing CAP_* guards 2019-09-12 22:50:04 +02:00
Zeno Rogue 38554ba47d make_array in 3d-models 2019-09-12 22:50:04 +02:00
Zeno Rogue 2ab58e6eb7 resetview in tour 2019-09-12 22:50:04 +02:00
Zeno Rogue e81912c11e shmup/centerpc:: some sanity checks to prevent the PC from disappearing 2019-09-12 22:50:04 +02:00
Zeno Rogue db38e0a271 dual:: narrower Crossroads IV 2019-09-12 22:50:04 +02:00
Zeno Rogue 3b7f657135 turncount fix 2019-09-12 22:50:04 +02:00
Zeno Rogue cc23b20764 dual:: remove some debug output 2019-09-12 22:50:04 +02:00
Zeno Rogue 5110a29d4d dual:: cshpos fixup to save all 2019-09-12 22:50:04 +02:00
Zeno Rogue 7d086da036 removed some junk 2019-09-12 22:50:04 +02:00
Zeno Rogue a49de4530f dual:: added some missing gd->store's 2019-09-12 22:50:04 +02:00
Zeno Rogue 31bb896089 Chaos submodes selectable from the menu 2019-09-12 22:50:04 +02:00
Zeno Rogue 246efc72a5 2D3D:: fixed a crash in Euclidean when changing camera level 2019-09-12 22:50:04 +02:00
Zeno Rogue 7f1f6acbf7 third person perspective ('3') now works in FPP (ok this is confusing) 2019-09-12 22:50:04 +02:00
Zeno Rogue 5ec495443e no more radar in the mission screen 2019-09-12 22:50:04 +02:00
Zeno Rogue 0a10912403 dual:: minimap 2019-09-12 22:50:04 +02:00
Zeno Rogue b52c093d58 dual:: fixed setfsize to affect both sizes 2019-09-12 22:50:04 +02:00
Zeno Rogue 003f2361a8 gridlines in radar 2019-09-12 22:50:04 +02:00
Zeno Rogue 381f5015c9 dual:: no Orb of Safety power (game cannot be saved) 2019-09-12 22:50:04 +02:00
Zeno Rogue 3e385829b1 dual:: missing message when impossible 2019-09-12 22:50:04 +02:00
Zeno Rogue c3586308fa dual:: you can now swing at unkillable monsters 2019-09-12 22:50:04 +02:00
Zeno Rogue 5e05a0db61 dual:: if there is no effect, do no move rather than double swing 2019-09-12 22:50:04 +02:00
Zeno Rogue e99896be06 dual:: disabled gameover for now 2019-09-12 22:50:04 +02:00
Zeno Rogue 9561e348a1 dual:: glance message 2019-09-12 22:50:04 +02:00
Zeno Rogue 83d1e048e7 dual:: shmup mouseaim correctly dualized 2019-09-12 22:50:04 +02:00
Zeno Rogue 32c3da81f4 dual:: default geometries in 3D 2019-09-12 22:50:04 +02:00
Zeno Rogue 029463d509 dual:: changed the default geometries in shmup, also removed redundant scales and added missing PHASEFROM 2019-09-12 22:50:04 +02:00
Zeno Rogue 1e07644c43 fixed cgi possibly generated incorrectly (especially in dual) 2019-09-12 22:50:04 +02:00
Zeno Rogue c820f9a2f0 dual and multiplayer are not compatible (do not appear if other is on) 2019-09-12 22:50:04 +02:00
Zeno Rogue c9655a29a5 diagnostic functions raise_error and invalid_matrix 2019-09-12 22:50:04 +02:00
Zeno Rogue 182df69535 dual:: shmup 2019-09-12 22:50:04 +02:00
Zeno Rogue 7affa0c07f gdstore chaosmode 2019-09-12 22:50:04 +02:00
Zeno Rogue 8d9a5da7c1 do not savestats in dualmode 2019-09-12 22:50:04 +02:00
Zeno Rogue 949b0d60db mapedtior:: fixed loading arcm maps 2019-09-12 22:50:04 +02:00
Zeno Rogue 662d46b7ba xres/yres changes affect all screens (should not be in videopar maybe?) 2019-09-12 22:50:04 +02:00
Zeno Rogue 5ed1a0c8a4 dual:: save videopar and range_bonuses 2019-09-12 22:50:04 +02:00
Zeno Rogue 3c9f0096e1 removed vid.scfg from vid 2019-09-12 22:50:04 +02:00
Zeno Rogue 1c6e6bafb4 moved the parameters from geom3:: to videopar 2019-09-12 22:50:04 +02:00
Zeno Rogue 7ec6571a10 dual:: start in CR4 by default, also store firstland 2019-09-12 22:50:04 +02:00
Zeno Rogue e8417e5c51 dual:: mapeditor save feature works correctly 2019-09-12 22:50:03 +02:00
Zeno Rogue bc8da03ce0 dual:: a system to change parameters in one of the two maps, currently used only in ge_land_selection 2019-09-12 22:50:03 +02:00
Zeno Rogue f509dd0db0 dual:: panning split only if cannot select with mouse 2019-09-12 22:50:03 +02:00
Zeno Rogue 69e76b550c dual:: selectable from the menu 2019-09-12 22:50:03 +02:00
Zeno Rogue b7daf93f2e dual:: movement orbs are replaced with Speed 2019-09-12 22:50:03 +02:00
Zeno Rogue f16f5e0f7e dual:: better CLI arguments 2019-09-12 22:50:03 +02:00
Zeno Rogue 6467e38537 recallCell now remembers orientation (is cellwalker) 2019-09-12 22:50:03 +02:00
Zeno Rogue baa1871d01 Euclidean sky as a shape 2019-09-12 22:50:03 +02:00
Zeno Rogue 88d6c0d144 2D3D:: better stars 2019-09-12 22:50:03 +02:00
Zeno Rogue 42dd86f650 improved Euclidean sky color 2019-09-12 22:50:03 +02:00
Zeno Rogue ed2f452532 full 3D: a bit more monsters 2019-09-12 22:50:03 +02:00
Zeno Rogue 025ebd8542 items on boats are now colored as items 2019-09-12 22:50:03 +02:00
Zeno Rogue 867b3bf838 auto-adjust in switch_fpp 2019-09-12 22:50:03 +02:00
Zeno Rogue 65459fe584 missing multigame.cpp 2019-09-12 22:50:03 +02:00
Zeno Rogue d811ef85e7 larger sightrange limit in Euclidean 2019-09-12 22:50:03 +02:00
Zeno Rogue 8295251cdc multigame support, including dualmode 2019-09-12 22:50:03 +02:00
Zeno Rogue 587652e540 2D3D:: Euclidean skies 2019-09-12 22:50:03 +02:00
Zeno Rogue f2d8378d0c reverted change in zshift 2019-09-12 22:50:03 +02:00
Zeno Rogue 13a044154b sword:: accurate sword angles 2019-09-12 22:50:03 +02:00
Zeno Rogue 7a4ee025d8 3D:: reload floor textures 2019-09-12 22:50:03 +02:00
Zeno Rogue 96d4b3bba7 cgi set in other places 2019-09-12 22:50:03 +02:00
Zeno Rogue 5ab26ee6c3 rogueviz:: cgi 2019-09-12 22:50:03 +02:00
Zeno Rogue 2402dfeac9 Chaos variant of the Prairie 2019-09-12 22:50:03 +02:00
Zeno Rogue 2b1aebb9b4 chaosmode variants (CLI only for now) 2019-09-12 22:50:03 +02:00
Zeno Rogue 638274504c fixup removed some weird stuff 2019-09-12 22:50:03 +02:00
Zeno Rogue 29c8890c01 removed some trailing spaces 2019-09-12 22:50:03 +02:00
Zeno Rogue b6e303ec7d MAJOR refactoring: all geometry-dependent data (tessf, geom3::, shapes, hpc) are now contained in a structure 2019-09-12 22:50:03 +02:00
Zeno Rogue 9c5344289a big carpet 2019-09-12 22:50:03 +02:00
Zeno Rogue 542639bcc8 2D3D:: fixed a crash bug when drawing Palace ceiling 2019-09-12 22:50:03 +02:00
Zeno Rogue a8c494a96c R'Lyeh windows 2019-09-12 22:50:03 +02:00
Zeno Rogue 6c2ae951b8 2D3D:: better Rugs 2019-09-12 22:50:03 +02:00
Zeno Rogue dad8192a19 no more Orbs of the Bool in Orb Strategy Mode 2019-09-12 22:50:03 +02:00
Zeno Rogue 599d5d63e8 2D3D:: higher ceilings in the Palace 2019-09-12 22:50:03 +02:00
Zeno Rogue 67f3bd6a3c 2D3D:: palace gates 2019-09-12 22:50:03 +02:00
Zeno Rogue b8919c884c 2D3D:: fixed bird positioning 2019-09-12 22:50:03 +02:00
Zeno Rogue 1626e06599 3D:: fixed a crash on drawing Hyperbugs 2019-09-12 22:50:03 +02:00
Zeno Rogue 1918f7fb1b fixed 'mondir>=0' warning 2019-09-12 22:50:03 +02:00
Zeno Rogue 4ac7f9043b 3D:: Ratlings improved 2019-09-12 22:50:03 +02:00
Zeno Rogue 39a8e10df9 3D:: removed externs from 3d-models.cpp 2019-09-12 22:50:03 +02:00
Zeno Rogue f2fd4c12c2 fixed a crash with the -tparx option 2019-09-12 22:50:03 +02:00
Zeno Rogue 7498db911d removed double drawing of items in minimap 2019-09-12 22:50:02 +02:00
Zeno Rogue 5483ec8779 mini-map correct in all circumstances, including vertical movement or y/z rotation 2019-09-12 22:50:02 +02:00
Zeno Rogue 9630ca9663 fixed reading vernum from officials.data; also no more crashes/RACEWONs if that file does not exist 2019-09-12 22:50:02 +02:00
Zeno Rogue cc3b7df66d racing:: fixed the generation of Space Rocks track 2019-09-12 22:50:02 +02:00
Zeno Rogue 008cfc220d racing:: progress bar live in 3D 2019-09-12 22:50:02 +02:00
Zeno Rogue 6084172b5e 2D3D:: Space Rocks has no grid, but stars both down and up 2019-09-12 22:50:02 +02:00
Zeno Rogue 28f5b04b83 get_vernum() 2019-09-12 22:50:02 +02:00
Zeno Rogue 6012cbc8e2 racing: in SpaceRocks 2019-09-12 22:50:02 +02:00
Zeno Rogue 32626dc0c1 2D3D:: fixed grids 2019-09-12 22:50:02 +02:00
Zeno Rogue ba91bea71c charstyle format depending on vernum 2019-09-12 22:50:02 +02:00
Zeno Rogue 1b93ecd5a3 vernum uniformization 2019-09-12 22:50:02 +02:00
Zeno Rogue a6dd48cec0 net drawn in netgen 2019-09-12 22:50:02 +02:00
Zeno Rogue 15f87d151a applied the scan/fts/etc changes to RogueViz 2019-09-12 22:50:02 +02:00
Zeno Rogue 556c234997 added debugflag DF_LOG 2019-09-12 22:50:02 +02:00
Zeno Rogue 07e1db587c improved editNumber dialogs 2019-09-12 22:50:02 +02:00
Zeno Rogue 7d8f48d48b replaced some debug printfs with print hlog 2019-09-12 22:50:02 +02:00
Zeno Rogue f7d580fa9c replaced fts variants with a single fts 2019-09-12 22:50:02 +02:00
Zeno Rogue 8518f97ded text files are now read with scan(fhstream&...) functions and written with print(...) functions 2019-09-12 22:50:02 +02:00
Zeno Rogue ae100b1e72 removed some obsolete debug printfs 2019-09-12 22:50:02 +02:00
Zeno Rogue fa06306ef9 2D3D:: display Rose waves 2019-09-12 22:50:02 +02:00
Zeno Rogue 73a742119d 3D: Roses (items) did not appear 2019-09-12 22:50:02 +02:00
Zeno Rogue fbbe37a4c4 hall ceiling fixup: disable in other models 2019-09-12 22:50:02 +02:00
Zeno Rogue f08c33a8e2 3D:: added missing eyes and faces in drawMimic 2019-09-12 22:50:02 +02:00
Zeno Rogue 5436265311 2D3D:: Mirror Land ceiling draws halffloors correctly 2019-09-12 22:50:02 +02:00
Zeno Rogue f2d60f1647 sky fixup 2019-09-12 22:50:02 +02:00
Zeno Rogue 92a22a5e3f rug :: partially generalized to 3D (but no interesting results) 2019-09-12 22:50:02 +02:00
Zeno Rogue 0f783f86aa 2D3D: fixed item colors in minimap 2019-09-12 22:50:02 +02:00
Zeno Rogue c15e4152bf fixed the monster list of Ruined City 2019-09-12 22:50:02 +02:00
Zeno Rogue 8eb3fa65e2 2D3D:: skies and ceilings 2019-09-12 22:50:02 +02:00
Zeno Rogue 04a7e560a2 2D3D:: fixed Vineyard 2019-09-12 22:50:02 +02:00
Zeno Rogue 22da59782d no more bugs with some lands selected 2019-09-12 22:50:02 +02:00
Zeno Rogue a9f3b3d77c 11.0y 2019-09-12 22:50:02 +02:00
Zeno Rogue cfbb87ef91 2D3D:: in smart mode close cells are drawn (so that they appear on the radar) 2019-09-12 22:50:02 +02:00
Zeno Rogue 46443b3d6d drawcell_in_radar factored out 2019-09-12 22:50:02 +02:00
Zeno Rogue 0dff516a50 fix gadfly eye positioning 2019-09-12 22:50:02 +02:00
Zeno Rogue be945c3e5f 2D3D:: mouse 2019-09-12 22:50:02 +02:00
Zeno Rogue cdb85d5edf improved dog leg animation 2019-09-12 22:50:02 +02:00
Zeno Rogue fc7100bbf1 3D:: animation for all birds; fixed a crash on Butterfly drawing 2019-09-12 22:50:02 +02:00
Zeno Rogue dc92ff2eda 2D3D:: draw stun stars on the correct level 2019-09-12 22:50:02 +02:00
Zeno Rogue 63c843f30f character config now shows the character in all settings 2019-09-12 22:50:02 +02:00
Zeno Rogue 43e00d1b77 fixed Bull Horn shape 2019-09-12 22:50:02 +02:00
Zeno Rogue fc1256c896 fixed Cat Head model 2019-09-12 22:50:02 +02:00
Zeno Rogue 9221a532f9 guard against double-finishshape 2019-09-12 22:50:01 +02:00
Zeno Rogue 22837f9311 make_revolution_cut no longer leaves holes at the ends 2019-09-12 22:50:01 +02:00
Zeno Rogue ec621c64d2 11.0x 2019-09-12 22:50:01 +02:00
Zeno Rogue 16a38b7c1b 11.0w 2019-09-12 22:50:01 +02:00
Zeno Rogue a12b4f451e 2D3D:: Orb of Storms particles 2019-09-12 22:50:01 +02:00
Zeno Rogue d08cfe9f2f 2D3D:: larger items 2019-09-12 22:50:01 +02:00
Zeno Rogue c4469d9185 selecting a (horo)cyclic/equidistant-based land in the Experiments in Geometry while in standard geometry works now 2019-09-12 22:50:01 +02:00
Zeno Rogue eca59e79fa removed debug 2019-09-12 22:50:01 +02:00
Zeno Rogue d796635dfa draw: 3d models now should appear correctly 2019-09-12 22:50:01 +02:00
Zeno Rogue bfb0b3f070 quicker editing of 3d models 2019-09-12 22:50:01 +02:00
Zeno Rogue bfdb292d5f draw: fixed color changing 2019-09-12 22:50:01 +02:00
Zeno Rogue 89a4daaf53 draw: change grid position in 3D 2019-09-12 22:50:01 +02:00
Zeno Rogue 90b206dec3 draw: 'statue' displayed when editing statues; floors display 'pick something' in 3D 2019-09-12 22:50:01 +02:00
Zeno Rogue 995fea41b4 better point placing in 3D modeller 2019-09-12 22:50:01 +02:00
Zeno Rogue 22d5a2b578 3D: add items to radar even if user-shaped or hidden 2019-09-12 22:50:01 +02:00
Zeno Rogue 969cc76f6d fixed some issues with 'cells_generated_limit' 2019-09-12 22:50:01 +02:00
Zeno Rogue 295f0bc388 2D3D:: irregular maps 2019-09-12 22:50:01 +02:00
Zeno Rogue 323bd659c8 reverted reverse_transparent_walls 2019-09-12 22:50:01 +02:00
Zeno Rogue 53ecff6c00 Thumpers activated by Bulls are no longer permanent 2019-09-12 22:50:01 +02:00
Zeno Rogue 5fed2d84ee correct transparent wall ordering in S^3 [untested] 2019-09-12 22:50:01 +02:00
Zeno Rogue 923d94e463 fixed 'help for keyboard users' 2019-09-12 22:50:01 +02:00
Zeno Rogue 0c82bb64f0 added set_depthwrite when clearing depth in spherical 2019-09-12 22:50:01 +02:00
Zeno Rogue 5330491876 Terracotta Warrior statues flashed or shocked now count as kills 2019-09-12 22:50:01 +02:00
Zeno Rogue e4ebb66521 Terracotta Warriors now display time 2019-09-12 22:50:01 +02:00
Zeno Rogue 927592caa3 replaced cview() with actual_view_transform * View in ggmatrix to prevent infinite loop 2019-09-12 22:50:00 +02:00
Zeno Rogue 8c2b717223 monster orientation is now modelled in non-orientable geometries 2019-09-12 22:50:00 +02:00
Zeno Rogue 5353a82ebf Terracotta Warriors now turn into slimes when slimed 2019-09-12 22:50:00 +02:00
Zeno Rogue 66b73648d5 2D3D:: in elliptic, draw only the correct orientation 2019-09-12 22:50:00 +02:00
Zeno Rogue b9fa90cafb 2D3D:: better radar in Euclidean 2019-09-12 22:50:00 +02:00
Zeno Rogue dec0d191a8 2d3d:: better radar in sphere, also better sin/cos in general 2019-09-12 22:50:00 +02:00
Zeno Rogue 1769f65ddb 2D3D:: gravity particles 2019-09-12 22:50:00 +02:00
Zeno Rogue 6aeba2d906 fixed glDepthMask and thus shadows 2019-09-12 22:50:00 +02:00
Zeno Rogue 32c43f7dd9 fixed Burial Grounds unlock rule 2019-09-12 22:50:00 +02:00
Zeno Rogue b27b33052d {5,3} and {4,3} elliptic did not work 2019-09-12 22:50:00 +02:00
Zeno Rogue 3e7b29a188 3D:: fixed how elliptic geometry works 2019-09-12 22:50:00 +02:00
Zeno Rogue 6e92cba9fe 2D3D:: fixed a crash in Euclidean+Archimedean+2.5D 2019-09-12 22:50:00 +02:00
Zeno Rogue e2ef8932fa 3D:: disabled backwall optimization in sphere 2019-09-12 22:50:00 +02:00
Zeno Rogue a7172eba42 fixed potential crashes in GP? 2019-09-12 22:50:00 +02:00
Zeno Rogue 276c47d7ff 2D3D:: fixed radar in Euclidean 2019-09-12 22:50:00 +02:00
Zeno Rogue 24b66d6fd5 2D3D: fixed Goldberg 2019-09-12 22:50:00 +02:00
Zeno Rogue 94eaca0f42 11.0v 2019-09-12 22:50:00 +02:00
Zeno Rogue 79de14b649 fixed problems with Euclidean [move before] 2019-09-12 22:50:00 +02:00
Zeno Rogue e5d6278ab1 disabled set_depthwrite since it has weird results 2019-09-12 22:50:00 +02:00
Zeno Rogue 1573c0daef some more missing overrides 2019-09-12 22:50:00 +02:00
Zeno Rogue 148161c07d 3D:: fixes in racing::set_view() 2019-09-12 22:50:00 +02:00
Zeno Rogue 8206812413 3D:: draw_radar adjusted for non-hyperbolic geometries 2019-09-12 22:50:00 +02:00
Zeno Rogue 2d039c6e28 backward-compatible hread/hwrite of charstyle 2019-09-12 22:50:00 +02:00
Zeno Rogue 5c76509ded always clear depth, not depending on the current need 2019-09-12 22:50:00 +02:00
Zeno Rogue c0684ac3c8 3D:: eyepos was calculated in wrong position 2019-09-12 22:50:00 +02:00
Zeno Rogue d6b81ed816 do not display HiddenFromSight items on radar 2019-09-12 22:50:00 +02:00
Zeno Rogue 704393295f switch_fpp enables racing::player_relative 2019-09-12 22:50:00 +02:00
Zeno Rogue 2c7cf9704f disable 2D radar if vid.fixed_yz or straightDownSeek 2019-09-12 22:50:00 +02:00
Zeno Rogue b85f6e66b1 2d3d:: save always3 when saving map 2019-09-12 22:50:00 +02:00
Zeno Rogue 6e2cf3d2e7 fixed glDisable -> glDepthMask 2019-09-12 22:50:00 +02:00
Zeno Rogue d2c20fee22 redone spinEdge so that fixed_yz works in gravity lands 2019-09-12 22:50:00 +02:00
Zeno Rogue 6713726975 3D:: made eyes less weird 2019-09-12 22:50:00 +02:00
Zeno Rogue 47ffff2e1d fixed skulls' eyes in 2D 2019-09-12 22:50:00 +02:00
Zeno Rogue 3bad1aebae push cursor did not appear in the hardcore mode or while having targettable orbs 2019-09-12 22:50:00 +02:00
Zeno Rogue 1759b840d4 2D3D:: optimized wallshapes using orthogonal_move 2019-09-12 22:50:00 +02:00
Zeno Rogue 740cc5fbb6 2D3D:: wall shadows 2019-09-12 22:50:00 +02:00
Zeno Rogue 8858b137b5 3D:: fixed the radar in 3D to use the 3D version 2019-09-12 22:50:00 +02:00
Zeno Rogue 653e0cd442 3D:: walls on radar only in 2D3D 2019-09-12 22:50:00 +02:00
Zeno Rogue 866b3075a4 3D:: disabled backwall optimization in quotient spaces 2019-09-12 22:50:00 +02:00
Zeno Rogue f88de70a79 3D:: improvements to transparency: works correctly (e.g. in 2D HoM), including models 2019-09-12 22:50:00 +02:00
Zeno Rogue 21f801d691 Hypersian Rug forbidden when using 3D engine 2019-09-12 22:50:00 +02:00
Zeno Rogue 175c061ab4 2d3d:: shadows 2019-09-12 22:50:00 +02:00
Zeno Rogue b63f8a3c4d 3D:: disabled the Thumper animation 2019-09-12 22:50:00 +02:00
Zeno Rogue df3e21b310 debug cleanup 2019-09-12 22:50:00 +02:00
Zeno Rogue 402b6aa0ad improved armor models; head lower; configurable human eye color 2019-09-12 22:49:59 +02:00
Zeno Rogue 5d9ff8b625 3d:: redone ratling head 2019-09-12 22:49:59 +02:00
Zeno Rogue de0f4d0685 3d:: Princess hair darker to make it stand out better in 3d 2019-09-12 22:49:59 +02:00
Zeno Rogue 5c65ba9a7f 2d3d:: ASCII mini-map replaces the radar 2019-09-12 22:49:58 +02:00
Zeno Rogue dea2073714 2d3d:: smaller cones for fires/bonfires/buoys/thumpers 2019-09-12 22:49:58 +02:00
Zeno Rogue 33e42d9ed6 2d3d:: rat tail level 2019-09-12 22:49:58 +02:00
Zeno Rogue f3e0e099c1 3d:: humanoid eyes (except the player) 2019-09-12 22:49:57 +02:00
Zeno Rogue a4e3289a98 2d3d:: correct bird levels 2019-09-12 22:49:57 +02:00
Zeno Rogue 10fea51f14 stricter conditions on start animations 2019-09-12 22:49:56 +02:00
Zeno Rogue 9a21401b9c item/monster icons in 3d 2019-09-12 22:49:56 +02:00
Zeno Rogue 79f36c6f49 2d3d:: fixed displaying other selves in shmup 2019-09-12 22:49:56 +02:00
Zeno Rogue 221ba3f01d racing:: disabled rotation with mouse in 2D3D 2019-09-12 22:49:55 +02:00
Zeno Rogue 7669633fbf no godir change if no movement (just in case) 2019-09-12 22:49:55 +02:00
Zeno Rogue eec99b96df 2d3d:: adjusted racing 2019-09-12 22:49:54 +02:00
Zeno Rogue 2744973b8b fixed radar 2019-09-12 22:49:53 +02:00
Zeno Rogue d994c92ab6 fixed centering in racing 2019-09-12 22:49:53 +02:00
Zeno Rogue 0c3b26c997 2d3d:: gridline used by linepatterns 2019-09-12 22:49:52 +02:00
Zeno Rogue 53e8006e75 2D3D:: fixed leg movement 2019-09-12 22:49:52 +02:00
Zeno Rogue 44194bd354 centering/TPP/camera cleanup 2019-09-12 22:49:50 +02:00
Zeno Rogue 5fbdeaa89d 2d3d:: inertia movement now takes rotation into account 2019-09-12 22:49:48 +02:00
Zeno Rogue d3f10e8e30 2d3d:: in_smart_range uses vid.smart_range_detail, not vid.smart_range_detail3 which is less applicable 2019-09-12 22:49:48 +02:00
Zeno Rogue 26a10b015a 2d3d:: space rocks no longer try to 'randomly spin' into space 2019-09-12 22:49:47 +02:00
Zeno Rogue 6ba308cac5 2d3d:: monster at's are now fixed to 2D in all geometries (including virtual rebasing) 2019-09-12 22:49:47 +02:00
Zeno Rogue d5dc3f2176 refactored grid, and made it display nicely in 2d3d 2019-09-12 22:49:46 +02:00
Zeno Rogue bb63fcdcda refactored first_cell_to_draw so that it is changed in one place 2019-09-12 22:49:46 +02:00
Zeno Rogue c1d002be6c 3d: set the default sight ranges for every 3D geometry so that the framerate on laptop is around 60 fps 2019-09-12 22:49:46 +02:00
Zeno Rogue 216cd868af 3d optimization:: do not draw back walls (not only in horo) 2019-09-12 22:49:45 +02:00
Zeno Rogue 029b0e9d6c 3d: fixed transparent walls between lands 2019-09-12 22:49:45 +02:00
Zeno Rogue 8388a448e7 3d:: an option to limit cell generation 2019-09-12 22:49:45 +02:00
Zeno Rogue 16c4108a8d 3d:: fixed transparent walls 2019-09-12 22:49:44 +02:00
Zeno Rogue 7ce12ef63b factored 'addradar' function 2019-09-12 22:49:44 +02:00
Zeno Rogue 3b8e541a1a 3d:: removed debug from adjust_eye 2019-09-12 22:49:44 +02:00
Zeno Rogue 063e4e35c2 no more need_reset_geometry after make_floor_textures -- it will be done anyway 2019-09-12 22:49:43 +02:00
Zeno Rogue 22ce25c396 export ptick 2019-09-12 22:49:43 +02:00
Zeno Rogue 889bf3448c 2d3d:: no more mirror markers 2019-09-12 22:49:42 +02:00
Zeno Rogue 40670dc47f 2d3d:: fixed placement of skeletal feet 2019-09-12 22:49:42 +02:00
Zeno Rogue 534663e663 3d:: using models not walls for worms 2019-09-12 22:49:41 +02:00
Zeno Rogue 45b7188869 2d3d:: sword markers on the floor level 2019-09-12 22:49:41 +02:00
Zeno Rogue 6fe6db3d48 3d:: fixed cellgfxdist in 3D 2019-09-12 22:49:41 +02:00
Zeno Rogue c90eeccbbe fixed random_spin() (wrong multiplication order) 2019-09-12 22:49:40 +02:00
Zeno Rogue 00b601b1de 2d3d:: no more matrix/unmappable warnings 2019-09-12 22:49:22 +02:00
Zeno Rogue 73f53b93a8 3d:: correct eyes 2019-09-12 22:49:05 +02:00
Zeno Rogue 61a2c1a69e 2d3d:: slime model 2019-09-12 22:48:59 +02:00
Zeno Rogue 51030e87aa 3d:: do not draw cells outside of view 2019-09-12 22:48:57 +02:00
Zeno Rogue e1d30d1a2f 3d:: do not hide that many items close to cursor 2019-09-12 22:48:56 +02:00
Zeno Rogue 798f4b54f7 3d:: nicer effects for orbs 2019-09-12 22:48:54 +02:00
Zeno Rogue 2c98f9dcf6 3d:: correct icosahedron 2019-09-12 22:48:36 +02:00
Zeno Rogue bd449f5e0e 2d3d:: fixed armor 2019-09-12 22:48:18 +02:00
Zeno Rogue 0dc552bac4 2d3d:: remove 3D options from the menu if not available 2019-09-12 22:43:02 +02:00
Zeno Rogue eb822f195b 11.0u and the fix to ocean/rrv 2019-09-12 22:43:02 +02:00
Zeno Rogue a4fdaac4ab fixup to chasmifyPoly 2019-09-12 22:43:02 +02:00
Zeno Rogue 152ca6aacf sanity checked the matrices in swapmatrix 2019-09-12 22:43:02 +02:00
Zeno Rogue d9754ec57c added some missing 'override' 2019-09-12 22:43:02 +02:00
Zeno Rogue c435afbe59 11.0t 2019-09-12 22:43:02 +02:00
Zeno Rogue 85aa80f395 flushes to prevent distorted graphics in web version 2019-09-12 22:43:02 +02:00
Zeno Rogue d07e6eb386 2d3d:: missing guards 2019-09-12 22:43:02 +02:00
Zeno Rogue 70cd6c0669 2d3d:: fan fix 2019-09-12 22:43:02 +02:00
Zeno Rogue ec3599ed71 3d:: bugs 2019-09-12 22:43:02 +02:00
Zeno Rogue 1e64d4e220 2d3d:: no sidewalls if no qfi.fshape 2019-09-12 22:43:02 +02:00
Zeno Rogue b1663671bd 2d3d:: fixed the placement of mine markers, Zebra, Tortoise, statues, rose, and Magic Swords 2019-09-12 22:43:02 +02:00
Zeno Rogue dc036e7c7b 2d3d:: seeps display 2019-09-12 22:43:02 +02:00
Zeno Rogue b712bbb444 2d3d:: disabled special floor graphics for Emerald Mine 2019-09-12 22:43:02 +02:00
Zeno Rogue 8b018dd59d 2d3d:: graphics for branches, barrels, and firetraps 2019-09-12 22:43:02 +02:00
Zeno Rogue be032e0f03 2d3d:: trap markers 2019-09-12 22:43:02 +02:00
Zeno Rogue 5de099e921 2d3d:: fan graphics 2019-09-12 22:43:02 +02:00
Zeno Rogue 8046de11bd 3d:: disabled shSwitchDisks in 3D 2019-09-12 22:43:02 +02:00
Zeno Rogue e20868dd19 2d3d:: fixed walls next to trees 2019-09-12 22:43:02 +02:00
Zeno Rogue 684480ccaf 2d3d:: colored rose scent 2019-09-12 22:43:02 +02:00
Zeno Rogue f2b0f33496 2d3d:: fixed Field Pattern 2019-09-12 22:43:02 +02:00
Zeno Rogue f491e3ce99 no more hiding the boat under the player 2019-09-12 22:43:02 +02:00
Zeno Rogue 9dae2f4438 2d3d:: proper placement of Big Carpet, Reptiles and Trihepta Special 2019-09-12 22:43:02 +02:00
Zeno Rogue 14e9ebec57 cones for bonfires, fires, thumpers, and sea buoys 2019-09-12 22:43:02 +02:00
Zeno Rogue b6c8727e1f 2d3d:: boats 2019-09-12 22:43:02 +02:00
Zeno Rogue dbb8857a39 2d3d:: cone graphics for trees etc. 2019-09-12 22:43:02 +02:00
Zeno Rogue 13f3f49db9 2d3d:: fixed the placement of monsters (including PC view) on rock levels etc. 2019-09-12 22:43:02 +02:00
Zeno Rogue 563303acca 2d3d:: fixed cloaks 2019-09-12 22:43:02 +02:00
Zeno Rogue 41e868a795 2d3d:: fixed levels of various stuff 2019-09-12 22:43:02 +02:00
Zeno Rogue d3b2d7f371 2d3d:: fixed INFDEEP on sphere 2019-09-12 22:43:02 +02:00
Zeno Rogue 8bcf1c2b74 shark position 2019-09-12 22:43:02 +02:00
Zeno Rogue c297bbf52a 2d3d:: compass 2019-09-12 22:43:02 +02:00
Zeno Rogue 7255cb4e0d 2d3d:: worm graphics 2019-09-12 22:43:02 +02:00
Zeno Rogue ef4d673196 2d3d:: precise halfmirrors 2019-09-12 22:43:02 +02:00
Zeno Rogue 01207a0e87 2d3d:: fixed DIM to WDIM in landgen.cpp 2019-09-12 22:43:02 +02:00
Zeno Rogue 0ecd8a058a 2d3d:: fixed crash when setting subprio 2019-09-12 22:43:01 +02:00
Zeno Rogue 7abbd6c07a 2d3d:: added missing normalize and memory fix to chasmifyPoly 2019-09-12 22:43:01 +02:00
Zeno Rogue 360f95ce43 2d3d:: adjusted shmup to reversed Z 2019-09-12 22:43:01 +02:00
Zeno Rogue 55d7678c99 2D3D:: Hall of Mirrors 2019-09-12 22:43:01 +02:00
Zeno Rogue f652e6139c 2D3D:: fixed Y/Z orientation 2019-09-12 22:43:01 +02:00
Zeno Rogue fb6a0829a2 2d3d:: switch_fpp() now sets good defaults in spherical 2019-09-12 22:43:01 +02:00
Zeno Rogue 2736c89563 2d3d:: fog effect is now configurable 2019-09-12 22:43:01 +02:00
Zeno Rogue da49e6c8de 2d3d:: textures on sidewalls 2019-09-12 22:43:01 +02:00
Zeno Rogue d89fb49e13 refactured 'texture_order' as a separate function 2019-09-12 22:43:01 +02:00
Zeno Rogue 80ce15ded9 3d menu:: no more incorrect errors; change camera position right away in 2d3d 2019-09-12 22:43:01 +02:00
Zeno Rogue d1846f9325 better cell-cursors; bad cell-cursors removed 2019-09-12 22:43:01 +02:00
Zeno Rogue 9c1efae2f6 2d3d:: mouse reading 2019-09-12 22:43:01 +02:00
Zeno Rogue 0a4ccb2b5c 2d3d:: no more player hiding if camera > 0 2019-09-12 22:43:01 +02:00
Zeno Rogue 2acfd99d17 refactored switch_* functions (fpp/tpp/always3) 2019-09-12 22:43:01 +02:00
Zeno Rogue 5ab7249afd horopoint cleanup in 2D 2019-09-12 22:43:01 +02:00
Zeno Rogue 9946ceb877 fixed circle drawing 2019-09-12 22:43:01 +02:00
Zeno Rogue 87c436b8cb 2d3d:: fixed some 3d model elements 2019-09-12 22:43:01 +02:00
Zeno Rogue 757a154399 2d3d:: shapes such as shFloor are now full 2019-09-12 22:43:01 +02:00
Zeno Rogue 450739b133 2D3D: switch without changing the display 2019-09-12 22:43:01 +02:00
Zeno Rogue f675c08e7e fixed eyes a bit 2019-09-12 22:43:01 +02:00
Zeno Rogue db51c896ae 2d3d:: shmup 2019-09-12 22:43:01 +02:00
Zeno Rogue 6a7c1438eb 2D3D:: Archimedean no longer crashes after changing 2019-09-12 22:43:01 +02:00
Zeno Rogue 2d79243ca2 2D3D:: 3D particles 2019-09-12 22:43:01 +02:00
Zeno Rogue 4175c61486 fixed pushdown 2019-09-12 22:43:01 +02:00
Zeno Rogue ca54c5cdfd fixed INFDEEP 2019-09-12 22:43:01 +02:00
Zeno Rogue aa8d4965e4 some more DIM->WDIM/GDIM fixes 2019-09-12 22:43:01 +02:00
Zeno Rogue f8247073e7 2D-as-3D works in all geometries 2019-09-12 22:43:01 +02:00
Zeno Rogue 1c4d86e0e9 3D graphics in 2D (first commit) 2019-09-12 22:43:01 +02:00
Zeno Rogue ea768b634b fixed Mutant Ivies appearing via Orb of Change 2019-09-12 22:43:01 +02:00
Zeno Rogue 492a4dce8d set the current settings for the online version 2019-09-12 22:43:01 +02:00
Zeno Rogue 5804387283 animations:: env_shmup setting; also centers on the player if playermoved, shmup, and in inertia zone 2019-09-12 22:43:01 +02:00
Zeno Rogue 70d4932c5d rogueviz:: removed some junk from rogueviz-graph.cpp 2019-09-12 22:43:01 +02:00
Zeno Rogue 29a170f423 fixed wrong declaration order with MINIMIZE_GL_CALLS 2019-09-12 22:43:01 +02:00
Zeno Rogue ee8b442300 added missing 'override' markers 2019-09-12 22:43:01 +02:00
Zeno Rogue 3b5733c935 enabled antialiasing in web 2019-09-12 22:43:01 +02:00
Zeno Rogue c8e950cd40 added some missing CAP_ and MAXMDIM guards 2019-09-12 22:43:01 +02:00
Zeno Rogue 044298d0bd fixed missing fix_distances 2019-09-12 22:43:01 +02:00
Zeno Rogue 64671ec83e no more createAlternateMap in quotient geometries 2019-09-12 22:43:01 +02:00
Zeno Rogue dfbbffc7ca CLI option -animrecordf 2019-09-12 22:43:01 +02:00
Zeno Rogue 6253c6c3e3 redone gravity in shmup 2019-09-12 22:43:01 +02:00
Zeno Rogue e3023ba1f8 fixed the sky display in Yendorian 2019-09-12 22:43:01 +02:00
Zeno Rogue c3e8e513a9 fixup degree 2019-09-12 22:43:01 +02:00
Zeno Rogue e4b4b052ed 3d:: CLI option -sloppy 2019-09-12 22:43:01 +02:00
Zeno Rogue 282b3d79a2 fixed binary tiling 2019-09-12 22:43:01 +02:00
Zeno Rogue 0386f4179c whatever cont. 2019-09-12 22:43:01 +02:00
Zeno Rogue 531596f0e7 fixed instant centering in shmup 2019-09-12 22:43:00 +02:00
Zeno Rogue a0cf13ac97 better whatever editor 2019-09-12 22:43:00 +02:00
Zeno Rogue 6832f86533 fixup: wall-quality was not set to default 1 2019-09-12 22:43:00 +02:00
Zeno Rogue 4b7cba78ee replaced the sm::A3 flags with newer techniques (also fixes help in 3D config not appearing) 2019-09-12 22:43:00 +02:00
Zeno Rogue bd39bf970b 3d:: floor textures are no longer sometimes generated darkened 2019-09-12 22:43:00 +02:00
Zeno Rogue b10b6386f3 3d:: TEXTURE_STEP_3D is now configurable 2019-09-12 22:43:00 +02:00
Zeno Rogue 89a900958b 3d:: sloppy range checking option 2019-09-12 22:43:00 +02:00
Zeno Rogue 94ccddb873 eqmatrix now actually takes its 'eps' argument into account 2019-09-12 22:43:00 +02:00
Zeno Rogue 156f56feb0 fixed drawing the sphere in natural perspective 2019-09-12 22:43:00 +02:00
Zeno Rogue 78c4b9005f fixup quickmouse is bool 2019-09-12 22:43:00 +02:00
Zeno Rogue 6e26508a77 replaced some instances of double to ld, so that everything compiles when ld is redefined to float 2019-09-12 22:43:00 +02:00
Zeno Rogue aefea03ce1 3d:: corner_bonus 2019-09-12 22:43:00 +02:00
Zeno Rogue 3da6090320 dialog:: addBoolItem_action, addBoolItem_action_neg, addBoolItem_choice used when applicable 2019-09-12 22:43:00 +02:00
Zeno Rogue 6fcb42d9d7 rug:: better live changing of model_distance and modelscale 2019-09-12 22:43:00 +02:00
Zeno Rogue 0c20fdac3b rug:: live changing of the texture size 2019-09-12 22:43:00 +02:00
Zeno Rogue 4791fd018e dialog:: addBoolItem_action 2019-09-12 22:43:00 +02:00
Zeno Rogue 7ce880b680 11.0s 2019-09-12 22:43:00 +02:00
Zeno Rogue 3a8b537068 PL/CZ translation fix 2019-09-12 22:43:00 +02:00
Zeno Rogue d4ce6c36aa horo_distance used in virtualRebase 2019-09-12 22:43:00 +02:00
Zeno Rogue 8ac431a7f1 3d:: fixed a crashbug 2019-09-12 22:43:00 +02:00
Zeno Rogue 839c369709 10.3r in changelog 2019-09-12 22:43:00 +02:00
Zeno Rogue cec8190f37 adjustments for older g++ 2019-09-12 22:43:00 +02:00
Zeno Rogue 4a5c9fe5cf disabled scrolling in Haunted Woods 2019-09-12 22:43:00 +02:00
Zeno Rogue 9fdaa8840c moved shmup::loadConfig to legacy too 2019-09-12 22:43:00 +02:00
Zeno Rogue 2dc31594c5 Zebra valid in Zebra quotient 2019-09-12 22:43:00 +02:00
Zeno Rogue 22c88d0960 moved loadOldConfig to legacy.cpp and disabled it 2019-09-12 22:43:00 +02:00
Zeno Rogue 3ac1e45130 backward compatibility after changing NODIR 2019-09-12 22:43:00 +02:00
Zeno Rogue ea74604f34 hyper.h: some extra comments 2019-09-12 22:43:00 +02:00
Zeno Rogue c98f58a672 removed eurad as it was the same as crossf 2019-09-12 22:43:00 +02:00
Zeno Rogue cb164d92c2 added some comments to hyper.h 2019-09-12 22:43:00 +02:00
Zeno Rogue 5d77c86658 scrdist_text removed 2019-09-12 22:43:00 +02:00
Zeno Rogue 5895540ae9 removed mdText as it was equivalent to mdUnchanged 2019-09-12 22:43:00 +02:00
Zeno Rogue 85f4c57202 Orb of Winter no longer useless in Volcanic 2019-09-12 22:43:00 +02:00
Zeno Rogue cf4829634f quitsaves() depends on CAP_SAVE, not havesave 2019-09-12 22:43:00 +02:00
Zeno Rogue e22602e343 rug:: gethyper no longer finds invalid triangles 2019-09-12 22:43:00 +02:00
Zeno Rogue 2710694df7 unused applyspin function removed 2019-09-12 22:43:00 +02:00
Zeno Rogue f65c8d5dc8 fixed crashes (?) after moving to 3D and back 2019-09-12 22:43:00 +02:00
Zeno Rogue c19ffb3597 fixes to projection streamlining 2019-09-12 22:43:00 +02:00
Zeno Rogue be2ac7654a increased MAX_EDGE 2019-09-12 22:43:00 +02:00
Zeno Rogue e14ac8b321 no more weird heat in archimedean 2019-09-12 22:43:00 +02:00
Zeno Rogue c20a0cb59e 3d:: wallradar 2019-09-12 22:43:00 +02:00
Zeno Rogue 068f825f1e fixed distlimit in Archimedean 2019-09-12 22:43:00 +02:00
Zeno Rogue fac176bb15 geometry: replaced binary search with cosine rule (in some places) 2019-09-12 22:43:00 +02:00
Zeno Rogue e28373448d missing functions acos_auto and edge_of_triangle_with_angles 2019-09-12 22:43:00 +02:00
Zeno Rogue f98448464a renamed shmup::safety to delayed_safety to prevent confusion 2019-09-12 22:43:00 +02:00
Zeno Rogue 2c97b4f2aa rogueviz:: CLI option -collatz-go 2019-09-12 22:43:00 +02:00
Zeno Rogue a11e602a9c fixup: reset camera_angle to 0 in HUD 2019-09-12 22:43:00 +02:00
Zeno Rogue 29ea282beb commandline option -gen3 2019-09-12 22:43:00 +02:00
Zeno Rogue 27ae6b3cd9 options -crot and -playerpath 2019-09-12 22:43:00 +02:00
Zeno Rogue 3c9e4db46e major cleanup of projection setting 2019-09-12 22:43:00 +02:00
Zeno Rogue acf7883393 rogueviz:: fat_edges 2019-09-12 22:43:00 +02:00
Zeno Rogue 4bc4f80bfc rogueviz:: rainbow color specification 2019-09-12 22:43:00 +02:00
Zeno Rogue c40d7753d0 fixed arg shifting 2019-09-12 22:43:00 +02:00
Zeno Rogue 38e1dc6a7a rogueviz:: fixed the type in perturb to color_t 2019-09-12 22:43:00 +02:00
Zeno Rogue 884ab0cd5f 3d:: 3d balls 2019-09-12 22:43:00 +02:00
Zeno Rogue c10939fac6 rogueviz: missing index 2019-09-12 22:43:00 +02:00
Zeno Rogue fcd9fbbcd2 rogueviz:: fixed label positioning in 3D 2019-09-12 22:43:00 +02:00
Zeno Rogue edbf08b80c disabled color perturb if color not applicable 2019-09-12 22:43:00 +02:00
Zeno Rogue 49877fbfc9 arg::nomore(); fixes in collatz3 2019-09-12 22:43:00 +02:00
Zeno Rogue 98381f5526 animations:: frame info in animation recorder 2019-09-12 22:43:00 +02:00
Zeno Rogue 8b0c0f58c4 animated 3D birds 2019-09-12 22:43:00 +02:00
Zeno Rogue 7ed3ee6098 rogueviz:: collatz:: 3D trees 2019-09-12 22:43:00 +02:00
Zeno Rogue 5965a622b5 rogueviz:: dftcolor is now colorpair, not int 2019-09-12 22:43:00 +02:00
Zeno Rogue 1a744ffc6b rogueviz:: more vertex shapes, and improved in 3D 2019-09-12 22:43:00 +02:00
Zeno Rogue 4a3bf2b9f8 rogueviz::flocking:: check_range CLI configuragle 2019-09-12 22:43:00 +02:00
Zeno Rogue fd03c60a85 rogueviz::flocking:: changing precision works, and CLI configurable 2019-09-12 22:42:59 +02:00
Zeno Rogue 48d6523672 rogueviz::flocking:: follow without gmatrix 2019-09-12 22:42:59 +02:00
Zeno Rogue 7548e4903b replaced atan2 and spin(alpha) by rspintox -- works in 3D now! 2019-09-12 22:42:59 +02:00
Zeno Rogue 936e7fc069 rogueviz::flocking:: flock shape can now be changed via command line 2019-09-12 22:42:59 +02:00
Zeno Rogue 514fee2176 rogueviz::flocking:: multithread support 2019-09-12 22:42:59 +02:00
Zeno Rogue 3e5fe01597 rogueviz::flocking:: no more using pat 2019-09-12 22:42:59 +02:00
Zeno Rogue 0509c82b54 rogueviz::flocking:: do not try large steps even if delta way too big 2019-09-12 22:42:59 +02:00
Zeno Rogue 2c40216e06 revolution_cut for tiny shapes 2019-09-12 22:42:59 +02:00
Zeno Rogue 596b4ce786 3d:: converting the old vector graphics into 3D models 2019-09-12 22:42:59 +02:00
Zeno Rogue cb2e870a99 3d:: removed some unused debug messages 2019-09-12 22:42:59 +02:00
Zeno Rogue d9c6ae14ae reduced the default vid.yshift in third person perspective 2019-09-12 22:42:59 +02:00
Zeno Rogue 81289b3216 set alt to NULL just in case 2019-09-12 22:42:59 +02:00
Zeno Rogue e1227bcb6e an option for hpcshapes to contain texture information 2019-09-12 22:42:59 +02:00
Zeno Rogue 10a82c544b 3d:: make monster facing correct, based on FACEUP/FACESIDE 2019-09-12 22:42:59 +02:00
Zeno Rogue b07a5a5c69 removed transparency from monsters in 3D 2019-09-12 22:42:59 +02:00
Zeno Rogue dd9f7d0275 3d:: rebalanced Asteroids, fixed shots not being displayed at their actual locations 2019-09-12 22:42:59 +02:00
Zeno Rogue ddf7f6100a fixed reading/writing hyperpoints to use the actual number of dimensions 2019-09-12 22:42:59 +02:00
Zeno Rogue a07afdc0a7 added HEAD3 placement 2019-09-12 22:42:59 +02:00
Zeno Rogue c8d2772607 fixed -M and -viewall cheats 2019-09-12 22:42:59 +02:00
Zeno Rogue 2dd5c66d7f specified CF_FACE_UP for humanoids and similar, and CF_FACE_SIDE for quadrupeds and similar 2019-09-12 22:42:59 +02:00
Zeno Rogue e95fc386e1 fixed crashes in Camelot 2019-09-12 22:42:59 +02:00
Zeno Rogue 322d2bff86 described E3 parameters 2019-09-12 22:42:59 +02:00
Zeno Rogue f507b7cf55 fixed Orb of the Warp destroyed while refactoring 2019-09-12 22:42:59 +02:00
Zeno Rogue 5b87088ade fixed a bug in twisted non-cube 2019-09-12 22:42:59 +02:00
Zeno Rogue 21985e4317 twisttest 2019-09-12 22:42:59 +02:00
Zeno Rogue d00d04e313 better flip check 2019-09-12 22:42:59 +02:00
Zeno Rogue 40a28b6f08 yet another fix. rhombic not work 2019-09-12 22:42:59 +02:00
Zeno Rogue 1cc26a7337 twisting fix 2019-09-12 22:42:59 +02:00
Zeno Rogue c0145c0d9c 3d:: Euclidean tori 2019-09-12 22:42:59 +02:00
Zeno Rogue 2e1f63e086 11.0q 2019-09-12 22:42:59 +02:00
Zeno Rogue ca57a38ddd 3d:: the option to restrict generation no longer produces weird elements 2019-09-12 22:42:59 +02:00
Zeno Rogue ddf43101b2 some flavor messages no longer display in special modes if they are inappropriate for them 2019-09-12 22:42:59 +02:00
Zeno Rogue 562f43dc1f throw exception on rspin in 3D 2019-09-12 22:42:59 +02:00
Zeno Rogue d00b08c4f3 fixed the (commented) Lapis Lazuli 2019-09-12 22:42:59 +02:00
Zeno Rogue d7406af1df more triangles shown in 3D textures 2019-09-12 22:42:59 +02:00
Zeno Rogue 1820919095 draw editor displays all coordinates in 3D 2019-09-12 22:42:59 +02:00
Zeno Rogue 8df0a0144b 3d:: fixed the wrong texturing in hororec 2019-09-12 22:42:59 +02:00
Zeno Rogue 418fa37dd8 3d:: texture:: remap single-type textures to 3D geometries 2019-09-12 22:42:59 +02:00
Zeno Rogue f8a7cf8c74 3d:: horosphere tilings now save/load correctly 2019-09-12 22:42:59 +02:00
Zeno Rogue 62c2f0f666 using an Orb of Change on a Red Raider now also changes the other Red Raider 2019-09-12 22:42:59 +02:00
Zeno Rogue fc06e999c8 3d:: fixed a bug in celldistance for Rhombic 2019-09-12 22:42:59 +02:00
Zeno Rogue 7c59f572ca 3d:: in Euclidean, lands are generated just like in Crystal 2019-09-12 22:42:59 +02:00
Zeno Rogue c1373e64f7 fixed a bug with animateReplacement in crystal 2019-09-12 22:42:59 +02:00
Zeno Rogue 53c7e2869f 3d:: crystal:: transform: change the model 2019-09-12 22:42:59 +02:00
Zeno Rogue 59efce3a69 typos fixed 2019-09-12 22:42:59 +02:00
Zeno Rogue 96016be431 marked Princess Quest as not-in-shmup and not-in-multi 2019-09-12 22:42:59 +02:00
Zeno Rogue f90e1001e3 refactored native and landUnlocked into content.cpp 2019-09-12 22:42:59 +02:00
Zeno Rogue cffb895c72 fixed generation in spherical minefield 2019-09-12 22:42:59 +02:00
Zeno Rogue 14b32ced68 auto-charged teleport in bounded minefield 2019-09-12 22:42:59 +02:00
Zeno Rogue 5e9a54129b Orb of Phasing forbidden in the Princess Challenge 2019-09-12 22:42:59 +02:00
Zeno Rogue 8e7e1bbb3f fixed the code for 434 2019-09-12 22:42:59 +02:00
Zeno Rogue 039118425c 3D:: alternate minefield adjacency rule 2019-09-12 22:42:59 +02:00
Zeno Rogue b88ef69f59 fixed a freeze in some Archimedean geometries 2019-09-12 22:42:59 +02:00
Zeno Rogue 9b7ad345a9 mine adjacency rule can be changed (in 2D for now) 2019-09-12 22:42:59 +02:00
Zeno Rogue 8a53258361 fixed mines when more than 7 adjacent mines 2019-09-12 22:42:59 +02:00
Zeno Rogue 52305eb830 fixed thumper-to-water/chasm counters 2019-09-12 22:42:59 +02:00
Zeno Rogue e762fcab2e fixed fire in Brownian 2019-09-12 22:42:59 +02:00
Zeno Rogue 6b82757016 save Narcissist and Mirror Spirit kills 2019-09-12 22:42:59 +02:00
Zeno Rogue ccb970f6fe texture:: all-cells-different-textures are now considered correctly mapped if geometry has not been changed 2019-09-12 22:42:59 +02:00
Zeno Rogue 84af8f2b32 added some missing conformal::configure() 2019-09-12 22:42:59 +02:00
Zeno Rogue 31164e12d6 removed Lost Mountain and Brownian Islands from the chaos mode 2019-09-12 22:42:59 +02:00
Zeno Rogue 0f0b491939 fixed invalid bitruncation in torus geometries 2019-09-12 22:42:59 +02:00
Zeno Rogue b74c2369a0 'shot' value to change shots 2019-09-12 22:42:59 +02:00
Zeno Rogue 5fb9578000 3d:: draw:: fixed z-level changing 2019-09-12 22:42:58 +02:00
Zeno Rogue fc1e33f245 Space Rocks are now accessible 2019-09-12 22:42:58 +02:00
Zeno Rogue 36b4b60d46 3d::draw:: added shading 2019-09-12 22:42:58 +02:00
Zeno Rogue cc5f381d20 3d:: draw:: draw items without rotation, draw them in current location 2019-09-12 22:42:58 +02:00
Zeno Rogue b8ad42a947 gradient background in floor texture 2019-09-12 22:42:58 +02:00
Zeno Rogue a528f56a98 comma actually can be entered in number editor 2019-09-12 22:42:58 +02:00
Zeno Rogue 1a63872a44 11.0p 2019-09-12 22:42:58 +02:00
Zeno Rogue efb72afb87 fixed Slime display 2019-09-12 22:42:58 +02:00
Zeno Rogue 7d9d3ced50 option -viewall for testing 2019-09-12 22:42:58 +02:00
Zeno Rogue 96faa8ed0e typo fix 2019-09-12 22:42:58 +02:00
Zeno Rogue dbcfc2e978 Minefield in bounded marked as specially_geo3 2019-09-12 22:42:58 +02:00
Zeno Rogue a08cf0c8fd no more model boundaries in 3D 2019-09-12 22:42:58 +02:00
Zeno Rogue 2cfb35c671 more fixes 2019-09-12 22:42:58 +02:00
Zeno Rogue 2d5c19a5b5 translation updates/fixes, degree symbol displayed for angles configured in models 2019-09-12 22:42:58 +02:00
Zeno Rogue 743af3217d the magic of Orb of Yendor makes them immobile using boats 2019-09-12 22:42:58 +02:00
Zeno Rogue 463e874520 fixed Friendly Ivy attacking non-attackable monsters 2019-09-12 22:42:58 +02:00
Zeno Rogue 83d8025133 replaced [8] with [MAX_EDGE] 2019-09-12 22:42:58 +02:00
Zeno Rogue e4ad1c07a3 removed Witch and Evil Golem from the polymorph list; replaced them with Falling Dog and Mutant 2019-09-12 22:42:58 +02:00
Zeno Rogue 6a8d2b9046 Orb of Freedom takes Rose scent into account 2019-09-12 22:42:58 +02:00
Zeno Rogue beeeb7c23b added some people to the credits 2019-09-12 22:42:58 +02:00
Zeno Rogue 05ee76015f a better message on illegal moves in Brown Island 2019-09-12 22:42:58 +02:00
Zeno Rogue f5d08e34fd bulls rage when pushed 2019-09-12 22:42:58 +02:00
Zeno Rogue 0f99334279 Shadows are now blow-immune 2019-09-12 22:42:58 +02:00
Zeno Rogue a44e4281de fixup missing current_proj_name 2019-09-12 22:42:58 +02:00
Zeno Rogue ac302500e0 fixup parameter order in 'number of mines' 2019-09-12 22:42:58 +02:00
Zeno Rogue 0929128171 no more Euler warning in 3D 2019-09-12 22:42:58 +02:00
Zeno Rogue b24c9d88e8 text fixes 2019-09-12 22:42:58 +02:00
Zeno Rogue 758d6cf340 bugfix in 8-cell naming 2019-09-12 22:42:58 +02:00
Zeno Rogue f9ba041451 asteroids:: theming, changed look to invisible floors + grid, provided validity rules 2019-09-12 22:42:58 +02:00
Zeno Rogue 4af11a7f2a changed create to create_playerpath in rogueviz 2019-09-12 22:42:58 +02:00
Zeno Rogue f9db5b3863 fixed some uninitialized variable warnings 2019-09-12 22:42:58 +02:00
Zeno Rogue 57f2891826 bounded Minefield now works according to the standard Minesweeper rules 2019-09-12 22:42:58 +02:00
Zeno Rogue e61c684bca removed the redundant copy of master_relative in shmup 2019-09-12 22:42:58 +02:00
Zeno Rogue 648af0c08e fixup master_relative in Euclidean; this makes the line animation work 2019-09-12 22:42:58 +02:00
Zeno Rogue b239e12cbb fixup spiral ?? 2019-09-12 22:42:58 +02:00
Zeno Rogue 27581ff8b0 virtualRebase now used in all quotient geometries 2019-09-12 22:42:58 +02:00
Zeno Rogue e446ad9b1c fixed the ESC key flashing and doing nothing in the Expansion slide 2019-09-12 22:42:58 +02:00
Zeno Rogue b05eb3754f adjusted RogueViz Kohonen to 3D 2019-09-12 22:42:58 +02:00
Zeno Rogue 4c5a9091c2 made allcells work correctly in S^3 2019-09-12 22:42:58 +02:00
Zeno Rogue ac1c588d7d in creative menu, animations and history are now separate 2019-09-12 22:42:58 +02:00
Zeno Rogue 6b91dc2d7d 3d:: fixed invis_point and behindsphere 2019-09-12 22:42:58 +02:00
Zeno Rogue 217a643605 fixed some monster displays 2019-09-12 22:42:58 +02:00
Zeno Rogue 9fece7b342 renamed 'spiral' to 'spiral/ring' and added a comment 2019-09-12 22:42:58 +02:00
Zeno Rogue fd5dfd6b39 spiral projection generalized 2019-09-12 22:42:58 +02:00
Zeno Rogue 4284831069 more options in line animation 2019-09-12 22:42:58 +02:00
Zeno Rogue 44495852ad hr_exception, currently used for build_shortest_path 2019-09-12 22:42:58 +02:00
Zeno Rogue a179a2b80d history displays projection just as geom-exp 2019-09-12 22:42:58 +02:00
Zeno Rogue 80d14c0196 add_action_push consistently; improved some menu hotkeys and ordering; improved some naming 2019-09-12 22:42:58 +02:00
Zeno Rogue 1b73714958 improved some naming 2019-09-12 22:42:58 +02:00
Zeno Rogue 54a32441a7 restructured menus 2019-09-12 22:42:58 +02:00
Zeno Rogue bca98e9247 more stable PC centering 2019-09-12 22:42:58 +02:00
Zeno Rogue 55492e229b Asteroids in 3D 2019-09-12 22:42:58 +02:00
Zeno Rogue 6d87b282c3 fix cpid crash 2019-09-12 22:42:58 +02:00
Zeno Rogue b1033884d9 option to change -animperiod in PHASE 3 2019-09-12 22:42:58 +02:00
Zeno Rogue f6a1e445a2 'advanced parameters' display where they should 2019-09-12 22:42:58 +02:00
Zeno Rogue 6044095228 fix: equivolume 2019-09-12 22:42:58 +02:00
Zeno Rogue 10fd8a41b7 crystal cut 2019-09-12 22:42:58 +02:00
Zeno Rogue 5356eba11c Asteroids 2019-09-12 22:42:58 +02:00
Zeno Rogue 4727e71590 rug:: bugfix: draw boundary and model elements (previously changing fillmodel had no effect on rug) 2019-09-12 22:42:58 +02:00
Zeno Rogue f41e149688 rug:: an option to draw lines 2019-09-12 22:42:58 +02:00
Zeno Rogue bd20208fe0 no more 'scrolling by device rotation' option in the menu if not supported 2019-09-12 22:42:58 +02:00
Zeno Rogue 2b61413a81 azimuthal equivolume projection 2019-09-12 22:42:58 +02:00
Zeno Rogue 99dc6b8dd7 missing CAP_FACING 2019-09-12 22:42:58 +02:00
Zeno Rogue 5545f8efeb 11.0o: fixed Ivory/Yendorian 2019-09-12 22:42:58 +02:00
Zeno Rogue 6b2a9bb6f1 refactored hasFacing 2019-09-12 22:42:58 +02:00
Zeno Rogue e7b4f3783a minor refactor to drawMonster 2019-09-12 22:42:58 +02:00
Zeno Rogue 11ee7c1b9a drawMonsterType with cases 2019-09-12 22:38:47 +02:00
Zeno Rogue 3634956046 11.0n 2019-09-12 22:38:47 +02:00
Zeno Rogue 26857d8104 fixed a bug with ice in 534f; also you can now actually melt something 2019-09-12 22:38:47 +02:00
Zeno Rogue 835731e211 Yendorian and Ivory now use pattern_special 2019-09-12 22:38:47 +02:00
Zeno Rogue 4ab48f2398 fixed boat/item animation 2019-09-12 22:38:47 +02:00
Zeno Rogue bd396d4979 fixed knight cloaks and tortoises 2019-09-12 22:38:47 +02:00
Zeno Rogue c5284c153d fixed isWateryOrBoat 2019-09-12 22:38:47 +02:00
Zeno Rogue ce8df3a0c6 renamed MF_* to CF_* to prevent the collision with movement flags; also added the missing CF_INACTIVE 2019-09-12 22:38:47 +02:00
Zeno Rogue 653a0af39f made 3D a bit easier 2019-09-12 22:38:47 +02:00
Zeno Rogue 0af9df16e4 3d:: Yendorian Forest 2019-09-12 22:38:47 +02:00
Zeno Rogue 14cf0954ee fixed some instances of friends not being protected from environment with Orb and Empathy, or being protected with Orb but without Empathy 2019-09-12 22:38:47 +02:00
Zeno Rogue db5e89feae removed the obsolete function isHive 2019-09-12 22:38:47 +02:00
Zeno Rogue 5f82699052 marked MF_MOVED and MF_TECHNICAL in content; set the MF_BULLET flag for Blueball 2019-09-12 22:38:47 +02:00
Zeno Rogue 1151485c26 added content.cpp to git 2019-09-12 22:38:47 +02:00
Zeno Rogue c234156664 isRevivalOrb via flags 2019-09-12 22:38:47 +02:00
Zeno Rogue 9a072cdb62 isThorny using flags 2019-09-12 22:38:47 +02:00
Zeno Rogue ad5884e29f ignoresSmell using flags 2019-09-12 22:38:47 +02:00
Zeno Rogue a3cea92004 fixed fisheye in 3D 2019-09-12 22:38:47 +02:00
Zeno Rogue 1143cf94d2 fixed the radar not appearing 2019-09-12 22:38:47 +02:00
Zeno Rogue 3508a42efc mzscale in 3D no longer tries to do weird things 2019-09-12 22:38:47 +02:00
Zeno Rogue 62d115b007 gravity level shown in the help line in 3D 2019-09-12 22:38:47 +02:00
Zeno Rogue 84b2c866ef ladders drawn as transparent 2019-09-12 22:38:47 +02:00
Zeno Rogue c1f9d7ed0b 3d:: using face_the_player to tell that object should face the player (currently works as before) 2019-09-12 22:38:47 +02:00
Zeno Rogue 75fff87366 moveghosts no longer stops completely if one of the ghosts is stunned 2019-09-12 22:38:47 +02:00
Zeno Rogue fbf73cd66b better cellEdgeUnstable rule in 3D 2019-09-12 22:38:47 +02:00
Zeno Rogue 314b31e4f0 conegraph fixup 2019-09-12 22:38:47 +02:00
Zeno Rogue d97baabe97 3d:: ivory/dungeon (first try) 2019-09-12 22:38:47 +02:00
Zeno Rogue a4d9b46a27 improved projectionDialog: added inverse P, and ortho/Gans directly 2019-09-12 22:38:47 +02:00
Zeno Rogue 837ad2695c fixed buildEquidistant in 3D 2019-09-12 22:38:47 +02:00
Zeno Rogue 02a174b3ca item/monster/wall/land types done with X-macros; flags given too 2019-09-12 22:38:47 +02:00
Zeno Rogue f3e0ae4904 fixed using for C++11 2019-09-12 22:38:47 +02:00
Zeno Rogue 7e65ea23ea pseudohept in Field534 2019-09-12 22:38:47 +02:00
Zeno Rogue ac7c902f0b anim:: -animrot needs angles in 3D 2019-09-12 22:38:47 +02:00
Zeno Rogue d9317dcae7 fixup: far clipping plane edits the correct parameter 2019-09-12 22:38:47 +02:00
Zeno Rogue 076e1f2977 3d:: fixed linewidth 2019-09-12 22:38:47 +02:00
Zeno Rogue 9289cdd301 arg:: -gridon option 2019-09-12 22:38:47 +02:00
Zeno Rogue ab7a322e5e 3d:: smart display for 3D 2019-09-12 22:38:47 +02:00
Zeno Rogue fed102a7e1 arg:: rotation in 3D 2019-09-12 22:38:47 +02:00
Zeno Rogue c505bd55a8 3d:: fixed halfplane_scale not in GL 2019-09-12 22:38:47 +02:00
Zeno Rogue 31427a6d24 3d:: fixed halfplane_scale in GL 2019-09-12 22:38:47 +02:00
Zeno Rogue 8ea5a618ad 3d:: clipping without OpenGL 2019-09-12 22:38:47 +02:00
Zeno Rogue f8fe631eca 3d:: line animation no longer rotates randomly 2019-09-12 22:38:47 +02:00
Zeno Rogue b5127b0006 3d:: rotation_yz for line animation (la currently still changes directions randomly) 2019-09-12 22:38:47 +02:00
Zeno Rogue 0f4146ac36 3D:: animations; also changed PI/180 to degree, and enabled models in the menu 2019-09-12 22:38:47 +02:00
Zeno Rogue 5d9518b9cf fixed orientation_yz in GL 2019-09-12 22:38:47 +02:00
Zeno Rogue 2121aacaaf 3d:: clipping configurable 2019-09-12 22:38:47 +02:00
Zeno Rogue 715d8b2fd0 3d:: aura in ball model 2019-09-12 22:38:47 +02:00
Zeno Rogue 1521af65fe 3d:: fixed switching to mdPerspsective 2019-09-12 22:38:47 +02:00
Zeno Rogue f399a8c980 3d:: shader acceleration in the band model 2019-09-12 22:38:47 +02:00
Zeno Rogue ad4ecbde0e 3d:: fog in non-native models 2019-09-12 22:38:47 +02:00
Zeno Rogue b62155b551 removed unused variable dim3 2019-09-12 22:38:47 +02:00
Zeno Rogue bc3e7f2e95 3d:: shader acceleration for 3D ball and 3D halfspace 2019-09-12 22:38:47 +02:00
Zeno Rogue fbefc50775 3d:: radar off in peace mode, also depends on hide_player 2019-09-12 22:38:47 +02:00
Zeno Rogue 556a806c68 3d:: hide_player() off outside perspective 2019-09-12 22:38:47 +02:00
Zeno Rogue 01a2f0cc5a 3d:: change model orientation in the YZ plane 2019-09-12 22:38:47 +02:00
Zeno Rogue 745f1b302b signum in hyper.h 2019-09-12 22:38:47 +02:00
Zeno Rogue 8844bd5a02 3d:: fixed the pmodel used for creating floor textures 2019-09-12 22:38:47 +02:00
Zeno Rogue 5116d745c4 gldraw:: offset and texture_offset are now separate 2019-09-12 22:38:47 +02:00
Zeno Rogue eed92c5b96 mobius transformations only in 2D 2019-09-12 22:38:47 +02:00
Zeno Rogue febb0824a5 fixed a bug where editing half-plane scale edited model_orientation 2019-09-12 22:38:47 +02:00
Zeno Rogue 3f941cabb0 improved model naming a bit 2019-09-12 22:38:47 +02:00
Zeno Rogue 46ae64e945 3d:: native perspective is now pmodel == mdPerspective, and other models work too 2019-09-12 22:38:47 +02:00
Zeno Rogue 1d1baf2207 11.0m 2019-09-12 22:38:47 +02:00
Zeno Rogue b875853232 racing:: changes in TWIDTH: no more +1 in 3D binary; +1 if it would be 1; increases per each 8 race_tries 2019-09-12 22:38:47 +02:00
Zeno Rogue 414353d720 3d:: binarytiling:: celldistance for rec, and approximate for hex 2019-09-12 22:38:46 +02:00
Zeno Rogue 378d21b509 findbaseAround for all binary tilings 2019-09-12 22:38:46 +02:00
Zeno Rogue 608692b6df delete textures, saner resetGL calling rule? 2019-09-12 22:38:46 +02:00
Zeno Rogue 38559b304b fixed fielval_uniq for 3d geometries 2019-09-12 22:38:46 +02:00
Zeno Rogue af0435e209 3d:: first version of landlock rules 2019-09-12 22:38:46 +02:00
Zeno Rogue d085111495 3D:: Dry Forest uses feather floor 2019-09-12 22:38:46 +02:00
Zeno Rogue fcedebd0d8 3d:: improved floor patterns 2019-09-12 22:38:46 +02:00
Zeno Rogue af25eb1f1f 3D:: implemented the cool Emerald Mine pattern for 534, and also some Vineyard/Emerald patterns for both 435 and 534. 2019-09-12 22:38:46 +02:00
Zeno Rogue 13c426ae37 3d:: regular hyperbolic honeycombs now synchronize with the field quotient space 2019-09-12 22:38:46 +02:00
Zeno Rogue ba28bf5880 fixup sightranges 2019-09-12 22:38:46 +02:00
Zeno Rogue c693d40b84 fixup better naming 2019-09-12 22:38:46 +02:00
Zeno Rogue d369decc94 3d:: field quotient spaces for reg3 2019-09-12 22:38:46 +02:00
Zeno Rogue 791851f8d5 3d:: pseudohept for 534 2019-09-12 22:38:46 +02:00
Zeno Rogue 372a9503b6 3d:: fieldpattern now works in 3D 2019-09-12 22:38:46 +02:00
Zeno Rogue 0e10dec9e2 added some exports to hyper.h and rogueviz.h 2019-09-12 22:38:46 +02:00
Zeno Rogue 1e27888f7d for BARLEV=8, buildEquidistant acts at 7 2019-09-12 22:38:46 +02:00
Zeno Rogue da295089b5 checktide in 3D 2019-09-12 22:38:46 +02:00
Zeno Rogue 07be3e1e2e hororec improved typo fix 2019-09-12 22:38:46 +02:00
Zeno Rogue 4399866100 3d:: walls no longer depend on pseudohept 2019-09-12 22:38:46 +02:00
Zeno Rogue c2fbc424e2 always use shWall3D for shPlainWall3D 2019-09-12 22:38:46 +02:00
Zeno Rogue 8fabe30bf5 show borders on fires; limit particles if there are too many fires 2019-09-12 22:38:46 +02:00
Zeno Rogue 8de98056ff 3d:: hororec:: better pseudohept pattern 2019-09-12 22:38:46 +02:00
Zeno Rogue cb9513dd0d 3d:: horohex geometry 2019-09-12 22:38:46 +02:00
Zeno Rogue 67ba896be9 3d:: hororec:: nice Temple of Cthulhu 2019-09-12 22:38:46 +02:00
Zeno Rogue 629e94cbb1 tour:: replaced 'a'+i to allow longer presentations 2019-09-12 22:38:46 +02:00
Zeno Rogue ac6da6831d fixed RawTexture not appearing 2019-09-12 22:38:46 +02:00
Zeno Rogue f68b216eb4 original image size is accessible in texture_data 2019-09-12 22:38:46 +02:00
Zeno Rogue ae9cf6a43a fixed landscape shading 2019-09-12 22:38:46 +02:00
Zeno Rogue cc287d52b6 fixed a crash when ddspin called with NODIR 2019-09-12 22:38:46 +02:00
Zeno Rogue 9d291b8b1f fixed a bug in virtualRebase 2019-09-12 22:38:45 +02:00
Zeno Rogue 678747ceff 3d:: horo-rec geometry 2019-09-12 22:38:45 +02:00
Zeno Rogue c25561bb91 fixup for Steam/Windows compilers 2019-09-12 22:38:45 +02:00
Zeno Rogue 51ae22363d 3d:: limit distance between players 2019-09-12 22:38:45 +02:00
Zeno Rogue 168a9bc304 fixed RogueViz still using old functions 2019-09-12 22:38:45 +02:00
Zeno Rogue 1a770aaf37 3d:: Escher can now be switched 2019-09-12 22:38:45 +02:00
Zeno Rogue f6de21e143 texture:: aura no longer flickers 2019-09-12 22:38:45 +02:00
Zeno Rogue 5db2cfbd1a 3d:: textured walls 2019-09-12 22:38:45 +02:00
Zeno Rogue f3a166b928 fixed a bug in aura (coords[3] not set) 2019-09-12 22:38:45 +02:00
Zeno Rogue 7f6957694a moved inline functions to hyper.h 2019-09-12 22:38:45 +02:00
Zeno Rogue 6afa1f1fa0 3d:: gHoroTris on the list 2019-09-12 22:38:45 +02:00
Zeno Rogue bbaca3eff3 11.0l 2019-09-12 22:38:45 +02:00
Zeno Rogue 43eb9bf0a2 fixed a glitch with a bodypart taking the whole screen in spherical geometry 2019-09-12 22:38:45 +02:00
Zeno Rogue 0a0627afc5 selecting horocyclic lands in standard geometry works 2019-09-12 22:38:45 +02:00
Zeno Rogue ea1b29533c 'towards Gans' option works again 2019-09-12 22:38:45 +02:00
Zeno Rogue 311506f45c barrier fixup 2019-09-12 22:38:45 +02:00
Zeno Rogue 29e8bbd9d4 3d:: equidistant/gravity/brownian lands disabled for now 2019-09-12 22:38:45 +02:00
Zeno Rogue 7bdea22d2a 3d:: the 't' key now targets the same target as the mouse 2019-09-12 22:38:45 +02:00
Zeno Rogue 9bd01c485d 3d:: improved transwall coloring 2019-09-12 22:38:45 +02:00
Zeno Rogue 88621e0cef 3d:: improved which 'circles' are drawn 2019-09-12 22:38:45 +02:00
Zeno Rogue 3f836d1dfe 3d:: Great Walls in H3 geometries 2019-09-12 22:38:45 +02:00
Zeno Rogue 5038686a5b 3d:: set the S3 parameter in 3D geometries to the smallest loop, so that it tells whether hedgehogs can be killed 2019-09-12 22:38:45 +02:00
Zeno Rogue 2a7e1f2603 3d:: horotris: correct distances 2019-09-12 22:38:45 +02:00
Zeno Rogue 8028392b70 distance tester added 2019-09-12 22:38:45 +02:00
Zeno Rogue cf57e9fc81 added KosGD to credits 2019-09-12 22:38:45 +02:00
Zeno Rogue b9cbb28d66 3d:: nicer Temple of Cthulhu in horo-triangular 2019-09-12 22:38:45 +02:00
Zeno Rogue 5990e107ac removed debug draw 2019-09-12 22:38:45 +02:00
Zeno Rogue 7f1a4864d3 euclidean cheat help now displayed only in masterless 2019-09-12 22:38:45 +02:00
Zeno Rogue 943a8395e5 3d:: 3d is affected by cells_drawn_limit; improved the sightrange edit dialog with more options and better help 2019-09-12 22:38:45 +02:00
Zeno Rogue e5cc9d77a0 3d:: automatically adjust monster generation based on the number of generated cells 2019-09-12 22:38:45 +02:00
Zeno Rogue a31f1094f9 3d:: binary:: fixed a crash bug caused by using the wrong relative_matrix 2019-09-12 22:38:45 +02:00
Zeno Rogue 225282a3eb 3d::binary:: make the land barriers more like planes by pushing them by a number depending on btwidth 2019-09-12 22:38:45 +02:00
Zeno Rogue 4633231721 added some people to thanks 2019-09-12 22:38:45 +02:00
Zeno Rogue ab542f1f2f improved some geometry naming 2019-09-12 22:38:45 +02:00
Zeno Rogue 4591c2166e 3d:: binary:: land boundaries 2019-09-12 22:38:45 +02:00
Zeno Rogue e6ff760253 3d:: transparent-wall coloring now more precise, and takes land barriers into account 2019-09-12 22:38:45 +02:00
Zeno Rogue f0092d9633 3d:: vision-based gamerange in shmup 2019-09-12 22:38:45 +02:00
Zeno Rogue 4a151f9c63 3d:🪞:fixup: do nothing in non-shmup 2019-09-12 22:38:45 +02:00
Zeno Rogue d121e7ff93 3d:: shmup:: monsters better at avoiding obstacles 2019-09-12 22:38:45 +02:00
Zeno Rogue c57679c79f 3d:: mimics (mirrors not generated correctly yet) 2019-09-12 22:38:45 +02:00
Zeno Rogue 10223d33b9 3d:: sword 2019-09-12 22:38:45 +02:00
Zeno Rogue 14ea73be06 choice of the magic sword graphics now depends on the scale; in shmup, the tip is now set automatically based on the graphics 2019-09-12 22:38:45 +02:00
Zeno Rogue d9b90d8a8e 3D:: two-player uses split screen 2019-09-12 22:38:45 +02:00
Zeno Rogue 1f4afeeeb4 3d:: orb targetting in shmup (in noshmup it already worked) 2019-09-12 22:38:45 +02:00
Zeno Rogue 55c31ec645 3d:: refactored the hide_player function 2019-09-12 22:38:45 +02:00
Zeno Rogue 9f9670fcdb an option to desaturate colors for anaglyph 2019-09-12 22:38:45 +02:00
Zeno Rogue c7eed9db4a 3d:: fixed crash in Caribbean 2019-09-12 22:38:45 +02:00
Zeno Rogue cf3047a1a5 3d:: help works 2019-09-12 22:38:45 +02:00
Zeno Rogue 1510f4a93d 3d:: set range in hyperbolic regular to 2 2019-09-12 22:38:45 +02:00
Zeno Rogue 22e65471f2 3d:: improved hyperbolic regular Temple 2019-09-12 22:38:45 +02:00
Zeno Rogue ebbaa3fcc3 fixed some memory bugs 2019-09-12 22:38:45 +02:00
Zeno Rogue 497f7f6c0f 3d:: reg3:: distances and alt-distances 2019-09-12 22:38:45 +02:00
Zeno Rogue 6d72bd820b 3d:: extra_generation_distance (todo: make it configurable from menus) 2019-09-12 22:38:45 +02:00
Zeno Rogue 5e237d5a59 3D:: grid drawn correctly 2019-09-12 22:38:45 +02:00
Zeno Rogue 582fe235f0 fixed crash in masterless (no draw items) 2019-09-12 22:38:45 +02:00
Zeno Rogue 679e44d4b1 grid color is now configurable (stdgridcolor) 2019-09-12 22:38:45 +02:00
Zeno Rogue 78d88b5909 improved in the OO fashion: draw, relative_matrix, create_step, and several minor functions are now virtual in hrmap 2019-09-12 22:38:44 +02:00
Zeno Rogue d8428f2ec3 crystal::3d:: transformation 2019-09-12 22:38:44 +02:00
Zeno Rogue 76f3df1320 CLI option -geo recognizes menu_displayed_names 2019-09-12 22:38:44 +02:00
Zeno Rogue 845c777cd6 bugfix: item under cursor disappears only in 3D 2019-09-12 22:38:44 +02:00
Zeno Rogue 9ab7b53b54 3d:: fixed iddspin 2019-09-12 22:38:44 +02:00
Zeno Rogue 105de56857 3d:: HoroTris geometry 2019-09-12 22:38:44 +02:00
Zeno Rogue 9efa497b66 fixed regrouping dogs disappearing 2019-09-12 22:38:43 +02:00
Zeno Rogue ce632ff9d5 reg3:: in reg hyperbolic honeycombs, celldistance now works correctly for small distances (required for trans walls) 2019-09-12 22:38:43 +02:00
Zeno Rogue adaed6be7c 3d:: boats are drawn 2019-09-12 22:38:43 +02:00
Zeno Rogue d6422d5def 3d:: water etc are now drawn as transparent walls 2019-09-12 22:38:43 +02:00
Zeno Rogue a2c6a4e8b0 3d:: a system for drawing transparent things, with sorting being the responsibility of HR 2019-09-12 22:38:43 +02:00
Zeno Rogue d3f17858e9 3d:: parrots and seeps now ignore depth testing 2019-09-12 22:38:43 +02:00
Zeno Rogue a94aa81edd 3d:: a 3d image for compasses in the world 2019-09-12 22:38:43 +02:00
Zeno Rogue 149853204a 3d:: do not draw items under the view center 2019-09-12 22:38:43 +02:00
Zeno Rogue ca241c92fe 3d:: no more flying for 3D birds 2019-09-12 22:38:43 +02:00
Zeno Rogue b17758c77f 3d:: Caribbean no longer freezes in rhombic 2019-09-12 22:38:43 +02:00
Zeno Rogue 53d5510697 fixed texts not appearing 2019-09-12 22:38:43 +02:00
Zeno Rogue 30272ce45e fixed for Steam compiler 2019-09-12 22:38:43 +02:00
Zeno Rogue 91d848cc74 version 11.0j 2019-09-12 22:38:43 +02:00
Zeno Rogue aebc5dd693 added a text that 3D geometries are a work in progress 2019-09-12 22:38:43 +02:00
Zeno Rogue 24e02f8dea reg3:: sightrange no longer changed to 3 2019-09-12 22:38:43 +02:00
Zeno Rogue 7e2f6629fd fixed a bug with hdist returning nan due to precision errors 2019-09-12 22:38:43 +02:00
Zeno Rogue 8d2b6a0093 BARLEV now can be 8 2019-09-12 22:38:43 +02:00
Zeno Rogue e99e05944a fix 2 to DIM in virtualRebaseSimple just in case 2019-09-12 22:38:43 +02:00
Zeno Rogue 52ce5ac9aa 3d:: all the regular honeycombs 2019-09-12 22:38:43 +02:00
Zeno Rogue a6fd8146dd 3d:: binary:: changes so that it can be generate as an alt (virtualRebaseSimple, generation without c7 2019-09-12 22:38:43 +02:00
Zeno Rogue a30267bad7 3d:: binary:: celldistance for heptagons 2019-09-12 22:38:43 +02:00
Zeno Rogue c66858d0b5 3d:: binary:: itmatrix for extra speed 2019-09-12 22:38:43 +02:00
Zeno Rogue 03083a4520 3d:: display rose scent (not work well though) 2019-09-12 22:38:43 +02:00
Zeno Rogue b5c7df4b11 3d:: getHemisphere works nicely; disabled wall removing in sphere3 crossroads 2019-09-12 22:38:43 +02:00
Zeno Rogue e0fa2c2e1c Euclidean emerald mine 2019-09-12 22:38:43 +02:00
Zeno Rogue a8e486e728 3d:: minefield displays correctly 2019-09-12 22:38:43 +02:00
Zeno Rogue d660531a22 3d:: more elegant euclid3::getcoord 2019-09-12 22:38:43 +02:00
Zeno Rogue 2a801ba5d3 update 11.0i 2019-09-12 22:38:43 +02:00
Zeno Rogue 9a3167e0ed adjusted to older C++ 2019-09-12 22:38:43 +02:00
Zeno Rogue cb8e34204f two more Euclidean honeycombs; also split buildpolys into subfunctions 2019-09-12 22:38:43 +02:00
Zeno Rogue b63bcec64b fixed a bug with animal legs 2019-09-12 22:38:43 +02:00
Zeno Rogue 2b42476413 11.0h (in the changelog) 2019-09-12 22:38:43 +02:00
Zeno Rogue b3920f76b0 3D:: Temple of Cthulhu in Euclidean 2019-09-12 22:38:43 +02:00
Zeno Rogue 1eee434094 3d: Euclidean uses constant COORDMAX instead of magic 1000 2019-09-12 22:38:43 +02:00
Zeno Rogue 1a381d9e1a 3d:: Euclidean dist_alt returns int, not bool 2019-09-12 22:38:43 +02:00
Zeno Rogue ab1e6a9405 no big statues in any 3D kind of Temple of Cthulhu 2019-09-12 22:38:43 +02:00
Zeno Rogue a52755bf50 some fixes due to weird action in git 2019-09-12 22:38:43 +02:00
Zeno Rogue c914b2632c irregular:: saving non-bitruncated maps 2019-09-12 22:38:43 +02:00
Zeno Rogue f32964e89a netgen:: updated prettyline to queueline 2019-09-12 22:38:43 +02:00
? e68106f582 rogueviz::kohonen:: works on IRREGULAR 2019-09-12 22:38:43 +02:00
? 3ed2de8519 fixed irregular tilings on quotient spaces; new CLI parameters for irregular 2019-09-12 22:38:43 +02:00
? 2c2cda6157 3D:: sightrange changeable from 3D settings 2019-09-12 22:38:43 +02:00
? 699109ef2a 3d:: draw:: model from triangles 2019-09-12 22:38:43 +02:00
? c46bedd23b 3d::draw:: crosshair 2019-09-12 22:38:42 +02:00
? 33cc46e8d1 3d:: lines with priority set to SUPERLINE ignore depth testing as expected 2019-09-12 22:38:42 +02:00
? dd57f2733a 3d:: applymodel now works correctly (to find onscreen coordinates) 2019-09-12 22:38:42 +02:00
? 8d83959229 if triangles are drawn, outlines are disabled 2019-09-12 22:38:42 +02:00
? 53bc4c0251 3d:: mousewheel now can be used to move the camera forward/backward 2019-09-12 22:38:42 +02:00
? 41ed04b2ee 3d:: basic adjustment of the graphics editor to 3D 2019-09-12 22:38:42 +02:00
? 357a3398cd mouse aiming in map/graph editor 2019-09-12 22:38:42 +02:00
? f879a2c21c draw:: z-level can now be set for each layer 2019-09-12 22:38:42 +02:00
? d46a909612 version number changed to 11.0h 2019-09-12 22:38:42 +02:00
? 4ac186437b editable statues 2019-09-12 22:38:42 +02:00
? 266b55eea2 monsters move slower in 3D 2019-09-12 22:38:42 +02:00
? 5871a4b208 3d:: radar feature 2019-09-12 22:38:42 +02:00
? b48cf6eba1 3D:: no more extra points on lines (and especially with TRIANGLES) 2019-09-12 22:38:42 +02:00
? 041a9e11fe shots:: added some missing guards, -animrecord and -animrec were the same option 2019-09-12 22:38:42 +02:00
? e47ad880a0 racing:: missing CAP_FILES guard 2019-09-12 22:38:42 +02:00
? 7d46acb1b8 3d:: more precise findbaseAround in binary3 2019-09-12 22:38:42 +02:00
? 81dd0c71da added some missing guards for CAP_BT and MAXMDIM 2019-09-12 22:38:42 +02:00
? f451e017a3 3D:: now works with anaglyph 2019-09-12 22:38:42 +02:00
? 56dc2d18c0 3D:: cleaned up the 3D menu in 3D geometry; also added creature_scale and height_width parameters 2019-09-12 22:38:42 +02:00
? e3a9ebc468 3D:: geometry menu shows 3D config instead of projections 2019-09-12 22:38:42 +02:00
? 2ca3cf3744 3D:: affected by the FOV parameter 2019-09-12 22:38:42 +02:00
? 676abdf03b used scalefactor when it was not used while it should: WOLF scaling, leg animation, shmup 2019-09-12 22:38:42 +02:00
? b52097ebe7 added missing CAP_SHAPES, and changed CAP_SAVE to CAP_FILES 2019-09-12 22:38:42 +02:00
? d95a6ae0d7 new hypot functions in textures 2019-09-12 22:38:42 +02:00
? a0bd6bf4b5 new hypot functions in goldberg 2019-09-12 22:38:42 +02:00
? 41c3bd9b58 racing:: added missing CAP_RACING guard 2019-09-12 22:38:42 +02:00
? 54f278963c renamed MAXDIM to MAXMDIM (conflict with crystal) 2019-09-12 22:38:42 +02:00
? ccc77b05fb rug:: CAP_CRYSTAL guards 2019-09-12 22:38:42 +02:00
? f27bf01474 3d:: rug uses the new functions 2019-09-12 22:38:42 +02:00
? 041c7af987 3d:: *_d functions now consistently put d as the first argument 2019-09-12 22:38:42 +02:00
? 2f66a64ce3 3d:: racing:: increased TWIDTH in binary3, as otherwise it could not create paths 2019-09-12 22:38:42 +02:00
? bf95aa6e77 3d:: added VBODY1, VBODY2, VBODY3 to draw clothing correctly 2019-09-12 22:38:42 +02:00
? 1a8f164572 3d:: 3D models are now centered correctly instead of on legs 2019-09-12 22:38:42 +02:00
? a9a02e0f8f 3d:: out-of-memory chasms are displayed as hard walls (faster racing) 2019-09-12 22:38:42 +02:00
? c032db2019 3d:: virtualRebase works correctly in non-hyperbolic tilings 2019-09-12 22:38:42 +02:00
? c14515c5ac fixed build_shortest_path in 4-valent Euclidean tilings 2019-09-12 22:38:42 +02:00
? 8c38c3071c 3d:: fixed getcoord in euclid 2019-09-12 22:38:42 +02:00
? a11d2726fb 3d:: mirrors are broken, but produce no effect 2019-09-12 22:38:42 +02:00
? c797d4ccba racing:: fixed a potential crash if goal not found 2019-09-12 22:38:42 +02:00
? c5e87f1d2d racing:: history is saved in 3D 2019-09-12 22:38:42 +02:00
? ee87c94e05 3d:: queuechr(V/T) no longer displays points if they are behind 2019-09-12 22:38:42 +02:00
? f0b984aa3b 3d:: disabled sidewall computation 2019-09-12 22:38:42 +02:00
? 5824e4b016 3D:: master_relative returns Id 2019-09-12 22:38:42 +02:00
? 858a5eddb1 in createMov applied mirror just in case 2019-09-12 22:38:42 +02:00
? 8c5df8dfd4 3d:: in ggmatrix fixed [2][2] to [DIM][DIM] 2019-09-12 22:38:42 +02:00
? 38ded28511 3d:: fixed Euclidean celldistance (abs was missing) 2019-09-12 22:38:42 +02:00
? be56844dcc disabled mirrors for now 2019-09-12 22:38:42 +02:00
? 00d9bacddd 3D:: disabled build_shortest_path in euclid for now 2019-09-12 22:38:42 +02:00
? 483a5e253c 3D:: fixed binary::relative_matrix 2019-09-12 22:38:42 +02:00
? 41be07ae72 3d:: weird walls now display as rings (passable) or sawrings (impassable) 2019-09-12 22:38:42 +02:00
? 0620916dd2 3d:: miniwalls used for weird stuff 2019-09-12 22:38:42 +02:00
? c2b6600ce5 3d:: renamed shBinaryWall to shWall3D 2019-09-12 22:38:42 +02:00
? 42e4342c4a 3d:: fixed pushing directions 2019-09-12 22:38:42 +02:00
? 71ef823c43 racing:: reduced setdist parameter 2019-09-12 22:38:42 +02:00
? 365b6595d3 racing:: added CAP_CRYSTAL guards 2019-09-12 22:38:42 +02:00
? 142ddc9630 3d:: disabled anti-bad-generation 2019-09-12 22:38:42 +02:00
? ba49bb203a 3d:: no crash in Power 2019-09-12 22:38:42 +02:00
? e98afaf45c 3d:: random building of the Plalace 2019-09-12 22:38:42 +02:00
? dc26f3b744 3d:: display other stuff as ascii without errors 2019-09-12 22:38:42 +02:00
? 9319c3b0fa 3d:: celldistances 2019-09-12 22:38:42 +02:00
? 714ff8462a 3d:: more things shown as walls, worms also use wall graphics 2019-09-12 22:38:42 +02:00
? 5ff834e310 3d:: qezc/1379/ijkl now move in the 'y' direction 2019-09-12 22:38:42 +02:00
? b8913b39fd 3d:: pseudohept specified 2019-09-12 22:38:42 +02:00
? a1ca5b2995 fixed centerpc in Euclidean with yshift 2019-09-12 22:38:42 +02:00
? 35a4330412 3d:: 1/2/3 perspectives in noshmup 2019-09-12 22:38:42 +02:00
? c0b4ffc343 3d:: fixed key names in shmup3, also playermoved changed correctly 2019-09-12 22:38:42 +02:00
? 0d795e60bf 3d::racing:: 3d racing (partial) 2019-09-12 22:38:42 +02:00
? 2b307f5e4a added epsilon to virtualRebase to prevent infinite loops caused by precision errors 2019-09-12 22:38:42 +02:00
? 168b3fb11d 3D:: smooth TPP; display player or not correctly 2019-09-12 22:38:42 +02:00
? 26b5d55224 3D:: 123 keys now switch perspectives 2019-09-12 22:38:42 +02:00
? 7a748b56f4 3D:: xcodes given 2019-09-12 22:38:42 +02:00
? 2a4d4cbda3 3d:: less ivies in Euclidean 2019-09-12 22:38:42 +02:00
? aac03e72fe 3d:: depthtest disabled for PPR::SUPERLINE and beyond 2019-09-12 22:38:42 +02:00
? 4e6a50f425 3D:: hair is now drawn above face 2019-09-12 22:38:42 +02:00
? c5f2dec44c fixed leg position on wolves 2019-09-12 22:38:42 +02:00
? 1809cf1622 3d:: sphere:: fixed sphereflip (and thus noshmup movement) 2019-09-12 22:38:42 +02:00
? 008ef40ea3 3d:: binary:: default width reduced 2019-09-12 22:38:42 +02:00
? ea2c0d257b 3d:: do not draw 'catwalk' cursor in binary 2019-09-12 22:38:42 +02:00
? 92113c82ee 3d:: Ivy graphics 2019-09-12 22:38:42 +02:00
? 07a51bed10 3D:: fixed monster facings in noshmup 2019-09-12 22:38:42 +02:00
? 0c125efb15 3d:: nice fire 2019-09-12 22:38:42 +02:00
? 321a709f91 3d:: better particles 2019-09-12 22:38:42 +02:00
? cc98858aa0 added missing geometry guards to mapeditor 2019-09-12 22:38:42 +02:00
? b0c21f0626 3d:: mapeditor works 2019-09-12 22:38:42 +02:00
? 5c2cb1de76 fixed centerpc to use zero_d(H, DIM) instead of zero_d(H, 2) 2019-09-12 22:38:42 +02:00
? 3de228fce1 3D:: fixed item graphics 2019-09-12 22:38:42 +02:00
? 723f029b1d 3D:: item graphics now face the player 2019-09-12 22:38:42 +02:00
? 305ff5de33 fixed xspinpush in Euclidean 2019-09-12 22:38:42 +02:00
? 111bc3697d sword:: removed the dependence on the S* constants 2019-09-12 22:38:42 +02:00
? f37c8d2f1c more elegant airdir 2019-09-12 22:38:42 +02:00
? a6094f7b0c 3d:: binary:: celldistance [untested] 2019-09-12 22:38:42 +02:00
? 170648a367 mouse aiming sensitivity is now configurable; set to 0 to disable 2019-09-12 22:38:42 +02:00
? 808111de89 fixup options in 3D 2019-09-12 22:38:42 +02:00
? 6e2c869a60 yet more interesting Yendor path in binary tilings 2019-09-12 22:38:42 +02:00
? 7fadb7f98f 3D:: yendor works (?) 2019-09-12 22:38:42 +02:00
? 85cb1bbb11 3D:: no more autocentering if vid.sspeed <= -5 2019-09-12 22:38:41 +02:00
? 9b968e648b 3D:: hide some queuecircleat's 2019-09-12 22:38:41 +02:00
? 6ac9820644 3D:: mouseover set correctly 2019-09-12 22:38:41 +02:00
? c6025ad711 3D:: do not draw the player in turn-based either 2019-09-12 22:38:40 +02:00
? d83abeaebb 3D:: disabled menu options which are not available in 3D 2019-09-12 22:38:40 +02:00
? bc454d56cd 3D:: movement in non-shmup 2019-09-12 22:38:40 +02:00
? 3188fb2e68 3D:: wasd keys (by default) now work as usual, plus mouse for aiming 2019-09-12 22:38:40 +02:00
? 71f02d5dc2 3d:: mouse aiming 2019-09-12 22:38:40 +02:00
? 3cf1236a0a 3d:: 3D geometries selectable from Geometry Experiments 2019-09-12 22:38:40 +02:00
? 3780343367 fixed 2D binary tiling 2019-09-12 22:38:40 +02:00
? 1cab16aae7 3d:: grids 2019-09-12 22:38:40 +02:00
? a88a03e26e 3D:: key names for 3D actions in shmup 2019-09-12 22:38:40 +02:00
? 6808c4e926 smooth_scrolling now configurable 2019-09-12 22:38:40 +02:00
? 29afe683c3 better keyboard panning 2019-09-12 22:38:40 +02:00
? 051055922b 3d:: fixed a bug in centerpc 2019-09-12 22:38:40 +02:00
? f68ff9de73 3d:: improved rotation speed 2019-09-12 22:38:40 +02:00
? 3c7824d51e 3d:: fixed implicit conversion warning in GLSL 2019-09-12 22:38:40 +02:00
? fe174d8873 3D:: elliptic space 2019-09-12 22:38:40 +02:00
? fb71d4fd15 3D:: sightranges are now configurable 2019-09-12 22:38:40 +02:00
? 46250081ec 3D:: fixed sphere to determine the current cell correctly 2019-09-12 22:38:40 +02:00
? 6c2c899d2a 3D:: actualV returns V 2019-09-12 22:38:40 +02:00
? 370d1e069c 3D:: no glyphs in HUD 2019-09-12 22:38:40 +02:00
? b4a44972dd 4D:: do not use std sphere/euclid in calc_relative_matrix/ggmatrix 2019-09-12 22:38:40 +02:00
? bba0e5138e 3d:: shmup mode now works as a fps 2019-09-12 22:38:40 +02:00
? 5ae2714e37 C0 and Cx1 now changes depending on DIM 2019-09-12 22:38:40 +02:00
? 02920b5d2f 3D:: fixed (?) virtualRebase 2019-09-12 22:38:40 +02:00
? e7110b7492 3d:: fixed letters 2019-09-12 22:38:40 +02:00
? a847f0f040 3d:: wax model in sphere3 2019-09-12 22:38:40 +02:00
? 7e4cc69c06 sphere3 is not two_sided_model 2019-09-12 22:38:40 +02:00
? c279e91600 3d:: set geometry parameters in sphere3 2019-09-12 22:38:40 +02:00
? f743a46010 3d:: fixed optimizeview in sphere3 2019-09-12 22:38:40 +02:00
? 259e376909 3d:: four-phase drawing of sphere 2019-09-12 22:38:40 +02:00
? 3b030471b0 fixed a bug in inverse caused by precision issues 2019-09-12 22:38:40 +02:00
? bbffc21a95 fixed table for ginf 2019-09-12 22:38:40 +02:00
? 33d4854c14 3D:: 120-cell 2019-09-12 22:38:40 +02:00
? 1fcf58e17a 3D:: shader variants for R3 and S3 2019-09-12 22:38:40 +02:00
? 4b356d9945 moved quotient spaces to quotient.cpp 2019-09-12 22:38:40 +02:00
? 33d94beb4f moved spherical geometry to sphere.cpp 2019-09-12 22:38:40 +02:00
? c7cb93f2ed moved all the Euclidean maps to euclid.cpp 2019-09-12 22:38:40 +02:00
? 26b6b94c95 renamed space.cpp to euclid.cpp 2019-09-12 22:38:40 +02:00
? a89dc002cd fixed some bugs in hyperpoint.cpp 2019-09-12 22:38:40 +02:00
? 7110be2032 3D:: cube tiling 2019-09-12 22:38:40 +02:00
? e8fa30de4c btrange_cosh checked in do_draw 2019-09-12 22:38:40 +02:00
? d08e58f404 3d:: 2D/3D is now selectable at runtime 2019-09-12 22:38:40 +02:00
? 1f8510bc71 smooth_movement option (not yet in menu) 2019-09-12 22:38:40 +02:00
? 5c7fd31446 3D:: HOME moves view back instead of centering 2019-09-12 22:38:40 +02:00
? 481b417d70 3D:: no more statues of Cthulhu in 3D shmup 2019-09-12 22:38:40 +02:00
? 6b893af89e 3D:: spinning items; improved Grimoire gfx 2019-09-12 22:38:40 +02:00
? ae257b952d shadows are now drawn or not correctly -- depending on model_needs_depth() 2019-09-12 22:38:40 +02:00
? 7687381e75 rem 2019-09-12 22:38:40 +02:00
? c3edbc0247 3D:: mscale performs zpush when in 3D 2019-09-12 22:38:40 +02:00
? d87a471714 3D::binary:: nice walls 2019-09-12 22:38:40 +02:00
? 6502014ed8 3D:: disabled floorshapes 2019-09-12 22:38:40 +02:00
? a7aeb064f3 optimization in binary 2019-09-12 22:38:40 +02:00
? 0bc644e132 support POLY_TRIANGLES 2019-09-12 22:38:40 +02:00
? 5212be555e split btrange to btrange and btrange_cosh 2019-09-12 22:38:40 +02:00
? 695d29475a fixup adjust to 3D 2019-09-12 22:38:40 +02:00
? cf34b90373 binary::3D:: more efficient tmatrix 2019-09-12 22:38:40 +02:00
? c66a76e00f 3D: denser Temple of Cthulhu 2019-09-12 22:38:40 +02:00
? 6c763d5879 regular pattern on 3D Temple of Cthulhu 2019-09-12 22:38:40 +02:00
? 0ea37718f0 shaderside projection for DIM==3 2019-09-12 22:38:39 +02:00
? 56d628d4d8 adjusting for 3D part II 2019-09-12 22:38:39 +02:00
? aa3e14549e tactic:: no createAlternateMap on start in binary 2019-09-12 22:38:39 +02:00
? fa3a6d193d missing CAP_ANIMATIONS guard 2019-09-12 22:38:39 +02:00
? 1c5d79b4ba missing CAP_SVG guards 2019-09-12 22:38:39 +02:00
? 96e4ff6c9d binary tiling in 3D works 2019-09-12 22:38:39 +02:00
? e73d2f2f22 some work on 3D view 2019-09-12 22:38:39 +02:00
? a3eb161235 added CAP_SHAPES: poly system works, but no shapes are used 2019-09-12 22:38:39 +02:00
? 4586516a58 newlands:: disabled lands requiring CAP_COMPLEX2 2019-09-12 22:38:39 +02:00
? 15b27aff2f racing/complex2:: disabled with ISMINI 2019-09-12 22:38:39 +02:00
? e88db219b8 racing:: CAP_FILES employed 2019-09-12 22:38:39 +02:00
? e04471a254 racing:: removed always_false 2019-09-12 22:38:39 +02:00
? dd0f573ca9 hyperpoint adjusted for 3D geometry 2019-09-12 22:38:39 +02:00
? c24fa20334 added some missing CAP_RUG flags 2019-09-12 22:38:39 +02:00
? e39777f04d CAP_ animations etc. cleanup 2019-09-12 22:38:39 +02:00
? 99aa7e420b CAP_POLY part 1 2019-09-12 22:38:39 +02:00
? 31037574f5 CAP_COMPLEX2 first 2019-09-12 22:38:39 +02:00
? c5a771c888 CAP_FIELD part 1 2019-09-12 22:38:39 +02:00
? b25730d5c9 geometry flags part 1 2019-09-12 22:38:39 +02:00
? 183b267d64 improved ISMINI; always_false 2019-09-12 22:38:39 +02:00
Zeno Rogue e44de82394 11.0g 2019-09-12 22:38:39 +02:00
Zeno Rogue 73f1686439 no more Brown generation in PTM Ocean 2019-09-12 22:38:39 +02:00
Zeno Rogue 970eb365ce version 11.0f 2019-09-12 22:38:39 +02:00
Zeno Rogue bf732ff89f fixed a bug with pushing thumpers into fire traps. 2019-09-12 22:38:39 +02:00
Zeno Rogue ddd1161acc 11.0e version number 2019-09-12 22:38:39 +02:00
Zeno Rogue 29109c252e version 11.0e 2019-09-12 22:38:39 +02:00
Zeno Rogue 8575bd8ef6 racing:: no more splitscreen outside of racing mode 2019-09-12 22:38:39 +02:00
Zeno Rogue b2aed8d814 PTM definitions for the new lands 2019-09-12 22:38:39 +02:00
Zeno Rogue 797a852b31 no more crashes in some Euclidean lands 2019-09-12 22:38:39 +02:00
Zeno Rogue 98f03dc076 11.0d 2019-09-12 22:38:39 +02:00
Zeno Rogue a4db1ad7b2 no more Gold in Free Fall Yendor 2019-09-12 22:38:39 +02:00
Zeno Rogue 4498aa10b7 fixed the mobile music credits 2019-09-12 22:38:39 +02:00
Zeno Rogue 922439ec31 Free Fall treasures move in shmup 2019-09-12 22:38:39 +02:00
Zeno Rogue 3a8a5a6150 fixed missing CAP_RACING guards 2019-09-12 22:38:39 +02:00
Zeno Rogue 3e4fd1d1b8 fixed Brown Islands crashing in Euclidean 2019-09-12 22:38:39 +02:00
Zeno Rogue 5f57c08154 fixed treasure not appearing in freefall/windy in shmup 2019-09-12 22:38:39 +02:00
Zeno Rogue f4ba325911 version 11.0c 2019-09-12 22:38:39 +02:00
Zeno Rogue f8cd171bb2 reset the starting land after disabling the Racing mode 2019-09-12 22:38:39 +02:00
Zeno Rogue beceacb65a Czech translation updated, typos fixed in the Polish translation 2019-09-12 22:38:39 +02:00
Zeno Rogue bf979609b5 brownian:: changed the maturing rule 2019-09-12 22:38:39 +02:00
Zeno Rogue 9cc9a881a7 version 11.0b 2019-09-12 22:38:39 +02:00
Zeno Rogue f6092de56f fixed crash on changing projection while not in race 2019-09-12 22:38:39 +02:00
Zeno Rogue c80df92acb text fixes, PL translation updated 2019-09-12 22:38:39 +02:00
Zeno Rogue b1614aa246 11.0a 2019-09-12 22:38:39 +02:00
Zeno Rogue 0be81cb294 racing:: no more shmup message 2019-09-12 22:38:39 +02:00
Zeno Rogue d6b79162c0 racing:: fixed a bug with official races generating incorrectly 2019-09-12 22:38:39 +02:00
Zeno Rogue e42abbbf24 racing:: finish message 2019-09-12 22:38:39 +02:00
Zeno Rogue 5db477390c racing:: fixed not configuring track correctly when started from CLI 2019-09-12 22:38:39 +02:00
Zeno Rogue 9ecf07755d racing:: side display 2019-09-12 22:38:39 +02:00
Zeno Rogue 46b87a20b2 racing:: myname added to scores 2019-09-12 22:38:39 +02:00
Zeno Rogue 47e43f974c no more trolls leaving walls in freefall 2019-09-12 22:38:39 +02:00
Zeno Rogue 8756b8e27a racing::standard_centering 2019-09-12 22:38:39 +02:00
Zeno Rogue 294d287518 racing:: fixed hotkey clash for 'best scores to show as ghosts' vs 'guiding line' 2019-09-12 22:38:39 +02:00
Zeno Rogue 07b8c37247 racing:: race angle now defaults correctly to 90 degrees 2019-09-12 22:38:39 +02:00
Zeno Rogue 4c19618cbb racing:: race TPP now adjusts better to the screen aspect ratio 2019-09-12 22:38:39 +02:00
Zeno Rogue 2cb19e153d racing:: 'two players' option should work now 2019-09-12 22:38:39 +02:00
Zeno Rogue c313f59c87 racing: disable mouse pointing 2019-09-12 22:38:39 +02:00
Zeno Rogue 6e13da5800 Orb of Gravity now gives life in shmup (since it does not work) 2019-09-12 22:38:39 +02:00
Zeno Rogue 822034ff1d Orb of Safety is now a guest orb in Brownian 2019-09-12 22:38:39 +02:00
Zeno Rogue 4564a0203c Brownian shows elevation in the help line 2019-09-12 22:38:39 +02:00
Zeno Rogue 102292fdc6 fixed the walls generated by Bronze Beasts outside of Brown Islands 2019-09-12 22:38:39 +02:00
Zeno Rogue b4025d375c Bronze Bugs are stunned also when pushed into water 2019-09-12 22:38:39 +02:00
Zeno Rogue f1008d270a a description of the elevation mechanics in Brown 2019-09-12 22:38:39 +02:00
Zeno Rogue 940ba91934 a description for Western Hawks 2019-09-12 22:38:39 +02:00
Zeno Rogue a676424573 Irradiated Yendor Challenge (but commented off for now) 2019-09-12 22:38:39 +02:00
Zeno Rogue 0a794f5b26 added set_priority_board(LB_RACING) 2019-09-12 22:38:39 +02:00
Zeno Rogue 6cea3c7378 illegal ghosts are now cleared after the race, not before 2019-09-12 22:38:39 +02:00
Zeno Rogue 20f7e8ff6d racing:: display scores/ghosts for racing even if racing is not yet on 2019-09-12 22:38:39 +02:00
Zeno Rogue a783e19f6a racing:: removed OO dialog since it caused errors on some systems 2019-09-12 22:38:39 +02:00
Zeno Rogue 370de4c735 race timestamp now uses 'long long' instead of 'time_t' to prevent incompatibilities 2019-09-12 22:38:39 +02:00
Zeno Rogue a9bf8304a4 west:: removed junk 2019-09-12 22:38:39 +02:00
Zeno Rogue 45c789ffd4 variant: gem renamed to Torbernite 2019-09-12 22:38:39 +02:00
Zeno Rogue 5079df3679 version 11.0 2019-09-12 22:38:39 +02:00
Zeno Rogue ab76ead2ae inv:: mirrors set for the new Orbs 2019-09-12 22:38:39 +02:00
Zeno Rogue 325877a9ee racing:: increase range allowed 2019-09-12 22:38:39 +02:00
Zeno Rogue 15cd70c6a7 racing:: officials as one file 2019-09-12 22:38:39 +02:00
Zeno Rogue b38e0b6752 racing:: false princess enemy is shown as female 2019-09-12 22:38:39 +02:00
Zeno Rogue 6d720f157f Cherenkov radiation 2019-09-12 22:38:39 +02:00
Zeno Rogue df73ccb4c2 splashing sounds when pushing things into water/chasms; barrels produce permanent walls 2019-09-12 22:38:39 +02:00
Zeno Rogue d982407d5a secondary attacks cause the barrels to explode 2019-09-12 22:38:39 +02:00
Zeno Rogue d64ce588d2 clicking sounds for traps 2019-09-12 22:38:38 +02:00
Zeno Rogue 92b37cf9e2 racing:: save parameters to config 2019-09-12 22:38:38 +02:00
Zeno Rogue eab0369ce9 shmup:: features of the new lands work 2019-09-12 22:38:38 +02:00
Zeno Rogue 90771dfdbe brownian:: correct memory clearing 2019-09-12 22:38:38 +02:00
Zeno Rogue d901b1b140 nicer coloring for the Falling Dog 2019-09-12 22:38:38 +02:00
Zeno Rogue 36920c04ec racing menu improvements, translations updated, text fixes 2019-09-12 22:38:38 +02:00
Zeno Rogue e4939ad8d4 racing:: achievements/leaderboards 2019-09-12 22:38:38 +02:00
Zeno Rogue ada9a99a5d racing:: works correctly with yshift 2019-09-12 22:38:38 +02:00
Zeno Rogue 75141e2fde added Allalinor to credits 2019-09-12 22:38:38 +02:00
Zeno Rogue f3470a21fd updated version in hyperstone achievements 2019-09-12 22:38:38 +02:00
Zeno Rogue e0212b1495 more official racers 2019-09-12 22:38:38 +02:00
Zeno Rogue 8d588cbdab racing:: trophies 2019-09-12 22:38:38 +02:00
Zeno Rogue a989214a46 racing:: guiding line feature 2019-09-12 22:38:38 +02:00
Zeno Rogue 21f85d6a44 racing:: clicking on race times presses 'o' 2019-09-12 22:38:38 +02:00
Zeno Rogue 3eceff921c racing:: fix a bug with race_start_tick 2019-09-12 22:38:38 +02:00
Zeno Rogue 7100dc0de6 racing:: changed the order in the menu 2019-09-12 22:38:38 +02:00
Zeno Rogue 2f1b3562c5 racing:: official Vizier ghost is drawn 2019-09-12 22:38:38 +02:00
Zeno Rogue 4c6c8bee7c racing:: no more weapons 2019-09-12 22:38:38 +02:00
Zeno Rogue 2b4af0ec24 newlands:: descriptions added for the new features 2019-09-12 22:38:38 +02:00
Zeno Rogue 275c5d568a brownian:: acidgull uses normal bird 2019-09-12 22:38:38 +02:00
Zeno Rogue 0adfaa55df brownian:: editable level colors 2019-09-12 22:38:38 +02:00
Zeno Rogue 41a4c1bb2e brownian:: improvement in distant generation 2019-09-12 22:38:38 +02:00
Zeno Rogue 78b64a3c6a fractick in draw_gravity_particles 2019-09-12 22:38:38 +02:00
Zeno Rogue cded55423b no more pushing statues on arrow/fire traps 2019-09-12 22:38:38 +02:00
Zeno Rogue e36246e392 saveboxes added 2019-09-12 22:38:38 +02:00
Zeno Rogue 6e549ebc54 new lands appear in land lists, implemented land validity 2019-09-12 22:38:38 +02:00
Zeno Rogue 7817c8bc47 inv:: emoved gainLate for new treasures 2019-09-12 22:38:38 +02:00
Zeno Rogue 2dbb081055 added people to credits 2019-09-12 22:38:38 +02:00
Zeno Rogue 16e29c7907 brownian:: use getDistLimit()*2/3/4 instead of 12/20/30 2019-09-12 22:38:38 +02:00
Zeno Rogue 7c84d2e554 achievements/leaderboards for the new lands/modes 2019-09-12 22:38:38 +02:00
Zeno Rogue 5598bf3e08 brownian:: nicer finding, and theme/balance improvements 2019-09-12 22:38:38 +02:00
Zeno Rogue 72417638d7 racing:: fixed mkdir on Windows 2019-09-12 22:38:38 +02:00
Zeno Rogue d9c412c540 variant:: improved the green part so that it does not overflow 2019-09-12 22:38:38 +02:00
Zeno Rogue d2bef0eaf8 variant:: no more graves created on traps 2019-09-12 22:38:38 +02:00
Zeno Rogue ebe75cdd62 renamed itOrbBrown to itOrbIntensity 2019-09-12 22:38:38 +02:00
? b4cb1c8352 papermodeldata files added 2019-05-16 09:42:22 +02:00
Zeno Rogue 54e262c157 explosive barrels now react to flash and lightning 2019-04-29 17:19:06 +02:00
Zeno Rogue 0fccad975c newlands:: orb changes 2019-04-29 17:19:06 +02:00
Zeno Rogue d944f3cb43 newlands:: explosive barrels are now attacked by pikemen and blue raiders 2019-04-29 17:19:06 +02:00
Zeno Rogue a1b22cbf9f newlands:: more theming 2019-04-29 17:19:06 +02:00
Zeno Rogue bc27e10dc9 newlands:: some theming 2019-04-29 17:19:06 +02:00
Zeno Rogue dda147c173 newlands:: wandering monsters in Brownian and Variant 2019-04-29 17:19:06 +02:00
Zeno Rogue 1ef8b8c5e8 brownian:: improved balance 2019-04-29 17:19:06 +02:00
Zeno Rogue 506af06c8f brownian:: improved colors 2019-04-29 17:19:06 +02:00
Zeno Rogue fd3f762a30 westwall:: no West treasures close to the wall 2019-04-29 17:19:06 +02:00
Zeno Rogue 4169fe4cb1 newlands:: OLR and summoning rules added 2019-04-29 17:19:06 +02:00
Zeno Rogue 30c4d798db newlands:: fixed Orb of Choice 2019-04-29 17:19:06 +02:00
Zeno Rogue acdb9d2219 new lands:: land/monster nativity/treasure rules 2019-04-29 17:19:06 +02:00
Zeno Rogue 8a414d1768 westwall:: monster theme 2019-04-29 17:19:06 +02:00
Zeno Rogue 6ec03a5217 racing:: golden auraspecial 2019-04-29 17:19:06 +02:00
Zeno Rogue 8635c49a5e racing:: race_advance 2019-04-29 17:19:06 +02:00
Zeno Rogue 39067a83df racing:: fixed racetimeformat, wrong digit was bounded to <6 2019-04-29 17:19:06 +02:00
Zeno Rogue 9a47148ae7 racing:: checksum to disable ghosts on incorrect tracks 2019-04-29 17:19:06 +02:00
Zeno Rogue 1d413a7d97 racing:: blockoff false routes 2019-04-29 17:19:06 +02:00
Zeno Rogue d65c41db12 racing::add_debug 2019-04-29 17:19:06 +02:00
Zeno Rogue 2bc66342dd newlands:: implemented new Orbs: Gravity, Intensity, Choice 2019-04-29 17:19:06 +02:00
Zeno Rogue 9d82cea995 westwall:: Yendor Quest in the West Wall 2019-04-29 17:19:06 +02:00
Zeno Rogue 6d392ce07e westwall:: initial commit 2019-04-29 17:19:06 +02:00
Zeno Rogue 724d3516fa variant:: first version 2019-04-29 17:19:05 +02:00
Zeno Rogue 4432b30b2a CAP_BONUS set to 1 2019-04-29 17:19:05 +02:00
Zeno Rogue 490ee83f3a racing:: with CAP_RACING off, no warning on unused variable racing::on 2019-04-29 17:19:05 +02:00
Zeno Rogue 8225593756 racing:: not available in bounded words (disabled in menu, changing geometry disables racing 2019-04-29 17:19:05 +02:00
Zeno Rogue 9f3eaf7011 racing:: player_relative enforced in quotient geometries 2019-04-29 17:19:05 +02:00
Zeno Rogue 7291b0d7be racing:: do not show X if invalid point 2019-04-29 17:19:05 +02:00
Zeno Rogue 4a308792a1 racing:: build_shortest_path used 2019-04-29 17:19:05 +02:00
Zeno Rogue 114d5d44d9 racing:: icewalls are no longer considered passable 2019-04-29 17:19:05 +02:00
Zeno Rogue f0be09407e racing:: works with crystal 2019-04-29 17:19:05 +02:00
Zeno Rogue 0a8b0c44d4 racing:: TWIDTH is now set depending on geometry 2019-04-29 17:19:05 +02:00
Zeno Rogue a6ffdc8676 racing:: failure now uses gamegen_failure flag -- no more game starting multiple times 2019-04-29 17:19:05 +02:00
Zeno Rogue 04f26cdf1d racing:: failure now uses gamegen_failure flag -- no more game starting multiple times 2019-04-29 17:19:05 +02:00
Zeno Rogue cd01e6bbf1 racing:: made the current version compile without CAP_RACING 2019-04-29 17:19:05 +02:00
Zeno Rogue 28edeea169 racing:: reset footphase for ghosts who have reached the target 2019-04-29 17:19:05 +02:00
Zeno Rogue 6a9eaa91bd racing:: compressing the files 2019-04-29 17:19:05 +02:00
Zeno Rogue c703fd50eb racing:: fixed not selecting track_code and specialland 2019-04-29 17:19:05 +02:00
Zeno Rogue 201f3fb11d racing:: smaller spread of racer generation 2019-04-29 17:19:05 +02:00
Zeno Rogue b840574351 racing:: you can no more start moving by pressing GO before the time starts 2019-04-29 17:19:05 +02:00
Zeno Rogue 1810a89daa racing:: reordered the tracks from easiest to hardest 2019-04-29 17:19:05 +02:00
Zeno Rogue 82318e938f racing:: more space on the start line 2019-04-29 17:19:05 +02:00
Zeno Rogue 867efa3196 racing:: disabled heat processing 2019-04-29 17:19:05 +02:00
Zeno Rogue 29c0b899dc racing:: track selection; can be now set as a special game mode 2019-04-29 17:19:05 +02:00
Zeno Rogue 6dd14a310f racing:: track code can be changed 2019-04-29 17:19:05 +02:00
Zeno Rogue 8672b121b9 racing:: save ghost files 2019-04-29 17:19:05 +02:00
Zeno Rogue c67d7e06c6 racing:: remembering ghost, track selection (with times), completion percentage shown 2019-04-29 17:19:05 +02:00
Zeno Rogue 27011f1cf0 racing:: measuring times 2019-04-29 17:19:05 +02:00
Zeno Rogue bf23d42e4c racing:: more arrangements 2019-04-29 17:19:05 +02:00
Zeno Rogue 410c05554c racing:: fixed some lands for racing 2019-04-29 17:19:05 +02:00
Zeno Rogue a14255158a racing:: no ghosts while racing 2019-04-29 17:19:05 +02:00
Zeno Rogue 8408dd63d3 racing:: hotkey configuration 2019-04-29 17:19:05 +02:00
Zeno Rogue 65f07aa30a racing:: efficient braking, stop when hit wall 2019-04-29 17:19:05 +02:00
Zeno Rogue 10b664097f racing:: check connectivity 2019-04-29 17:19:05 +02:00
Zeno Rogue d5ce7dc30b racing:: improved Euclidean track generation 2019-04-29 17:19:05 +02:00
Zeno Rogue f6226665d0 racing:: subscreens used with multiple players 2019-04-29 17:19:05 +02:00
Zeno Rogue 16a5e45c0a racing:: first commit 2019-04-29 17:19:05 +02:00
Zeno Rogue 74ad8ea135 brownian:: more serious work 2019-04-29 17:19:05 +02:00
? 0a886f6a67 updated hyperrogue-music.txt 2019-04-19 22:28:34 +02:00
Zeno Rogue 016aa76f45
Merge pull request #76 from Quuxplusone/steam
Make hyper_function work on GCC 4.6 so we don't need USE_STDFUNCTION anymore
2019-04-05 03:18:40 +02:00
Zeno Rogue 7b37d8c780
Merge pull request #75 from Quuxplusone/rm-old-files
git rm some ancient files. NFC.
2019-04-05 03:18:16 +02:00
Arthur O'Dwyer f5b84bade9 git rm some ancient files. NFC. 2019-04-03 16:26:22 -04:00
Arthur O'Dwyer ac37e5c000 Get hyper_function.h compiling on GCC 4.6.
We must avoid the following features:
- the `using` syntax for typedefs
- alias templates (so, rename `hyper_function` to `function`)
- the `override` keyword
- defaulted virtual destructors
2019-02-10 15:54:58 -05:00
Arthur O'Dwyer 5efd1f5662 Fix a compiler warning from GCC 4.6.4.
The variable name in this warning is "pre-phi-tmp", as in, some
compiler internals spilling into userspace. But I think it's probably
referring to `bestV`, and indeed, this initialization silences the
warning.

    geometry2.cpp: In function ‘void hr::virtualRebaseSimple(hr::heptagon*&, hr::transmatrix&)’:
    geometry2.cpp:366:7: error: ‘prephitmp.91209’ may be used uninitialized in this function [-Werror=uninitialized]
2019-02-10 15:51:27 -05:00
Arthur O'Dwyer 5e8d03e90d Add GCC 4.6 to the TravisCI build.
With `-march=native`, we see assembler error messages like those described
in https://github.com/uzh-rpg/rpg_svo/issues/7 .
2019-02-10 14:51:21 -05:00
424 changed files with 745525 additions and 47901 deletions

31
.github/workflows/build.sh vendored Executable file
View File

@ -0,0 +1,31 @@
set -x -e o pipefail
GH_MYMAKE_ARGS="-fPIC"
HYPERROGUE_USE_GLEW=$GH_HYP_GLEW
export HYPERROGUE_USE_GLEW=${HYPERROGUE_USE_GLEW: -1}
HYPERROGUE_USE_PNG=$GH_HYP_PNG
export HYPERROGUE_USE_PNG=${HYPERROGUE_USE_PNG: -1}
HYPERROGUE_USE_ROGUEVIZ=$GH_HYP_RVIZ
export HYPERROGUE_USE_ROGUEVIZ=${HYPERROGUE_USE_ROGUEVIZ: -1}
if [[ "$GH_HYP_RVIZ" == "rviz_1" ]]; then
GH_MYMAKE_ARGS+=" -std=c++17 -rv"
fi
export CC=$GH_COMPILER
export CXX=${CC%cc}++
export CXXFLAGS_EARLY=-Werror
if [[ "$GH_BUILDSYS" == "makefile" ]]; then
make
elif [[ "$GH_BUILDSYS" == "mymake" ]]; then
make mymake
./mymake $GH_MYMAKE_ARGS
mv hyper hyperrogue
else
echo 'unknown build system'
exit 1
fi

87
.github/workflows/github_ci.yml vendored Normal file
View File

@ -0,0 +1,87 @@
name: Github CI
on:
push:
branches: [master]
pull_request:
branches: [master]
jobs:
main_matrix:
name: Unix
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
# os: [ubuntu-latest, macos-latest]
# macos is broken for now
os: [ubuntu-latest]
compiler: [gcc, clang]
build_system: [makefile, mymake]
hyper_use_rviz: [rviz_1, rviz_0]
hyper_use_png: [png_1]
hyper_use_glew: [glew_1]
env:
GH_OS: ${{ matrix.os }}
GH_COMPILER: ${{ matrix.compiler }}
GH_BUILDSYS: ${{ matrix.build_system }}
GH_HYP_RVIZ: ${{ matrix.hyper_use_rviz }}
GH_HYP_PNG: ${{ matrix.hyper_use_png }}
GH_HYP_GLEW: ${{ matrix.hyper_use_glew }}
steps:
- uses: actions/checkout@v2
- name: Install build dependencies
run: .github/workflows/install_deps.sh
- name: Build
run: .github/workflows/build.sh
- name: Do a simple test
run: .github/workflows/test_simple.sh
windows:
name: Windows
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
compiler: [gcc]
build_system: [makefile, mymake]
hyper_use_rviz: [rviz_1, rviz_0]
hyper_use_png: [png_1]
hyper_use_glew: [glew_1]
env:
GH_OS: windows-latest
GH_COMPILER: ${{ matrix.compiler }}
GH_BUILDSYS: ${{ matrix.build_system }}
GH_HYP_RVIZ: ${{ matrix.hyper_use_rviz }}
GH_HYP_PNG: ${{ matrix.hyper_use_png }}
GH_HYP_GLEW: ${{ matrix.hyper_use_glew }}
defaults:
run:
shell: msys2 {0}
steps:
- uses: msys2/setup-msys2@v2
with:
update: true
install: 'pactoys'
- uses: actions/checkout@v2
- name: Install build dependencies
env:
MSYSTEM: MSYS
run: .github/workflows/install_deps.sh
- name: Build
run: .github/workflows/build.sh
- name: Do a simple test
run: .github/workflows/test_simple.sh
# broken for now
# emscripten:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v2
# - name: Build
# run: |
# docker run --rm -v $(pwd):/src trzeci/emscripten make emscripten
# - name: Do a simple test
# run: |
# ls -lAF hyper.html hyper.js hyper.wasm

34
.github/workflows/install_deps.sh vendored Executable file
View File

@ -0,0 +1,34 @@
set -x -e o pipefail
GH_DEPS_UBUNTU="$GH_COMPILER libsdl1.2-dev libsdl-ttf2.0-dev libsdl-gfx1.2-dev libsdl-mixer1.2-dev"
GH_DEPS_MACOS="sdl sdl_gfx sdl_mixer sdl_ttf"
GH_DEPS_MINGW64="$GH_COMPILER:x SDL:x SDL_ttf:x SDL_gfx:x SDL_mixer:x make gdb:x"
if [[ "$GH_HYP_GLEW" == "glew_1" ]]; then
GH_DEPS_UBUNTU+=" libglew-dev"
GH_DEPS_MACOS+=" glew"
GH_DEPS_MINGW64+=" glew:x"
fi
if [[ "$GH_HYP_PNG" == "png_1" ]]; then
GH_DEPS_UBUNTU+=" libpng-dev"
GH_DEPS_MACOS+=" libpng"
GH_DEPS_MINGW64+=" libpng:x"
fi
if [[ "$GH_OS" == "ubuntu-latest" ]]; then
sudo apt-get -y install $GH_DEPS_UBUNTU
elif [[ "$GH_OS" == "macos-latest" ]]; then
brew update
# macos-latest already has both gcc and clang
brew install $GH_DEPS_MACOS
# work around https://stackoverflow.com/questions/51034399/ for now
(cd /usr/local/include && ln -sf SDL/SDL.h)
elif [[ "$GH_OS" == "windows-latest" ]]; then
pacboy -Sy --noconfirm --needed $GH_DEPS_MINGW64
sed -i'.orig' 's/<SDL.h>/"SDL.h"/' /mingw64/include/SDL/SDL_gfxPrimitives.h
else
echo 'unknown OS'
exit 1
fi

17
.github/workflows/test_simple.sh vendored Executable file
View File

@ -0,0 +1,17 @@
set -x -e o pipefail
if [[ "$GH_OS" == "windows-latest" && "$GH_BUILDSYS" == "mymake" ]]; then
cat << ENDOFCMDS > .github/workflows/gdb_cmds.txt
run --version
backtrace
exit 1
ENDOFCMDS
echo not running gdb -- not working currently
echo gdb --batch -x .github/workflows/gdb_cmds.txt ./hyperrogue
else
./hyperrogue --version
fi

17
.gitignore vendored
View File

@ -1,18 +1 @@
.deps/
ChangeLog
Makefile.in
aclocal.m4
autom4te*
config.guess
config.sub
config.log
config.status
configure
depcomp
Makefile
install-sh
missing
compile
NEWS
AUTHORS
README

View File

@ -1,147 +0,0 @@
language: cpp
services:
- docker
matrix:
include:
- os: linux
compiler: gcc
env: >-
TRAVIS_OS_NAME=linux
TRAVIS_COMPILER_NAME=gcc
TRAVIS_BUILD_SYSTEM=autotools
HYPERROGUE_USE_GLEW=1
HYPERROGUE_USE_PNG=1
- os: osx
compiler: clang
env: >-
TRAVIS_OS_NAME=osx
TRAVIS_COMPILER_NAME=clang
TRAVIS_BUILD_SYSTEM=autotools
HYPERROGUE_USE_GLEW=1
HYPERROGUE_USE_PNG=1
- os: linux
compiler: gcc
env: >-
TRAVIS_OS_NAME=linux
TRAVIS_COMPILER_NAME=gcc
TRAVIS_BUILD_SYSTEM=Makefile
HYPERROGUE_USE_GLEW=1
HYPERROGUE_USE_PNG=1
HYPERROGUE_USE_ROGUEVIZ=1
- os: linux
compiler: clang
env: >-
TRAVIS_OS_NAME=linux
TRAVIS_COMPILER_NAME=clang
TRAVIS_BUILD_SYSTEM=Makefile
HYPERROGUE_USE_GLEW=1
HYPERROGUE_USE_PNG=1
HYPERROGUE_USE_ROGUEVIZ=1
- os: osx
compiler: gcc
env: >-
TRAVIS_OS_NAME=osx
TRAVIS_COMPILER_NAME=gcc
TRAVIS_BUILD_SYSTEM=Makefile
HYPERROGUE_USE_GLEW=1
HYPERROGUE_USE_PNG=1
HYPERROGUE_USE_ROGUEVIZ=1
- os: osx
compiler: clang
env: >-
TRAVIS_OS_NAME=osx
TRAVIS_COMPILER_NAME=clang
TRAVIS_BUILD_SYSTEM=Makefile
HYPERROGUE_USE_GLEW=1
HYPERROGUE_USE_PNG=1
HYPERROGUE_USE_ROGUEVIZ=1
- os: osx
compiler: clang
env: >-
TRAVIS_OS_NAME=osx
TRAVIS_COMPILER_NAME=clang
TRAVIS_BUILD_SYSTEM=Makefile
HYPERROGUE_USE_GLEW=0
HYPERROGUE_USE_PNG=0
HYPERROGUE_USE_ROGUEVIZ=0
- os: linux
env: >-
TRAVIS_OS_NAME=linux
TRAVIS_COMPILER_NAME=emscripten
TRAVIS_BUILD_SYSTEM=emscripten
before_install:
- |-
# Install SDL
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
sudo apt-get update -qq
sudo apt-get install -qq libsdl1.2-dev libsdl-gfx1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev
elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
brew update
brew install sdl sdl_gfx sdl_mixer sdl_ttf
# work around https://stackoverflow.com/questions/51034399/ for now
(cd /usr/local/include && ln -sf SDL/SDL.h)
else
exit 'Unsupported OS'
fi
- |-
# Install GLEW if asked for
if [[ "$HYPERROGUE_USE_GLEW" == "1" ]]; then
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
sudo apt-get install -qq libglew-dev
elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
brew install glew
else
exit 'Unsupported OS'
fi
fi
- |-
# Install libpng if asked for
if [[ "$HYPERROGUE_USE_PNG" == "1" ]]; then
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
echo 'libpng is installed by default'
elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
brew install libpng
else
exit 'Unsupported OS'
fi
fi
- |-
# Install autotools if asked for
if [[ "$TRAVIS_USE_AUTOTOOLS" == "1" ]]; then
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
echo 'autotools is installed by default'
elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
brew install automake
else
exit 'Unsupported OS'
fi
fi
script:
- |-
# Build hyperrogue.
if [[ "$TRAVIS_BUILD_SYSTEM" == "autotools" ]]; then
autoreconf -vi
./configure CXXFLAGS="-Wall -Werror"
make
elif [[ "$TRAVIS_BUILD_SYSTEM" == "Makefile" ]]; then
make -f Makefile.simple
elif [[ "$TRAVIS_BUILD_SYSTEM" == "emscripten" ]]; then
docker run --rm -v $(pwd):/src trzeci/emscripten make -f Makefile.simple emscripten
else
exit 'Unsupported build system'
fi
- |-
# Test hyperrogue.
if [[ "$TRAVIS_BUILD_SYSTEM" == "emscripten" ]]; then
ls -lAF hyper.html hyper.js hyper.wasm
else
./hyperrogue --help
fi
- |-
# Test "make dist". ("make distcheck" is expected to fail.)
if [[ "$TRAVIS_BUILD_SYSTEM" == "autotools" ]]; then make dist; fi
- |-
# Test "sudo make install".
if [[ "$TRAVIS_BUILD_SYSTEM" == "autotools" ]]; then sudo make install; fi

1381
3d-models.cpp Normal file

File diff suppressed because it is too large Load Diff

33
CITATION.cff Normal file
View File

@ -0,0 +1,33 @@
cff-version: 1.2.0
message: "If you use RogueViz in your research, please cite it as below. Please also cite the 2017 paper about HyperRogue (see https://archive.bridgesmathart.org/2017/bridges2017-9.html for BibTeX)."
authors:
- family-names: "Kopczyński"
given-names: "Eryk"
orcid: "https://orcid.org/0000-0001-5588-1181"
- family-names: "Celińska-Kopczyńska"
given-names: "Dorota"
orcid: "https://orcid.org/0000-0001-5910-0039"
title: "RogueViz: non-Euclidean geometry engine for visualizations, games, math art, and research"
type: software
version: 12.0f
date-released: 2021-08-05
url: "https://github.com/zenorogue/hyperrogue/"
references:
- authors:
- family-names: Kopczyński
given-names: Eryk
- family-names: Celińska
given-names: Dorota
- family-names: Čtrnáct
given-names: Marek
title: "HyperRogue: Playing with Hyperbolic Geometry"
pages: "9--16"
collection-title: "Proceedings of Bridges 2017: Mathematics, Art, Music, Architecture, Education, Culture"
year: 2017
editor: "Swart, David and S\\'equin, Carlo H. and Fenyvesi, Krist\\'of"
isbn: "978-1-938664-22-9"
issn: "1099-6702"
publisher: "Tessellations Publishing, Phoenix, Arizona"
note: "Available online at \\url{http://archive.bridgesmathart.org/2017/bridges2017-9.pdf}"
type: article

283
Doxyfile Normal file
View File

@ -0,0 +1,283 @@
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "HyperRogue"
PROJECT_NUMBER = 11.2
PROJECT_BRIEF = "game/visualization engine based on non-Euclidean geometry"
PROJECT_LOGO = hr-icon-png96.png
OUTPUT_DIRECTORY = doc
CREATE_SUBDIRS = NO
ALLOW_UNICODE_NAMES = NO
OUTPUT_LANGUAGE = English
OUTPUT_TEXT_DIRECTION = None
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF = "The $name class" \
"The $name widget" \
"The $name file" \
is \
provides \
specifies \
contains \
represents \
a \
an \
the
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 4
ALIASES =
TCL_SUBST =
OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
OPTIMIZE_OUTPUT_SLICE = NO
EXTENSION_MAPPING =
MARKDOWN_SUPPORT = YES
TOC_INCLUDE_HEADINGS = 0
AUTOLINK_SUPPORT = YES
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
GROUP_NESTED_COMPOUNDS = NO
SUBGROUPING = YES
INLINE_GROUPED_CLASSES = NO
INLINE_SIMPLE_STRUCTS = NO
TYPEDEF_HIDES_STRUCT = NO
LOOKUP_CACHE_SIZE = 0
EXTRACT_ALL = NO
EXTRACT_PRIVATE = NO
EXTRACT_PACKAGE = NO
EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO
HIDE_COMPOUND_REFERENCE= NO
SHOW_INCLUDE_FILES = YES
SHOW_GROUPED_MEMB_INC = NO
FORCE_LOCAL_INCLUDES = NO
INLINE_INFO = YES
SORT_MEMBER_DOCS = NO
SORT_BRIEF_DOCS = NO
SORT_MEMBERS_CTORS_1ST = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
STRICT_PROTO_MATCHING = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_FILES = YES
SHOW_NAMESPACES = YES
FILE_VERSION_FILTER =
LAYOUT_FILE =
CITE_BIB_FILES =
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_AS_ERROR = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
INPUT =
USE_MDFILE_AS_MAINPAGE = source-doc.md
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.cpp hyper.h classes.h sysconfig.h source-doc.md
RECURSIVE = NO
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
FILTER_SOURCE_PATTERNS =
USE_MDFILE_AS_MAINPAGE =
SOURCE_BROWSER = NO
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION = NO
REFERENCES_LINK_SOURCE = YES
SOURCE_TOOLTIPS = YES
USE_HTAGS = NO
VERBATIM_HEADERS = NO
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
GENERATE_HTML = YES
HTML_OUTPUT = html
HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_EXTRA_STYLESHEET =
HTML_EXTRA_FILES =
HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = NO
HTML_DYNAMIC_MENUS = YES
HTML_DYNAMIC_SECTIONS = NO
HTML_INDEX_NUM_ENTRIES = 100
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_BUNDLE_ID = org.doxygen.Project
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
DOCSET_PUBLISHER_NAME = Publisher
GENERATE_HTMLHELP = NO
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
CHM_INDEX_ENCODING =
BINARY_TOC = NO
TOC_EXPAND = NO
GENERATE_QHP = NO
QCH_FILE =
QHP_NAMESPACE = org.doxygen.Project
QHP_VIRTUAL_FOLDER = doc
QHP_CUST_FILTER_NAME =
QHP_CUST_FILTER_ATTRS =
QHP_SECT_FILTER_ATTRS =
QHG_LOCATION =
GENERATE_ECLIPSEHELP = NO
ECLIPSE_DOC_ID = org.doxygen.Project
DISABLE_INDEX = NO
GENERATE_TREEVIEW = NO
ENUM_VALUES_PER_LINE = 4
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
USE_MATHJAX = NO
MATHJAX_FORMAT = HTML-CSS
MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/
MATHJAX_EXTENSIONS =
MATHJAX_CODEFILE =
SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO
EXTERNAL_SEARCH = NO
SEARCHENGINE_URL =
SEARCHDATA_FILE = searchdata.xml
EXTERNAL_SEARCH_ID =
EXTRA_SEARCH_MAPPINGS =
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
LATEX_CMD_NAME =
MAKEINDEX_CMD_NAME = makeindex
LATEX_MAKEINDEX_CMD = \makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4
EXTRA_PACKAGES =
LATEX_HEADER =
LATEX_FOOTER =
LATEX_EXTRA_STYLESHEET =
LATEX_EXTRA_FILES =
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
LATEX_SOURCE_CODE = NO
LATEX_BIB_STYLE = plain
LATEX_TIMESTAMP = NO
LATEX_EMOJI_DIRECTORY =
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
RTF_SOURCE_CODE = NO
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_SUBDIR =
MAN_LINKS = NO
GENERATE_XML = NO
XML_OUTPUT = xml
XML_PROGRAMLISTING = YES
XML_NS_MEMB_FILE_SCOPE = NO
GENERATE_DOCBOOK = NO
DOCBOOK_OUTPUT = docbook
DOCBOOK_PROGRAMLISTING = NO
GENERATE_AUTOGEN_DEF = NO
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED = HDR=1
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
EXTERNAL_PAGES = YES
PERL_PATH = /usr/bin/perl
CLASS_DIAGRAMS = YES
MSCGEN_PATH =
DIA_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO
DOT_NUM_THREADS = 0
DOT_FONTNAME = Helvetica
DOT_FONTSIZE = 10
DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
UML_LIMIT_NUM_FIELDS = 10
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
INTERACTIVE_SVG = NO
DOT_PATH =
DOTFILE_DIRS =
MSCFILE_DIRS =
DIAFILE_DIRS =
PLANTUML_JAR_PATH =
PLANTUML_CFG_FILE =
PLANTUML_INCLUDE_PATH =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES

3
FUNDING.yml Normal file
View File

@ -0,0 +1,3 @@
patreon: zenorogue
custom: http://www.roguetemple.com/z/donate.php
github: zenorogue

370
INSTALL
View File

@ -1,370 +0,0 @@
Installation Instructions
*************************
Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. This file is offered as-is,
without warranty of any kind.
Basic Installation
==================
Briefly, the shell command `./configure && make && make install'
should configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package. Some packages provide this
`INSTALL' file but do not implement all of the features documented
below. The lack of an optional feature in a given package is not
necessarily a bug. More recommendations for GNU packages can be found
in *note Makefile Conventions: (standards)Makefile Conventions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. Caching is
disabled by default to prevent problems with accidental use of stale
cache files.
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You need `configure.ac' if
you want to change it or regenerate `configure' using a newer version
of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system.
Running `configure' might take a while. While running, it prints
some messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package, generally using the just-built uninstalled binaries.
4. Type `make install' to install the programs and any data files and
documentation. When installing into a prefix owned by root, it is
recommended that the package be configured and built as a regular
user, and only the `make install' phase executed with root
privileges.
5. Optionally, type `make installcheck' to repeat any self-tests, but
this time using the binaries in their final installed location.
This target does not install anything. Running this target as a
regular user, particularly if the prior `make install' required
root privileges, verifies that the installation completed
correctly.
6. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
7. Often, you can also type `make uninstall' to remove the installed
files again. In practice, not all packages have tested that
uninstallation works correctly, even though it is required by the
GNU Coding Standards.
8. Some packages, particularly those that use Automake, provide `make
distcheck', which can by used by developers to test that all other
targets like `make install' and `make uninstall' work correctly.
This target is generally not run by end users.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. Run `./configure --help'
for details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c99 CFLAGS=-g LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'. This
is known as a "VPATH" build.
With a non-GNU `make', it is safer to compile the package for one
architecture at a time in the source code directory. After you have
installed the package for one architecture, use `make distclean' before
reconfiguring for another architecture.
On MacOS X 10.5 and later systems, you can create libraries and
executables that work on multiple system types--known as "fat" or
"universal" binaries--by specifying multiple `-arch' options to the
compiler but only a single `-arch' option to the preprocessor. Like
this:
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CPP="gcc -E" CXXCPP="g++ -E"
This is not guaranteed to produce working output in all cases, you
may have to build one architecture at a time and combine the results
using the `lipo' tool if you have problems.
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX', where PREFIX must be an
absolute file name.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them. In general, the
default for these options is expressed in terms of `${prefix}', so that
specifying just `--prefix' will affect all of the other directory
specifications that were not explicitly provided.
The most portable way to affect installation locations is to pass the
correct locations to `configure'; however, many packages provide one or
both of the following shortcuts of passing variable assignments to the
`make install' command line to change installation locations without
having to reconfigure or recompile.
The first method involves providing an override variable for each
affected directory. For example, `make install
prefix=/alternate/directory' will choose an alternate location for all
directory configuration variables that were expressed in terms of
`${prefix}'. Any directories that were specified during `configure',
but not in terms of `${prefix}', must each be overridden at install
time for the entire installation to be relocated. The approach of
makefile variable overrides for each directory variable is required by
the GNU Coding Standards, and ideally causes no recompilation.
However, some platforms have known limitations with the semantics of
shared libraries that end up requiring recompilation when using this
method, particularly noticeable in packages that use GNU Libtool.
The second method involves providing the `DESTDIR' variable. For
example, `make install DESTDIR=/alternate/directory' will prepend
`/alternate/directory' before all installation names. The approach of
`DESTDIR' overrides is not required by the GNU Coding Standards, and
does not work on platforms that have drive letters. On the other hand,
it does better at avoiding recompilation issues, and works well even
when some directory options were not specified in terms of `${prefix}'
at `configure' time.
Optional Features
=================
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Some packages offer the ability to configure how verbose the
execution of `make' will be. For these packages, running `./configure
--enable-silent-rules' sets the default to minimal output, which can be
overridden with `make V=1'; while running `./configure
--disable-silent-rules' sets the default to verbose, which can be
overridden with `make V=0'.
Particular systems
==================
On HP-UX, the default C compiler is not ANSI C compatible. If GNU
CC is not installed, it is recommended to use the following options in
order to use an ANSI C compiler:
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
HP-UX `make' updates targets which have the same time stamps as
their prerequisites, which makes it generally unusable when shipped
generated files such as `configure' are involved. Use GNU `make'
instead.
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
parse its `<wchar.h>' header file. The option `-nodtk' can be used as
a workaround. If GNU CC is not installed, it is therefore recommended
to try
./configure CC="cc"
and if that doesn't work, try
./configure CC="cc -nodtk"
On Solaris, don't put `/usr/ucb' early in your `PATH'. This
directory contains several dysfunctional programs; working variants of
these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
in your `PATH', put it _after_ `/usr/bin'.
On Haiku, software installed for all users goes in `/boot/common',
not `/usr/local'. It is recommended to use the following options:
./configure --prefix=/boot/common
Specifying the System Type
==========================
There may be some features `configure' cannot figure out
automatically, but needs to determine by the type of machine the package
will run on. Usually, assuming the package is built to be run on the
_same_ architectures, `configure' can figure that out, but if it prints
a message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS
KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script).
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
an Autoconf limitation. Until the limitation is lifted, you can use
this workaround:
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
`configure' Invocation
======================
`configure' recognizes the following options to control how it
operates.
`--help'
`-h'
Print a summary of all of the options to `configure', and exit.
`--help=short'
`--help=recursive'
Print a summary of the options unique to this package's
`configure', and exit. The `short' variant lists options used
only in the top level, while the `recursive' variant lists options
also present in any nested packages.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--prefix=DIR'
Use DIR as the installation prefix. *note Installation Names::
for more details, including other options available for fine-tuning
the installation locations.
`--no-create'
`-n'
Run the configure checks, but stop before creating any output
files.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

196
Makefile Normal file
View File

@ -0,0 +1,196 @@
# This Makefile works for Mac OS X (El Capitan), MinGW, and Linux.
#
# Environmental vairables:
# If you want to build with Glew, set
# HYPERROGUE_USE_GLEW=1
# If you want to use libpng, set
# HYPERROGUE_USE_PNG=1
#
# For Mac OS X:
# Run `brew install sdl12-compat sdl_gfx sdl_mixer sdl_ttf`
# Run `brew install glew libpng` to install the optional dependencies
# Run `make` to build HyperRogue as `./hyperrogue`.
#
# For MSYS2 and MinGW-w64:
# To install SDL and other required libraries, run these commands
# from the MSYS2 shell:
# pacman -S mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-glew
# pacman -S mingw-w64-ucrt-x86_64-SDL mingw-w64-ucrt-x86_64-SDL_mixer
# pacman -S mingw-w64-ucrt-x86_64-SDL_ttf mingw-w64-ucrt-x86_64-SDL_gfx
# pacman -S make
# Then run "make" to build HyperRogue as ./hyperrogue.exe.
#
# For Ubuntu Linux:
# Run "sudo apt-get install libsdl-dev" to install SDL in /usr/local.
# Run "make" to build HyperRogue as ./hyperrogue.
ifeq ($(OS),Windows_NT)
OS := mingw
TOOLCHAIN := mingw
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
OS := linux
else
ifeq ($(UNAME_S),Darwin)
OS := osx
endif
endif
TOOLCHAIN_VERSION_S := $(shell $(CXX) --version)
ifneq (,$(findstring clang,$(TOOLCHAIN_VERSION_S)))
TOOLCHAIN := clang
else
TOOLCHAIN := gcc
endif
endif
## We have now finished inspecting the environment via $(shell).
## Begin customization points for each OS and TOOLCHAIN we support.
ifeq (${OS},linux)
CXXFLAGS_EARLY += -DLINUX
EXE_EXTENSION :=
LDFLAGS_GL := -lGL
LDFLAGS_GLEW := -lGLEW
LDFLAGS_PNG := -lpng
LDFLAGS_SDL := -lSDL -lSDL_gfx -lSDL_mixer -lSDL_ttf -lpthread -lz
OBJ_EXTENSION := .o
hyper_RES :=
endif
ifeq (${OS},mingw)
CXXFLAGS_EARLY += -DWINDOWS -mwindows -D_A_VOLID=8 -I/ucrt64/include/SDL
EXE_EXTENSION := .exe
LDFLAGS_GL := -lopengl32
LDFLAGS_GLEW := -lglew32
LDFLAGS_PNG := -lpng
LDFLAGS_SDL := -lSDL -lSDL_gfx -lSDL_mixer -lSDL_ttf -lpthread -lz
OBJ_EXTENSION := .o
hyper_RES := hyper.res
ifeq (${HYPERROGUE_USE_GLEW},)
HYPERROGUE_USE_GLEW := 1
endif
endif
ifeq (${OS},osx)
HOMEBREW_PREFIX := $(shell brew --prefix)
CXXFLAGS_EARLY += -DMAC -I$(HOMEBREW_PREFIX)/include -I$(HOMEBREW_PREFIX)/include/SDL
EXE_EXTENSION :=
LDFLAGS_EARLY += -L$(HOMEBREW_PREFIX)/lib
LDFLAGS_GL := -framework AppKit -framework OpenGL
LDFLAGS_GLEW := -lGLEW
LDFLAGS_PNG := -lpng
LDFLAGS_SDL := -lSDL -lSDLMain -lSDL_gfx -lSDL_mixer -lSDL_ttf -lpthread -lz
OBJ_EXTENSION := .o
hyper_RES :=
endif
ifeq (${TOOLCHAIN},clang)
CXXFLAGS_STD = -std=c++14
CXXFLAGS_EARLY += -fPIC
CXXFLAGS_EARLY += -W -Wall -Wextra -Wsuggest-override -pedantic
CXXFLAGS_EARLY += -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-maybe-uninitialized -Wno-char-subscripts -Wno-unknown-warning-option
CXXFLAGS_EARLY += -Wno-invalid-offsetof
endif
ifeq (${TOOLCHAIN},gcc)
CXXFLAGS_STD = -std=c++14
CXXFLAGS_EARLY += -fPIC
CXXFLAGS_EARLY += -W -Wall -Wextra -pedantic
CXXFLAGS_EARLY += -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-maybe-uninitialized
CXXFLAGS_EARLY += -Wno-invalid-offsetof
endif
ifeq (${TOOLCHAIN},mingw)
CXXFLAGS_STD = -std=c++14
CXXFLAGS_EARLY += -W -Wall -Wextra
CXXFLAGS_EARLY += -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-maybe-uninitialized
CXXFLAGS_EARLY += -Wno-invalid-offsetof
endif
ifeq (${FONTCONFIG},1)
CXXFLAGS_EARLY += -DFONTCONFIG `pkg-config --cflags fontconfig`
LDFLAGS_EARLY += `pkg-config --libs fontconfig`
endif
## We have now finished OS-specific and TOOLCHAIN-specific computations.
## Begin customization points for user-specifiable HYPERROGUE_USE_XXX macros.
hyper_OBJS = hyper$(OBJ_EXTENSION)
hyper_LDFLAGS = $(LDFLAGS_GL) $(LDFLAGS_SDL)
ifeq (${HYPERROGUE_USE_GLEW},1)
CXXFLAGS_EARLY += -DCAP_GLEW=1
hyper_LDFLAGS += $(LDFLAGS_GLEW)
else
CXXFLAGS_EARLY += -DCAP_GLEW=0
endif
ifeq (${HYPERROGUE_USE_PNG},1)
CXXFLAGS_EARLY += -DCAP_PNG=1
hyper_LDFLAGS += $(LDFLAGS_PNG)
hyper_OBJS += savepng$(OBJ_EXTENSION)
else
CXXFLAGS_EARLY += -DCAP_PNG=0
endif
ifeq (${HYPERROGUE_USE_ROGUEVIZ},1)
# Enable RogueViz. RogueViz requires C++17.
CXXFLAGS_STD = -std=c++17
CXXFLAGS_EARLY += -DCAP_ROGUEVIZ=1
endif
## We have now finished HYPERROGUE_USE_XXX-specific computations.
## Begin the Makefile proper.
override CXXFLAGS := $(CXXFLAGS_STD) $(CXXFLAGS_EARLY) $(CXXFLAGS) ${EXTRA_CXXFLAGS}
override LDFLAGS := $(LDFLAGS_EARLY) $(LDFLAGS) ${EXTRA_LDFLAGS}
hyperrogue$(EXE_EXTENSION): $(hyper_OBJS) $(hyper_RES)
$(CXX) $(CXXFLAGS) $(hyper_OBJS) $(hyper_RES) $(LDFLAGS) $(hyper_LDFLAGS) -o $@
hyper$(OBJ_EXTENSION): *.cpp language-data.cpp autohdr.h
$(CXX) -O2 $(CXXFLAGS) $(hyper_CXXFLAGS) -c hyper.cpp -o $@
hyper.res: hyper.rc hr-icon.ico
windres hyper.rc -O coff -o hyper.res
langen$(EXE_EXTENSION): langen.cpp language-??.cpp language-ptbr.cpp
$(CXX) -O0 $(CXXFLAGS) $(langen_CXXFLAGS) langen.cpp $(LDFLAGS) -o $@
makeh$(EXE_EXTENSION): makeh.cpp
$(CXX) -O2 makeh.cpp -o $@
autohdr.h: makeh$(EXE_EXTENSION) language-data.cpp *.cpp
./makeh classes.cpp locations.cpp colors.cpp hyperpoint.cpp geometry.cpp embeddings.cpp goldberg.cpp init.cpp floorshapes.cpp cell.cpp multi.cpp shmup.cpp pattern2.cpp mapeditor.cpp graph.cpp textures.cpp hprint.cpp language.cpp util.cpp complex.cpp multigame.cpp arbitrile.cpp rulegen.cpp *.cpp > autohdr.h
language-data.cpp: langen$(EXE_EXTENSION)
./langen > language-data.cpp
savepng$(OBJ_EXTENSION): savepng.cpp
$(CXX) -O2 $(CXXFLAGS) -c savepng.cpp -o $@
mymake$(EXE_EXTENSION): mymake.cpp
$(CXX) -O2 $(CXXFLAGS) mymake.cpp -pthread -o $@
emscripten: hyper.html
%.html %.js %.wasm: %.emscripten-sources
emcc -std=c++14 -O3 -s USE_ZLIB=1 -s LEGACY_GL_EMULATION=1 -s TOTAL_MEMORY=128MB hyperweb.cpp -o hyper.html
hyper.emscripten-sources: *.cpp autohdr.h
.PHONY: clean
clean:
rm -f langen$(EXE_EXTENSION) language-data.cpp
rm -f makeh$(EXE_EXTENSION) autohdr.h
rm -rf mymake$(EXE_EXTENSION) mymake_files/
rm -f hyperrogue$(EXE_EXTENSION) hyper$(OBJ_EXTENSION) $(hyper_RES) savepng$(OBJ_EXTENSION)
rm -f hyper.html hyper.js hyper.wasm

View File

@ -1,46 +0,0 @@
bin_PROGRAMS = hyperrogue
hyperroguedir = $(datadir)/hyperrogue
hyperrogue_SOURCES = hyper.cpp savepng.cpp
hyperrogue_CPPFLAGS = -DFONTDESTDIR=\"$(pkgdatadir)/DejaVuSans-Bold.ttf\" -DMUSICDESTDIR=\"$(pkgdatadir)/hyperrogue-music.txt\" -DSOUNDDESTDIR=\"$(pkgdatadir)/sounds/\"
hyperrogue_CXXFLAGS = -O2 -std=c++11 ${AM_CXXFLAGS}
dist_hyperrogue_DATA = hyperrogue-music.txt DejaVuSans-Bold.ttf
# docdir
dist_doc_DATA = README.md
# musicdir
musicdir=$(datadir)/hyperrogue/music
dist_music_DATA = music/hr3-caves.ogg music/hr3-desert.ogg music/hr3-hell.ogg music/hr3-jungle.ogg music/hr3-mirror.ogg music/hr3-rlyeh.ogg music/hr3-crossroads.ogg music/hr3-graveyard.ogg music/hr3-icyland.ogg music/hr3-laboratory.ogg music/hr3-motion.ogg
# soundsdir
soundsdir=$(datadir)/hyperrogue/sounds
dist_sounds_DATA = sounds/*
noinst_PROGRAMS = langen
langen_SOURCES = langen.cpp
langen_CXXFLAGS = -O0 -std=c++11 ${AM_CXXFLAGS}
BUILT_SOURCES = language-data.cpp
language-data.cpp: langen
./langen > language-data.cpp
#############################
# Platform specific setup
#############################
if MAC
hyperrogue_LDFLAGS = -lSDLmain -framework AppKit -framework OpenGL
endif MAC
if MINGW
nodist_hyperrogue_SOURCES = hyper.res
hyperrogue_CPPFLAGS += -march=native -DWINDOWS
windres_prefix = ${host_cpu}-w64-mingw32-
endif MINGW
#############################
# Arch specific setup
#############################
hyper.res: hyper.rc hr-icon.ico
${windres_prefix}windres hyper.rc -O coff -o hyper.res

View File

@ -63,7 +63,7 @@ savepng-loc.o: savepng.cpp
hyper-rogueviz.o: hyper.cpp graph.cpp hyperpoint.cpp geometry.cpp cell.cpp heptagon.cpp game.cpp classes.cpp polygons.cpp language.cpp language-data.cpp achievement.cpp shmup.cpp patterns.cpp mapeditor.cpp netgen.cpp yendor.cpp hyper.h rug.cpp flags.cpp system.cpp landgen.cpp orbs.cpp complex.cpp conformal.cpp menus.cpp init.cpp dialogs.cpp sound.cpp util.cpp ${drogueviz} fieldpattern.cpp ${MAIN} control.cpp commandline.cpp
${CXX} ${PROF} ${MAIN} -c -o hyper-rogueviz.o ${MYFLAGS}
langen: langen.cpp language-cz.cpp language-pl.cpp language-tr.cpp language-ru.cpp language-de.cpp
langen: langen.cpp language-cz.cpp language-pl.cpp language-tr.cpp language-ru.cpp language-de.cpp language-ptbr.cpp language-fr.cpp
${CXX} langen.cpp -o langen -g
language-data.cpp: langen
@ -191,6 +191,9 @@ treeoflife-white: hyper
collatz: hyper
${CMD} -canvas h -dftcolor 206020FF -ggamma 2 -collatz .3,.5,-.4,.4
collatz-bird: hyper
${CMD} -canvas h -dftcolor R -ggamma 2 -geo 435h -collatz3 txy .3 fd .25 tyz pi/2 / txy -.4 fd .2 tyz pi/2 -PM 0 -rvshape 3 -I Flash 100 -I Speed 100
fullnet: hyper
${CMD} -dftcolor 808080FF -ggamma 2 -back FFFFFF -net

View File

@ -1,165 +0,0 @@
# This Makefile works for Mac OS X (El Capitan), MinGW, and Linux.
#
# For Mac OS X:
# Run "brew install sdl" to install SDL in /usr/local.
# Run "brew install sdl_gfx".
# Run "brew install sdl_mixer".
# Run "brew install sdl_ttf".
# Run "make -f Makefile.simple" to build HyperRogue as ./hyperrogue.
#
# For MSYS2 and MinGW-w64:
# You might need to run commands such as "pacman -S mingw-w64-x86_64-SDL"
# to install SDL and other required libraries.
# Run "make -f Makefile.simple" to build HyperRogue as ./hyperrogue.exe.
#
# For Ubuntu Linux:
# Run "sudo apt-get install libsdl-dev" to install SDL in /usr/local.
# Run "make -f Makefile.simple" to build HyperRogue as ./hyperrogue.
ifeq ($(OS),Windows_NT)
OS := mingw
TOOLCHAIN := mingw
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
OS := linux
else
ifeq ($(UNAME_S),Darwin)
OS := osx
endif
endif
TOOLCHAIN_VERSION_S := $(shell $(CXX) --version)
ifneq (,$(findstring clang,$(TOOLCHAIN_VERSION_S)))
TOOLCHAIN := clang
else
TOOLCHAIN := gcc
endif
endif
## We have now finished inspecting the environment via $(shell).
## Begin customization points for each OS and TOOLCHAIN we support.
ifeq (${OS},linux)
CXXFLAGS_EARLY += -DLINUX
EXE_EXTENSION :=
LDFLAGS_GL := -lGL
LDFLAGS_GLEW := -lGLEW
LDFLAGS_PNG := -lpng
LDFLAGS_SDL := -lSDL -lSDL_gfx -lSDL_mixer -lSDL_ttf
OBJ_EXTENSION := .o
hyper_RES :=
endif
ifeq (${OS},mingw)
CXXFLAGS_EARLY += -DWINDOWS -mwindows -D_A_VOLID=8
EXE_EXTENSION := .exe
LDFLAGS_GL := -lopengl32
LDFLAGS_GLEW := -lglew32
LDFLAGS_PNG := -lpng
LDFLAGS_SDL := -lSDL -lSDL_gfx -lSDL_mixer -lSDL_ttf
OBJ_EXTENSION := .o
hyper_RES := hyper.res
ifeq (${HYPERROGUE_USE_GLEW},)
HYPERROGUE_USE_GLEW := 1
endif
endif
ifeq (${OS},osx)
CXXFLAGS_EARLY += -DMAC -I/usr/local/include
EXE_EXTENSION :=
LDFLAGS_EARLY += -L/usr/local/lib
LDFLAGS_GL := -framework AppKit -framework OpenGL
LDFLAGS_GLEW := -lGLEW
LDFLAGS_PNG := -lpng
LDFLAGS_SDL := -lSDL -lSDLMain -lSDL_gfx -lSDL_mixer -lSDL_ttf
OBJ_EXTENSION := .o
hyper_RES :=
endif
ifeq (${TOOLCHAIN},clang)
CXXFLAGS_EARLY += -std=c++11 -march=native
CXXFLAGS_EARLY += -W -Wall -Wextra -Werror -pedantic
CXXFLAGS_EARLY += -Wno-format-pedantic -Wno-missing-field-initializers -Wno-unused-parameter
endif
ifeq (${TOOLCHAIN},gcc)
CXXFLAGS_EARLY += -std=c++11 -march=native
CXXFLAGS_EARLY += -W -Wall -Wextra -Werror
CXXFLAGS_EARLY += -Wno-maybe-uninitialized -Wno-missing-field-initializers -Wno-unused-parameter
endif
ifeq (${TOOLCHAIN},mingw)
CXXFLAGS_EARLY += -std=c++11 -march=native
CXXFLAGS_EARLY += -W -Wall -Wextra -Werror
CXXFLAGS_EARLY += -Wno-unused-parameter
endif
## We have now finished OS-specific and TOOLCHAIN-specific computations.
## Begin customization points for user-specifiable HYPERROGUE_USE_XXX macros.
hyper_OBJS = hyper$(OBJ_EXTENSION)
hyper_LDFLAGS = $(LDFLAGS_GL) $(LDFLAGS_SDL)
ifeq (${HYPERROGUE_USE_GLEW},1)
CXXFLAGS_EARLY += -DCAP_GLEW=1
hyper_LDFLAGS += $(LDFLAGS_GLEW)
else
CXXFLAGS_EARLY += -DCAP_GLEW=0
endif
ifeq (${HYPERROGUE_USE_PNG},1)
CXXFLAGS_EARLY += -DCAP_PNG=1
hyper_LDFLAGS += $(LDFLAGS_PNG)
hyper_OBJS += savepng$(OBJ_EXTENSION)
else
CXXFLAGS_EARLY += -DCAP_PNG=0
endif
ifeq (${HYPERROGUE_USE_ROGUEVIZ},1)
# Enable RogueViz.
CXXFLAGS_EARLY += -DCAP_ROGUEVIZ=1
endif
## We have now finished HYPERROGUE_USE_XXX-specific computations.
## Begin the Makefile proper.
override CXXFLAGS := $(CXXFLAGS_EARLY) $(CXXFLAGS) ${EXTRA_CXXFLAGS}
override LDFLAGS := $(LDFLAGS_EARLY) $(LDFLAGS) ${EXTRA_LDFLAGS}
hyperrogue$(EXE_EXTENSION): $(hyper_OBJS) $(hyper_RES)
$(CXX) $(CXXFLAGS) $(hyper_OBJS) $(hyper_RES) $(LDFLAGS) $(hyper_LDFLAGS) -o $@
hyper$(OBJ_EXTENSION): *.cpp language-data.cpp
$(CXX) -O2 $(CXXFLAGS) $(hyper_CXXFLAGS) -c hyper.cpp -o $@
hyper.res: hyper.rc hr-icon.ico
windres hyper.rc -O coff -o hyper.res
langen$(EXE_EXTENSION): langen.cpp language-??.cpp language-ptbr.cpp
$(CXX) -O0 $(CXXFLAGS) $(langen_CXXFLAGS) langen.cpp $(LDFLAGS) -o $@
language-data.cpp: langen$(EXE_EXTENSION)
./langen > language-data.cpp
savepng$(OBJ_EXTENSION): savepng.cpp
$(CXX) -O2 $(CXXFLAGS) -c savepng.cpp -o $@
emscripten: hyper.html
%.html %.js %.wasm: %.emscripten-sources
emcc -std=c++11 -O3 -s LEGACY_GL_EMULATION=1 -s TOTAL_MEMORY=128*1024*1024 hyperweb.cpp -o hyper.html
hyper.emscripten-sources: *.cpp
.PHONY: clean
clean:
rm -f hyperrogue$(EXE_EXTENSION) hyper$(OBJ_EXTENSION) $(hyper_RES) langen$(EXE_EXTENSION) language-data.cpp savepng$(OBJ_EXTENSION)
rm -f hyper.html hyper.js hyper.wasm

View File

@ -1,20 +1,11 @@
# HyperRogue
<p align="right">
<a href="https://travis-ci.org/zenorogue/hyperrogue/builds">
<img align="right" src="https://badges.herokuapp.com/travis/zenorogue/hyperrogue?branch=master&env=TRAVIS_BUILD_SYSTEM=autotools&label=autotools" alt="TravisCI badge">
<img align="right" src="https://badges.herokuapp.com/travis/zenorogue/hyperrogue?branch=master&env=TRAVIS_BUILD_SYSTEM=Makefile&label=make" alt="TravisCI badge">
<img align="right" src="https://badges.herokuapp.com/travis/zenorogue/hyperrogue?branch=master&env=TRAVIS_BUILD_SYSTEM=emscripten&label=web" alt="TravisCI badge">
</a>
</p>
<p align="left">
<b>Current version: 11.0a</b>
</p>
A puzzle roguelike in the hyperbolic plane. See the [HyperRogue website](http://roguetemple.com/z/hyper.php) for detailed and most up-to-date information.
Compiled executables can be downloaded from [itch.io](https://zenorogue.itch.io/hyperrogue) and from the [HyperRogue website](http://www.roguetemple.com/z/hyper/download.php).
Released under [GNU General Public License, version 2](http://www.gnu.org/licenses/gpl-2.0.html). As such, it comes with without any warranty.
Released under [GNU General Public License, version 2](http://www.gnu.org/licenses/gpl-2.0.html). As such, it comes without any warranty.
If you would like to thank me for HyperRogue, you can support the development by buying paid versions (with more up-to-date content and some social features), or [in other ways](http://www.roguetemple.com/z/donate.php?id=NotEye).
If you would like to thank me for HyperRogue, you can support the development by buying paid versions (with more up-to-date content and some social and competitive features), or [in other ways](http://www.roguetemple.com/z/donate.php?id=hyper).
You can contact me at zeno@attnam.com, or at [my blog](http://zenorogue.blogspot.com/), or via [Twitter](https://twitter.com/ZenoRogue).
## The game ##
@ -28,7 +19,7 @@ Ultimately, you will probably run into a situation where monsters surround you.
Collecting enough treasure also allows you to find rare magical orbs, which grant you one-time or time-limited special abilities.
The world is a combination of thirteen types of lands. Each land type has specific style (monsters, treasure, magical orbs, terrain features). Collecting treasures only attracts more monsters in lands of the same type, so you can try to collect lots of treasure in several different lands!
The world is a combination of over 60 types of lands. Each land type has specific style (monsters, treasure, magical orbs, terrain features). Collecting treasures only attracts more monsters in lands of the same type, so you can try to collect lots of treasure in several different lands!
Some of these lands are available from the beginning, others can be found only if you have proven yourself (press ESC to know what you should do to access more lands). Ultimately, you will be able to access Hell, and look for the fabulous Orbs of Yendor which are hidden there. Get at least one of them to prove that you are a true winner! Only the best players will be able to face the challenges of Hell, but both the monsters and the challenges associated with the Orbs of Yendor are different than in the rest of the game, so it should be worth it.
@ -36,31 +27,53 @@ You can see tooltips by placing the mouse over stuff. You can also right click t
Press v to configure the game. You can also rotate the world by pressing arrow keys, PageUp and PageDn (not numpad). You can center on the PC by pressing Home.
Your scores and other stats about your games are recorded to file hyperrogue.log (in Linux, *~/.hyperrogue.log*). You can save your configation to file hyperrogue.ini (in Linux, *~/.hyperrogue.ini*).
Your scores and other stats about your games are recorded to file hyperrogue.log (in Linux, *~/.hyperrogue.log*). You can save your configuration to file hyperrogue.ini (in Linux, *~/.hyperrogue.ini*).
The surface the game is played on is called a hyperbolic plane. It seems there is just a very small amount of games and other works of art which use hyperbolic geometry (the most well known are some works of M.C.Escher).
The surface the game is played on is called a hyperbolic plane. It seems there is just a very small amount of games and other works of art which use hyperbolic geometry (the most well known are some works of M.C. Escher).
The game dynamically generates new parts of the world as you move. Due to nature of the hyperbolic plane, the chances that you get back to a place where you have been before are very low (unless you go back exactly the same way). See more information about the geometry used [on the blog](http://zenorogue.blogspot.com/2012/03/hyperbolic-geometry-in-hyperbolic-rogue.html).
You can aim for the Orb of Yendor, or you can simply aim for as high score as possible. My best so far is $175 but it should be beatable (I mean, I have won fairly only once, and that was my end score in the winning game).
You can aim for the Orb of Yendor, or you can simply aim for as high score as possible.
## Technical information ##
## Modifications
You should be able to compile on Ubuntu (or similar) with something like this (you need SDL, SDL_ttf, and SDL_gfx):
OK, now lots of the above can be changed. You can change the geometry and topology (to Euclidean, spherical, or even to nonisotropic 3D geometries). You can play challenges based on
various in-game quests, and even try some other game genres in non-Euclidean spaces (roguelite aka shmup, racing, peaceful puzzles).
## RogueViz
HyperRogue uses [RogueViz](http://roguetemple.com/z/hyper/rogueviz.php), which is our engine for non-Euclidean games, computations and visualizations. This repo includes the source code of RogueViz demos in subdirectory `rogueviz`, but
not the data, which is available on [itch.io](https://zenorogue.itch.io/rogueviz). RogueViz is funded by the National Science Centre, Poland, grant UMO-2019/35/B/ST6/04456.
## Development ##
### Build prerequisites ###
On Linux with apt-get:
```sudo apt-get install make g++ libsdl1.2-dev libsdl-ttf2.0-dev libsdl-gfx1.2-dev libsdl-mixer1.2-dev libglew-dev```
On macOS with Homebrew:
```brew install sdl sdl_ttf sdl_gfx sdl_mixer glew libpng```
### Building HyperRogue from source ###
```
sudo apt-get install gcc libsdl1.2-dev libsdl-ttf2.0-dev libsdl-gfx1.2-dev
git clone https://github.com/zenorogue/hyperrogue.git hyperrogue
cd hyperrogue
autoreconf -vi
./configure
make
HYPERROGUE_USE_GLEW=1 HYPERROGUE_USE_PNG=1 make
```
There is also a standalone Makefile for Linux, OSX, and MinGW.
The `mymake` program builds HyperRogue in parts. It takes longer than the method shown above, but it uses significantly less memory during compilation, and when you change something, `mymake` will only recompile the changed file.
Additionally, it can be easily configured, e.g., to produce an optimized build, or to include addons (see `mymake.cpp` for some example invocations, and `devmods` for some example addons).
Most useful parameters include `-O3` (optimized build), `-rv` (include the RogueViz demos), `-vr` (build the VR version). Compiler flags like `-Werror` (treat warnings as errors) and `-march=native` work too.
```
git clone https://github.com/zenorogue/hyperrogue.git
cd hyperrogue
make -f Makefile.simple
make mymake && ./mymake
```
The source code is not documented very well. You can see the current state of the documentation, as generated by Doxygen, [here](https://zenorogue.github.io/hyperrogue-doc/).
## Discussion ##
The best place to discuss HyperRogue is our [Discord server|https://discord.com/invite/8G44XkR].

View File

@ -1,17 +1,28 @@
// Hyperbolic Rogue -- achievements
// Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details
// Hyperbolic Rogue -- Achievements
// Copyright (C) 2011-2019 Zeno Rogue, see 'hyper.cpp' for details
/** \file achievements.cpp
* \brief This file implements routines related to achievements and leaderboards
*
* This routines are general, i.e., not necessarily Steam-specific.
*/
#include "hyper.h"
namespace hr {
#define NUMLEADER 78
#if HDR
#define NUMLEADER 90
#endif
bool offlineMode = false;
EX bool test_achievements = false;
const char* leadernames[NUMLEADER] = {
EX bool offlineMode = false;
EX const char* leadernames[NUMLEADER] = {
"Score", "Diamonds", "Gold", "Spice", "Rubies", "Elixirs",
"Shards100", "Totems", "Daisies", "Statues", "Feathers", "Sapphires",
"Hyperstones", "Time to Win-71", "Turns to Win-71",
"Time to 10 Hyperstones-103", "Turns to 10 Hyperstones-103", "Orbs of Yendor",
"Time to 10 Hyperstones-120", "Turns to 10 Hyperstones-120", "Orbs of Yendor",
"Fern Flowers",
"Royal Jellies", "Powerstones", "Silver", "Wine", "Emeralds", "Grimoires",
"Holy Grails", "Red Gems", "Pirate Treasures",
@ -62,28 +73,77 @@ const char* leadernames[NUMLEADER] = {
"Lava Lilies", // 74
"Turquoises", // 75
"Chrysoberyls", // 76
"Tasty Jellies" // 77
"Tasty Jellies", // 77
"Tiger's Eyes", // 78
"Torbernites", // 79
"Meteorites", // 80
"Racing Official Track", // 81
"Gold Balls", // 82
"Lazurite Figurines", // 83
"Water Lilies", // 84
"Capon Stones", // 85
"Crystal Dice", // 86
"Crossbow (bull)", // 87
"Crossbow (geodesic)", // 88
"Crossbow (geometric)", // 89
};
#if HDR
#define LB_PRINCESS 36
#define LB_STATISTICS 62
#define LB_HALLOWEEN 63
#define LB_HALLOWEEN 63
#define LB_YENDOR_CHALLENGE 40
#define LB_PURE_TACTICS 41
#define LB_PURE_TACTICS_SHMUP 49
#define LB_PURE_TACTICS_COOP 50
#define LB_RACING 81
#endif
void upload_score(int id, int v);
EX void achievement_init();
EX string myname();
EX void achievement_close();
EX void achievement_pump();
string achievementMessage[3];
int achievementTimer;
vector<string> achievementsReceived;
/** gain the given achievement.
* @param s name of the achievement, e.g., DIAMOND1
* @param flags one of the constants from namespace rg. The achievement is only awarded if special modes are matched exactly.
*/
EX void achievement_gain(const char* s, char flags IS(0));
bool wrongMode(char flags) {
EX bool haveLeaderboard(int id);
EX int get_currentscore(int id);
EX void set_priority_board(int id);
EX int get_sync_status();
EX bool score_loaded(int id);
EX int score_default(int id);
EX void improveItemScores();
EX void upload_score(int id, int v);
EX string achievementMessage[3];
EX int achievementTimer;
/** achievements received this game */
EX vector<string> achievementsReceived;
/** Returns true if the given achievement cannot be obtained in the current mode.
* @param flags Mode requested by the achievement.
*/
EX bool wrongMode(char flags) {
if(cheater) return true;
if(casual) return true;
if(flags == rg::global) return false;
if(flags == rg::fail) return true;
if(flags != rg::special_geometry) {
if(flags != rg::special_geometry && flags != rg::special_geometry_nicewalls) {
if(!BITRUNCATED) return true;
if(geometry != gNormal) return true;
if(disksize) return true;
}
if(ineligible_starting_land && !flags) return true;
if(use_custom_land_list) return true;
if(shmup::on != (flags == rg::shmup)) return true;
if(shmup::on != (flags == rg::shmup || flags == rg::racing)) return true;
if(racing::on != (flags == rg::racing)) return true;
if((!!dual::state) != (flags == rg::dualmode)) return true;
#if CAP_DAILY
if(daily::on != (flags == rg::daily)) return true;
#endif
@ -94,18 +154,68 @@ bool wrongMode(char flags) {
#if CAP_TOUR
if(tour::on) return true;
#endif
if(chaosmode != (flags == rg::chaos)) return true;
eLandStructure dls = lsNiceWalls;
if(flags == rg::princess && !princess::challenge) return true;
if(flags == rg::special_geometry || flags == rg::princess)
dls = lsSingle;
if(flags == rg::chaos)
dls = lsChaos;
/* in the official racing achievements, the tracks are saved maps anyway */
if(flags == rg::racing)
dls = land_structure;
if(land_structure != dls) return true;
if(shmup::on && vid.creature_scale != 1) return true;
if(numplayers() > 1 && !multi::friendly_fire) return true;
if(numplayers() > 1 && multi::pvp_mode) return true;
if(numplayers() > 1 && multi::split_screen) return true;
if((numplayers() > 1) != (flags == rg::multi)) return true;
return false;
}
void achievement_log(const char* s, char flags) {
EX set<string> got_achievements;
#ifdef PRINT_ACHIEVEMENTS
printf("achievement = %s [%d]\n", s, wrongMode(flags));
#endif
if(wrongMode(flags)) return;
EX void achievement_gain_once(const string& s, char flags IS(0)) {
LATE(achievement_gain_once(s, flags));
if(got_achievements.count(s)) return;
if(wrongMode(flags)) {
if(test_achievements) println(hlog, "wrong mode for achievement: ", s);
else return;
}
got_achievements.insert(s);
achievement_gain(s.c_str(), flags);
}
namespace rg {
char check(bool b, char val = special_geometry) { return b ? val : fail; }
}
EX char specgeom_zebra() { return rg::check(geometry == gZebraQuotient && !disksize && BITRUNCATED && firstland == laDesert); }
EX char specgeom_lovasz() { return rg::check(geometry == gKleinQuartic && variation == eVariation::untruncated && gp::param == gp::loc(1,1) && !disksize && in_lovasz()); }
EX char specgeom_halloween() { return rg::check((geometry == gSphere || geometry == gElliptic) && BITRUNCATED && !disksize && firstland == laHalloween); }
EX char specgeom_heptagonal() { return rg::check(PURE && geometry == gNormal && !disksize, rg::special_geometry_nicewalls); }
EX char specgeom_euclid_gen() { return rg::check(geometry == gEuclid && !disksize && firstland == laMirrorOld); }
EX char specgeom_crystal1() { return rg::check(PURE && cryst && ginf[gCrystal].sides == 8 && ginf[gCrystal].vertex == 4 && !crystal::used_compass_inside && !disksize && firstland == laCamelot); }
EX char specgeom_crystal2() { return rg::check(BITRUNCATED && cryst && ginf[gCrystal].sides == 8 && ginf[gCrystal].vertex == 3 && !crystal::used_compass_inside && !disksize && firstland == laCamelot); }
EX vector<std::function<char()>> all_specgeom_checks = { specgeom_zebra, specgeom_lovasz, specgeom_halloween, specgeom_heptagonal, specgeom_crystal1, specgeom_crystal2, specgeom_euclid_gen };
EX char any_specgeom() {
for(auto chk: all_specgeom_checks) if(chk() != rg::fail) return chk();
return rg::fail;
}
EX void achievement_log(const char* s, char flags) {
if(wrongMode(flags)) {
if(test_achievements) println(hlog, "wrong mode for achievement: ", s);
return;
}
if(test_achievements) {
println(hlog, "got achievement:", s);
return;
}
for(int i=0; i<isize(achievementsReceived); i++)
if(achievementsReceived[i] == s) return;
@ -114,7 +224,7 @@ void achievement_log(const char* s, char flags) {
#if CAP_SAVE
remove_emergency_save();
FILE *f = fopen(scorefile, "at");
FILE *f = fopen(scorefile.c_str(), "at");
if(!f) return;
int t = (int) (time(NULL) - timerstart);
@ -129,27 +239,42 @@ void achievement_log(const char* s, char flags) {
#endif
}
#if ISSTEAM
void improveItemScores();
#include "private/hypersteam.cpp"
#elif !ISANDROID && !ISIOS
#ifndef LEADER
#define LEADER "Unknown"
#define LEADERFULL "Unknown"
#endif
#if !CAP_ACHIEVE
void achievement_init() {}
string myname() { return "Rogue"; }
void achievement_close() {}
// gain the achievement with the given name.
// flags: 'e' - for Euclidean, 's' - for Shmup, '7' - for heptagonal
// Only awarded if special modes are matched exactly.
void achievement_gain(const char* s, char flags) {
achievement_log(s, flags);
}
void achievement_pump() {}
EX int get_sync_status() { return 0; }
EX void set_priority_board(int) { }
#endif
void achievement_collection(eItem it, int prevgold, int newgold) {
if(cheater) return;
if(randomPatternsMode) return;
int q = items[it];
if(it == itTreat && q == 50 && (geometry == gSphere || geometry == gElliptic) && BITRUNCATED)
achievement_gain("HALLOWEEN1", rg::special_geometry);
// gain the achievement for collecting a number of 'it'.
EX void achievement_collection(eItem it) {
achievement_collection2(it, items[it]);
}
if(it == itTreat && q == 100 && (geometry == gSphere || geometry == gElliptic) && BITRUNCATED)
achievement_gain("HALLOWEEN2", rg::special_geometry);
EX void achievement_collection2(eItem it, int q) {
if(cheater && !test_achievements) return;
if(casual && !test_achievements) return;
if(randomPatternsMode) return;
LATE( achievement_collection2(it, q); )
if(it == itTreat && q == 50)
achievement_gain("HALLOWEEN1", specgeom_halloween());
if(it == itTreat && q == 100)
achievement_gain("HALLOWEEN2", specgeom_halloween());
if(q == 1) {
if(it == itDiamond) achievement_gain("DIAMOND1");
@ -213,17 +338,27 @@ void achievement_collection(eItem it, int prevgold, int newgold) {
if(it == itRuins) achievement_gain("RUIN1");
if(it == itSwitch) achievement_gain("JELLZ1");
if(it == itBrownian) achievement_gain("BROWN1");
if(it == itVarTreasure) achievement_gain("RADIO1");
if(it == itWest) achievement_gain("FREEFALL1");
if(it == itFrog) achievement_gain("FROG1");
if(it == itEclectic) achievement_gain("ECLEC1");
if(it == itWet) achievement_gain("WET1");
if(it == itCursed) achievement_gain("CURSED1");
if(it == itDice) achievement_gain("DICE1");
}
// 32
if(it == itHolyGrail) {
if(q == 1) achievement_gain("GRAIL2");
if(PURE && geometry == gNormal)
achievement_gain("GRAILH", rg::special_geometry);
if(PURE && geometry == gCrystal && ginf[gCrystal].sides == 8 && ginf[gCrystal].vertex == 4 && !crystal::used_compass_inside)
achievement_gain("GRAIL4D", rg::special_geometry);
if(BITRUNCATED && geometry == gCrystal && ginf[gCrystal].sides == 8 && ginf[gCrystal].vertex == 3 && !crystal::used_compass_inside)
achievement_gain("GRAIL4D2", rg::special_geometry);
achievement_gain("GRAILH", specgeom_heptagonal());
#if CAP_CRYSTAL
achievement_gain("GRAIL4D", specgeom_crystal1());
achievement_gain("GRAIL4D2", specgeom_crystal2());
#endif
if(q == 3) achievement_gain("GRAIL3");
if(q == 8) achievement_gain("GRAIL4");
}
@ -290,6 +425,17 @@ void achievement_collection(eItem it, int prevgold, int newgold) {
if(it == itRuins) achievement_gain("RUIN2");
if(it == itSwitch) achievement_gain("JELLZ2");
if(it == itBrownian) achievement_gain("BROWN2");
if(it == itVarTreasure) achievement_gain("RADIO2");
if(it == itWest) achievement_gain("FREEFALL2");
if(it == itFrog) achievement_gain("FROG2");
if(it == itEclectic) achievement_gain("ECLEC2");
if(it == itWet) achievement_gain("WET2");
if(it == itCursed) achievement_gain("CURSED2");
if(it == itDice) achievement_gain("DICE2");
}
if(q == (inv::on ? 50 : 25)) {
@ -357,6 +503,17 @@ void achievement_collection(eItem it, int prevgold, int newgold) {
if(it == itRuins) achievement_gain("RUIN3");
if(it == itSwitch) achievement_gain("JELLZ3");
if(it == itBrownian) achievement_gain("BROWN3");
if(it == itVarTreasure) achievement_gain("RADIO3");
if(it == itWest) achievement_gain("FREEFALL3");
if(it == itFrog) achievement_gain("FROG3");
if(it == itEclectic) achievement_gain("ECLEC3");
if(it == itWet) achievement_gain("WET3");
if(it == itCursed) achievement_gain("CURSED3");
if(it == itDice) achievement_gain("DICE3");
}
if(q == 50 && !inv::on) {
@ -421,6 +578,17 @@ void achievement_collection(eItem it, int prevgold, int newgold) {
if(it == itRuins) achievement_gain("RUIN4");
if(it == itSwitch) achievement_gain("JELLZ4");
if(it == itBrownian) achievement_gain("BROWN4");
if(it == itVarTreasure) achievement_gain("RADIO4");
if(it == itWest) achievement_gain("FREEFALL4");
if(it == itFrog) achievement_gain("FROG4");
if(it == itEclectic) achievement_gain("ECLEC4");
if(it == itWet) achievement_gain("WET4");
if(it == itCursed) achievement_gain("CURSED4");
if(it == itDice) achievement_gain("DICE4");
}
if(it == itOrbYendor) {
@ -430,10 +598,19 @@ void achievement_collection(eItem it, int prevgold, int newgold) {
}
}
void achievement_count(const string& s, int current, int prev) {
if(cheater) return;
/** This function awards 'counting' achievements, such as kill 10 monsters at the same time.
* @param s name of the group of achievements, e.g. GOLEM.
* @param current our score, e.g., the the achievement GOLEM2 will be awared with current >= 5.
* @param prev previous value of the score.
*/
EX void achievement_count(const string& s, int current, int prev) {
if(cheater && !test_achievements) return;
if(casual && !test_achievements) return;
if(shmup::on) return;
if(randomPatternsMode) return;
LATE( achievement_count(s, current, prev); )
if(s == "GOLEM" && current >= 5)
achievement_gain("GOLEM2");
if(s == "GOLEM" && current >= 10)
@ -464,22 +641,27 @@ void achievement_count(const string& s, int current, int prev) {
achievement_gain("LIGHTNING2");
if(s == "LIGHTNING" && current-prev >= 10)
achievement_gain("LIGHTNING3");
if(s == "MIRAGE" && current >= 35 && geometry == gEuclid)
achievement_gain("MIRAGE", rg::special_geometry);
if(s == "MIRAGE" && current >= 35)
achievement_gain("MIRAGE", specgeom_euclid_gen());
if(s == "ORB" && current >= 10)
achievement_gain("ORB3");
if(s == "BUG" && current >= 1000)
achievement_gain("BUG3");
if(s == "ELEC" && current >= 10)
achievement_gain("ELEC3");
if(s == "BOWVARIETY" && current >= 2)
achievement_gain("BOWVARIETY1");
if(s == "BOWVARIETY" && current >= 6)
achievement_gain("BOWVARIETY2");
}
int specific_improved = 0;
int specific_what = 0;
void improve_score(int i, eItem what) {
EX void improve_score(int i, eItem what) {
if(offlineMode) return;
#ifdef HAVE_ACHIEVEMENTS
LATE( improve_score(i, what); )
#if CAP_ACHIEVE
if(haveLeaderboard(i)) updateHi(what, get_currentscore(i));
if(items[what] && haveLeaderboard(i)) {
if(items[what] > get_currentscore(i) && score_loaded(i)) {
@ -490,26 +672,38 @@ void improve_score(int i, eItem what) {
#endif
}
void achievement_score(int cat, int number) {
// scores for special challenges
EX void achievement_score(int cat, int number) {
if(offlineMode) return;
#ifdef HAVE_ACHIEVEMENTS
#if CAP_ACHIEVE
if(cheater) return;
if(casual) return;
LATE( achievement_score(cat, number); )
if(disksize) return;
if(cat == LB_HALLOWEEN) {
if(geometry != gSphere && geometry != gElliptic)
return;
}
else if(geometry) return;
else {
if(geometry) return;
if(ineligible_starting_land) return;
}
if(CHANGED_VARIATION) return;
if(randomPatternsMode) return;
if(shmup::on && cat != LB_PURE_TACTICS_SHMUP && cat != LB_PURE_TACTICS_COOP) return;
if(dual::state) return;
if(shmup::on && cat != LB_PURE_TACTICS_SHMUP && cat != LB_PURE_TACTICS_COOP && cat != LB_RACING) return;
if(yendor::on && cat != LB_YENDOR_CHALLENGE) return;
if(tactic::on && cat != LB_PURE_TACTICS && cat != LB_PURE_TACTICS_SHMUP && cat != LB_PURE_TACTICS_COOP)
return;
if(racing::on && cat != LB_RACING) return;
if(bow::weapon) return;
if(use_custom_land_list) return;
upload_score(cat, number);
#endif
}
void improveItemScores() {
EX void improveItemScores() {
LATE( improveItemScores(); )
for(int i=1; i<=12; i++) improve_score(i, eItem(i));
improve_score(17, itOrbYendor);
improve_score(18, itFernFlower);
@ -564,19 +758,36 @@ void improveItemScores() {
improve_score(76, itRuins);
improve_score(77, itSwitch);
improve_score(78, itBrownian);
improve_score(79, itVarTreasure);
improve_score(80, itWest);
improve_score(82, itFrog);
improve_score(83, itEclectic);
improve_score(84, itWet);
improve_score(85, itCursed);
improve_score(86, itDice);
}
int next_stat_tick;
void achievement_final(bool really_final) {
/** gain the final achievements.
* @param really false: the user is simply looking at the score; true: the game really ended.
*/
EX void achievement_final(bool really_final) {
if(offlineMode) return;
#ifdef HAVE_ACHIEVEMENTS
LATE( achievement_final(really_final); )
#if CAP_ACHIEVE
if(ticks > next_stat_tick) {
upload_score(LB_STATISTICS, time(NULL));
next_stat_tick = ticks + 600000;
}
if(cheater) return;
if(casual) return;
#if CAP_TOUR
if(tour::on) return;
@ -585,6 +796,7 @@ void achievement_final(bool really_final) {
if(randomPatternsMode) return;
if(peace::on) return;
if(yendor::on) return;
if(dual::state) return;
if(tactic::on) {
tactic::record();
@ -602,10 +814,15 @@ void achievement_final(bool really_final) {
int specialcode = 0;
if(shmup::on) specialcode++;
if(chaosmode) specialcode+=2;
if(ls::std_chaos()) specialcode+=2;
else if(!ls::nice_walls()) return;
if(PURE) specialcode+=4;
if(numplayers() > 1) specialcode+=8;
if(inv::on) specialcode+=16;
if(bow::crossbow_mode() && bow::style == bow::cbBull) specialcode += 32;
if(bow::crossbow_mode() && bow::style == bow::cbGeodesic) specialcode += 64;
if(bow::crossbow_mode() && bow::style == bow::cbGeometric) specialcode += 96;
if(shmup::on && vid.creature_scale != 1) return;
if(sphere && specialland == laHalloween) {
if(specialcode) return;
@ -613,8 +830,14 @@ void achievement_final(bool really_final) {
return;
}
if(ineligible_starting_land) return;
if(geometry) return;
if(NONSTDVAR) return;
if(use_custom_land_list) return;
if(numplayers() > 1 && !multi::friendly_fire) return;
if(numplayers() > 1 && multi::pvp_mode) return;
if(numplayers() > 1 && multi::split_screen) return;
// determine the correct leaderboard ID for 'total score'
// or return if no leaderboard for the current mode
@ -627,6 +850,9 @@ void achievement_final(bool really_final) {
case 8: sid = 61; break;
case 9: sid = 44; break;
case 16: sid = 69; break;
case 32: sid = 87; break;
case 64: sid = 88; break;
case 96: sid = 89; break;
default: return;
}
@ -670,24 +896,30 @@ void achievement_final(bool really_final) {
#endif
}
bool hadtotalvictory;
EX bool hadtotalvictory;
void check_total_victory() {
EX void check_total_victory() {
if(!inv::on) return;
if(hadtotalvictory) return;
if(!items[itOrbYendor]) return;
if(!items[itHolyGrail]) return;
if(items[itHyperstone] < 50) return;
if(!princess::reviveAt) return;
LATE( check_total_victory(); )
hadtotalvictory = true;
achievement_gain("TOTALVICTORY");
}
void achievement_victory(bool hyper) {
DEBB(DF_STEAM, (debugfile,"achievement_victory\n"))
/** gain the victory achievements.
* @param hyper true for the Hyperstone victory, and false for the Orb of Yendor victory.
*/
EX void achievement_victory(bool hyper) {
DEBBI(DF_STEAM, ("achievement_victory"))
if(offlineMode) return;
#ifdef HAVE_ACHIEVEMENTS
#if CAP_ACHIEVE
if(cheater) return;
if(casual) return;
if(bow::weapon) return;
if(geometry) return;
if(CHANGED_VARIATION) return;
if(randomPatternsMode) return;
@ -695,8 +927,11 @@ void achievement_victory(bool hyper) {
if(yendor::on) return;
if(peace::on) return;
if(tactic::on) return;
if(chaosmode) return;
DEBB(DF_STEAM, (debugfile,"after checks\n"))
if(!ls::nice_walls()) return;
if(ineligible_starting_land) return;
if(use_custom_land_list) return;
LATE( achievement_victory(hyper); )
DEBB(DF_STEAM, ("after checks"))
int t = getgametime();
@ -747,20 +982,77 @@ void achievement_victory(bool hyper) {
}
}
DEBB(DF_STEAM, (debugfile, "uploading scores\n"))
DEBB(DF_STEAM, ("uploading scores"))
upload_score(ih1, t);
upload_score(ih2, turncount);
#endif
}
void achievement_pump();
/** call the achievement callbacks */
EX void achievement_pump();
#ifndef HAVE_ACHIEVEMENTS
void achievement_pump() {}
#endif
EX string get_rich_presence_text() {
void achievement_display() {
#ifdef HAVE_ACHIEVEMENTS
#if CAP_DAILY
if(daily::on)
return "Strange Challenge #" + its(daily::daily_id) + ", score " + its(gold());
#endif
if(tour::on)
return "Guided Tour";
string res;
if(geometry != gNormal || !BITRUNCATED || disksize)
res = res + full_geometry_name() + " ";
if(land_structure != default_land_structure()) res += land_structure_name(false) + " ";
if(shmup::on) res += "shmup ";
if(dual::state) res += "dual ";
if(randomPatternsMode) res += "random ";
if(inv::on) res += "OSM ";
if(multi::players > 1) res += "multi ";
if(casual) res += "casual ";
if(bow::weapon) res += bow::style == bow::cbBull ? "bow/bull " : "bow/geo ";
if(cheater || among(cwt.at->land, laCanvas, laCA))
return res + "(?)";
if(yendor::on) {
res += "Yendor Challenge: " + yendor::name(yendor::challenge);
if(items[itOrbYendor]) res += " (level " + its(items[itOrbYendor]) + ")";
return res;
}
if(peace::on) return res + "peaceful";
if(tactic::on)
return res + "PTM: " + linf[specialland].name + " $" + its(gold());
if(princess::challenge) return res + "Princess Challenge";
#if CAP_RACING
if(racing::on) {
using namespace racing;
res = res + "racing in " + linf[specialland].name;
for(int i=0; i<multi::players; i++) {
if(race_finish_tick[i])
res += racetimeformat(race_finish_tick[i] - race_start_tick);
}
return res;
}
#endif
res += linf[cwt.at->land].name;
res += ", " + its(gold()) + " $$$";
return res;
}
/** display the last achievement gained. */
EX void achievement_display() {
#if CAP_ACHIEVE
if(achievementTimer) {
int col = (ticks - achievementTimer);
if(col > 5000) { achievementTimer = 0; return; }
@ -768,12 +1060,12 @@ void achievement_display() {
col /= 10; col *= 0x10101;
displayfr(vid.xres/2, vid.yres/4, 2, vid.fsize * 2, achievementMessage[0], col & 0xFFFF00, 8);
int w = 2 * vid.fsize;
#if ISMOBILE==0
#if !ISMOBILE
while(w>3 && textwidth(w, achievementMessage[1]) > vid.xres) w--;
#endif
displayfr(vid.xres/2, vid.yres/4 + vid.fsize*2, 2, w, achievementMessage[1], col, 8);
w = vid.fsize;
#if ISMOBILE==0
#if !ISMOBILE
while(w>3 && textwidth(w, achievementMessage[2]) > vid.xres) w--;
#endif
displayfr(vid.xres/2, vid.yres/4 + vid.fsize*4, 2, w, achievementMessage[2], col, 8);
@ -781,18 +1073,13 @@ void achievement_display() {
#endif
}
bool isAscending(int i) {
EX bool isAscending(int i) {
return i == 13 || i == 14 || i == 15 || i == 16 || i == 29 || i == 30 || i == 45;
};
}
int score_default(int i) {
EX int score_default(int i) {
if(isAscending(i)) return 1999999999;
else return 0;
}
#ifndef HAVE_ACHIEVEMENTS
int get_sync_status() { return 0; }
void set_priority_board(int) { }
#endif
}

1233
aperiodic-hat.cpp Normal file

File diff suppressed because it is too large Load Diff

2194
arbitrile.cpp Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

268
asonov.cpp Normal file
View File

@ -0,0 +1,268 @@
// Hyperbolic Rogue -- Arnold's cat map
// Copyright (C) 2011-2019 Zeno Rogue, see 'hyper.cpp' for details
/** \file asonov.cpp
* \brief Arnold's cat map
*/
#include "hyper.h"
//#include <cstdio>
//#include <cmath>
namespace hr {
EX namespace asonov {
#if !CAP_SOLV
#if HDR
inline bool in() { return false; }
#endif
#endif
EX int period_xy = 8;
EX int period_z = 8;
#if CAP_SOLV
EX bool in() { return cgflags & qCAT; }
EX hyperpoint tx, ty, tz;
EX transmatrix straighten;
#if HDR
struct coord: public array<int,3> {
coord() {}
coord(int x, int y, int z) : array<int,3>(make_array(zgmod(x, period_xy), zgmod(y, period_xy), zgmod(z, period_z))) {}
coord shift(int x, int y, int z=0) { return coord(self[0]+x, self[1]+y, self[2]+z); }
coord up() { return coord(self[0]*2-self[1], self[1]-self[0], self[2]+1); }
coord down() { return coord(self[0]+self[1], self[0]+self[1]*2, self[2]-1); }
coord addmove(int d);
coord operator - (coord b);
};
#endif
coord coord::addmove(int d) {
switch(d) {
case 0: return up().shift(0, 0);
case 1: return up().shift(1, -1);
case 2: return up().shift(-1, 0);
case 3: return up().shift(0, -1);
case 4: return shift(1, 0);
case 5: return shift(0, 1);
case 6: return down().shift(0, 0);
case 7: return down().shift(0, 1);
case 8: return down().shift(1, 1);
case 9: return down().shift(1, 2);
case 10: return shift(-1, 0);
case 11: return shift(0, -1);
default: throw hr_exception("error");
}
}
EX void prepare() {
using namespace hr;
transmatrix A = Id;
A[0][0] = 1;
A[0][1] = 1;
A[1][0] = 1;
A[1][1] = 2;
double det = hr::det(A);
if(det != 1) { printf("wrong det\n"); return; }
// (a00-x)(a11-x) - a01*a10 = 0
// x^2 - (a00+a11) x + 1 = 0
double b = (A[0][0] + A[1][1]) / 2;
// x^2 - 2b x + b^2 = b^2-1
// if(b*b <= 1) { printf("imaginary eigenvalues\n"); return 0; }
// x = b + sqrt(b^2-1)
hyperpoint lambda;
lambda[0] = b + sqrt(b*b-1);
lambda[1] = b - sqrt(b*b-1);
DEBB(DF_GEOM, ("b = ", b, " lambda = ", lambda));
transmatrix eigen = Id;
for(int i: {0,1}) {
eigen[0][i] = 1;
eigen[1][i] = (lambda[i] - A[0][0]) / A[0][1];
}
transmatrix ieigen = inverse(eigen);
tx = point3(ieigen[0][0], ieigen[1][0], 0) * vid.binary_width;
ty = point3(ieigen[0][1], ieigen[1][1], 0) * vid.binary_width;
tz = -point3(0, 0, log(lambda[0]));
DEBB(DF_GEOM, ("tx = ", tx, " ty = ", ty, " tz = ", tz));
straighten = inverse(build_matrix(asonov::tx/2, asonov::ty/2, asonov::tz/2, C0));
}
EX void prepare_walls() {
auto& hsh = get_hsh();
auto& cs = hsh.faces;
cs.clear();
auto pt = [&] (int x, int y, int z) { return asonov::tx*x/2 + asonov::ty*y/2 + asonov::tz*z/2 + C0; };
cs.push_back({pt(-1,-1,+1), pt(00,+1,+1), pt(+1,+1,+1)});
cs.push_back({pt(00,-1,+1), pt(+1,+1,+1), pt(+1,-1,+1)});
cs.push_back({pt(-1,+1,+1), pt(00,+1,+1), pt(-1,-1,+1)});
cs.push_back({pt(-1,-1,+1), pt(+1,+1,+1), pt(00,-1,+1)});
cs.push_back({pt(+1,-1,-1), pt(+1,00,-1), pt(+1,+1,-1), pt(+1,+1,+1), pt(+1,-1,+1)});
cs.push_back({pt(-1,+1,-1), pt(-1,+1,+1), pt(00,+1,+1), pt(+1,+1,+1), pt(+1,+1,-1)});
cs.push_back({pt(-1,-1,-1), pt(-1,00,-1), pt(+1,-1,-1)});
cs.push_back({pt(-1,00,-1), pt(-1,+1,-1), pt(+1,-1,-1)});
cs.push_back({pt(-1,+1,-1), pt(+1,00,-1), pt(+1,-1,-1)});
cs.push_back({pt(-1,+1,-1), pt(+1,+1,-1), pt(+1,00,-1)});
cs.push_back({pt(-1,+1,-1), pt(-1,00,-1), pt(-1,-1,-1), pt(-1,-1,+1), pt(-1,+1,+1)});
cs.push_back({pt(+1,-1,-1), pt(+1,-1,+1), pt(00,-1,+1), pt(-1,-1,+1), pt(-1,-1,-1)});
hsh.compute_hept();
}
transmatrix coord_to_matrix(coord c, coord zero) {
transmatrix T = Id;
while(zero[2] != c[2]) {
int z = szgmod(c[2] - zero[2], period_z);
if(z > 0) zero = zero.up(), T = eupush(tz) * eupush(ty/2) * T;
else zero = zero.down(), T = eupush(-ty/2) * eupush(-tz) * T;
}
return T * eupush(tx * szgmod(c[0]-zero[0], period_xy) + ty * szgmod(c[1]-zero[1], period_xy));
}
coord coord::operator - (coord b) {
auto c = self;
while(b[2]) {
int z = szgmod(b[2], period_z);
if(z > 0) b = b.down(), c = c.down();
else if(z < 0) b = b.up(), c = c.up();
}
c[0] = zgmod(c[0]-b[0], period_xy); b[0] = 0;
c[1] = zgmod(c[1]-b[1], period_xy); b[1] = 0;
return c;
}
EX transmatrix adjmatrix(int i) {
dynamicval<int> pxy(period_xy, 64);
dynamicval<int> pz(period_z, 64);
coord zero(0,0,0);
coord c = zero.addmove(i);
return coord_to_matrix(c, zero);
}
struct hrmap_asonov : hrmap {
map<coord, heptagon*> at;
map<heptagon*, coord> coords;
heptagon *getOrigin() override { return get_at(coord(0,0,0)); }
hrmap_asonov() { prepare(); }
~hrmap_asonov() {
for(auto& p: at) clear_heptagon(p.second);
}
heptagon *get_at(coord c) {
auto& h = at[c];
if(h) return h;
h = init_heptagon(S7);
h->c7 = newCell(S7, h);
coords[h] = c;
h->distance = c[2];
h->zebraval = c[0];
h->emeraldval = c[1];
return h;
}
heptagon *create_step(heptagon *parent, int d) override {
auto p = coords[parent];
auto q = p.addmove(d);
auto child = get_at(q);
parent->c.connect(d, child, (d + 6) % 12, false);
return child;
}
transmatrix adj(heptagon *h, int i) override { return adjmatrix(i); }
transmatrix relative_matrixh(heptagon *h2, heptagon *h1, const hyperpoint& hint) override {
for(int a=0; a<S7; a++) if(h2 == h1->move(a)) return adjmatrix(a);
return coord_to_matrix(coords[h2], coords[h1]);
}
};
EX hrmap *new_map() { return new hrmap_asonov; }
EX coord get_coord(heptagon *h) { return ((hrmap_asonov*)currentmap)->coords[h]; }
EX heptagon *get_at(coord where) { return ((hrmap_asonov*)currentmap)->at[where]; }
EX int period_xy_edit, period_z_edit;
EX void set_flags() {
auto& flag = ginf[gArnoldCat].flags;
set_flag(flag, qANYQ, period_xy || period_z);
set_flag(flag, qCLOSED, period_xy && period_z);
set_flag(flag, qSMALL, period_xy && period_z && (period_xy * period_xy * period_z <= 4096));
set_flag(flag, qHUGE_BOUNDED, period_xy * period_xy * period_z > 16384);
}
EX void prepare_config() {
period_xy_edit = period_xy;
period_z_edit = period_z;
}
EX void show_config() {
cmode = sm::SIDE | sm::MAYDARK;
gamescreen();
dialog::init(XLAT("Solv quotient spaces"));
dialog::addSelItem(XLAT("%1 period", "X/Y"), its(period_xy_edit), 'x');
dialog::add_action([=] {
dialog::editNumber(period_xy_edit, 0, 64, 1, 0, XLAT("%1 period", "X/Y"),
XLAT("Note: the value 0 functions effectively as the size of int (2^32).")
);
dialog::bound_low(0);
});
dialog::addSelItem(XLAT("%1 period", "Z"), its(period_z_edit), 'z');
dialog::add_action([=] {
dialog::editNumber(period_z_edit, 0, 64, 1, 0, XLAT("%1 period", "Z"),
XLAT("Set to 0 to make it non-periodic.")
);
dialog::bound_low(0);
});
dialog::addBreak(50);
dialog::addItem(XLAT("activate"), 'a');
dialog::add_action([] {
stop_game();
period_xy = period_xy_edit;
period_z = period_z_edit;
set_flags();
geometry = gArnoldCat;
start_game();
});
dialog::addBreak(50);
dialog::addBack();
dialog::display();
}
#endif
}
}

1396
attack.cpp Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +0,0 @@
#!/bin/bash
autoreconf -vfi
./configure "$@"
echo "Now, just do \"make install\" "

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,48 +1,58 @@
// Hyperbolic Rogue -- special graphical effects, such as the Blizzard
// Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details
// Hyperbolic Rogue -- Blizzard
// Copyright (C) 2011-2019 Zeno Rogue, see 'hyper.cpp' for details
/** \file blizzard.cpp
* \brief special graphical effects, such as the Blizzard and arrow traps
*/
#include "hyper.h"
namespace hr {
struct snowball {
transmatrix T;
transmatrix global;
shiftmatrix global;
snowball *prev;
snowball *next;
double phase;
snowball(int t) { T = rgpushxto0(randomPointIn(t)); phase = randd(); }
};
#if HDR
struct blizzardcell;
#endif
struct blizzardcell {
cell *c;
int frame;
int tmp;
transmatrix *gm;
shiftmatrix *gm;
char wmap;
int inward, outward, ward;
int qty[MAX_EDGE];
vector<int> qty;
vector<snowball*> inorder, outorder;
int inid, outid;
~blizzardcell() { for(auto i: inorder) delete i; }
};
map<cell*, blizzardcell> blizzardcells;
EX map<cell*, blizzardcell> blizzardcells;
void set_blizzard_frame(cell *c, int frameid) {
EX void set_blizzard_frame(cell *c, int frameid) {
blizzardcells[c].frame = frameid;
}
vector<blizzardcell*> bcells;
EX vector<blizzardcell*> bcells;
int blizzard_N;
blizzardcell* getbcell(cell *c) {
EX blizzardcell* getbcell(cell *c) {
int i = c->listindex;
if(i<0 || i >= blizzard_N) return NULL;
if(bcells[i]->c != c) return NULL;
return bcells[i];
}
void drawBlizzards() {
EX void drawBlizzards() {
#if CAP_SHAPES && CAP_FIELD
poly_outline = OUTLINE_NONE;
auto it = blizzardcells.begin();
bcells.clear();
@ -67,6 +77,7 @@ void drawBlizzards() {
auto& bc = *bcells[i];
cell *c = bc.c;
bc.inward = bc.outward = 0;
bc.qty.resize(c->type);
for(int i=0; i<c->type; i++) {
int& qty = bc.qty[i];
qty = 0;
@ -112,15 +123,15 @@ void drawBlizzards() {
sball.next = &sball2;
sball2.prev = &sball;
hyperpoint t = inverse(sball.global) * tC0(sball2.global);
hyperpoint t = inverse_shift(sball.global, tC0(sball2.global));
double at0 = at + sball.phase;
if(at0>1) at0 -= 1;
transmatrix tpartial = sball.global * rspintox(t) * xpush(hdist0(t) * at0);
shiftmatrix tpartial = sball.global * rspintox(t) * xpush(hdist0(t) * at0);
if(wmascii || wmblack)
queuechr(tpartial, .2, '.', 0xFFFFFF);
queuestr(tpartial, .2, ".", 0xFFFFFF);
else
queuepoly(tpartial, shSnowball, 0xFFFFFF80);
queuepoly(tpartial, cgi.shSnowball, 0xFFFFFF80);
}
}
@ -129,9 +140,9 @@ void drawBlizzards() {
/* if(isNeighbor(bc.c, mouseover)) {
if(againstWind(mouseover, bc.c))
queuepoly(*bc.gm, shHeptaMarker, 0x00C00040);
queuepoly(*bc.gm, cgi.shHeptaMarker, 0x00C00040);
if(againstWind(bc.c, mouseover))
queuepoly(*bc.gm, shHeptaMarker, 0xC0000040);
queuepoly(*bc.gm, cgi.shHeptaMarker, 0xC0000040);
} */
forCellIdEx(c2, i, bc.c) if(bc.c == mouseover || c2 == mouseover) {
@ -143,7 +154,7 @@ void drawBlizzards() {
if(isPlayerOn(bc.c))
col ^= 0x00000040;
if(againstWind(bc.c, c2))
queuepoly(*bc.gm * ddspin(bc.c, i) * xpush(cellgfxdist(bc.c, i)/2), shWindArrow, col);
queuepoly(*bc.gm * ddspin(bc.c, i) * xpush(cellgfxdist(bc.c, i)/2), cgi.shWindArrow, col);
}
int B = isize(bc.outorder);
@ -201,42 +212,57 @@ void drawBlizzards() {
for(auto bc: bcells)
bc->c->listindex = bc->tmp;
#endif
}
vector<cell*> arrowtraps;
EX vector<cell*> arrowtraps;
void drawArrowTraps() {
EX void drawArrowTraps() {
for(cell *c: arrowtraps) {
auto r = traplimits(c);
try {
transmatrix& t0 = gmatrix.at(r[0]);
transmatrix& t1 = gmatrix.at(r[4]);
shiftmatrix& t0 = gmatrix.at(r[0]);
shiftmatrix& t1 = gmatrix.at(r[4]);
ignore(t0);
ignore(t1);
#if CAP_QUEUE
queueline(tC0(t0), tC0(t1), 0xFF0000FF, 4 + vid.linequality, PPR::ITEM);
#endif
#if CAP_SHAPES
if((c->wparam & 7) == 3 && !shmup::on) {
// queueline(t0 * randomPointIn(r[0]->type), t1 * randomPointIn(r[1]->type), 0xFFFFFFFF, 4, PPR::ITEM);
int tt = int(fractick(64) * 401);
for(int u=0; u<2; u++) {
transmatrix& tu = u ? t0 : t1;
transmatrix& tv = u ? t1 : t0;
hyperpoint trel = inverse(tu) * tC0(tv);
transmatrix tpartial = tu * rspintox(trel) * xpush(hdist0(trel) * tt / 401.0);
queuepoly(tpartial * ypush(.05), shTrapArrow, 0xFFFFFFFF);
shiftmatrix& tu = u ? t0 : t1;
shiftmatrix& tv = u ? t1 : t0;
hyperpoint trel = inverse_shift(tu, tC0(tv));
shiftmatrix tpartial = tu * rspintox(trel) * xpush(hdist0(trel) * tt / 401.0);
tpartial = tpartial * ypush(.05);
if(GDIM == 3) tpartial = tpartial * cspin90(1, 2);
queuepoly(tpartial, cgi.shTrapArrow, 0xFFFFFFFF);
}
}
#endif
}
catch(out_of_range&) {}
}
}
auto ccm_blizzard = addHook(clearmemory, 0, [] () {
auto ccm_blizzard = addHook(hooks_clearmemory, 0, [] () {
arrowtraps.clear();
blizzardcells.clear();
bcells.clear();
}) +
addHook(hooks_removecells, 0, [] () {
+ addHook(hooks_gamedata, 0, [] (gamedata* gd) {
gd->store(arrowtraps);
gd->store(blizzardcells);
gd->store(bcells);
gd->store(blizzard_N);
})
+ addHook(hooks_removecells, 0, [] () {
eliminate_if(arrowtraps, is_cell_removed);
});

2506
cell.cpp

File diff suppressed because it is too large Load Diff

3221
celldrawer.cpp Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

484
checkmove.cpp Normal file
View File

@ -0,0 +1,484 @@
// Hyperbolic Rogue - checkmate rule
// Copyright (C) 2011-2019 Zeno Rogue, see 'hyper.cpp' for details
/** \file checkmove.cpp
* \brief Check the validity of move (checkmate rule)
*/
#include "hyper.h"
namespace hr {
#if HDR
#define PUREHARDCORE_LEVEL 10
#endif
/** are we in the hardcore mode */
EX bool hardcore = false;
/** when did we switch to the hardcore mode */
EX int hardcoreAt;
/** are we in the casual mode */
EX bool casual = false;
EX bool pureHardcore() { return hardcore && hardcoreAt < PUREHARDCORE_LEVEL; }
/** can we still move? */
EX bool canmove = true;
// how many monsters are near
EX eMonster who_kills_me;
EX cell *who_kills_me_cell;
EX int lastkills;
EX vector<bool> legalmoves;
#if HDR
struct moveissue {
int type;
int subtype;
eMonster monster;
cell *where;
};
static constexpr int miVALID = 10000;
static constexpr int miENTITY = 11000;
static constexpr int miRESTRICTED = 10100;
static constexpr int miTHREAT = 10010;
static constexpr int miWALL = 10001;
static constexpr int siWALL = 1;
static constexpr int siMONSTER = 2;
static constexpr int siGRAVITY = 3;
static constexpr int siROSE = 4;
static constexpr int siITEM = 5;
static constexpr int siWIND = 6;
static constexpr int siCURRENT = 7;
static constexpr int siFATIGUE = 8;
static constexpr int siWARP = 9;
static constexpr int siUNKNOWN = 10;
#endif
/* why is a move illegal */
EX vector<moveissue> move_issues;
EX moveissue checked_move_issue;
EX moveissue stay_issue;
EX int yasc_code;
EX void check_if_monster() {
eMonster m = cwt.peek()->monst;
if(m && m != passive_switch && !isFriendly(m))
checked_move_issue = moveissue { miENTITY, siMONSTER, m, cwt.peek() };
}
EX bool hasSafeOrb(cell *c) {
return
c->item == itOrbSafety ||
c->item == itOrbShield ||
c->item == itOrbShell ||
(c->item == itOrbYendor && yendor::state(c) == yendor::ysUnlocked);
}
#if HDR
struct player_move_info {
movei mi;
cell *swordlast[2], *swordtransit[2], *swordnext[2];
player_move_info(movei mi);
};
#endif
EX vector<player_move_info> pmi;
EX vector<cell*> pushes;
player_move_info::player_move_info(movei _mi) : mi(_mi) {
for(int b=0; b<2; b++) swordlast[b] = sword::pos(multi::cpid, b);
dynamicval<sword::sworddir> x7(sword::dir[multi::cpid], sword::shift(mi, sword::dir[multi::cpid]));
for(int b=0; b<2; b++) {
swordnext[b] = sword::pos(multi::cpid, b);
swordtransit[b] = NULL;
if(swordnext[b] && swordnext[b] != swordlast[b] && !isNeighbor(swordlast[b], swordnext[b])) {
forCellEx(c2, swordnext[b])
if(c2 != mi.t && c2 != mi.s && isNeighbor(c2, S3==3 ? swordlast[b] : mi.t))
swordtransit[b] = c2;
if(S3 == 4)
forCellEx(c2, mi.s)
if(c2 != mi.s && isNeighbor(c2, swordlast[b]))
swordtransit[b] = c2;
}
}
}
EX bool krakensafe(cell *c) {
return items[itOrbFish] || items[itOrbAether] ||
(c->item == itOrbFish && c->wall == waBoat) ||
(c->item == itOrbAether && c->wall == waBoat);
}
EX bool monstersnear(cell *c, eMonster who) {
bool eaten = false;
if(hardcore && who == moPlayer) return false;
int res = 0;
bool fast = false;
bool kraken_will_destroy_boat = false;
elec::builder b;
if(elec::affected(c)) { who_kills_me = moLightningBolt; who_kills_me_cell = nullptr; res++; }
if(c->wall == waArrowTrap && c->wparam == 2) {
who_kills_me = moArrowTrap; who_kills_me_cell = nullptr; res++;
}
for(auto c1: crush_now) if(c == c1) {
who_kills_me = moCrusher; who_kills_me_cell = nullptr; res++;
}
if(who == moPlayer || items[itOrbEmpathy]) {
fast = (items[itOrbSpeed] && (items[itOrbSpeed] & 1));
if(who == moPlayer && !isPlayerOn(c) && c->item == itOrbSpeed && !items[itOrbSpeed]) fast = true;
}
if(havewhat&HF_OUTLAW) {
for(cell *c1: gun_targets(c))
if(c1->monst == moOutlaw && !c1->stuntime) {
res++; who_kills_me = moOutlaw; who_kills_me_cell = c1;
}
}
for(int t=0; t<c->type; t++) {
cell *c2 = c->move(t);
// consider monsters who attack from distance 2
if(c2) forCellEx(c3, c2) if(c3 != c) {
// only these monsters can attack from two spots...
if(!among(c3->monst, moLancer, moWitchSpeed, moWitchFlash))
continue;
if(c3->monst == moWitchSpeed && cwt.at->land != laPower)
continue;
// take logical_adjacent into account
if(c3->monst != moWitchFlash)
if(!logical_adjacent(c3, c3->monst, c2) || !logical_adjacent(c2, c3->monst, c) || (c3->monst == moWitchSpeed && c2->land != laPower))
continue;
if(elec::affected(c3)) continue;
if(c3->stuntime > (who == moPlayer ? 0 : 1)) continue;
// speedwitches can only attack not-fastened monsters,
// others can only attack if the move is not fastened
if(c3->monst == moWitchSpeed && items[itOrbSpeed]) continue;
if(c3->monst != moWitchSpeed && fast) continue;
// cannot attack if the immediate cell is impassable (except flashwitches)
if(c3->monst != moWitchFlash) {
if(!passable(c2, c3, 0)) continue;
if(isPlayerOn(c2) && items[itOrbFire]) continue;
}
// flashwitches cannot attack if it would kill another enemy
if(c3->monst == moWitchFlash && flashWouldKill(c3, 0)) continue;
res++, who_kills_me = c3->monst; who_kills_me_cell = c3;
}
// consider normal monsters
if(c2 && isArmedEnemy(c2, who)) {
eMonster m = c2->monst;
if(elec::affected(c2)) continue;
if(fast && c2->monst != moWitchSpeed) continue;
// Krakens just destroy boats
if(who == moPlayer && c2->monst == moKrakenT && c->wall == waBoat && !peace::on) {
kraken_will_destroy_boat = true;
continue;
}
// they cannot attack through vines
if(!canAttack(c2, c2->monst, c, who, AF_NEXTTURN)) continue;
if(c2->monst == moWorm || c2->monst == moTentacle || c2->monst == moHexSnake) {
if(passable_for(c2->monst, c, c2, 0))
eaten = true;
else if(c2->monst != moHexSnake) continue;
}
res++, who_kills_me = m; who_kills_me_cell = c2;
}
}
if(kraken_will_destroy_boat && !krakensafe(c) && warningprotection(XLAT("This move appears dangerous -- are you sure?"))) {
if (res == 0) who_kills_me = moWarning; who_kills_me_cell = nullptr;
res++;
} else {
if(who == moPlayer && res && (markOrb2(itOrbShield) || markOrb2(itOrbShell)) && !eaten)
res = 0;
if(who == moPlayer && res && markOrb2(itOrbDomination) && c->monst)
res = 0;
}
return !!res;
}
EX bool monstersnear_aux() {
changes.value_set(passive_switch, (gold() & 1) ? moSwitch1 : moSwitch2);
multi::cpid++;
bool b = false;
if(multi::cpid == multi::players || multi::players == 1 || multi::checkonly) {
if(shmup::delayed_safety) return false;
for(int i=0; i<isize(pmi); i++)
for(int j=0; j<isize(pmi); j++) if(i != j) {
if(swordConflict(pmi[i], pmi[j])) {
b = true;
who_kills_me = moEnergySword;
}
if(pmi[i].mi.t == pmi[j].mi.t)
{ b = true; who_kills_me = moFireball; }
if(celldistance(pmi[i].mi.t, pmi[j].mi.t) > 8)
{ b = true; who_kills_me = moAirball; }
}
for(auto& pushto: pushes)
for(auto& mi: pmi)
if(pushto == mi.mi.t) {
b = true; who_kills_me = moTongue;
}
for(int i=0; i<isize(pushes); i++)
for(int j=0; j<i; j++)
if(pushes[i] == pushes[j]) {
b = true; who_kills_me = moCrushball;
}
for(int i=0; !b && i<isize(pmi); i++)
b = monstersnear(pmi[i].mi.t, moPlayer);
}
else b = !multimove();
multi::cpid--;
return b;
}
/** like monstersnear but add the potential moves of other players into account */
EX bool monstersnear_add_pmi(player_move_info pmi0) {
if(suicidal) {
who_kills_me = moPlayer; who_kills_me_cell = nullptr;
return true;
}
pmi.push_back(pmi0);
bool b = monstersnear_aux();
pmi.pop_back();
return b;
}
EX bool multimove() {
if(multi::cpid == 0) lastkills = tkills();
if(!multi::playerActive(multi::cpid)) return !monstersnear_aux();
cellwalker bcwt = cwt;
cwt = multi::player[multi::cpid];
bool b = movepcto(multi::whereto[multi::cpid]);
if(b) {
multi::aftermove = true;
multi::player[multi::cpid] = cwt;
multi::whereto[multi::cpid].d = MD_UNDECIDED;
int curkills = tkills();
multi::kills[multi::cpid] += (curkills - lastkills);
lastkills = curkills;
}
cwt = bcwt;
return b;
}
EX namespace multi {
EX bool checkonly = false;
EX bool aftermove;
EX }
EX bool swordConflict(const player_move_info& sm1, const player_move_info& sm2) {
if(items[itOrbSword] || items[itOrbSword2])
for(int b=0; b<2; b++)
if(sm1.mi.s == sm2.swordlast[b] || sm1.mi.s == sm2.swordtransit[b] || sm1.mi.s == sm2.swordnext[b])
if(sm1.mi.t == sm2.swordlast[b] || sm1.mi.t == sm2.swordtransit[b] || sm1.mi.t == sm2.swordnext[b])
return true;
return false;
}
EX string yasc_message;
EX string blocking_monster_name(const moveissue& mi) {
if(mi.monster == moKnight && mi.where)
return XLAT("%1 the Knight", camelot::knight_name(mi.where));
else
return dnameof(mi.monster);
}
EX void create_yasc_message() {
set<pair<cell*, string>> captures;
auto all = move_issues;
all.push_back(stay_issue);
for(auto c: all) if(c.type == miTHREAT) captures.emplace(c.where, blocking_monster_name(c));
vector<string> context;
if(!captures.empty()) {
string msg = "captured by ";
map<string, int> qties;
for(auto ca: captures) qties[ca.second]++;
int iqties = 0;
for(auto q: qties) {
if(iqties && iqties == isize(qties) - 1) msg += " and ";
else if(iqties) msg += ", ";
msg += q.first;
if(q.second > 1) msg += " (x" + its(q.second) + ")";
iqties++;
}
context.push_back(msg);
}
int idx = 0;
for(auto c: all) if(idx == 0 && c.subtype == siROSE) context.push_back("rosed"), idx = 1;
for(auto c: all) if(idx < 2 && c.subtype == siWIND) context.push_back("blown away"), idx = 2;
for(auto c: all) if(idx < 3 && c.subtype == siGRAVITY) context.push_back("falling"), idx = 3;
for(auto c: all) if(idx < 4 && c.subtype == siFATIGUE) context.push_back("fatigued"), idx = 4;
for(auto c: all) if(idx < 5 && c.subtype == siCURRENT) context.push_back("whirled"), idx = 5;
bool in_ctx = true;
set<string> blocks;
int index = 0;
for(auto c: all) {
if(c.type == miENTITY && !captures.count({c.where, blocking_monster_name(c)})) blocks.insert(blocking_monster_name(c));
else if(c.type == miWALL && c.subtype == siMONSTER && !captures.count({c.where, blocking_monster_name(c)})) blocks.insert(blocking_monster_name(c));
else if(c.subtype == siITEM) blocks.insert("item");
else if(c.subtype == siWALL) {
if(c.where == cwt.at) {
if(in_ctx) {
if(c.where->wall == waNone && c.where->land == laBrownian)
context.push_back("on level 3");
else if(c.where->wall == waRoundTable)
context.push_back("being polite");
else
context.push_back(winf[c.where->wall].flags & WF_ON ? XLAT("on %the1", c.where->wall) : XLAT("in %the1", c.where->wall));
}
in_ctx = false;
}
else if(c.where && c.where->wall != cwt.at->wall) blocks.insert(dnameof(c.where->wall));
}
else if(c.type == siWARP) blocks.insert("warp");
index++;
}
if(!blocks.empty()) {
string block = "blocked by ";
int iqties = 0;
for(auto& q: blocks) {
if(iqties && iqties == isize(blocks) - 1) block += " and ";
else if(iqties) block += ", ";
block += q;
iqties++;
}
context.push_back(block);
}
yasc_message = "";
int iqties = 0;
for(auto& ctx: context) {
if(iqties == 0) ;
else if(iqties == 1) yasc_message += " while ";
else if(iqties == isize(context) - 1) yasc_message += " and ";
else yasc_message += ", ";
yasc_message += ctx;
iqties++;
}
if(captures.size() == 2 && context.size() == 1 && cwt.at->type == 6) {
vector<int> dirs;
forCellIdEx(c1, i, cwt.at) for(auto cap: captures) if(cap.first == c1) dirs.push_back(i);
if(isize(dirs) == 2 && abs(dirs[0]-dirs[1]) == 3) {
auto c1 = captures.begin(); c1++;
yasc_message = XLAT("pinched by %the1 and %the2", captures.begin()->second, c1->second);
}
}
println(hlog, "YASC_MESSAGE: ", yasc_message);
}
int yasc_recode(int x) {
if(cwt.at->type < 10 || x == 0) return x;
return yasc_recode(x / 10) * 100 + (x % 10);
};
EX void checkmove() {
if(dual::state == 2) return;
if(shmup::on) return;
dynamicval<eGravity> gs(gravity_state, gravity_state);
#if CAP_INV
if(inv::on) inv::compute();
#endif
if(multi::players > 1 && !multi::checkonly) return;
if(hardcore) return;
legalmoves.clear(); legalmoves.resize(cwt.at->type+1, false);
move_issues.clear(); move_issues.resize(cwt.at->type);
canmove = haveRangedTarget();
items[itWarning]+=2;
if(movepcto(-1, 0, true))
canmove = legalmoves[cwt.at->type] = true;
stay_issue = checked_move_issue;
if(true) {
for(int i=0; i<cwt.at->type; i++) {
dynamicval<bool> fm(bow::fire_mode, false);
if(movepcto(1, -1, true)) {
canmove = legalmoves[cwt.spin] = true;
}
check_if_monster();
move_issues[cwt.spin] = checked_move_issue;
if(!legalmoves[cwt.spin]) {
if(movepcto(0, 1, true)) {
canmove = legalmoves[cwt.spin] = true;
}
check_if_monster();
move_issues[cwt.spin] = checked_move_issue;
}
}
}
if(kills[moPlayer]) canmove = false;
yasc_code = 0;
for(int i=0; i<cwt.at->type; i++)
yasc_code += yasc_recode(move_issues[i].type);
if(!canmove && bow::crossbow_mode() && !items[itCrossbow]) canmove = bow::have_bow_target();
#if CAP_INV
if(inv::on && !canmove && !inv::incheck) {
if(inv::remaining[itOrbSafety] || inv::remaining[itOrbFreedom])
canmove = true;
else {
inv::check(1);
checkmove();
inv::check(-1);
}
if(canmove)
pushScreen(inv::show);
}
#endif
if(!canmove) {
create_yasc_message();
achievement_final(true);
if(cmode & sm::NORMAL) showMissionScreen();
}
else yasc_message = "";
if(canmove && timerstopped) {
timerstart = time(NULL);
timerstopped = false;
}
items[itWarning]-=2;
if(recallCell.at && !markOrb(itOrbRecall)) activateRecall();
}
}

File diff suppressed because it is too large Load Diff

304
classes.h
View File

@ -1,304 +0,0 @@
namespace hr {
typedef unsigned color_t;
typedef unsigned long long flagtype;
#define Flag(i) (flagtype(1ull<<i))
static inline void set_flag(flagtype& f, flagtype which, bool b) {
if(b) f |= which;
else f &= ~which;
}
static const int motypes = 162;
struct monstertype {
char glyph;
color_t color;
const char *name;
const char *help;
};
enum eMonster {
moNone,
moYeti, moWolf, moWolfMoved,
moRanger,
moTroll, moGoblin,
moWorm, moWormtail, moWormwait, moHedge,
moDesertman,
moIvyRoot, moIvyHead, moIvyBranch, moIvyWait, moIvyNext, moIvyDead,
moMonkey,
moSlime,
moMimic, moREMOVED, moGolem, moGolemMoved,
moEagle, moSeep,
moZombie, moGhost, moNecromancer, moShadow,
moTentacle, moTentacletail, moTentaclewait, moTentacleEscaping,
moCultist, moPyroCultist,
moGreater, moGreaterM, moLesser, moLesserM,
moShark, moRunDog, moGreaterShark, moFireFairy,
moCrystalSage, moLancer, moFlailer, moMiner,
moVineBeast, moVineSpirit, moDarkTroll, moEarthElemental,
moBug0, moBug1, moBug2,
moWitch, moWitchSpeed, moWitchFlash, moWitchFire, moWitchWinter, moWitchGhost,
moEvilGolem, moKnight, moCultistLeader, moSlimeNextTurn, moKnightMoved,
moIllusion,
moPirate, moCShark, moParrot,
moHexSnake, moHexSnakeTail, moRedTroll, moBomberbird, moAlbatross,
moTameBomberbird, moTameBomberbirdMoved,
moPalace, moFatGuard, moSkeleton, moVizier,
moViking, moFjordTroll, moWaterElemental,
moMouse, moMouseMoved,
moPrincess, moPrincessMoved,
moPrincessArmed, moPrincessArmedMoved,
moFamiliar, moGargoyle, moFireElemental, moAirElemental,
moOrangeDog, moTentacleGhost,
moMetalBeast, moMetalBeast2, moOutlaw, moMutant,
moStormTroll, moForestTroll,
moRedFox, moWindCrow, moFriendlyGhost, moRatling, moFalsePrincess, moRoseLady,
moRoseBeauty, moRatlingAvenger,
moTortoise, moDragonHead, moDragonTail,
moGadfly, moResearcher, moSparrowhawk,
moKrakenH, moKrakenT, moDraugr, moFriendlyIvy,
moVampire, moBat, moReptile,
moHerdBull, moRagingBull, moSleepBull,
moButterfly, moNarciss, moMirrorSpirit,
moHunterDog, moTerraWarrior, moJiangshi, moVoidBeast, moLavaWolf, moHunterGuard,
moIceGolem, moSandBird, moSalamander, moHunterChanging,
moNorthPole, moSouthPole,
moPair, moHexDemon, moAltDemon, moMonk, moCrusher,
moSwitch1, moSwitch2,
// shmup specials
moPlayer, moBullet, moFlailBullet, moFireball, moTongue, moAirball, moCrushball,
// temporary
moDeadBug, moLightningBolt, moDeadBird, moEnergySword, moWarning, moArrowTrap,
moRogueviz
};
struct genderswitch_t {
int gender;
eMonster m;
const char *name;
const char *desc;
};
#define NUM_GS 6
static const int ittypes = 130;
struct itemtype {
char glyph;
color_t color;
const char *name;
const char *help;
};
enum eItem {
itNone, itDiamond, itGold, itSpice, itRuby, itElixir, itShard, itBone, itHell, itStatue,
itFeather, itSapphire, itHyperstone, itKey,
itGreenStone, itOrbYendor,
itOrbLightning, itOrbFlash, itOrbWinter, itOrbSpeed, itOrbLife, itOrbShield, itOrbDigging,
itOrbTeleport, itOrbSafety,
itOrbThorns, itFernFlower,
itWine, itOrbAether, itSilver, itOrbPsi,
itRoyalJelly, itEmerald, itOrbInvis, itPower, itOrbFire,
itHolyGrail, itGrimoire,
itOrbDragon, itOrbIllusion,
itPirate, itCompass,
itRedGem, itOrbTime, itOrbSpace,
itBombEgg, itCoast, itWhirlpool,
itOrbFriend, itOrbWater, itOrbAir,
itPalace, itOrbFrog,
itFjord, itOrbFish,
itOrbDiscord,
itSavedPrincess, itOrbLove,
itIvory, itZebra,
itFireShard, itAirShard, itEarthShard, itWaterShard,
itElemental, itOrbSummon, itOrbMatter,
itBounty, itRevolver, itFulgurite, itMutant,
itOrbStunning, itOrbLuck,
itMutant2, itOrbFreedom, itLotus, itOrbUndeath,
itWindstone, itOrbEmpathy, itStrongWind, itBuggy, itBuggy2,
itRose, itCoral, itOrbBeauty, itOrb37, itOrbEnergy,
itBabyTortoise, itOrbShell, itApple, itDragon, itOrbDomination,
itOrbSword, itKraken, itOrbSword2, itBarrow,
itTrollEgg, itWarning, itOrbStone, itOrbNature, itTreat,
itSlime, itAmethyst, itOrbRecall, itDodeca, itOrbDash, itGreenGrass, itOrbHorns,
itOrbBull, itBull, itOrbMirror,
itInventory,
itLavaLily, itHunting, itBlizzard, itTerra,
itOrbSide1, itOrbSide2, itOrbSide3,
itOrbLava, itOrbMorph, itGlowCrystal, itSnake,
itDock, itRuins, itMagnet, itSwitch,
itOrbPhasing, itOrbMagnetism, itOrbSlaying
};
static const int walltypes = 109;
struct walltype {
char glyph;
color_t color;
const char *name;
const char *help;
};
enum eWall { waNone, waIcewall, waBarrier, waFloorA, waFloorB, waCavewall, waCavefloor, waDeadTroll, waDune,
waMirror, waCloud, waThumperOff, waFire, waAncientGrave, waFreshGrave, waColumn, waSulphurC, waSulphur,
waLake, waFrozenLake, waChasm, waChasmD, waBigTree, waSmallTree,
waVinePlant, waVineHalfA, waVineHalfB, waPartialFire,
waDeadwall, waDeadfloor, waDeadfloor2, waWaxWall, waGlass, waCamelot, waRoundTable,
waCamelotMoat,
waBigStatue,
waSea, waBoat, waCIsland, waCIsland2, waCTree,
waRed1, waRed2, waRed3,
waMineUnknown, waMineMine, waMineOpen,
waStrandedBoat,
waPalace, waClosedGate, waOpenGate, waClosePlate, waOpenPlate, waTrapdoor,
waGiantRug,
waPlatform, waGargoyle, waGargoyleFloor, waRubble, waLadder, waStone,
waBonfireOff, waThumperOn, waEternalFire,
waGargoyleBridge,
waTempWall, waTempFloor, waTempBridge,
waCharged, waGrounded, waSandstone, waSaloon, waMetal,
waDeadTroll2, waFan,
waTemporary, waEarthD, waElementalTmp, waElementalD,
waSlime1, waSlime2, waRose, waWarpGate,
waTrunk, waSolidBranch, waWeakBranch, waCanopy,
waBarrowWall, waBarrowDig,
waPetrified, waTower,
waBigBush, waSmallBush,
waReptile, waReptileBridge,
waInvisibleFloor,
waMirrorWall,
waPetrifiedBridge,
waTempBridgeBlocked,
waTerraWarrior, waBubble,
waArrowTrap, waMercury, waMagma,
waDock, waBurningDock, waRuinWall, waBrownian
};
static const int landtypes = 85;
struct landtype {
color_t color;
const char *name;
const char *help;
};
enum eLand { laNone, laBarrier, laCrossroads, laDesert, laIce, laCaves, laJungle, laAlchemist, laMirror, laGraveyard,
laRlyeh, laHell, laCocytus, laMotion, laDryForest, laEmerald, laWineyard, laDeadCaves,
laHive, laPower, laCamelot, laTemple,
laCrossroads2, laCaribbean, laRedRock, laMinefield, laOcean, laWhirlpool,
laPalace, laLivefjord,
laIvoryTower, laZebra, laEFire, laEAir, laEEarth, laEWater, laCrossroads3,
laOceanWall, laElementalWall,
laCanvas, laPrincessQuest,
laWildWest, laStorms, laOvergrown, laClearing,
laHaunted, laHauntedWall, laHauntedBorder,
laWhirlwind, laRose, laWarpCoast, laWarpSea, laCrossroads4,
laEndorian, laTortoise, laDragon,
laKraken, laBurial, laTrollheim,
laHalloween, laDungeon, laMountain, laReptile,
laPrairie, laBull, laCrossroads5, laCA,
laMirrorWall, laMirrored, laMirrorWall2, laMirrored2,
laMirrorOld,
laVolcano, laBlizzard, laHunting, laTerracotta, laMercuryRiver,
laDual, laSnakeNest, laDocks, laRuins, laMagnetic,
laSwitch, laMemory, laBrownian
};
enum eGeometry {
gNormal, gEuclid, gSphere, gElliptic, gZebraQuotient, gFieldQuotient, gTorus, gOctagon, g45, g46, g47, gSmallSphere, gTinySphere, gEuclidSquare, gSmallElliptic,
gKleinQuartic, gBolza, gBolza2, gMinimal, gBinaryTiling, gArchimedean,
gMacbeath, gBring, gSchmutzM2, gSchmutzM3, gCrystal, gOctahedron,
gGUARD};
enum eGeometryClass { gcHyperbolic, gcEuclid, gcSphere };
enum class eVariation { bitruncated, pure, goldberg, irregular, dual };
struct geometryinfo {
const char* tiling_name;
const char* quotient_name;
const char* menu_displayed_name;
const char* shortname;
int sides;
int vertex;
flagtype flags;
eGeometryClass cclass;
int xcode;
std::array<int,2> distlimit; // bitrunc, non-bitrunc
eVariation default_variation;
};
static const flagtype qBOUNDED = 1;
static const flagtype qANYQ = 2;
static const flagtype qNONORIENTABLE = 4;
static const flagtype qSMALL = 8;
static const flagtype qFIELD = 16;
static const flagtype qDOCKS = 32;
static const flagtype qZEBRA = 64;
// note: dnext assumes that x&7 equals 7
static const int SEE_ALL = 50;
static const int FORBIDDEN = -1;
extern eGeometry geometry;
extern eVariation variation;
extern std::vector<geometryinfo> ginf;
extern monstertype minf[motypes];
extern itemtype iinf[ittypes];
extern const landtype linf[landtypes];
extern color_t floorcolors[landtypes];
enum cpatterntype {
cpFootball, cpThree, cpChess, cpSingle, cpSingleSym, cpOddEven, cpLarge, cpZebra, cpUnknown
};
struct landtacinfo { eLand l; int tries, multiplier; };
enum eModel {
mdDisk, mdHalfplane, mdBand, mdPolygonal, mdFormula,
mdEquidistant, mdEquiarea, mdBall, mdHyperboloid,
mdHemisphere, mdBandEquidistant, mdBandEquiarea, mdSinusoidal, mdTwoPoint,
mdFisheye, mdJoukowsky, mdJoukowskyInverted,
mdRotatedHyperboles, mdSpiral,
mdGUARD, mdUnchanged, mdHyperboloidFlat, mdPolynomial
};
typedef unsigned long long flagtype;
namespace mf {
static const flagtype azimuthal = 1;
static const flagtype band = 2 + 512;
static const flagtype equiarea = 4;
static const flagtype equidistant = 8;
static const flagtype conformal = 16;
static const flagtype euc_boring = 32;
static const flagtype space = 64;
static const flagtype hyper_only = 128;
static const flagtype hyper_or_torus = 256;
static const flagtype quasiband = 512;
};
struct modelinfo {
const char *name_hyperbolic;
const char *name_euclidean;
const char *name_spherical;
flagtype flags;
int is_azimuthal;
int is_band;
int is_equiarea;
int is_equidistant;
int is_conformal;
const char* name;
};
extern const modelinfo models[int(mdPolynomial)+1];
}

312
colors.cpp Normal file
View File

@ -0,0 +1,312 @@
// Hyperbolic Rogue -- color routines
// Copyright (C) 2011-2020 Zeno Rogue, see 'hyper.cpp' for details
/** \file colors.cpp
* \brief This file implements routines related to colors
*/
#include "hyper.h"
namespace hr {
/** \brief Return a reference to i-th component of col.
* \arg i For colors with alpha, A=0, R=1, G=2, B=3. For colors without alpha, R=0, G=1, B=2.
*/
EX unsigned char& part(color_t& col, int i) {
unsigned char* c = (unsigned char*) &col;
#if ISMOBILE
return c[i];
#else
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
return c[sizeof(col) - 1 - i];
#else
return c[i];
#endif
#endif
}
#if HDR
static constexpr color_t NOCOLOR = 0;
struct colortable: vector<color_t> {
color_t& operator [] (int i) { i %= size(); if(i<0) i += size(); return ((vector<color_t>&)(*this)) [i]; }
const color_t& operator [] (int i) const { i %= size(); if(i<0) i += size(); return ((vector<color_t>&)(*this)) [i]; }
colortable(std::initializer_list<color_t> v) : vector(v) {}
colortable() : vector({0}) {}
void allocate(int num) {
int q = size();
for(int i=q; i<num; i++) push_back((*this)[i % q]);
}
};
#endif
/* darkening routines */
EX color_t darkena3(color_t c, int lev, int a) {
return (darkenedby(c, lev) << 8) + a;
}
EX color_t darkena(color_t c, int lev, int a) {
return darkena3(c, lev, GDIM == 3 ? 255 : a);
}
EX int darkenedby(int c, int lev) {
for(int i=0; i<lev; i++)
c = ((c & 0xFEFEFE) >> 1);
return c;
}
bool fading = false;
ld fadeout = 1;
EX color_t darkened(color_t c) {
if(inmirrorcount&1)
c = gradient(c, winf[waMirror].color, 0, 0.5, 1);
else if(inmirrorcount)
c = gradient(c, winf[waCloud].color, 0, 0.5, 1);
if(fading) c = gradient(backcolor, c, 0, fadeout, 1);
if(vid.desaturate) {
ld luminance = 0.2125 * part(c,2) + 0.7154 * part(c,1) + 0.0721 * part(c, 0);
c = gradient(c, int(luminance+.5) * 0x10101, 0, vid.desaturate, 100);
}
for(int i=0; i<darken; i++)
c = ((c & 0xFEFEFE) >> 1) + ((backcolor & 0xFEFEFE) >> 1);
return c;
}
/* gradient interpolation */
EX color_t gradient(color_t c0, color_t c1, ld v0, ld v, ld v1) {
int vv = int(256 * ((v-v0) / (v1-v0)));
color_t c = 0;
for(int a=0; a<4; a++) {
int p0 = part(c0, a);
int p1 = part(c1, a);
part(c, a) = (p0*(256-vv) + p1*vv + 127) >> 8;
}
return c;
}
EX color_t rcolor() {
color_t res;
part(res, 0) = hrand(0x80);
part(res, 1) = hrand(256);
part(res, 2) = hrand(0x80) + 128;
swap(part(res, 1), part(res, rand() % 2));
swap(part(res, 2), part(res, rand() % 3));
return res;
}
EX color_t rainbow_color(ld sat, ld hue) {
hue = frac(hue);
if(hue < 0) hue++;
hue *= 6;
color_t res = 0;
if(hue<1) res = gradient(0xFF0000, 0xFFFF00, 0, hue, 1);
else if(hue<2) res = gradient(0x00FF00, 0xFFFF00, 2, hue, 1);
else if(hue<3) res = gradient(0x00FF00, 0x00FFFF, 2, hue, 3);
else if(hue<4) res = gradient(0x0000FF, 0x00FFFF, 4, hue, 3);
else if(hue<5) res = gradient(0x0000FF, 0xFF00FF, 4, hue, 5);
else if(hue<=6) res = gradient(0xFF0000, 0xFF00FF, 6, hue, 5);
return gradient(0xFFFFFF, res, 0, sat, 1);
}
/** Adjust col to SDL_gfx functions. No adjustment is needed in SDL 1.2, but it is needed in SDL2 */
EX color_t align(color_t col) {
#if CAP_SDL2
swap(part(col, 0), part(col, 3));
swap(part(col, 1), part(col, 2));
#endif
return col;
}
#if HDR
enum class eNeon { none, neon, no_boundary, neon2, illustration};
#endif
EX eNeon neon_mode;
EX bool neon_nofill;
EX void apply_neon(color_t& col, int& r) {
switch(neon_mode) {
case eNeon::none:
case eNeon::illustration:
break;
case eNeon::neon:
poly_outline = col << 8; col = 0;
break;
case eNeon::no_boundary:
r = 0;
break;
case eNeon::neon2:
poly_outline = col << 8; col &= 0xFEFEFE; col >>= 1;
break;
}
}
/** used when neon_mode is eNeon::illustration */
EX color_t magentize(color_t x) {
if(neon_mode != eNeon::illustration) return x;
int green = part(x,2);
int magenta = (part(x, 1) + part(x, 3)) / 2;
int nm = max(magenta, green);
int gm = (magenta + green)/2;
nm = (nm + 255) / 2;
gm = gm / 2;
return (nm * 0x1000100) | (gm * 0x10000) | (part(x, 0));
}
EX color_t monochromatize(color_t x) {
int c = part(x,2) + part(x,1) + part(x, 3);
c ++;
c /= 3;
return c * 0x1010100 | (part(x, 0));
}
/** colorblind mode */
EX bool cblind;
/** apply neon_mode and cblind */
EX void apply_neon_color(color_t col, color_t& pcolor, color_t& poutline, flagtype flags) {
if(cblind) {
// protanopia
/* int r = (56 * part(col,3) + 43 * part(col,2)) / 100;
int g = (58 * part(col,3) + 42 * part(col,2)) / 100;
int b = (24 * part(col,2) + 75 * part(col,1)) / 100; */
// deuteranopia
/* int r = (625 * part(col,3) + 375 * part(col,2)) / 1000;
int g = (700 * part(col,3) + 300 * part(col,2)) / 1000;
int b = (300 * part(col,2) + 700 * part(col,1)) / 1000;
part(col,3) = r;
part(col,2) = g;
part(col,1) = b; */
part(col,2) = part(col,3) = (part(col,2) * 2 + part(col,3) + 1)/3;
}
if(neon_mode == eNeon::none) {
pcolor = (darkened(col >> 8) << 8) + (col & 0xFF);
poutline = poly_outline;
if(flags & POLY_TRIANGLES) poutline = 0;
}
else switch(neon_mode) {
case eNeon::neon:
pcolor = (poly_outline & 0xFFFFFF00) | (col & 0xFF);
poutline = (darkened(col >> 8) << 8) | (col & 0xFF);
if(col == 0xFF) poutline = 0xFFFFFFFF;
if(neon_nofill && pcolor == 0xFF) pcolor = 0;
break;
case eNeon::no_boundary:
pcolor = (darkened(col >> 8) << 8) + (col & 0xFF);
poutline = 0;
break;
case eNeon::neon2:
pcolor = (darkened(col >> 8) << 8) + (col & 0xFF) + ((col & 0xFF) >> 2);
poutline = (darkened(col >> 8) << 8) + (col & 0xFF);
if(col == 0xFF) poutline = 0xFFFFFFFF;
if(poly_outline != 0xFF) poutline = poly_outline;
if(neon_nofill && pcolor == 0xFF) pcolor = 0;
break;
case eNeon::illustration: {
if(poly_outline && (poly_outline>>8) != bordcolor) {
pcolor = magentize(col);
poutline = 0xFF;
}
else {
poutline = poly_outline;
pcolor = monochromatize(col);
}
if(pcolor & 0xFF) pcolor |= 0xFF;
if(poutline & 0xFF) poutline |= 0xFF;
break;
}
case eNeon::none: ;
}
}
/* color of various stuff */
/** cloak color for the given table radius */
EX int cloakcolor(int rtr) {
rtr -= 28;
rtr /= 2;
rtr %= 10;
if(rtr < 0) rtr += 10;
// rtr = time(NULL) % 10;
int cc[10] = {
0x8080FF, 0x80FFFF, 0x80FF80, 0xFF8080, 0xFF80FF, 0xFFFF80,
0xFFFFC0, 0xFFD500, 0x421C52, 0
};
return cc[rtr];
}
EX int firegradient(double p) {
return gradient(0xFFFF00, 0xFF0000, 0, p, 1);
}
constexpr ld PI1000 = 0.001 / A_PI;
EX int firecolor(int phase IS(0), int mul IS(1)) {
return gradient(0xFFFF00, 0xFF0000, -1, sintick(100*mul, phase * 5 * PI1000), 1);
}
EX int watercolor(int phase) {
return 0x0080C0FF + 256 * int(63 * sintick(50, phase * 10 * PI1000));
}
EX int aircolor(int phase) {
return 0x8080FF00 | int(32 + 32 * sintick(200, phase * 1. / cgi.S21));
}
EX int fghostcolor(cell *c) {
int phase = int(fractick(650, (int)(size_t)c) * 4000);
if(phase < 1000) return gradient(0xFFFF80, 0xA0C0FF, 0, phase, 1000);
else if(phase < 2000) return gradient(0xA0C0FF, 0xFF80FF, 1000, phase, 2000);
else if(phase < 3000) return gradient(0xFF80FF, 0xFF8080, 2000, phase, 3000);
else if(phase < 4000) return gradient(0xFF8080, 0xFFFF80, 3000, phase, 4000);
return 0xFFD500;
}
EX int weakfirecolor(int phase) {
return gradient(0xFF8000, 0xFF0000, -1, sintick(500, phase * PI1000), 1);
}
/* HTML color names */
EX vector<pair<const char*, color_t>> color_names = {
{"aliceblue", 0xf0f8ff}, {"antiquewhite", 0xfaebd7}, {"aqua", 0x00ffff}, {"aquamarine", 0x7fffd4}, {"azure", 0xf0ffff},
{"beige", 0xf5f5dc}, {"bisque", 0xffe4c4}, {"black", 0x000000}, {"blanchedalmond", 0xffebcd}, {"blue", 0x0000ff}, {"blueviolet", 0x8a2be2}, {"brown", 0xa52a2a}, {"burlywood", 0xdeb887},
{"cadetblue", 0x5f9ea0}, {"chartreuse", 0x7fff00}, {"chocolate", 0xd2691e}, {"coral", 0xff7f50}, {"cornflowerblue", 0x6495ed}, {"cornsilk", 0xfff8dc}, {"crimson", 0xdc143c}, {"cyan", 0x00ffff},
{"darkblue", 0x00008b}, {"darkcyan", 0x008b8b}, {"darkgoldenrod", 0xb8860b}, {"darkgray", 0xa9a9a9}, {"darkgreen", 0x006400}, {"darkkhaki", 0xbdb76b}, {"darkmagenta", 0x8b008b}, {"darkolivegreen", 0x556b2f},
{"darkorange", 0xff8c00}, {"darkorchid", 0x9932cc}, {"darkred", 0x8b0000}, {"darksalmon", 0xe9967a}, {"darkseagreen", 0x8fbc8f}, {"darkslateblue", 0x483d8b}, {"darkslategray", 0x2f4f4f}, {"darkturquoise", 0x00ced1},
{"darkviolet", 0x9400d3}, {"deeppink", 0xff1493}, {"deepskyblue", 0x00bfff}, {"dimgray", 0x696969}, {"dodgerblue", 0x1e90ff},
{"firebrick", 0xb22222}, {"floralwhite", 0xfffaf0}, {"forestgreen", 0x228b22}, {"fuchsia", 0xff00ff},
{"gainsboro", 0xdcdcdc}, {"ghostwhite", 0xf8f8ff}, {"gold", 0xffd700}, {"goldenrod", 0xdaa520}, {"gray", 0x808080}, {"green", 0x008000}, {"greenyellow", 0xadff2f},
{"honeydew", 0xf0fff0}, {"hotpink", 0xff69b4},
{"indianred ", 0xcd5c5c}, {"indigo", 0x4b0082}, {"ivory", 0xfffff0}, {"khaki", 0xf0e68c},
{"lavender", 0xe6e6fa}, {"lavenderblush", 0xfff0f5}, {"lawngreen", 0x7cfc00}, {"lemonchiffon", 0xfffacd}, {"lightblue", 0xadd8e6}, {"lightcoral", 0xf08080}, {"lightcyan", 0xe0ffff}, {"lightgoldenrodyellow", 0xfafad2},
{"lightgrey", 0xd3d3d3}, {"lightgreen", 0x90ee90}, {"lightpink", 0xffb6c1}, {"lightsalmon", 0xffa07a}, {"lightseagreen", 0x20b2aa}, {"lightskyblue", 0x87cefa}, {"lightslategray", 0x778899}, {"lightsteelblue", 0xb0c4de},
{"lightyellow", 0xffffe0}, {"lime", 0x00ff00}, {"limegreen", 0x32cd32}, {"linen", 0xfaf0e6},
{"magenta", 0xff00ff}, {"maroon", 0x800000}, {"mediumaquamarine", 0x66cdaa}, {"mediumblue", 0x0000cd}, {"mediumorchid", 0xba55d3}, {"mediumpurple", 0x9370d8}, {"mediumseagreen", 0x3cb371}, {"mediumslateblue", 0x7b68ee},
{"mediumspringgreen", 0x00fa9a}, {"mediumturquoise", 0x48d1cc}, {"mediumvioletred", 0xc71585}, {"midnightblue", 0x191970}, {"mintcream", 0xf5fffa}, {"mistyrose", 0xffe4e1}, {"moccasin", 0xffe4b5},
{"navajowhite", 0xffdead}, {"navy", 0x000080},
{"oldlace", 0xfdf5e6}, {"olive", 0x808000}, {"olivedrab", 0x6b8e23}, {"orange", 0xffa500}, {"orangered", 0xff4500}, {"orchid", 0xda70d6},
{"palegoldenrod", 0xeee8aa}, {"palegreen", 0x98fb98}, {"paleturquoise", 0xafeeee}, {"palevioletred", 0xd87093}, {"papayawhip", 0xffefd5}, {"peachpuff", 0xffdab9}, {"peru", 0xcd853f}, {"pink", 0xffc0cb}, {"plum", 0xdda0dd}, {"powderblue", 0xb0e0e6}, {"purple", 0x800080},
{"rebeccapurple", 0x663399}, {"red", 0xff0000}, {"rosybrown", 0xbc8f8f}, {"royalblue", 0x4169e1},
{"saddlebrown", 0x8b4513}, {"salmon", 0xfa8072}, {"sandybrown", 0xf4a460}, {"seagreen", 0x2e8b57}, {"seashell", 0xfff5ee}, {"sienna", 0xa0522d}, {"silver", 0xc0c0c0}, {"skyblue", 0x87ceeb}, {"slateblue", 0x6a5acd}, {"slategray", 0x708090}, {"snow", 0xfffafa}, {"springgreen", 0x00ff7f}, {"steelblue", 0x4682b4},
{"tan", 0xd2b48c}, {"teal", 0x008080}, {"thistle", 0xd8bfd8}, {"tomato", 0xff6347}, {"turquoise", 0x40e0d0},
{"violet", 0xee82ee},
{"wheat", 0xf5deb3}, {"white", 0xffffff}, {"whitesmoke", 0xf5f5f5},
{"yellow", 0xffff00}, {"yellowgreen", 0x9acd32}
};
EX pair<const char*, color_t>* find_color_by_name(const string& s) {
for(auto& c: color_names) if(c.first == s) return &c;
return nullptr;
}
}

View File

@ -1,13 +1,26 @@
// Hyperbolic Rogue -- commandline options
// Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details
/** \file commandline.cpp
* \brief Commandline options support
*/
#include "hyper.h"
namespace hr {
#if CAP_COMMANDLINE
const char *scorefile = "hyperrogue.log";
#ifdef RESOURCEDESTDIR
EX string rsrcdir = RESOURCEDESTDIR;
#endif
namespace arg {
eLand readland(const string& ss) {
#ifndef RESOURCEDESTDIR
EX string rsrcdir = "";
#endif
#if CAP_COMMANDLINE
EX string scorefile = "hyperrogue.log";
EX namespace arg {
EX eLand readland(const string& ss) {
if(ss == "II") return laCrossroads2;
if(ss == "III") return laCrossroads3;
if(ss == "IV") return laCrossroads4;
@ -19,7 +32,7 @@ eLand readland(const string& ss) {
return laNone;
}
eItem readItem(const string& ss) {
EX eItem readItem(const string& ss) {
for(int i=0; i<ittypes; i++) if(appears(iinf[i].name, ss)) {
return eItem(i);
break;
@ -27,16 +40,17 @@ eItem readItem(const string& ss) {
return itNone;
}
eMonster readMonster(const string& ss) {
EX eMonster readMonster(const string& ss) {
if(ss == "Pike") return moPike;
for(int i=0; i<motypes; i++) if(appears(minf[i].name, ss)) {
return eMonster(i);
break;
}
return moNone;
}
}
EX }
void initializeCLI() {
EX void initializeCLI() {
printf("HyperRogue by Zeno Rogue <zeno@attnam.com>, version " VER "\n");
#if !NOLICENSE
@ -49,39 +63,91 @@ void initializeCLI() {
if(getenv("HOME")) {
sbuf = getenv("HOME"); sbuf += "/."; sbuf += scorefile;
cbuf = getenv("HOME"); cbuf += "/."; cbuf += conffile;
scorefile = sbuf.c_str();
scorefile = sbuf;
conffile = cbuf.c_str();
}
#endif
}
namespace arg {
vector<string> argument;
int pos;
EX namespace arg {
EX int curphase;
void lshift() { pos++; }
EX vector<string> argument;
EX int pos;
void shift() {
lshift(); if(pos > isize(argument)) { printf("Missing parameter\n"); exit(1); }
EX void lshift() { pos++; }
EX void unshift() { pos--; }
EX void shift() {
lshift(); if(pos >= isize(argument)) { printf("Missing parameter\n"); exit(1); }
}
const string& args() { return argument[pos]; }
const char* argcs() { return args().c_str(); }
int argi() { return atoi(argcs()); }
unsigned arghex() { return strtoll(argcs(), NULL, 16); }
ld argf() { return parseld(args()); }
bool argis(const string& s) { if(args()[0] == '-' && args()[1] == '-') return args().substr(1) == s; return args() == s; }
EX bool nomore() { return pos >= isize(argument); }
void init(int argc, char **argv) { for(int i=0; i<argc; i++) argument.push_back(argv[i]); shift(); }
EX const string& args() { return argument[pos]; }
EX const char* argcs() { return args().c_str(); }
EX int argi() { return atoi(argcs()); }
EX long long argll() { return atoll(argcs()); }
EX int shift_argi() { shift(); return argi(); }
EX const string& shift_args() { shift(); return args(); }
EX unsigned arghex() { return strtoll(argcs(), NULL, 16); }
EX ld argf() {
try {
return parseld(args());
}
catch(hr_parse_exception& ex) {
println(hlog, "error parsing commandline parameters: ", ex.s);
exit(1);
}
}
EX bool argis(const string& s) { if(args()[0] == '-' && args()[1] == '-') return args().substr(1) == s; return args() == s; }
EX color_t argcolor(int bits) {
return parsecolor(args(), bits == 32);
}
int parameter_id;
EX void shift_arg_formula(ld& x, const reaction_t& r IS(reaction_t())) {
shift();
auto par = anims::find_param(&x);
if(!par) par = param_f(x, "tmp_parameter_" + its(parameter_id++))->set_reaction(r);
par->load_as_animation(args());
}
#if HDR
// an useful macro
#define PHASE(x) { if(arg::curphase > x) arg::phaseerror(x); else if(arg::curphase < x) return 2; }
#define PHASEFROM(x) { if(arg::curphase < x) return 2; }
#define TOGGLE(x, param, act) \
else if(args()[0] == '-' && args()[1] == x && !args()[2]) { PHASEFROM(2); showstartmenu = false; act; } \
else if(args()[0] == '-' && args()[1] == x && args()[2] == '1') { PHASEFROM(2); showstartmenu = false; if(!param) act; } \
else if(args()[0] == '-' && args()[1] == x && args()[2] == '0') { PHASEFROM(2); showstartmenu = false; if(param) act; }
#endif
EX void cheat() { autocheat = true; cheater++; timerghost = false; }
EX void run_arguments(const vector<string> vec) {
dynamicval<int> p(pos, 0);
dynamicval<vector<string>> orig(argument, vec);
read(3);
}
EX void init(int argc, char **argv) { for(int i=0; i<argc; i++) argument.push_back(argv[i]); lshift(); }
void phaseerror(int x) {
EX void phaseerror(int x) {
printf("Command line error: cannot read command '%s' from phase %d in phase %d\n", args().c_str(), x, curphase);
exit(1);
}
bool dialog_launched = false;
void launch_dialog(const reaction_t& r) {
EX void launch_dialog(const reaction_t& r IS(reaction_t())) {
if(!dialog_launched) {
popScreenAll();
showstartmenu = false;
@ -90,18 +156,35 @@ namespace arg {
if(r) pushScreen(r);
}
}
EX int readCommon();
EX int readLocal();
EX void read(int phase);
EX }
int arg::readCommon() {
// first phase options
if(argis("-s")) { PHASE(1); shift(); scorefile = argcs(); }
if(argis("-s")) { PHASE(2); shift(); scorefile = args(); savefile_selection = false; }
else if(argis("-no-s")) { PHASE(2); scorefile = ""; savefile_selection = false; }
else if(argis("-rsrc")) { PHASE(1); shift(); rsrcdir = args(); }
else if(argis("-nogui")) { PHASE(1); noGUI = true; }
#ifndef EMSCRIPTEN
else if(argis("-font")) { PHASE(1); shift(); fontpath = args(); }
#if CAP_SDL
else if(argis("-font")) { PHASE(1); shift(); fontpath = args();
#ifdef FONTCONFIG
font_to_find = "";
#endif
}
#ifdef FONTCONFIG
else if(argis("-find-font")) { PHASE(1); shift(); font_to_find = args(); }
#endif
#endif
#endif
else if(argis("-test-ach"))
test_achievements = true;
else if(argis("-test"))
callhooks(hooks_tests);
@ -109,13 +192,41 @@ int arg::readCommon() {
PHASE(1);
offlineMode = true;
}
else if(argis("-debugf")) {
debugfile = fopen("hyperrogue-debug.txt", "w");
shift(); debugflags = argi();
else if(argis("-no-stamp")) {
debugflags &=~ DF_TIME;
}
else if(argis("-debuge")) {
debugfile = stderr;
shift(); debugflags = argi();
else if(argis("-debf")) {
shift();
string s = args();
for(char c: s) {
for(int i=0; i<int(strlen(DF_KEYS)); i++) {
if(DF_KEYS[i] == c) debugflags |= (1<<i);
else if(DF_KEYS[i] == (c ^ 32)) debugflags &= ~(1<<i);
}
if(c >= '0' && c <= '9') {
debugflags &= DF_TIME;
if(c >= '1')
debugflags |= DF_INIT | DF_WARN | DF_MSG | DF_ERROR;
if(c >= '2')
debugflags |= DF_GEOM | DF_GP | DF_LOG | DF_FIELD | DF_POLY;
if(c >= '3')
debugflags |= DF_TURN | DF_STEAM;
if(c >= '4')
debugflags |= DF_GRAPH | DF_MEMORY;
}
else if(c == '+') {
if(debugfile) fclose(debugfile);
shift();
println(hlog, "writing to ", argcs());
debugfile = fopen(argcs(), "at");
}
else if(c == '@') {
if(debugfile) fclose(debugfile);
shift();
println(hlog, "writing to ", argcs());
debugfile = fopen(argcs(), "wt");
}
}
}
else if(argis("-run")) {
PHASE(3);
@ -131,24 +242,68 @@ int arg::readCommon() {
}
#if CAP_TOUR
else if(argis("-tour")) {
showstartmenu = false;
PHASEFROM(2); start_game(); tour::start();
}
else if(argis("-presentation")) {
PHASEFROM(2); tour::texts = false;
start_game(); tour::start();
}
else if(argis("-print-tour")) {
tour::print();
}
#endif
else if(argis("-draw")) {
PHASE(3); drawscreen();
PHASE(3); start_game(); drawscreen();
}
else if(argis("-rotate")) {
else if(argis("-sview")) {
PHASE(3); start_game();
shift(); ld a = argf();
shift(); ld b = argf();
View = View * spin(M_PI * 2 * a / b);
playermoved = false;
transmatrix T = View;
shift(); View = parsematrix(args());
println(hlog, "View is set to ", View);
current_display->which_copy = View * inverse(T) * current_display->which_copy;
}
else if(argis("-rotate-up")) {
start_game();
shiftmatrix S = ggmatrix(cwt.at->master->move(0)->c7);
View = spin90() * spintox(S.T*C0) * View;
playermoved = false;
}
else if(argis("-face-vertex")) {
PHASE(3); start_game();
auto &ss = currentmap->get_cellshape(cwt.at);
View = cspin90(0, 2) * spintox(ss.vertices_only_local[0]);
playermoved = false;
}
else if(argis("-face-face")) {
PHASE(3); start_game();
View = cspin90(0, 2);
}
else if(argis("-center-vertex")) {
PHASE(3); shift(); int i = argi();
shift(); int j = argi();
shift(); int k = argi();
start_game();
auto fh = currentmap->get_cellshape(cwt.at).faces[j][k];
hyperpoint h = View * fh;
if(i == 0) {
shift_view_to(shiftless(h));
playermoved = false;
}
if(i == 1) {
rotate_view(spintox(h));
rotate_view(cspin90(0, 2));
}
}
else if(argis("-exit")) {
PHASE(3); printf("Success.\n");
PHASE(3);
int t = SDL_GetTicks();
if(t > 1800 * 1000)
println(hlog, "Great Success!\n");
else
println(hlog, "Success.\n");
fflush(stdout);
exit(0);
}
@ -176,38 +331,58 @@ int arg::readCommon() {
clearMessages();
}
else if(argis("-save-mode")) {
save_mode_to_file(shift_args());
}
else if(argis("-load-mode")) {
try {
load_mode_from_file(shift_args());
}
catch(hstream_exception& e) {
println(hlog, "exception!");
}
}
// informational
else if(argis("-version") || argis("-v")) {
printf("HyperRogue version " VER "\n");
exit(0);
}
else if(argis("-L")) {
printf("Treasures:\n");
printf("+ Treasures:\n");
int qty = 0;
for(int i=1; i<ittypes; i++)
if(itemclass(eItem(i)) == IC_TREASURE)
printf(" %s\n", iinf[i].name);
printf(" %s\n", iinf[i].name), qty++;
printf(" total = %d\n", qty); qty = 0;
printf("\n");
printf("Orbs:\n");
printf("+ Orbs:\n");
for(int i=1; i<ittypes; i++)
if(itemclass(eItem(i)) == IC_ORB)
printf(" %s\n", iinf[i].name);
printf(" %s\n", iinf[i].name), qty++;
printf(" total = %d\n", qty); qty = 0;
printf("\n");
printf("Other items:\n");
printf("+ Other items:\n");
for(int i=1; i<ittypes; i++)
if(itemclass(eItem(i)) == IC_OTHER)
printf(" %s\n", iinf[i].name);
printf(" %s\n", iinf[i].name), qty++;
printf(" total = %d\n", qty); qty = 0;
printf("\n");
printf("Monsters:\n");
printf("+ Monsters:\n");
for(int i=1; i<motypes; i++)
printf(" %s\n", minf[i].name);
printf(" %s\n", minf[i].name), qty++;
printf(" total = %d\n", qty); qty = 0;
printf("\n");
printf("Lands:\n");
for(int i=1; i<landtypes; i++)
printf(" %s\n", linf[i].name);
printf("+ Lands:\n");
for(int i=1; i<landtypes; i++)
printf(" %s\n", linf[i].name), qty++;
printf(" total = %d\n", qty); qty = 0;
printf("\n");
printf("Walls:\n");
printf("+ Walls:\n");
for(int i=0; i<walltypes; i++)
printf(" %s\n", winf[i].name);
printf(" %s\n", winf[i].name), qty++;
printf(" total = %d\n", qty); qty = 0;
printf("\n");
exit(0);
}
@ -252,36 +427,73 @@ int arg::readCommon() {
printf(" -offline - don't connect to Steam (for Steam versions)\n");
printf(" -I ITEM n - start with n of ITEM (activates cheat and disables ghosts)\n");
printf(" -fix - fix the seed\n");
printf("Toggles: -o0 disables, -o1 enables, -o switches");
printf("Not all options are documented, see hyper.cpp");
printf("Toggles: -o0 disables, -o1 enables, -o switches\n");
printf("Not all options are documented, see hyper.cpp\n");
exit(0);
}
else return 1;
return 0;
}
purehookset hooks_config;
EX purehookset hooks_config;
hookset<int()> *hooks_args;
EX hookset<int()> hooks_args;
namespace arg {
int curphase;
EX map<string, pair<int, reaction_t>> *added_commands;
auto ah = addHook(hooks_args, 0, readCommon);
EX bool delayed_start;
EX namespace arg {
int read_added_commands() {
if(!added_commands) return 1;
if(added_commands->count(args())) {
auto& ac = (*added_commands)[args()];
if(ac.first == 2)
PHASEFROM(2);
if(ac.first == 3)
PHASE(3);
ac.second();
return 0;
}
return 1;
}
EX int add_at(const string& s, int at, const reaction_t& r) {
if(!added_commands) added_commands = new map<string, pair<int, reaction_t>> ();
if(added_commands->count(s)) throw hr_exception("arg::add conflict");
(*added_commands)[s] = {at, r};
return 1;
}
EX int add1(const string& s, const reaction_t& r) { return add_at(s, 1, r); }
EX int add2(const string& s, const reaction_t& r) { return add_at(s, 2, r); }
EX int add3(const string& s, const reaction_t& r) { return add_at(s, 3, r); }
auto ah = addHook(hooks_args, 0, readCommon) + addHook(hooks_args, 200, read_added_commands);
void read(int phase) {
curphase = phase;
callhooks(hooks_config);
dynamicval<bool> ds(delayed_start, true);
while(pos < isize(argument)) {
for(auto& h: *hooks_args) {
int r = h.second(); if(r == 2) return; if(r == 0) { lshift(); goto cont; }
int r = callhandlers(1, hooks_args);
switch (r) {
case 0: lshift(); break;
case 1: printf("Unknown option: %s\n", argcs()); exit(3); break;
case 2: return;
default: assert(false);
}
printf("Unknown option: %s\n", argcs());
exit(3);
cont: ;
}
}
}
EX }
#endif
#if !CAP_COMMANDLINE
EX namespace arg {
EX int add1(const string& s, const reaction_t& r) { return 0; }
EX int add2(const string& s, const reaction_t& r) { return 0; }
EX int add3(const string& s, const reaction_t& r) { return 0; }
EX }
#endif
}

View File

@ -1,111 +0,0 @@
// Usage:
// * compile hyper.cpp with CU == 0
// * compile init.cpp with CU == 1
// * link them.
// Only the parts defined in #if IN_CU(1) will be included in the second compiling.
#ifndef CU
#define IN_CU(x) 1
#else
#define IN_CU(x) (CU == x)
#endif
#include "sysconfig.h"
#include "classes.h"
#include "hyper.h"
#define CU_INIT IN_CU(0)
#define CU_HYPER IN_CU(0)
#if IN_CU(0)
#include "classes.cpp"
#endif
#if IN_CU(0)
#include "shaders.cpp"
#include "util.cpp"
#include "hyperpoint.cpp"
#include "patterns.cpp"
#include "fieldpattern.cpp"
#include "heptagon.cpp"
#include "binary-tiling.cpp"
#include "archimedean.cpp"
#include "crystal.cpp"
#include "language.cpp"
#include "cell.cpp"
#include "expansion.cpp"
#include "goldberg.cpp"
#include "irregular.cpp"
#include "pattern2.cpp"
#include "flags.cpp"
#include "yendor.cpp"
#include "complex.cpp"
#include "savemem.cpp"
#include "game.cpp"
#include "orbgen.cpp"
#include "monstergen.cpp"
#include "landlock.cpp"
#include "landgen.cpp"
#include "orbs.cpp"
#if CAP_INV
#include "inventory.cpp"
#else
namespace hr { namespace inv { bool on, activating; } }
#endif
#include "system.cpp"
#include "debug.cpp"
#include "geometry.cpp"
#include "geometry2.cpp"
#include "polygons.cpp"
#include "floorshapes.cpp"
#include "mapeditor.cpp"
#if CAP_MODEL
#include "netgen.cpp"
#endif
#if CAP_TABFONT || CAP_CREATEFONT
#include "nofont.cpp"
#endif
#include "basegraph.cpp"
#include "screenshot.cpp"
#include "renderbuffer.cpp"
#include "help.cpp"
#include "config.cpp"
#include "scores.cpp"
#include "dialogs.cpp"
#include "menus.cpp"
#include "geom-exp.cpp"
#include "quit.cpp"
#include "shmup.cpp"
#include "conformal.cpp"
#include "rug.cpp"
#include "control.cpp"
#include "hud.cpp"
#include "hypgraph.cpp"
#include "textures.cpp"
#include "graph.cpp"
#include "blizzard.cpp"
#include "sound.cpp"
#include "achievement.cpp"
#include "barriers.cpp"
#include "surface.cpp"
#if CAP_TOUR
#include "tour.cpp"
#endif
#include "commandline.cpp"
#include "bigstuff.cpp"
#if CAP_ROGUEVIZ
#include "rogueviz.cpp"
#endif
#if CAP_DAILY
#include "private/daily.cpp"
#else
namespace hr { namespace daily { bool on; } }
#endif
#endif
#if IN_CU(1)
#endif

File diff suppressed because one or more lines are too long

1486
complex2.cpp Normal file

File diff suppressed because it is too large Load Diff

6375
config.cpp

File diff suppressed because it is too large Load Diff

View File

@ -1,33 +0,0 @@
AC_PREREQ([2.68])
AC_INIT([hyperrogue], [10.4i])
AC_LANG([C++])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_CONFIG_SRCDIR([hyperpoint.cpp])
AC_PROG_CXX
AC_CANONICAL_HOST
AM_CONDITIONAL(LINUX, test ["${host_os#*linux}" != "$host_os"])
AM_CONDITIONAL(MAC, test ["${host_os#*darwin}" != "$host_os"])
AM_CONDITIONAL(MINGW, test ["${host_os#*mingw}" != "$host_os"])
AM_COND_IF(LINUX, AC_DEFINE([LINUX], [1]))
AM_COND_IF(MAC, AC_DEFINE([MAC], [1]))
AM_COND_IF(MINGW, AC_DEFINE([WINDOWS], [1]))
AC_CHECK_HEADERS([GL/gl.h OpenGL/gl.h], break, AC_MSG_RESULT([OpenGL header was not found]))
AC_CHECK_HEADERS([GL/glew.h], [], AC_MSG_RESULT([GLEW header was not found]))
AC_CHECK_HEADERS([png.h], [], AC_MSG_RESULT([png.h header was not found]))
AC_CHECK_HEADERS([SDL/SDL.h], [], AC_MSG_ERROR([SDL/SDL.h header was not found]))
AC_CHECK_HEADERS([SDL/SDL_gfxPrimitives.h], [], AC_MSG_RESULT([SDL/SDL_gfxPrimitives.h header was not found]))
AC_CHECK_HEADERS([SDL/SDL_mixer.h], [], AC_MSG_ERROR([SDL/SDL_mixer.h header was not found]))
AC_CHECK_HEADERS([SDL/SDL_ttf.h], [], AC_MSG_RESULT([SDL/SDL_ttf.h header was not found]))
AC_SEARCH_LIBS([glBegin], [GL opengl32], [], AC_MSG_RESULT([OpenGL library was not found]))
AC_SEARCH_LIBS([glewInit], [GLEW glew32], [], AC_MSG_RESULT([GLEW library was not found]))
AC_SEARCH_LIBS([png_create_info_struct], [png], [], AC_MSG_RESULT([png library was not found]))
AC_SEARCH_LIBS([SDL_SetVideoMode], [SDL], [], AC_MSG_ERROR([SDL library was not found]))
AC_SEARCH_LIBS([aacircleColor], [SDL_gfx], [], AC_MSG_RESULT([SDL_gfx library was not found]))
AC_SEARCH_LIBS([Mix_LoadMUS], [SDL_mixer], [], AC_MSG_ERROR([SDL_mixer library was not found]))
AC_SEARCH_LIBS([TTF_OpenFont], [SDL_ttf], [], AC_MSG_RESULT([SDL_ttf library was not found]))
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

File diff suppressed because it is too large Load Diff

1801
content.cpp Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
[Desktop Entry]
Name=HyperRogue
Comment=Roguelike in a non-euclidean world
Exec=hyperrogue
Icon=hyperrogue
Terminal=false
Type=Application
Categories=Game;AdventureGame;

File diff suppressed because it is too large Load Diff

553
crossbow.cpp Normal file
View File

@ -0,0 +1,553 @@
// Hyperbolic Rogue
// Copyright (C) 2011-2019 Zeno Rogue
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
/** \file crossbow.cpp
* \brief implementation of the crossbow mode
*/
#include "hyper.h"
namespace hr {
EX namespace bow {
#if HDR
enum eWeapon { wBlade, wCrossbow };
enum eCrossbowStyle { cbBull, cbGeodesic, cbGeometric };
const string bowName[] = { "bull", "geod", "geom" };
#endif
EX eWeapon weapon;
EX eCrossbowStyle style;
EX bool bump_to_shoot = true;
EX bool crossbow_mode() { return weapon == wCrossbow; }
#if HDR
struct bowpoint {
cellwalker prev, next;
flagtype flags;
bowpoint() {}
};
struct bowscore {
int total;
cellwalker last;
int turns;
};
#endif
#if HDR
static constexpr flagtype bpFIRST = 1;
static constexpr flagtype bpLAST = 2;
static constexpr flagtype bpCOPIED = 4;
#endif
EX vector<bowpoint> bowpath;
EX map<cell*, vector<bowpoint>> bowpath_map;
EX map<int, cell*> target_at;
EX int loading_time() {
return style == cbBull ? 3 : 4;
}
EX bool blocks(cell *c) {
if(items[itOrbAether]) return false;
if(isWall(c) && !among(c->wall, waMirrorWall, waMirror, waCloud) && !isNonblock(c->wall)) return true;
// if(c->monst && isMultitile(c->monst)) return true;
return false;
}
EX int qadd(cellwalker a, cellwalker b) {
hassert(a.at == b.at);
for(int i=0; i<a.at->type; i++) if(a+i == b) return i;
return NODIR;
}
int best_score_res;
EX int bolt_score(cellwalker cw2) {
int d = cw2.at->cpdist;
int ntotal = 2;
if(inmirror(cw2.at)) cw2 = mirror::reflect(cw2);
if(blocks(cw2.cpeek())) return -1;
if(thruVine(cw2.at, cw2.cpeek())) return -1;
if(nonAdjacent(cw2.at, cw2.cpeek())) return -1;
if(cw2.at->monst) {
flagtype attackflags = AF_BOW;
if(items[itOrbSpeed]&1) attackflags |= AF_FAST;
if(items[itOrbSlaying]) attackflags |= AF_CRUSH;
if(items[itCurseWeakness]) attackflags |= AF_WEAK;
if(canAttack(cw2.cpeek(), moPlayer, cw2.at, cw2.at->monst, attackflags)) {
ntotal += 10000; ntotal += 1280 >> d;
}
}
for(int t=0; t<cw2.at->type; t++) {
cell *c1 = cw2.at->cmove(t);
if(!logical_adjacent(cw2.cpeek(), moPlayer, c1)) continue;
if(canAttack(cw2.cpeek(),moPlayer,c1,c1->monst,AF_STAB)) {
ntotal += 10000; ntotal += 1280 >> d;
}
}
return ntotal;
}
EX vector<int> create_dirseq() {
map<cell*, bowscore> scores;
scores[cwt.at].total = 0;
int best_score = -1; cell* best_score_at = cwt.at;
for(cell *c: dcal) {
cell *c1 = target_at[c->cpdist];
if(c1 && c != c1) continue;
if(c == c1) { best_score = -1; }
bowscore best;
best.total = -1;
forCellIdEx(c1, i, c) if(c1->cpdist < c->cpdist && scores.count(c1)) {
auto& last = scores[c1];
auto ocw2 = cellwalker(c, i);
int bonus = bolt_score(ocw2);
if(bonus < 0) continue;
int ntotal = last.total + bonus;
int dir = 0;
if(c->cpdist > 1) {
dir = qadd(last.last, ocw2+wstep);
int d = abs(szgmod(dir, c1->type));
if(d != c1->type / 2) {
if(style == cbGeodesic) ntotal--;
if(style == cbBull) continue;
}
}
else {
dir = qadd(cwt, ocw2+wstep);
}
if(ntotal > best.total) {
best.total = ntotal;
best.last = ocw2;
best.turns = dir;
}
best.total = max(best.total, ntotal);
}
if(best.total > best_score) { best_score = best.total; best_score_at = c; }
if(best.total > -1) scores[c] = best;
}
if(best_score == -1) return {};
vector<int> dirseq = { NODIR };
while(best_score_at != cwt.at) {
auto& at = scores[best_score_at];
dirseq.push_back(at.turns);
best_score_at = at.last.cpeek();
}
reverse(dirseq.begin(), dirseq.end());
best_score_res = best_score;
return dirseq;
}
EX vector<int> create_dirseq_geometric() {
cell *tgt = nullptr;
for(auto t: target_at) tgt = t.second;
if(!tgt) return {};
hyperpoint h = tC0(currentmap->relative_matrix(tgt, cwt.at, C0));
transmatrix T = spintox(h);
best_score_res = 0;
cellwalker at = cwt;
vector<int> dirseq;
while(true) {
int best_i = -1;
ld best_y = HUGE_VAL;
for(int i=0; i<at.at->type; i++) {
cellwalker at1 = at + i;
if(at1.cpeek()->cpdist != at.at->cpdist + 1) continue;
transmatrix U = T * currentmap->adj(at.at, at1.spin);
hyperpoint U0 = tC0(U);
hyperpoint T0 = tC0(T);
if(U0[0] < T0[0] + 1e-6) continue;
ld y;
if(GDIM == 3) y = hypot(U0[1], U0[2]); else y = abs(U0[1]) + (U0[1] > 0 ? 1e-6 : 0);
if(y < best_y) { best_y = y; best_i = i; }
}
if(best_i < 0) {
dirseq.push_back(NODIR);
break;
}
at = at + best_i;
int bonus = bolt_score(at + wstep);
best_score_res += bonus;
dirseq.push_back(best_i);
if(bonus < 0) break;
T = T * currentmap->adj(at.at, at.spin);
at = at + wstep;
}
return dirseq;
}
EX int create_path() {
auto dirseq = style == cbGeometric ? create_dirseq_geometric() : create_dirseq();
if(dirseq.empty()) return -1;
struct bolt {
cellwalker at;
flagtype flags;
bolt(cellwalker cw, flagtype f) { at = cw; flags = f; }
};
bowpath.clear();
vector<bolt> bolts = { bolt(cwt, 0) };
for(auto m: mirror::mirrors) bolts.emplace_back(m.second, bpCOPIED);
set<cell*> broken_mirrors;
for(auto d: dirseq) {
bool first = bowpath.empty();
vector<bolt> nbolts;
set<cell*> next_broken_mirrors = broken_mirrors;
for(auto bolt: bolts) {
bowpath.emplace_back();
auto& p = bowpath.back();
p.prev = bolt.at;
p.flags = bolt.flags;
if(first) p.flags |= bpFIRST;
if(d == NODIR || blocks(bolt.at.at)) { p.next = bolt.at; p.flags |= bpLAST; }
else {
if(inmirror(bolt.at.at) || (bolt.at.at->wall == waMirrorWall && inmirror((bolt.at+d).cpeek())))
bolt.at = mirror::reflect(bolt.at);
bolt.at += d;
p.next = bolt.at;
bolt.at += wstep;
if(among(bolt.at.at->wall, waCloud, waMirror) && !broken_mirrors.count(bolt.at.at)) {
auto &mir = mirror::mirrors;
vector<pair<int, cellwalker>> bmir;
swap(mir, bmir);
mirror::createHere(bolt.at, 0);
swap(mir, bmir);
for(auto b: bmir) nbolts.emplace_back(b.second, bolt.flags);
next_broken_mirrors.insert(bolt.at.at);
}
nbolts.push_back(bolt);
}
}
bolts = nbolts;
broken_mirrors = next_broken_mirrors;
}
return best_score_res;
}
EX void clear_bowpath() {
bowpath_map.clear();
}
EX void gen_bowpath_map() {
bowpath_map = {};
for(auto& b: bowpath) bowpath_map[b.next.at].push_back(b);
}
EX bool auto_path() {
target_at = {};
target_at[1] = cwt.cpeek();
return create_path() >= 10000;
}
EX bool fire_mode;
EX void switch_fire_mode() {
if(!crossbow_mode()) { addMessage(XLAT("You fire an angry glance at your enemies.")); return; }
if(!fire_mode) {
addMessage(items[itCrossbow] ? XLAT("Note: cannot fire again yet. Turns to reload: %1.", its(items[itCrossbow])) : XLAT("Fire crossbow! Click to aim, click again to confirm."));
fire_mode = true;
clear_bowpath();
target_at = {};
}
else if(fire_mode) {
addMessage(items[itCrossbow] ? XLAT("Fire mode disabled.") : XLAT("Firing cancelled."));
fire_mode = false;
clear_bowpath();
}
}
EX void add_fire(cell *c) {
bool emp = target_at.empty();
auto& t = target_at[c->cpdist];
if(t == c && !bow::bowpath.empty()) {
if(items[itCrossbow]) {
clear_bowpath();
addMessage(XLAT("Cannot fire again yet. Turns to reload: %1.", its(items[itCrossbow])));
fire_mode = false;
return;
}
clear_bowpath();
checked_move_issue.type = miVALID;
pcmove pcm;
pcm.checkonly = false;
changes.init(false);
addMessage(XLAT("Fire!"));
bool b = pcm.try_shooting(false);
if(!b) changes.rollback();
fire_mode = false;
}
else {
t = c;
if(style == cbGeometric) { target_at = {}; target_at[c->cpdist] = c; }
int res = create_path();
if(res == -1) {
if(!emp) {
target_at = {};
add_fire(c);
}
else {
addMessage(XLAT("No way to hit this place."));
bow::bowpath = {};
}
}
gen_bowpath_map();
}
}
#if HDR
enum eMouseFireMode { mfmNone, mfmPriority, mfmAlways };
#endif
EX eMouseFireMode mouse_fire_mode = mfmPriority;
EX bool fire_on_mouse(cell *c) {
if(!crossbow_mode()) return false;
if(mouse_fire_mode == mfmNone) return false;
if(!mouseover) return false;
if(!mouseover->monst) return false;
if(shmup::on) return false;
if(items[itCrossbow]) {
if(mouse_fire_mode == mfmAlways) {
addMessage(XLAT("Cannot fire again yet. Turns to reload: %1.", its(items[itCrossbow])));
return true;
}
return false;
}
target_at = {};
target_at[mouseover->cpdist] = mouseover;
int res = create_path();
if(res <= 0) {
if(mouse_fire_mode == mfmAlways) {
addMessage(XLAT("Shooting impossible."));
return true;
}
return false;
}
gen_bowpath_map();
checked_move_issue.type = miVALID;
pcmove pcm;
pcm.checkonly = false;
changes.init(false);
addMessage(XLAT("Fire!"));
bool b = pcm.try_shooting(false);
if(!b) changes.rollback();
if(mouse_fire_mode == mfmAlways) return true;
return b;
}
EX int rusalka_curses = 0;
EX void shoot() {
flagtype attackflags = AF_BOW;
if(items[itOrbSpeed]&1) attackflags |= AF_FAST;
if(items[itOrbSlaying]) attackflags |= AF_CRUSH;
if(items[itCurseWeakness]) attackflags |= AF_WEAK;
vector<bowpoint> pushes;
// for achievements
set<eMonster> kills;
vector<pair<cell*, int>> healthy_dragons;
map<cell*, pair<int, int>> kraken_hits;
int dragon_hits = 0;
rusalka_curses = 0;
// for achievements
for(auto& mov: bowpath) {
cell *c = mov.prev.at;
if(c->monst == moDragonHead) {
bool healthy = true;
cell *c1 = c;
int qty = 0;
for(int i=0; i<iteration_limit; i++) {
if(!isDragon(c1)) break;
if(!c1->hitpoints) { healthy = false; break; }
if(c1->mondir == NODIR) break;
c1 = c1->move(c1->mondir);
qty++;
}
if(healthy) healthy_dragons.emplace_back(c, qty);
}
if(c->monst == moKrakenT && c->hitpoints) {
kraken_hits[kraken::head(c)].first++;
}
}
for(auto& mov: bowpath) {
cell *c = mov.prev.at;
cell *cf = mov.prev.cpeek();
if(!c) continue;
eMonster who = (mov.flags & bpCOPIED) ? moMimic : moPlayer;
if(c != cf) for(int t=0; t<cf->type; t++) {
cell *c1 = cf->cmove(t);
if(!c) continue;
bool stabthere = false;
if(logical_adjacent(c, moPlayer, c1)) stabthere = true;
if(stabthere && canAttack(cf,who,c1,c1->monst,AF_STAB)) {
hit_anything = true;
changes.ccell(c1);
eMonster m = c->monst;
if(attackMonster(c1, AF_STAB | AF_MSG, who)) {
achievement_count("STAB", 1, 0);
spread_plague(c1, cf, t, moPlayer);
produceGhost(c, m, moPlayer);
}
}
}
mirror::breakMirror(mov.next, -1);
eMonster m = c->monst;
if(!m || isMimic(m)) continue;
if(m == moKrakenH) continue;
if(!canAttack(cf, who, c, m, attackflags)) {
if(among(m, moSleepBull, moHerdBull)) {
addMessage(XLAT("%The1 is enraged!", m));
c->monst = moRagingBull;
hit_anything = true;
continue;
}
else {
pcmove pcm; pcm.mi = movei(mov.prev).rev();
pcm.tell_why_cannot_attack();
continue;
}
}
changes.ccell(c);
bool push = (items[itCurseWeakness] || (isStunnable(c->monst) && c->hitpoints > 1));
push = push && (!(mov.flags & bpLAST) && monsterPushable(c));
// for achievements
if(isDragon(m)) dragon_hits++;
if(m == moKrakenT && c->hitpoints) kraken_hits[kraken::head(c)].second++;
if(m && attackMonster(c, attackflags | AF_MSG, who)) hit_anything = true;
if(m == moRusalka) rusalka_curses++;
if(!c->monst || isAnyIvy(m)) {
spread_plague(cf, c, movei(mov.prev).rev().d, moPlayer);
produceGhost(c, m, moPlayer);
kills.insert(m);
}
if(push) pushes.push_back(mov);
}
while(!pushes.empty()) {
auto& mov = pushes.back();
cell *c = mov.prev.at;
cell *ct = mov.next.cpeek();
bool can_push = passable(ct, c, P_BLOW);
if(can_push) {
hit_anything = true;
changes.ccell(c);
changes.ccell(ct);
pushMonster(mov.next);
}
pushes.pop_back();
}
reverse(bowpath.begin(), bowpath.end());
// three achievements:
achievement_count("BOWVARIETY", kills.size(), 0);
for(auto p: healthy_dragons) {
cell *c = p.first;
if(c->monst != moDragonHead && dragon_hits >= p.second)
achievement_gain_once("BOWDRAGON");
}
for(auto kh: kraken_hits) {
if(kh.second.first == 3 && kh.second.second == 3) {
if(kraken::half_killed[kh.first]) achievement_gain_once("BOWKRAKEN");
else kraken::half_killed[kh.first] = true;
}
}
gen_bowpath_map();
}
EX bool have_bow_target() {
dynamicval<decltype(bowpath)> bp(bowpath);
dynamicval<decltype(bowpath_map)> bpm(bowpath_map);
for(int i=0; i<isize(dcal); i++) {
cell *c = dcal[i];
target_at = {};
target_at[c->cpdist] = {c};
int res = create_path();
if(res == -1) continue;
checked_move_issue.type = miVALID;
pcmove pcm;
pcm.checkonly = true;
changes.init(true);
bool b = pcm.try_shooting(false);
changes.rollback();
if(b) return true;
}
return false;
}
EX void showMenu() {
cmode = sm::SIDE | sm::MAYDARK;
gamescreen();
dialog::init(XLAT("weapon selection"));
add_edit(weapon);
if(crossbow_mode()) {
add_edit(style);
add_edit(bump_to_shoot);
add_edit(bow::mouse_fire_mode);
}
else dialog::addBreak(200);
dialog::addBack();
dialog::display();
}
EX }
}

File diff suppressed because it is too large Load Diff

607
debug.cpp
View File

@ -1,14 +1,33 @@
// Hyperbolic Rogue -- debugging routines
// Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details
/** \file debug.cpp
* \brief Debugging and cheating
*/
#include "hyper.h"
namespace hr {
int steplimit = 0;
int cstep;
EX int steplimit = 0;
EX int cstep;
EX bool buggyGeneration = false;
EX bool debug_cellnames = false;
vector<cell*> buggycells;
EX vector<cell*> buggycells;
cell *pathTowards(cell *pf, cell *pt) {
#if HDR
template<class... T>
void limitgen(T... args) {
if(steplimit) {
cstep++;
printf("%6d ", cstep);
printf(args...);
if(cstep == steplimit) buggyGeneration = true;
}
}
#endif
EX cell *pathTowards(cell *pf, cell *pt) {
while(celldist(pt) > celldist(pf)) {
if(isNeighbor(pf, pt)) return pt;
@ -22,21 +41,14 @@ cell *pathTowards(cell *pf, cell *pt) {
return NULL;
}
bool buggyGeneration = false;
bool errorReported = false;
void describeCell(cell *c) {
EX void describeCell(cell *c) {
if(!c) { printf("NULL\n"); return; }
printf("describe %p: ", c);
printf("%-15s", linf[c->land].name);
printf("%-15s", winf[c->wall].name);
printf("%-15s", iinf[c->item].name);
printf("%-15s", minf[c->monst].name);
printf("LP%08x", c->landparam);
printf("D%3d", c->mpdist);
printf("MON%3d", c->mondir);
printf("\n");
print(hlog, "describe ", lalign(6, c), ": ");
vector<cell*> nei;
for(int i=0; i<c->type; i++) nei.push_back(c->move(i));
println(hlog, ">> ", nei);
}
static int orbid = 0;
@ -75,30 +87,23 @@ eItem randomTreasure2(int cv) {
return best;
}
eLand cheatdest;
EX eLand cheatdest;
void cheatMoveTo(eLand l) {
EX void cheatMoveTo(eLand l) {
cheatdest = l;
if(l == laCrossroads5) l = laCrossroads;
activateSafety(l);
cheatdest = laNone;
}
bool applyCheat(char u, cell *c = NULL) {
struct cheatkey {
int key;
string desc;
reaction_t action;
};
if(u == 'L') {
do {
if(firstland == eLand(landtypes-1))
firstland = eLand(2);
else
firstland = eLand(firstland+1);
}
while(isTechnicalLand(firstland) || isCyclic(firstland));
specialland = firstland;
cheater++; addMessage(XLAT("You will now start your games in %1", firstland));
return true;
}
if(u == 'C') {
vector<cheatkey> cheats = {
cheatkey{'C', "Hyperstone Quest", [] {
cheater++;
cheatMoveTo(laCrossroads);
addMessage(XLAT("Activated the Hyperstone Quest!"));
@ -115,25 +120,22 @@ bool applyCheat(char u, cell *c = NULL) {
kills[moMonkey] = qkills;
kills[moCultist] = qkills;
kills[moTroll] = qkills;
return true;
}
if(u == 'M') {
}},
cheatkey{'M', "deplete orb powers", [] {
for(int i=0; i<ittypes; i++)
if(itemclass(eItem(i)) == IC_ORB)
items[i] = 0;
cheater++; addMessage(XLAT("Orb power depleted!"));
return true;
}
if(u == 'O') {
}},
cheatkey{'O', "summon orbs", [] {
cheater++; addMessage(XLAT("Orbs summoned!"));
for(int i=0; i<cwt.at->type; i++)
if(passable(cwt.at->move(i), NULL, 0)) {
eItem it = nextOrb();
cwt.at->move(i)->item = it;
}
return true;
}
if(u == 'F') {
}},
cheatkey{'F', "gain orb powers", [] {
if(hardcore && !canmove) {
canmove = true;
addMessage(XLAT("Revived!"));
@ -148,79 +150,56 @@ bool applyCheat(char u, cell *c = NULL) {
cheater++; addMessage(XLAT("Orb power gained!"));
canmove = true;
}
return true;
}
if(u == 'D') {
items[itGreenStone] += 10;
cheater++; addMessage(XLAT("Dead orbs gained!"));
return true;
}
if(u == 'R'-64) buildRosemap();
#if CAP_EDIT
if(u == 'A') {
}},
cheatkey{'R'-64, "advance the rose wave", buildRosemap},
#if CAP_EDIT
cheatkey{'A', "start the Map Editor", [] {
lastexplore = turncount;
pushScreen(mapeditor::showMapEditor);
return true;
}
if(u == 'A'-64) {
}},
cheatkey{'A'-64, "start the Vector Graphics Editor", [] {
mapeditor::drawcell = mouseover ? mouseover : cwt.at;
pushScreen(mapeditor::showDrawEditor);
return true;
}
#elif CAP_SHOT
if(u == 'A') {
}},
#else
cheatkey{'A', "take screenshot", [] {
pushScreen(shot::menu);
return true;
}
#endif
if(u == 'T') {
}},
#endif
cheatkey{'T', "summon treasure", [] {
items[randomTreasure2(10)] += 10;
cheater++; addMessage(XLAT("Treasure gained!"));
return true;
}
if(u == 'T'-64) {
}},
cheatkey{'T'-64, "summon lots of treasure", [] {
items[randomTreasure2(100)] += 100;
cheater++; addMessage(XLAT("Lots of treasure gained!"));
return true;
}
if(u == 'I'-64) {
items[randomTreasure2(10)] += 25;
cheater++; addMessage(XLAT("Treasure gained!"));
return true;
}
if(u == 'U'-64) {
items[randomTreasure2(10)] += 50;
cheater++; addMessage(XLAT("Treasure gained!"));
return true;
}
if(u == 'Z') {
}},
cheatkey{'Z', "rotate the character", [] {
if (flipplayer) {
cwt += cwt.at->type/2;
flipplayer = false;
}
cwt++;
mirror::act(1, mirror::SPINSINGLE);
cwt.at->mondir++;
cwt.at->mondir %= cwt.at->type;
wavephase = (1+wavephase) & 7;
if(shmup::on) shmup::pc[0]->at = Id;
return true;
}
if(u == 'J') {
}},
cheatkey{'J', "lose all treasure", [] {
if(items[localTreasureType()] > 0)
items[localTreasureType()] = 0;
else for(int i=1; i<ittypes; i++)
if(itemclass(eItem(i)) == IC_TREASURE)
items[i] = 0;
cheater++; addMessage(XLAT("Treasure lost!"));
return true;
}
if(u == 'K') {
}},
cheatkey{'K', "gain kills", [] {
for(int i=0; i<motypes; i++) kills[i] += 10;
kills[moPlayer] = 0;
cheater++; addMessage(XLAT("Kills gained!"));
return true;
}
if(u == 'Y') {
}},
cheatkey{'Y', "unlock Orbs of Yendor", [] {
for(auto& y: yendor::yi) {
if(y.path[YDIST-1]->item == itKey)
y.path[YDIST-1]->item = itNone;
@ -228,67 +207,56 @@ bool applyCheat(char u, cell *c = NULL) {
y.found = true;
}
cheater++; addMessage(XLAT("Collected the keys!"));
}
if(u == 'Y'-64) {
}},
cheatkey{'Y'-64, "gain Orb of Yendor", [] {
yendor::collected(cwt.at);
cheater++;
}
if(u == 'P') {
}},
cheatkey{'P', "save a Princess", [] {
items[itSavedPrincess]++;
princess::saved = true;
princess::everSaved = true;
if(inv::on && !princess::reviveAt)
princess::reviveAt = gold(NO_LOVE);
cheater++; addMessage(XLAT("Saved the Princess!"));
}
if(u == 'S') {
}},
cheatkey{'S', "Safety (quick save)", [] {
canmove = true;
cheatMoveTo(cwt.at->land);
items[itOrbSafety] += 3;
cheater++; addMessage(XLAT("Activated Orb of Safety!"));
return true;
}
if(u == 'U') {
canmove = true;
cheatMoveTo(firstland);
cheater++; addMessage(XLAT("Teleported to %1!", firstland));
return true;
}
if(u == 'W'-64) {
}},
cheatkey{'W'-64, "switch web display", [] {
pushScreen(linepatterns::showMenu);
return true;
}
if(u == 'G'-64) {
}},
cheatkey{'G'-64, "switch ghost timer", [] {
timerghost = !timerghost;
cheater++;
addMessage(XLAT("turn count = %1 last exploration = %2 ghost timer = %3",
its(turncount), its(lastexplore), ONOFF(timerghost)));
return true;
}
if(u == 'L'-64) {
}},
cheatkey{'G', "edit cell values", push_debug_screen},
cheatkey{'L'-64, "cell info", [] {
debug_cellnames = !debug_cellnames;
cell *c = mouseover;
if(!c) return;
describeCell(c);
printf("Neighbors:"); for(int i=0; i<c->type; i++) printf("%p ", c->move(i));
printf("Barrier: dir=%d left=%d right=%d\n",
c->bardir, c->barleft, c->barright);
return true;
}
if(u == 'C'-64) {
cblind = !cblind;
return true;
}
if(u == 'G') {
push_debug_screen();
return true;
}
if(u == 'P'-64)
}},
cheatkey{'P'-64, "peaceful mode", [] {
peace::on = !peace::on;
}},
#ifdef CHEAT_DISABLE_ALLOWED
if(u == 'D'-64) {
cheatkey{'D'-64, "cheat disable", [] {
cheater = 0; autocheat = 0;
return true;
}
#endif
};
EX bool applyCheat(char u) {
for(auto& ch: cheats) if(u == ch.key) {
ch.action();
return true;
}
return false;
}
@ -302,7 +270,7 @@ template<class T> string dnameof2(T x, int p) {
return s + " (" + its(x) + "/" + its(p) + ")";
}
vector<pair<cellwalker,int> > drawbugs;
EX vector<pair<cellwalker,int> > drawbugs;
bool debugmode = false;
@ -312,7 +280,7 @@ int bitfield_v;
template<class T> void bitfield_editor(int val, T setter, string help = "") {
bitfield_v = val;
dialog::editNumber(bitfield_v, 0, 100, 1, bitfield_v, help, "");
dialog::reaction = [setter] () { setter(bitfield_v); };
dialog::get_di().reaction = [setter] () { setter(bitfield_v); };
}
struct debugScreen {
@ -325,10 +293,10 @@ struct debugScreen {
void operator () () {
cmode = sm::SIDE | sm::DIALOG_STRICT_X;
gamescreen(0);
gamescreen();
getcstat = '-';
dialog::init(XLAT(show_debug_data ? "debug values" : "internal details"));
dialog::init(show_debug_data ? XLAT("debug values") : XLAT("internal details"));
for(auto& p: drawbugs)
drawBug(p.first, p.second);
@ -337,9 +305,9 @@ struct debugScreen {
if(!what && current_display->sidescreen) what = mouseover;
if(what) {
queuepoly(gmatrix[what], shAsymmetric, 0x80808080);
char buf[200];
sprintf(buf, "%p", what);
#if CAP_SHAPES
queuepoly(gmatrix[what], cgi.shAsymmetric, 0x80808080);
#endif
dialog::addSelItem("mpdist", its(what->mpdist), 'd');
dialog::add_action([what] () {
bitfield_editor(what->mpdist, [what] (int i) { what->mpdist = 0; }, "generation level");
@ -350,11 +318,13 @@ struct debugScreen {
"Extra value that is important in some lands. The specific meaning depends on the land."); });
dialog::addSelItem("land param (hex)", itsh8(what->landparam), 0);
dialog::addSelItem("land param (heat)", fts(HEAT(what)), 't');
dialog::addSelItem("cdata",
its(getCdata(what, 0))+"/"+its(getCdata(what,1))+"/"+its(getCdata(what,2))+"/"+its(getCdata(what,3))+"/"+itsh(getBits(what)), 't');
dialog::add_action([what] () {
static double d = HEAT(what);
static ld d = HEAT(what);
dialog::editNumber(d, -2, 2, 0.1, d, "landparam",
"Extra value that is important in some lands. The specific meaning depends on the land.");
dialog::reaction = [what] () { HEAT(what) = d; };
dialog::get_di().reaction = [what] () { HEAT(what) = d; };
});
dialog::addSelItem("land flags", its(what->landflags)+"/"+itsh2(what->landflags), 'f');
dialog::add_action([what] () {
@ -367,30 +337,68 @@ struct debugScreen {
dialog::addSelItem("barrier left", dnameof2(what->barleft), 0);
dialog::addSelItem("barrier right", dnameof2(what->barright), 0);
if(what->item == itBabyTortoise) {
dialog::addSelItem("baby Tortoise flags", itsh(tortoise::babymap[what]), 'B');
dialog::addSelItem(XLAT("baby Tortoise flags"), itsh(tortoise::babymap[what]), 'B');
dialog::add_action([what] () {
dialog::editNumber(tortoise::babymap[what], 0, (1<<21)-1, 1, getBits(what), "", "");
dialog::use_hexeditor();
});
}
if(what->monst == moTortoise) {
dialog::addSelItem("adult Tortoise flags", itsh(tortoise::emap[what]), 'A');
dialog::addSelItem(XLAT("adult Tortoise flags"), itsh(tortoise::emap[what]), 'A');
dialog::add_action([what] () {
tortoise::emap[what] = tortoise::getb(what);
dialog::editNumber(tortoise::emap[what], 0, (1<<21)-1, 1, getBits(what), "", "");
dialog::use_hexeditor();
});
}
#if CAP_COMPLEX2
if(dice::on(what)) {
dialog::addSelItem(XLAT("die shape"), dice::die_name(dice::data[what].which), 'A');
dialog::add_action_push([what] {
dialog::init("die shape");
char key = 'a';
for(auto shape: dice::die_list) {
dialog::addItem(dice::die_name(shape), key++);
dialog::add_action([what, shape] {
dice::data[what].which = shape;
dice::data[what].val = 0;
popScreen();
});
}
dialog::display();
});
dialog::addSelItem(XLAT("die face"), its(dice::data[what].val), 'B');
dialog::add_action([what] {
auto& dd = dice::data[what];
int maxv = shape_faces(dd.which)-1;
dialog::editNumber(dd.val, 0, maxv, 1, 0, XLAT("die face"), "");
dialog::bound_low(0);
dialog::bound_up(maxv);
});
dialog::addSelItem(XLAT("die direction"), its(dice::data[what].dir), 'C');
dialog::add_action([what] {
auto& dd = dice::data[what];
dialog::editNumber(dd.dir, 0, what->type-1, 1, dd.dir, XLAT("die direction"), "");
dialog::bound_low(0);
dialog::bound_up(what->type-1);
});
dialog::addBoolItem_action(XLAT("die mirror status"), dice::data[what].mirrored, 'D');
}
#endif
dialog::addBreak(50);
if(show_debug_data) {
dialog::addSelItem("pointer", buf, 0);
dialog::addSelItem("pointer", s0+hr::format("%p", hr::voidp(what))+"/"+index_pointer(what), 0);
dialog::addSelItem("cpdist", its(what->cpdist), 0);
dialog::addSelItem("celldist", its(celldist(what)), 0);
dialog::addSelItem("celldistance", its(celldistance(cwt.at, what)), 0);
dialog::addSelItem("pathdist", its(what->pathdist), 0);
dialog::addSelItem("celldistAlt", eubinary ? its(celldistAlt(what)) : "--", 0);
dialog::addSelItem("temporary", its(what->listindex), 0);
#if CAP_GP
if(GOLDBERG)
dialog::addSelItem("whirl", sprint(gp::get_local_info(what).relative), 0);
#endif
#if CAP_RACING
if(racing::on) racing::add_debug(what);
#endif
@ -402,13 +410,18 @@ struct debugScreen {
"wall parameter");
});
dialog::addSelItem("item", dnameof(what->item), 0);
if(archimedean)
#if CAP_ARCM
if(arcm::in())
dialog::addSelItem("ID", its(arcm::id_of(what->master)), 0);
#endif
dialog::addBreak(50);
dialog::addSelItem("monster", dnameof2(what->monst, what->mondir), 'm');
dialog::add_action([what] () {
bitfield_editor(what->mondir, [what] (int i) { what->mondir = i; },
"monster direction");
dialog::get_di().extra_options = [what] () {
dialog::addBoolItem(XLAT("mirrored"), what->monmirror, 'M');
};
});
dialog::addSelItem("stuntime", its(what->stuntime), 's');
dialog::add_action([what] () {
@ -426,16 +439,16 @@ struct debugScreen {
}
}
else {
dialog::addItem("click a cell to view its data", 0);
dialog::addItem(XLAT("click a cell to view its data"), 0);
dialog::addBreak(1000);
}
dialog::addBack();
dialog::display();
keyhandler = [this, what] (int sym, int uni) {
keyhandler = [this] (int sym, int uni) {
handlePanning(sym, uni);
dialog::handleNavigation(sym, uni);
if(applyCheat(uni, what)) ;
if(applyCheat(uni)) ;
else if(sym == PSEUDOKEY_WHEELUP || sym == PSEUDOKEY_WHEELDOWN) ;
else if(sym == '-') debugged_cell = mouseover;
else if(doexiton(sym, uni)) {
@ -446,59 +459,94 @@ struct debugScreen {
}
};
void push_debug_screen() {
EX void push_debug_screen() {
debugScreen ds;
pushScreen(ds);
}
// -- cheat menu --
void showCheatMenu() {
gamescreen(1);
/** show the cheat menu */
EX void showCheatMenu() {
cmode = sm::SIDE | sm::MAYDARK;
gamescreen();
dialog::init("cheat menu");
dialog::addItem(XLAT("gain orb powers"), 'F');
dialog::addItem(XLAT("summon treasure"), 'T');
dialog::addItem(XLAT("summon dead orbs"), 'D');
dialog::addItem(XLAT("lose all treasure"), 'J');
dialog::addItem(XLAT("gain kills"), 'K');
dialog::addItem(XLAT("Hyperstone Quest"), 'C');
dialog::addItem(XLAT("summon orbs"), 'O');
dialog::addItem(XLAT("summon lots of treasure"), 'T'-64);
dialog::addItem(XLAT("Safety (quick save)"), 'S');
dialog::addItem(XLAT("Select the land ---"), 'L');
dialog::addItem(XLAT("--- and teleport there"), 'U');
dialog::addItem(XLAT("rotate the character"), 'Z');
dialog::addItem(XLAT("deplete orb powers"), 'M');
dialog::addItem(XLAT("save a Princess"), 'P');
dialog::addItem(XLAT("unlock Orbs of Yendor"), 'Y');
dialog::addItem(XLAT("gain Orb of Yendor"), 'Y'-64);
dialog::addItem(XLAT("switch ghost timer"), 'G'-64);
dialog::addItem(XLAT("switch web display"), 'W'-64);
dialog::addItem(XLAT("peaceful mode"), 'P'-64);
for(auto& ch: cheats) {
dialog::addItem(XLAT(ch.desc), ch.key);
dialog::add_action([ch] { ch.action(); popScreen(); });
}
dialog::addBreak(50);
dialog::addBack();
dialog::display();
keyhandler = [] (int sym, int uni) {
dialog::handleNavigation(sym, uni);
if(uni != 0) {
applyCheat(uni);
if(uni == 'F' || uni == 'C' || uni == 'O' ||
uni == 'S' || uni == 'U' || uni == 'G' ||
uni == 'W' || uni == 'I' || uni == 'E' ||
uni == 'H' || uni == 'B' || uni == 'M' ||
uni == 'M' || uni == 'Y'-64 || uni == 'G'-64 ||
uni == ' ' || uni == 8 || uni == 13 ||
uni == SDLK_ESCAPE || uni == 'q' || uni == 'v' || sym == SDLK_ESCAPE ||
sym == SDLK_F10)
popScreen();
}
};
}
void modalDebug(cell *c) {
viewctr.at = c->master;
/** view all the monsters and items */
EX void viewall() {
celllister cl(cwt.at, 20, 2000, NULL);
vector<eMonster> all_monsters;
for(int i=0; i<motypes; i++) {
eMonster m = eMonster(i);
if(!isMultitile(m)) all_monsters.push_back(m);
}
for(cell *c: cl.lst) {
if(isPlayerOn(c)) continue;
bool can_put_monster = true;
forCellEx(c2, c) if(c2->monst || isPlayerOn(c2)) can_put_monster = false;
if(can_put_monster) {
for(int k=0; k<isize(all_monsters); k++)
if(passable_for(all_monsters[k], c, nullptr, 0)) {
c->monst = all_monsters[k];
all_monsters[k] = all_monsters.back();
all_monsters.pop_back();
}
}
}
vector<cell*> itemcells;
for(cell *c: cl.lst) {
if(isPlayerOn(c) || c->monst || c->item) continue;
itemcells.push_back(c);
}
int id = 0;
for(int it=1; it<ittypes; it++) if(it != itBarrow) {
if(id >= isize(itemcells)) break;
itemcells[id++]->item = eItem(it);
}
}
#if CAP_COMMANDLINE
/** perform a move for the -cmove command */
int cheat_move_gen = 7;
void cheat_move(char c) {
using arg::cheat;
if(c >= '0' && c <= '9' && cheat_move_gen == -1) cheat_move_gen = (c - '0');
else if(c >= '0' && c <= '9') cheat(), cwt += (c - '0');
else if(c == 's') {
cheat();
cwt += wstep;
playermoved = false;
setdist(cwt.at, cheat_move_gen, cwt.peek());
if(geometry_supports_cdata()) getCdata(cwt.at, 0);
}
else if(c == 'r') cheat(), cwt += rev;
else if(c == 'm') cheat(), cwt += wmirror;
else if(c == 'z') cheat(), cwt.spin = 0, cwt.mirrored = false;
else if(c == 'F') centering = eCentering::face, fullcenter();
else if(c == 'E') centering = eCentering::edge, fullcenter();
else if(c == 'V') centering = eCentering::vertex, fullcenter();
else if(c == 'a') cheat(), history::save_end();
else if(c == 'g') cheat_move_gen = -1;
else println(hlog, "unknown move command: ", c);
}
#endif
/** launch a debugging screen, and continue normal working only after this screen is closed */
EX void modalDebug(cell *c) {
centerover = c; View = Id;
if(noGUI) {
fprintf(stderr, "fatal: modalDebug called on %p without GUI\n", c);
fprintf(stderr, "fatal: modalDebug called on %p without GUI\n", hr::voidp(c));
exit(1);
}
push_debug_screen();
@ -508,9 +556,19 @@ void modalDebug(cell *c) {
quitmainloop = false;
}
void raiseBuggyGeneration(cell *c, const char *s) {
void test_distances(int max) {
int ok = 0, bad = 0;
celllister cl(cwt.at, max, 100000, NULL);
for(cell *c: cl.lst) {
bool is_ok = cl.getdist(c) == celldistance(c, cwt.at);
if(is_ok) ok++; else bad++;
}
println(hlog, "ok=", ok, " bad=", bad);
}
printf("procgen error (%p): %s\n", c, s);
EX void raiseBuggyGeneration(cell *c, const char *s) {
printf("procgen error (%p): %s\n", hr::voidp(c), s);
if(!errorReported) {
addMessage(string("something strange happened in: ") + s);
@ -548,15 +606,44 @@ int read_cheat_args() {
PHASEFROM(2); cheat(); reptilecheat = true;
}
// cheats
else if(argis("-WT")) {
else if(argis("-g")) {
/* debugging mode */
if(curphase == 1) {
/* use no score file */
scorefile = "";
/* set seed for reproducible results */
if(!fixseed) {
fixseed = true; autocheat = true;
startseed = 1;
}
}
PHASE(2);
/* causes problems in gdb */
mouseaim_sensitivity = 0;
/* do not any play sounds while debugging */
effvolume = 0;
musicvolume = 0;
}
else if(argis("-WS")) {
PHASE(3);
shift();
activateSafety(readland(args()));
cheat();
}
else if(argis("-WT")) {
PHASE(3);
shift();
teleportToLand(readland(args()), false);
cheat();
}
else if(argis("-W2")) {
shift(); cheatdest = readland(args()); cheat();
showstartmenu = false;
cheatdest_list.clear();
}
else if(argis("-W3")) {
shift(); cheatdest_list.push_back(readland(args())); cheat();
showstartmenu = false;
}
else if(argis("-I")) {
PHASE(3) cheat();
@ -573,6 +660,17 @@ int read_cheat_args() {
PHASEFROM(2);
shift(); vid.stereo_mode = eStereo(argi());
}
else if(argis("-save-cheats")) {
save_cheats = true;
}
else if(argis("-cmove")) {
PHASE(3); shift();
for(char c: args()) cheat_move(c);
}
else if(argis("-ipd")) {
PHASEFROM(2);
shift_arg_formula(vid.ipd);
}
#if CAP_INV
else if(argis("-IU")) {
PHASE(3) cheat();
@ -587,17 +685,22 @@ int read_cheat_args() {
inv::compute();
}
#endif
#if CAP_COMPLEX2
else if(argis("-ambush")) {
// make all ambushes use the given number of dogs
// example: hyper -W Hunt -IP Shield 1 -ambush 60
PHASE(3) cheat();
shift(); ambushval = argi();
shift(); ambush::fixed_size = argi();
}
#endif
else if(argis("-testdistances")) {
PHASE(3); shift(); test_distances(argi());
}
else if(argis("-M")) {
PHASE(3) cheat();
PHASE(3) cheat(); start_game(); if(WDIM == 3) { drawthemap(); bfs(); }
shift(); eMonster m = readMonster(args());
shift(); int q = argi();
printf("m = %s q = %d\n", dnameof(m), q);
printf("m = %s q = %d\n", dnameof(m).c_str(), q);
restoreGolems(q, m, 7);
}
else if(argis("-MK")) {
@ -614,29 +717,47 @@ int read_cheat_args() {
}
else if(argis("-each")) {
PHASEFROM(2); start_game();
shift(); int q = argi(); autocheat = true;
shift(); int q = argi(); cheat();
for(int i=0; i<ittypes; i++)
if(itemclass(eItem(i)) == IC_TREASURE)
items[i] = q;
}
else if(argis("-we")) {
else if(argis("-each-random")) {
PHASEFROM(2); start_game(); cheat();
for(int i=0; i<ittypes; i++)
if(itemclass(eItem(i)) == IC_TREASURE) {
items[i] = 10 + hrand(21);
if(i == itElemental) items[i] = 12;
}
else
items[i] = 0;
}
else if(argis("-viewall")) {
PHASE(3); start_game();
viewall();
}
else if(argis("-unlock-all")) {
cheat(); all_unlocked = true;
}
else if(argis("-wef")) {
PHASEFROM(2);
shift_arg_formula(whatever, delayed_geo_reset);
shift(); int index = argi();
shift_arg_formula(whatever[index]);
}
else if(argis("-wei")) {
PHASEFROM(2);
shift(); whateveri = argi(); delayed_geo_reset();
shift(); int index = argi();
shift(); whateveri[index] = argi();
}
else if(argis("-wei2")) {
PHASEFROM(2);
shift(); whateveri2 = argi(); delayed_geo_reset();
}
else if(argis("-W3")) {
else if(argis("-W4")) {
shift(); top_land = readland(args()); cheat();
showstartmenu = false;
}
else if(argis("-top")) {
PHASE(3); View = View * spin(-M_PI/2);
PHASE(3); View = View * spin(-90._deg);
}
else if(argis("-idv")) {
PHASE(3); View = Id;
}
else if(argis("-gencells")) {
PHASEFROM(2); shift(); start_game();
@ -657,7 +778,11 @@ int read_cheat_args() {
else if(argis("-smart")) {
PHASEFROM(2); cheat();
vid.use_smart_range = 2;
shift_arg_formula(vid.smart_range_detail);
shift_arg_formula(WDIM == 3 ? vid.smart_range_detail_3 : vid.smart_range_detail);
}
else if(argis("-smartarea")) {
PHASEFROM(2); cheat();
shift(); vid.smart_area_based = argi();
}
else if(argis("-smartn")) {
PHASEFROM(2);
@ -668,27 +793,101 @@ int read_cheat_args() {
PHASEFROM(2);
shift(); vid.cells_drawn_limit = argi();
}
else if(argis("-genlimit")) {
PHASEFROM(2);
shift(); vid.cells_generated_limit = argi();
}
else if(argis("-sight3")) {
PHASEFROM(2);
shift_arg_formula(sightranges[geometry]);
}
else if(argis("-sloppy")) {
PHASEFROM(2);
vid.sloppy_3d = true;
}
else if(argis("-gen3")) {
PHASEFROM(2);
shift_arg_formula(extra_generation_distance);
}
else if(argis("-quantum")) {
cheat();
quantum = true;
}
else if(argis("-lands")) {
PHASEFROM(2);
stop_game();
shift(); land_structure = (eLandStructure) (argi());
}
else if(argis("-fix")) {
PHASE(1);
fixseed = true; autocheat = true;
}
else if(argis("-cellnames")) {
cheat(); debug_cellnames = true;
}
else if(argis("-fixx")) {
PHASE(1);
fixseed = true; autocheat = true;
shift(); startseed = argi();
}
else if(argis("-reseed")) {
PHASEFROM(2);
shift(); shrand(argi());
}
else if(argis("-steplimit")) {
fixseed = true; autocheat = true;
shift(); steplimit = argi();
}
else if(argis("-dgl")) {
#if CAP_GL
glhr::debug_gl = true;
#endif
}
else if(argis("-mgen-off")) {
PHASEFROM(3);
cheat();
gen_wandering = false;
}
else if(argis("-canvasfloor")) {
shift(); canvasfloor = argi();
for(int i=0; i<caflEND; i++) if(appears(mapeditor::canvasFloorName(i), args()))
canvasfloor = i;
}
else if(argis("-keys")) {
shift(); string s = args();
bool quote = false;
for(char c: s)
if(quote) {
quote = false;
if(c == '\\') dialog::queue_key(c), quote = false;
else if(c >= '1' && c <= '9') dialog::queue_key(SDLK_F1 + c - '1');
else if(c == 'e') dialog::queue_key(SDLK_ESCAPE);
else if(c == 'r') dialog::queue_key(SDLK_RETURN);
else if(c == 't') dialog::queue_key(SDLK_TAB);
else if(c == 'b') dialog::queue_key(SDLK_BACKSPACE);
else if(c == 'R') dialog::queue_key(SDLK_RIGHT);
else if(c == 'L') dialog::queue_key(SDLK_LEFT);
else if(c == 'U') dialog::queue_key(SDLK_UP);
else if(c == 'D') dialog::queue_key(SDLK_DOWN);
else if(c == 'H') dialog::queue_key(SDLK_HOME);
else if(c == 'E') dialog::queue_key(SDLK_END);
else if(c == 'P') dialog::queue_key(SDLK_PAGEUP);
else if(c == 'Q') dialog::queue_key(SDLK_PAGEDOWN);
}
else if(c == '\\') quote = true;
else dialog::queue_key(c);
}
else if(argis("-hroll")) {
shift();
int i = argi();
while(i>0) i--, hrand(10);
}
else if(argis("-W")) {
PHASEFROM(2);
shift();
firstland0 = firstland = specialland = readland(args());
if (!landUnlocked(firstland))
cheat();
stop_game_and_switch_mode(rg::nothing);
showstartmenu = false;
}
@ -699,4 +898,10 @@ int read_cheat_args() {
auto ah_cheat = addHook(hooks_args, 0, read_cheat_args);
#endif
EX bool ldebug = false;
EX void breakhere() {
exit(1);
}
}

View File

@ -0,0 +1,80 @@
336h: D29C2418 p=3, f=3, n=10, q=5,1
336h: 7769A558 p=5, f=25, n=650, q=50
336h: 640FB3D4 p=7, f=7, n=28, q=14,1
336h: C734F868 p=7, f=7, n=28, q=14,1
336h: E3F6B7BC p=7, f=49, n=672, q=336,28,16
336h: 885F1184 p=7, f=49, n=672, q=336,42,28,16
344h: B23AF1F4 p=3, f=3, n=5, q=1
344h: 4F9920E0 p=3, f=3, n=5, q=1
344h: 6DBBAAA0 p=3, f=3, n=10, q=5,1
344h: F81E97B0 p=3, f=3, n=10, q=5,1
344h: F790CEA4 p=3, f=3, n=30, q=6,3
344h: C95EC8B8 p=3, f=3, n=30, q=3
344h: 16518434 p=3, f=9, n=16, q=8,4,2
344h: 558C8ED0 p=5, f=5, n=600, q=20,25
344h: 1EC39944 p=5, f=5, n=600, q=20,25
344h: AF042EA8 p=5, f=25, n=2400, q=1200,600,60,40
344h: EC29DCEC p=5, f=25, n=2600, q=1300,650,100
344h: D26948E0 p=5, f=25, n=2600, q=1300,650,100
345h: F978E264 p=3, f=3, n=30, q=6,3
345h: 02ADCAA4 p=3, f=3, n=30, q=6,3
345h: 7EFE8D98 p=5, f=25, n=650, q=50,25
345h: F447F75C p=11, f=11, n=55, q=5
345h: 58A698B8 p=19, f=19, n=285, q=15
345h: 6FA03030 p=19, f=19, n=285, q=57,15
353h: 1566EBAC p=5, f=25, n=130, q=10
353h: 5A2E2B88 p=11, f=11, n=11, q=1
354h: 58A8E850 p=5, f=5, n=2, q=1
354h: 363D8DA4 p=11, f=11, n=22, q=11,2
354h: 9CD5E744 p=11, f=11, n=22, q=11,2
354h: F04BA28C p=19, f=19, n=114, q=57,6
355h: AF448B14 p=5, f=5, n=1
355h: F42F2904 p=5, f=5, n=1
355h: 47F0C740 p=5, f=5, n=120, q=6,4
355h: 7BAFB45C p=11, f=11, n=11, q=1
355h: 6453A3FC p=11, f=11, n=11, q=1
435h: EB201050 p=5, f=25, n=650, q=25
435h: 65CE0C00 p=11, f=11, n=55, q=11,5
435h: 5641E95C p=11, f=11, n=55, q=11,5
436h: 235F7508 p=2, f=4, n=2, q=1
436h: C02F2A80 p=2, f=4, n=2, q=1
436h: DFC6B8C0 p=2, f=4, n=8, q=4,2
436h: 4D3C8B14 p=3, f=9, n=8, q=1
436h: FF82A214 p=5, f=25, n=650, q=50,25
436h: 4546E270 p=5, f=25, n=650, q=25
436h: C4884090 p=7, f=7, n=28, q=14,4,2
436h: 5230B364 p=7, f=7, n=28, q=14,2
436h: 2D051038 p=7, f=7, n=14, q=7,2
436h: F0997060 p=7, f=7, n=14, q=7,2
436h: 1D1227CC p=7, f=49, n=672, q=336,112,42,14,12
436h: B2B4B3D4 p=7, f=49, n=672, q=336,14,12
436h: 6C29B2A4 p=13, f=13, n=91, q=13,7
436h: 06F4054C p=13, f=13, n=91, q=13,7
436h: DE4912E0 p=13, f=13, n=182, q=91,13,7
436h: 417466F0 p=13, f=13, n=182, q=91,13,7
534h: 0C62E214 p=5, f=25, n=130, q=10
534h: 72414D0C p=5, f=25, n=260, q=10
534h: 831E2D74 p=11, f=11, n=22, q=2
534h: 5FC4CFF0 p=11, f=11, n=22, q=2
535h: DCC3CACE p=5, f=5, n=1
535h: F78E1C56 p=5, f=5, n=1
535h: 9EF7A9C4 p=5, f=5, n=120, q=10,8,6,4
535h: 5254DA16 p=19, f=19, n=57, q=3
535h: A5C8752E p=19, f=19, n=57, q=3
536h: BB5AEE10 p=5, f=5, n=120, q=8,6,4
536h: 61385498 p=5, f=5, n=2, q=1
536h: B009EB44 p=5, f=5, n=2, q=1
536h: 3BA5C5A4 p=5, f=25, n=130, q=10
536h: 9FDE7B38 p=5, f=25, n=260, q=130,10
536h: 885F1184 p=7, f=49, n=672, q=336,28,16

4
devmods/README.md Normal file
View File

@ -0,0 +1,4 @@
This subdirectory contains various extra modules which are useful in development,
but are not a part of standard HyperRogue build nor RogueViz.
They can be added to a HyperRogue build e.g. with `mymake devmods/edit-shaders`.

423
devmods/autoplay.cpp Normal file
View File

@ -0,0 +1,423 @@
// This addon plays HyperRogue by itself.
// Well, not really -- it performs illegal moves, and it gets tons of treasure, orbs, and kills out of nowhere.
// Useful for debugging.
#include "../hyper.h"
namespace hr {
bool doAutoplay;
eLand autoplayLand;
namespace prairie { extern cell *enter; }
bool sameland(eLand ll, eLand ln) {
if(ln == laBarrier || ln == laOceanWall)
return true;
if(ln == ll) return true;
if(isElemental(ln) && isElemental(ll)) return true;
if(isHaunted(ln) && isHaunted(ll)) return true;
return false;
}
void randomCheat() {
int croll = hrand(50);
if (croll < 25) {
eItem b = (eItem) hrand(ittypes);
printf("Gain item: %s\n", iinf[b].name);
items[b] = (1 << hrand(11)) - 1;
items[itOrbYendor] &= 15;
reduceOrbPowers(); // in particlar, cancel out slaying+weakness, since the combination may confuse shadow
} else if (croll == 25) {
printf("Gain kills\n");
kills[hrand(motypes)] = (1 << hrand(11)) - 1;
} else if (croll == 26) {
printf("Princess soon\n");
princess::saved = true;
princess::everSaved = true;
items[itSavedPrincess]++;
items[itOrbLove] = 1;
items[itOrbTime] = 0;
} else if (croll == 27) {
printf("Gain allies\n");
forCellEx(cz, cwt.at)
if (!cz->monst)
cz->monst = pick(moMouse, moFriendlyGhost, moGolem, moTameBomberbird, moKnight);
} else if (croll == 28) {
printf("Place orbs with pickup effects\n");
forCellEx(cz, cwt.at)
if (!cz->item)
cz->item = pick(itOrbLife, itOrbFriend, itOrbSpeed, itOrbShield, itOrbChaos, itOrbPurity);
} else if (croll == 29) {
printf("Place fun walls\n");
forCellEx(cz, cwt.at)
if (!cz->wall && !cz->monst)
cz->wall = pick(waExplosiveBarrel, waBigStatue, waThumperOff, waBonfireOff, waCloud, waMirror);
} else if (croll == 30) {
cell *ct = dcal[hrand(isize(dcal))];
if (!isPlayerOn(ct) && !ct->monst && !ct->wall) {
eWall hazard = pick(waRose, waFireTrap, waMineMine, waTrapdoor, waChasm, waCavewall);
printf("Spam a hazard: %s\n", winf[hazard].name);
ct->wall = hazard;
}
} else if (croll == 31 && !memory_saving_mode) {
//printf("Saving memory\n");
//memory_saving_mode = true;
//save_memory();
//memory_saving_mode = false;
} else if (croll == 33) {
cell *ct = dcal[hrand(isize(dcal))];
if (!isPlayerOn(ct) && !ct->monst && !ct->wall) {
printf("Spam some slime\n");
ct->item = itNone;
ct->wall = hrand(2) ? waFloorA : waFloorB;
switch(hrand(4)) {
case 0: ct->monst = moSlime; break;
case 1: ct->item = itGreenStone; break;
default: ;
}
}
} else if (croll == 37) {
cell *ct = dcal[hrand(isize(dcal))];
if (!isPlayerOn(ct) && !ct->monst && !ct->wall) {
ct->monst = pick(moRagingBull, moTroll, moAcidBird, moMiner, moReptile, moVineBeast, moBug0, moBug1);
printf("Spam a monster: %s\n", minf[ct->monst].name);
}
// todo: dice
} else if (croll == 38) {
forCellEx(cz, cwt.at) {
if (cz->monst == moPrincessArmed) {
printf("Disarming a princess\n");
cz->monst = moPrincess;
}
}
} else if (croll == 39) {
//forCellEx(cz, cwt.at) {
// if (!cz->monst) {
// printf("Summoning an unarmed princess incorrectly\n");
// cz->monst = moPrincess;
// break;
// }
//}
} else if (croll == 40) {
//forCellEx(cz, cwt.at) {
// if (!cz->monst) {
// printf("Summoning an armed princess incorrectly\n");
// cz->monst = moPrincessArmed;
// break;
// }
//}
} else if (croll == 41) {
cell *ct = dcal[hrand(isize(dcal))];
if (among(ct->wall, waNone, waVinePlant, waFloorA, waFloorB, waTrapdoor, waChasm, waBigStatue)) {
// Set wparam on a cell where it shouldn't matter, so that if this wall is later converted
// to a walltype that does care by some code that assumes wparam was 0,
// we can find out if that causes bugs.
printf("Randomizing wparam on %s at %p\n", winf[ct->wall].name, (void *)ct);
ct->wparam = (unsigned char) hrand(256);
}
} else if (croll == 42) {
vid.wallmode = hrand(7);
printf("Set vid.wallmode to %d: %s\n", vid.wallmode, wdmodes[vid.wallmode]);
} else if (croll == 43) {
vid.monmode = hrand(4);
printf("Set vid.monmode to %d: %s\n", vid.monmode, mdmodes[vid.monmode]);
}
}
cell *cellToTarget() {
if (isCrossroads(cwt.at->land)) {
for (cell *c: dcal) {
if (c->land == laCamelot && c->wall == waNone) {
printf("Trying to teleport into Camelot\n");
items[itOrbTeleport] += 1;
return c;
}
}
}
if(cwt.at->land == laCamelot) {
int oldDist = celldistAltRelative(cwt.at);
if (oldDist > 3) {
for (cell *c: dcal) {
if (c->land == laCamelot) {
int dist = celldistAltRelative(c);
if (-1 <= dist && dist <= 1 && hrand(10) == 0) {
printf("Trying to teleport near the round table (%d to %d)\n", oldDist, dist);
items[itOrbTeleport] += 1;
return c;
}
}
}
}
}
return dcal[hrand(isize(dcal))];
}
void randomMove()
{
// don't show warning dialogs
items[itWarning] = 1;
int roll = hrand(50);
if (roll == 0) {
// drop dead orb
bool res = movepcto(MD_DROP, 1);
printf("DROP: %d\n", res);
} else if (roll < 5) {
// skip turn
bool res = movepcto(MD_WAIT, 1);
printf("WAIT: %d\n", res);
} else if (roll < 42) {
// move to or attack a neighbor cell
int i = hrand(cwt.at->type);
cell *c2 = cwt.at->move(i);
cwt.spin = 0;
int d = neighborId(cwt.at, c2);
if (d >= 0) {
int subdir = (roll%2==0)?1:-1;
string c2info = dnameof(c2->wall) + "; " + dnameof(c2->monst) + "; " + dnameof(c2->item);
bool res = movepcto(d, subdir, false);
printf("MOVE %d [%s] sub %d: %d\n", d, c2info.c_str(), subdir, res);
if (!res && c2->monst) {
printf("clearing the monster (%s)\n", minf[c2->monst].name);
killMonster(c2, moNone);
}
} else {
printf("MOVE CONFUSED %d\n", d);
}
} else {
// try to use a ranged orb
cell *ct = cellToTarget();
eItem ti = targetRangedOrb(ct, roMouseForce);
const char *tm = iinf[ti].name;
printf("TARGET %p: %s\n", (void*)ct, tm);
}
}
void noteUnusualSituations()
{
if(cwt.at->monst && !isMultitile(cwt.at->monst)) {
// This is possible in multiple ways
printf("on a non-multitile monster: %s\n", minf[cwt.at->monst].name);
}
else if(isDie(cwt.at->wall)) {
// This is possible with aether + teleport
printf("on a wall-type die: %s\n", winf[cwt.at->wall].name);
}
}
bool isAnythingWrong()
{
uintptr_t ienter = (uintptr_t) prairie::enter;
if(ienter && ienter < 100000) {
printf("ERROR: prairie::enter has incorrect value\n");
return true;
}
if(buggyGeneration || isize(buggycells)) {
println(hlog, "ERROR: buggy generation");
return true;
}
if(isIcyLand(cwt.at)) {
float heat = HEAT(cwt.at);
// Checking for extreme values as well as NaNs and infinities
if (!(-1e10 < heat && heat < 1e10)) {
printf("ERROR: Heat is out of expected range\n");
return true;
}
}
if (cwt.at->land == laCamelot) {
for(int i=0; i<isize(dcal); i++) {
cell *c = dcal[i];
if(c->land == laCamelot && celldistAltRelative(c) == 0 && c->wall != waRoundTable) {
printf("ERROR: The round table of camelot is interrupted by a cell of %s\n", winf[c->wall].name);
return true;
}
}
}
for(int i=0; i<isize(dcal); i++) {
cell *c = dcal[i];
(void)isChild(c, NULL);
if(childbug) return true;
if(c->land == laNone) {
printf("ERROR: no-land found\n");
return true;
}
if(c->item == itBuggy || c->item == itBuggy2) {
printf("ERROR: buggy item found\n");
return true;
}
if(!euclid && isPrincess(c->monst) && princess::getPrincessInfo(c) == nullptr) {
printf("ERROR: missing princess info\n");
return true;
}
if(dice::on(c)) {
if(dice::data.count(c) == 0) {
c->item = itBuggy;
printf("ERROR: missing dice::data[%p]\n", (void *)c);
return true;
}
else if(!dice::data[c].which) {
// we might get here instead if someone already tried to do data[c], which creates a new element out of nothing
c->item = itBuggy;
printf("ERROR: missing dice::data[%p].which\n", (void *)c);
return true;
}
}
}
return false;
}
void stopIfBug()
{
if(isAnythingWrong()) {
if(noGUI) {
exit(1);
}
else {
kills[moPlayer] = 0;
canmove = true;
doAutoplay = false;
}
}
}
void showAutoplayStats()
{
printf("cells travelled: %d\n", celldist(cwt.at));
printf("\n");
for(int i=0; i<ittypes; i++) if(items[i])
printf("%4dx %s\n", items[i], iinf[i].name);
printf("\n");
for(int i=1; i<motypes; i++) if(kills[i])
printf("%4dx %s <%d>\n", kills[i], minf[i].name, i);
printf("\n\n\n");
}
void resetIfNeeded(int *gcount)
{
if(hrand(5000) == 0 || (isGravityLand(cwt.at->land) && coastvalEdge(cwt.at) >= 100) || *gcount > 2000 || cellcount >= 20000000) {
printf("RESET\n");
*gcount = 0;
cellcount = 0;
activateSafety(autoplayLand ? autoplayLand : landlist[hrand(isize(landlist))]);
if (cellcount < 0) {
//printf("How did cellcount become negative?\n");
cellcount = 1;
}
}
if(cwt.at->land == laWestWall && cwt.at->landparam >= 30) {
printf("Safety generated\n");
forCellEx(c2, cwt.at) c2->item = itOrbSafety;
}
}
/* auto a3 = addHook(hooks_nextland, 100, [] (eLand l) {
eLand l2;
do { l2 = pick(laRuins, laTerracotta, laPrairie); } while(l2 == l);
return l2;
}); */
void autoplay(int num_moves = 1000000000) {
// drawMesh();
// exit(0);
doAutoplay = true;
cheater = 1;
eLand lland = laIce;
eLand lland2 = laIce;
int lcount = 0;
int gcount = 0;
int lastgold = 0;
// landlist = { laRuins, laTerracotta, laPrairie };
generateLandList(isLandIngame);
#ifndef NOSDL
int lastdraw = 0;
#endif
while(doAutoplay) {
if(gold() > lastgold) {
lastgold = gold();
gcount = 0;
}
else gcount++;
if(false && sameland(lland, cwt.at->land)) lcount++;
else {
lcount = 0; lland2 = lland; lland = cwt.at->land;
printf("%10dcc %5dt %5de %5d$ %5dK %5dgc %-30s H%d\n", cellcount, turncount, celldist(cwt.at), gold(), tkills(), gcount, dnameof(cwt.at->land).c_str(), hrand(1000000));
fflush(stdout);
#ifndef NOSDL
if(int(SDL_GetTicks()) > lastdraw + 3000) {
lastdraw = SDL_GetTicks();
fullcenter();
msgs.clear();
popScreenAll();
drawscreen();
clearAnimations();
}
#endif
//mainloop();
}
/* if(gcount < 500) for(int i=1; i<isize(dcal); i++) {
c2 = dcal[i];
if(lcount >= 50 && !sameland(lland, c2->land) && !sameland(lland2, c2->land)) break;
else if(lcount < 50 && c2->item && c2->item != itOrbSafety) break;
} */
randomCheat();
randomMove();
if(false) if(turncount % 5000 == 0) showAutoplayStats();
resetIfNeeded(&gcount);
noteUnusualSituations();
stopIfBug();
if(turncount >= num_moves) return;
}
}
int readArgs() {
using namespace arg;
if(0) ;
else if(argis("-autoplayW")) {
// Start in this land and reset to this land
PHASE(3);
shift();
autoplayLand = readland(args());
activateSafety(autoplayLand);
}
else if(argis("-autoplay")) {
PHASE(3);
autoplay();
}
else if(argis("-autoplayN")) {
PHASE(3);
shift();
autoplay(argi());
}
else return 1;
return 0;
}
auto hook = addHook(hooks_args, 100, readArgs);
}

135
devmods/edit-shaders.cpp Normal file
View File

@ -0,0 +1,135 @@
// This addon is useful when debugging or tuning shaders.
// Press F2, edit the shader files, then press F3 to see them in action.
// F2: write the currently used shaders to files
// F3: replace the currently used shaders with the content of the files
// Might need some editing.
#include "../hyper.h"
namespace hr {
string load_whole(const char *fname) {
char buf[1000000];
FILE *f = fopen(fname, "rb");
int n = fread(buf, 1, 1000000, f);
buf[n] = 0;
return buf;
}
void print_shader(const char *fname, string s) {
FILE *f = fopen(fname, "wb");
int indent = 0;
bool linestart = true;
for(char c: s) {
if(c == ' ' && linestart) continue;
if(c == '\n' && linestart) continue;
linestart = false;
fputc(c, f);
if(c == '{') indent += 2;
if(c == '}') indent -= 2;
if(c == ';' || c == '}' || c == '{') {
fputc('\n', f);
for(int i=0; i<indent; i++) fputc(' ', f);
linestart = true;
}
}
fclose(f);
}
bool es_handleKey(int sym, int uni) {
using namespace glhr;
if(sym == SDLK_F2) {
glhr::be_textured();
current_display->set_all(0);
auto p = current_glprogram;
print_shader("devmods/current.vsh", p->_vsh);
print_shader("devmods/current.fsh", p->_fsh);
addMessage("shaders saved");
return true;
}
if(sym == SDLK_F4) {
println(hlog, "shader program = ", glhr::current_glprogram->_program);
solv_all = !solv_all;
println(hlog, "now solv_all = ", solv_all);
return true;
}
/*if(sym == SDLK_F5) {
drawthemap();
for(auto& p: ptds) {
auto s = dynamic_cast<dqi_poly*> (&*p);
if(!s) continue;
for(int i=0; i<s->cnt; i+=3) {
array<hyperpoint, 3> ps;
for(int k=0; k<3; k++) ps[k] = s->V * gltopoint((*(s->tab))[i+k]);
array<hyperpoint, 3> ie;
for(int k=0; k<3; k++) ie[k] = inverse_exp(ps[k]);
ld iz = 99, az = -99;
for(int k=0; k<3; k++) {
if(ie[k][2] < iz) iz = ie[k][2];
if(ie[k][2] > az) az = ie[k][2];
}
if(iz < 0 && az > 0)
println(hlog, tie(iz, az), ps);
}
}
return true;
} */
if(sym == SDLK_F5) {
/*
for(ld x=1; x<30; x+=.2)
for(ld y=1; y<30; y+=.2)
for(ld z=0; z<=20.1; z+=.02) {
hyperpoint p = point31(x, y, z);
transmatrix T = rgpushxto0(p);
auto ie = inverse_exp(p);
for(ld ax=-0.2; ax<=0.21; ax+=0.2)
for(ld ay=-0.2; ay<=0.21; ay+=0.2)
for(ld az=-0.2; az<=0.21; az+=0.2) {
hyperpoint p1 = T * point31(ax, ay, az);
auto ie1 = inverse_exp(p1);
if(ie[2] * ie1[2] < 0 && abs(ie[2]) > .5 && abs(ie1[2]) > .5)
println(hlog, lalign(30, kz(p)), ": ", lalign(30, kz(ie)), " ", lalign(30, kz(p1)), ": ", lalign(30, kz(ie1)), " @ ",
make_tuple(sn::x_to_ix(p[0]), sn::x_to_ix(p[1]), sn::z_to_iz(p[2])));
}
}
*/
return true;
}
if(sym == SDLK_F3 && !solv_all) {
glhr::be_textured();
current_display->set_all(0);
string vsh = load_whole("devmods/current.vsh");
string fsh = load_whole("devmods/current.fsh");
println(hlog, "loaded vsh:\n", vsh);
auto p = make_shared<glhr::GLprogram>(vsh, fsh);
println(hlog, "compiled program: ", p->_program);
auto old = current_glprogram;
p->shader_flags = old->shader_flags;
auto replace = [&] (shared_ptr<GLprogram>& s) {
if(s == old) s = p;
};
for(auto& pp: compiled_programs) replace(pp.second);
for(auto& pp: matched_programs) replace(pp.second);
return true;
}
return false;
}
auto eshook =
addHook(hooks_handleKey, 100, es_handleKey)
+ 0;
}

227
devmods/gentrans.cpp Normal file
View File

@ -0,0 +1,227 @@
#include "../hyper.h"
#include <iostream>
#include <thread>
namespace hr {
char buf[10000000];
int bufpos;
bool chk(const char *s) {
char *t = buf+bufpos;
while(*s == *t) s++, t++;
return *s == 0;
}
bool eat(const char *s) {
bool ret = chk(s);
if(ret) bufpos += strlen(s);
return ret;
}
char eatchar() {
return buf[bufpos++];
}
set<string> seen;
void check_ex(string s, string help) {
if(seen.count(s)) return;
seen.insert(s);
if(!translation_exists(s)) println(hlog, "S(", as_nice_cstring(s), ", ", help, ")");
}
void check_nonliteral(string s, string fname, int line) {
if(seen.count(s)) return;
seen.insert(s);
string thu = "", end = "";
for(char c: s) if(c == '[') break; else thu += c;
for(char c: s) if(c == ']') end = ""; else end += c;
if(s == "s") ;
else if(thu == "minetexts")
for(string m: minetexts) check_ex(m, s);
else if(thu == "dfnames")
for(string m: dfnames) check_ex(m, s);
else if(thu == "ncnames")
for(string m: ncnames) check_ex(m, s);
else if(thu == "slides" && end == ".help") ;
// for(auto sl: tour::slides) check_ex(sl.help);
else if(thu == "slides" && end == ".name") ;
// for(auto sl: tour::slides) check_ex(sl.name);
else if(end == ".menu_displayed_name") ;
// for(auto g: ginf) check_ex(g.menu_displayed_name);
else if(end == ".tiling_name") ;
// for(auto g: ginf) check_ex(g.tiling_name);
else if(end == ".name_hyperbolic")
for(auto md: mdinf) check_ex(md.name_hyperbolic, s);
else if(end == ".name_spherical")
for(auto md: mdinf) { if(md.name_spherical != md.name_hyperbolic) check_ex(md.name_spherical, s); }
else if(end == ".name_euclidean")
for(auto md: mdinf) { if(md.name_euclidean != md.name_hyperbolic && md.name_euclidean != md.name_hyperbolic) check_ex(md.name_euclidean, s); }
else if(thu == "olrdesc") ;
else if(thu == "wdmodes")
for(string m: wdmodes) check_ex(m, s);
else if(thu == "axemodes")
for(string m: multi::axemodes) check_ex(m, s);
else if(thu == "axmodes")
for(string m: multi::axmodes) check_ex(m, s);
else if(thu == "mpnames")
for(string m: texture::mpnames) check_ex(m, s);
else if(thu == "axemodes3")
for(string m: multi::axemodes3) check_ex(m, s);
else if(thu == "mdmodes")
for(string m: mdmodes) check_ex(m, s);
else if(thu == "hlmodes")
for(string m: hlmodes) check_ex(m, s);
else if(thu == "current_filter->name")
for(auto f: available_filters) check_ex(f->name, s);
else if(thu == "olrDescriptions")
for(string m: olrDescriptions) check_ex(m, s);
else if(thu == "shmupcmdtable") ;
else if(thu == "stringx") ;
else if(thu == "lv.msg") ; /* trust */
else if(thu == "opt") ; /* todo */
else if(thu == "menu_item_name") ; /* todo */
else if(s == "winf[w].help") ;
else if(s == "linf[l].help") ;
else if(s == "iinf[it].help") ;
else if(s == "minf[m].help") ;
else if(among(s, "mapeditorhelp", "patthelp", "drawhelp", "warpdesc", "hyperstone_optional", "irrhelp", "helptext", "inv::helptext", "power_help", "trollhelp2")) ; /* trust */
else
println(hlog, "// unrecognized nonliteral: ", s, " in ", fname, ":", line);
}
void check_xlat_content(string s, string fname, int line) {
// println(hlog, "// xlat content found: ", s);
string literal = "";
string nonliteral = "";
bool in_quote = false;
int i = 0;
while(i < isize(s)) {
auto chk = [&] (string mname, string mvalue) {
if(in_quote) return false;
for(int k=0; k<isize(mname); k++) if(s[i+k] != mname[k]) return false;
literal += mvalue; i += isize(mname);
return true;
};
if(chk("LEADERFULL", "Steam Leaderboards")) continue;
if(chk("LEADER", "Steam")) continue;
if(chk("IMAGEEXT", IMAGEEXT)) continue;
if(chk("SHMUPTITLE", SHMUPTITLE)) continue;
if(s[i] == '"') in_quote = !in_quote;
else if(s[i] == '\\') {
i++;
if(s[i] == '"' || s[i] == '\'' || s[i] == '\\') literal += s[i];
else if(s[i] == 'n') literal += "\n";
else println(hlog, "unknown escape: ", s0+s[i]);
}
else if(in_quote) literal += s[i];
else if(among(s[i], ' ', '\n', '\r')) ;
else nonliteral += s[i];
i++;
}
if(literal != "" && nonliteral != "") {
println(hlog, "// confused about: ", s, " ", fname, ":", line);
println(hlog, "literal = ", literal);
println(hlog, "nonliteral = ", nonliteral);
}
else if(nonliteral != "")
check_nonliteral(nonliteral, fname, line);
else {
if(seen.count(literal)) return;
seen.insert(literal);
if(!translation_exists(literal))
println(hlog, "S(", s, ", literal in ", fname, ":", line, ")");
}
}
void check_file(string s) {
FILE *f = fopen(s.c_str(), "rt");
int qty = fread(buf, 1, 10000000, f);
buf[qty] = 0;
fclose(f);
// println(hlog, "// checking file ", s, ", ", qty, " B");
bufpos = 0;
bool in_xlat = false;
bool in_quote = false;
string xlat_content;
int linenum = 0;
while(true) {
if(bufpos == qty) break;
if(buf[bufpos] == '\n') linenum++;
if(!in_xlat) {
if(eat("XLAT(")) {
in_xlat = true;
xlat_content = "";
}
else
eatchar();
}
else {
if(eat("\"")) {
xlat_content += "\"";
in_quote = !in_quote;
}
else if(in_quote && eat("\\")) {
xlat_content += "\\";
xlat_content += eatchar();
}
else if(!in_quote && eat("(")) {
println(hlog, "// found parenthesis inside XLAT: ", xlat_content, " at ", s, ":", linenum);
}
else if(!in_quote && eat("?")) {
println(hlog, "// found '?' inside XLAT: ", xlat_content, " at ", s, ":", linenum);
}
else if(!in_quote && (eat(")") || eat(","))) {
check_xlat_content(xlat_content, s, linenum);
in_xlat = false;
}
else
xlat_content += eatchar();
}
}
}
void gentrans() {
DIR *d;
struct dirent *dir;
println(hlog, "\n\n// checking all the files");
d = opendir(".");
if(d) {
while ((dir = readdir(d)) != NULL) {
string s = dir->d_name;
if(s.size() > 4 && s.substr(s.size()-4) == ".cpp")
check_file(s);
}
closedir(d);
}
println(hlog, "\n\n// checking configurables");
for(auto& fs: params) {
auto& sett = fs.second;
if(sett->menu_item_name_modified)
check_ex(sett->menu_item_name, "menu_item_name for " + sett->parameter_name);
check_ex(sett->help_text, "help_text for " + sett->parameter_name);
auto ls = dynamic_cast<list_setting*> ( (setting*) &*sett);
if(ls)
for(auto opt: ls->options) {
check_ex(opt.first, "option first for " + sett->parameter_name);
check_ex(opt.second, "option second for " + sett->parameter_name);
}
}
exit(0);
}
auto gtar = arg::add3("-gentrans", gentrans);
}

516
devmods/hatter.cpp Normal file
View File

@ -0,0 +1,516 @@
/**
* This program was used to generate the rule tables in apeirodic-hat.cpp.
*
* Some data was generated by this program itself, based on manual keyboard+mouse control.
* Some of minor manual control tools have been removed, but the process was as follows:
*
* * Run with `-symbol "12,6,4" -dual -canvas 101010 -smart 1 stamplen=0` and draw the hat shape, the table output is hatcorners
* * Place hats into clusters as shown in the paper, obtaining the table hats[0]
* * Place clusters into superclusters as shown in the paper, obtaining the table hats[1]
* * Repeat for hats[2], hats[3], hats[4] and hats[5] (the paper does not specify precisely the coordinates to arrange the clusters; but we can multiply the previous hats by scaling factor
* * for an approximate, and fix manually so that it matches)
* * 'CON Lx' lines state the rules deduced; the rules should be the same for L1 and L2 (except the matrix codes returned by matcode), so we conjecture that this set of rules is complete
* * Fill the table `hatid` to declare the correspondence between L1 and L2 matrices
* * Run again, and we get rules (prefixed by RULE1 and RULE0)
**/
#include "../rogueviz/rogueviz.h"
namespace rogueviz {
int toplev = 5;
vector<hyperpoint> hatcorners_add;
vector<hyperpoint> hatcorners[2];
vector<transmatrix> hats[8];
vector<int> hattype;
hyperpoint pt(ld x, ld y) { return hpxy(x, y); }
transmatrix rot;
transmatrix sca;
transmatrix U;
transmatrix mt(ld a, ld b, ld c, ld d, ld e, ld f, ld g, ld h, ld i) {
transmatrix T = Id;
T[0][0] = a;
T[0][1] = b;
T[0][2] = c;
T[1][0] = d;
T[1][1] = e;
T[1][2] = f;
T[2][0] = g;
T[2][1] = h;
T[2][2] = i;
return T;
}
map<string, int> hatid;
void init() {
rot = Id;
hatcorners[0] = {
pt(-1.1160254038,1.4330127019),
pt(-0.0915063509,2.0245190528),
pt(0.2500000000,1.4330127019),
pt(-0.0915063509,0.8415063509),
pt(0.9330127019,0.2500000000),
pt(0.9330127019,-0.9330127019),
pt(0.2500000000,-0.9330127019),
pt(-0.0915063509,-1.5245190528),
pt(-1.1160254038,-0.9330127019),
pt(-2.1405444566,-1.5245190528),
pt(-2.4820508076,-0.9330127019),
pt(0,0),
pt(-1.7990381057,0.2500000000),
pt(-1.1160254038,0.2500000000),
};
hatcorners[0][11] = mid(hatcorners[0][10], hatcorners[0][12]);
hatcorners[1] = hatcorners[0];
for(auto& h: hatcorners[1]) h = MirrorX * h;
reverse(hatcorners[1].begin(), hatcorners[1].end());
hats[0] = {
mt(0.5000000000,-0.8660254038,-1.3660254038, -0.8660254038,-0.5000000000,-0.0000000000, 0.0000000000,0.0000000000,1.0000000000) * MirrorX,
mt(0.5000000000,-0.8660254038,0.6830127019, 0.8660254038,0.5000000000,1.6830127019, 0.0000000000,0.0000000000,1.0000000000),
mt(-1.0000000000,0.0000000000,-2.2320508076, -0.0000000000,-1.0000000000,-1.8660254038, 0.0000000000,0.0000000000,1.0000000000),
mt(-0.5000000000,-0.8660254038,-4.5310889132, 0.8660254038,-0.5000000000,-1.6160254038, 0.0000000000,0.0000000000,1.0000000000),
mt(0.5000000000,-0.8660254038,-3.4150635095, 0.8660254038,0.5000000000,1.6830127019, 0.0000000000,0.0000000000,1.0000000000),
mt(1.0000000000,-0.0000000000,-2.0490381057, 0.0000000000,1.0000000000,3.5490381057, 0.0000000000,0.0000000000,1.0000000000),
mt(0.5000000000,0.8660254038,0.2500000000, -0.8660254038,0.5000000000,3.2990381057, 0.0000000000,0.0000000000,1.0000000000),
mt(0.5000000000,-0.8660254038,-5.4641016151, 0.8660254038,0.5000000000,0.5000000000, 0.0000000000,0.0000000000,1.0000000000),
};
hats[1] = {
mt(1.0000000000,0.0000000000,0.0000000000, 0.0000000000,1.0000000000,0.0000000000, 0.0000000000,0.0000000000,1.0000000000),
mt(-0.5000000000,0.8660254038,-0.8660254038, -0.8660254038,-0.5000000000,7.0980762114, 0.0000000000,0.0000000000,1.0000000000),
mt(0.5000000000,0.8660254038,-5.8971143170, -0.8660254038,0.5000000000,4.4820508076, 0.0000000000,0.0000000000,1.0000000000),
mt(1.0000000000,-0.0000000000,-6.1471143170, 0.0000000000,1.0000000000,-1.1830127019, 0.0000000000,0.0000000000,1.0000000000),
mt(-0.5000000000,-0.8660254038,-4.5310889132, 0.8660254038,-0.5000000000,-3.9820508076, 0.0000000000,0.0000000000,1.0000000000),
mt(0.5000000000,-0.8660254038,-9.5621778265, 0.8660254038,0.5000000000,-6.5980762114, 0.0000000000,0.0000000000,1.0000000000),
mt(1.0000000000,-0.0000000000,-14.3432667397, 0.0000000000,1.0000000000,-3.5490381057, 0.0000000000,0.0000000000,1.0000000000),
};
hattype = {7, 8, 8, 8, 8, 8, 8};
ld q7 = 1, q8 = 0;
ld val;
for(int a=0; a<100; a++) {
ld nq7 = q7 + q8;
ld nq8 = q7 * 5 + q8 * 6;
println(hlog, hr::format("%.20f", val = (nq7 + nq8) / (q7 + q8)));
q7 = nq7; q8 = nq8;
}
val = sqrt(val);
println(hlog, "root: ", hr::format("%.20f", val));
for(int a=-50; a<50; a++)
for(int b=1; b<50; b++)
for(int c=-50; c<50; c++)
for(int d=1; d<50; d++) {
ld err = abs(a*1./b + c * sqrt(1./d) - val);
if(err < 1e-6)
println(hlog, tie(a,b,c,d), " : ", err);
}
val = (3 + sqrt(5)) / 2; // scaling each axis
sca = Id; sca[0][0] = sca[1][1] = val;
hats[2] = {
mt(1.0000000000,0.0000000000,0.0000000000, 0.0000000000,1.0000000000,0.0000000000, 0.0000000000,0.0000000000,1.0000000000),
mt(-0.5000000000,0.8660254038,1.1830127025, -0.8660254038,-0.5000000000,15.3791651251, 0.0000000000,0.0000000000,1.0000000000),
mt(0.5000000000,0.8660254038,-12.0442286339, -0.8660254038,0.5000000000,10.3971143173, 0.0000000000,0.0000000000,1.0000000000),
mt(1.0000000000,0.0000000000,-14.3432667399, 0.0000000000,1.0000000000,-3.5490381057, 0.0000000000,0.0000000000,1.0000000000),
mt(-0.5000000000,-0.8660254038,-12.7272413356, 0.8660254038,-0.5000000000,-13.4461524228, 0.0000000000,0.0000000000,1.0000000000),
mt(0.5000000000,-0.8660254038,-25.9544826718, 0.8660254038,0.5000000000,-18.4282032304, 0.0000000000,0.0000000000,1.0000000000),
mt(1.0000000000,0.0000000000,-36.8826859024, 0.0000000000,1.0000000000,-9.4641016152, 0.0000000000,0.0000000000,1.0000000000),
};
hats[3] = {
mt(1.0000000000,0.0000000000,0.0000000000, 0.0000000000,1.0000000000,0.0000000000, 0.0000000000,0.0000000000,1.0000000000),
mt(-0.5000000000,0.8660254038,7.3301270200, -0.8660254038,-0.5000000000,37.8564064623, 0.0000000000,0.0000000000,1.0000000000),
mt(0.5000000000,0.8660254038,-28.4365334803, -0.8660254038,0.5000000000,26.9592921447, 0.0000000000,0.0000000000,1.0000000000),
mt(1.0000000000,0.0000000000,-36.8826859027, 0.0000000000,1.0000000000,-9.4641016152, 0.0000000000,0.0000000000,1.0000000000),
mt(-0.5000000000,-0.8660254038,-33.2176223915, 0.8660254038,-0.5000000000,-39.4724318658, 0.0000000000,0.0000000000,1.0000000000),
mt(0.5000000000,-0.8660254038,-68.9842828915, 0.8660254038,0.5000000000,-50.3695461828, 0.0000000000,0.0000000000,1.0000000000),
mt(1.0000000000,0.0000000000,-96.3047909683, 0.0000000000,1.0000000000,-24.8432667403, 0.0000000000,0.0000000000,1.0000000000),
};
hats[4] = {
mt(1.0000000000,0.0000000000,0.0000000000, 0.0000000000,1.0000000000,0.0000000000, 0.0000000000,0.0000000000,1.0000000000),
mt(-0.5000000000,0.8660254038,23.7224318656, -0.8660254038,-0.5000000000,97.0070415601, 0.0000000000,0.0000000000,1.0000000000),
mt(0.5000000000,0.8660254038,-71.4663337016, -0.8660254038,0.5000000000,70.7307621167, 0.0000000000,0.0000000000,1.0000000000),
mt(1.0000000000,0.0000000000,-96.3047909682, 0.0000000000,1.0000000000,-24.8432667399, 0.0000000000,0.0000000000,1.0000000000),
mt(-0.5000000000,-0.8660254038,-86.4926131352, 0.8660254038,-0.5000000000,-108.0871685769, 0.0000000000,0.0000000000,1.0000000000),
mt(0.5000000000,-0.8660254038,-181.6813787030, 0.8660254038,0.5000000000,-134.3634480195, 0.0000000000,0.0000000000,1.0000000000),
mt(1.0000000000,0.0000000000,-252.0316870025, 0.0000000000,1.0000000000,-65.0656986057, 0.0000000000,0.0000000000,1.0000000000),
};
hats[5] = {
mt(1.0000000000,0.0000000000,0.0000000000, 0.0000000000,1.0000000000,0.0000000000, 0.0000000000,0.0000000000,1.0000000000),
mt(-0.5000000000,0.8660254038,66.7522320948, -0.8660254038,-0.5000000000,251.9817055201, 0.0000000000,0.0000000000,1.0000000000),
mt(0.5000000000,0.8660254038,-184.1634295166, -0.8660254038,0.5000000000,185.4829942043, 0.0000000000,0.0000000000,1.0000000000),
mt(1.0000000000,0.0000000000,-252.0316870019, 0.0000000000,1.0000000000,-65.0656986045, 0.0000000000,0.0000000000,1.0000000000),
mt(-0.5000000000,-0.8660254038,-225.8272043260, 0.8660254038,-0.5000000000,-287.9050992716, 0.0000000000,0.0000000000,1.0000000000),
mt(0.5000000000,-0.8660254038,-476.7428659331, 0.8660254038,0.5000000000,-354.4038105811, 0.0000000000,0.0000000000,1.0000000000),
mt(1.0000000000,0.0000000000,-659.7902700392, 0.0000000000,1.0000000000,-170.3538290768, 0.0000000000,0.0000000000,1.0000000000),
};
hats[6] = hats[5];
auto acs = inverse(sca);
println(hlog, "shifts:");
indenter ind(2);
for(int i=0; i<7; i++) {
transmatrix S = gpushxto0(hats[1][i] * C0) * hats[1][i];
// println(hlog, "S = ", kz(S));
transmatrix S0 = inverse(S);
// transmatrix S1 = S;
auto& t = hats[6][i];
auto& t3 = hats[5][i];
auto& t2 = hats[4][i];
auto& t1 = hats[3][i];
hyperpoint fix2 = t2 * C0 - sca * t1 * C0;
hyperpoint cfix3 = acs * fix2;
hyperpoint rfix3 = t3 * C0 - sca * t2 * C0;
t = sca * t * acs * acs * rgpushxto0(rfix3) * sca;
println(hlog, kz(rfix3-cfix3), " from ", fix2, " .. ", S0 * cfix3 - acs * fix2);
// t = t * rgpushxto0(sca * (t3 * C0 - bt3 * C0));
// t = t *
}
hatid["R0A000L0.000"] = -1;
int nextid = 8;
hatid["R0A011L6.147"] = hatid["R0A014L14.343"] = nextid++;
hatid["R0A016L8.196"] = hatid["R0A015L22.539"] = nextid++;
hatid["R0A016L8.196"] = hatid["R0A015L22.539"] = nextid++;
hatid["R0A191L6.147"] = hatid["R0A194L14.343"] = nextid++;
hatid["R0A196L8.196"] = hatid["R0A195L22.539"] = nextid++;
hatid["R1A023L6.903"] = hatid["R1A019L15.060"] = nextid++;
hatid["R1A126L5.555"] = hatid["R1A131L15.741"] = nextid++;
hatid["R1A185L7.579"] = hatid["R1A191L21.879"] = nextid++;
hatid["R1A238L3.558"] = hatid["R1A232L11.654"] = nextid++;
hatid["R1A327L4.885"] = hatid["R1A320L10.974"] = nextid++;
hatid["R2A037L6.054"] = hatid["R2A025L14.053"] = nextid++;
hatid["R2A092L2.046"] = hatid["R2A096L3.188"] = nextid++;
hatid["R2A138L8.858"] = hatid["R2A145L25.101"] = nextid++;
hatid["R2A221L4.953"] = hatid["R2A226L12.883"] = nextid++;
hatid["R2A300L2.571"] = hatid["R2A279L2.571"] = nextid++;
hatid["R3A226L7.005"] = hatid["R3A233L16.845"] = nextid++;
hatid["R4A000L5.143"] = hatid["R4A339L10.197"] = nextid++;
hatid["R4A097L4.093"] = hatid["R4A085L4.171"] = nextid++;
hatid["R4A152L9.906"] = hatid["R4A156L21.728"] = nextid++;
hatid["R4A198L11.809"] = hatid["R4A205L27.793"] = nextid++;
hatid["R4A281L4.171"] = hatid["R4A286L6.625"] = nextid++;
hatid["R5A087L5.006"] = hatid["R5A080L5.503"] = nextid++;
hatid["R5A143L7.731"] = hatid["R5A139L13.041"] = nextid++;
hatid["R5A246L6.309"] = hatid["R5A251L9.388"] = nextid++;
hatid["R5A305L6.626"] = hatid["R5A311L15.426"] = nextid++;
hatid["R5A358L8.119"] = hatid["R5A352L19.349"] = nextid++;
println(hlog, "nextid = ", nextid);
};
void draw_cross(hyperpoint h) {
transmatrix T = rgpushxto0(h);
shiftmatrix sId = shiftless(Id);
for(int i=0; i<12; i++)
queueline(sId * T * C0, sId * T * xspinpush0(30._deg * i, 0.1), 0xFFFFFFFF);
}
void draw_shape(transmatrix T, vector<hyperpoint> sh, color_t lc, color_t fc) {
for(hyperpoint h: sh) curvepoint(h);
curvepoint(sh[0]);
queuecurve(shiftless(Id) * T, lc, fc, PPR::LINE);
}
/*
void draw_superhat(transmatrix T, const vector<transmatrix>& ms, int q, color_t lc, color_t fc) {
for(auto& m: ms)
draw_shape(T * m, hatcorners, lc, fc);
}
*/
hyperpoint sh;
color_t coltables[8] = { 0xFF000080, 0x00FF0080, 0x0000FF80, 0xFFFF0080, 0xFF00FF80, 0x00FFFF80, 0xFFFFFF80, 0x4080C080 };
vector<int> curlabel;
ld ldist = 9999;
hyperpoint hfound, hfound1;
int connection_mode = 0;
int found_pairs, found_pairs_swap;
using pthash = int;
pthash makehash(hyperpoint h) {
return int(floor(h[0] * 10 + .31)) + int(floor(h[1] * 10 + .31)) * 10000;
}
map<pair<pthash, pthash>, vector<int> > seen_edges;
string name(int x) { return s0 + char('A' + x); }
string matcode(transmatrix T) {
vector<ld> res(3);
hyperpoint h = kz(T * C0);
transmatrix S = gpushxto0(T * C0) * T;
ld alpha = atan2(S * xpush0(1)) / degree;
int ialpha = gmod(floor(alpha + .5), 360);
int hangle = gmod(floor(atan2(h) / degree + .3), 360);
h[2] = ialpha/60;
swap(h[1], h[2]); swap(h[0], h[1]);
// return lalign(0, h);
return hr::format("R%dA%03dL%.3f", ialpha/60, hangle, hypot_d(2, h));
}
int ghatid(string s) {
if(hatid.count(s)) return hatid[s];
return -999;
}
void edge_connect(vector<int> l1, vector<int> l2) {
transmatrix T1 = Id;
transmatrix T2 = Id;
transmatrix W = Id;
int idx = 0;
for(int i=toplev; i>0; i--) {
T1 = T1 * hats[i][l1[idx]];
T2 = T2 * hats[i][l2[idx]];
transmatrix W1 = inverse(T1) * T2;
if(!eqmatrix(W1, Id))
println(hlog, "CON L", i, " ", matcode(W1), " :: ", matcode(W), " ", tie(l1[idx], l2[idx]), " REV ", matcode(inverse(W1)));
if(i == 1) println(hlog, "RULE1 {", l1[idx], ", ", l2[idx], ", ", ghatid(matcode(W1)), ", ", ghatid(matcode(W)), ", ", ghatid(matcode(inverse(W1))), "},");
W = W1;
idx++;
}
println(hlog, "CON L0 ", make_pair(make_pair(l1[idx], name(l1[idx+1])), make_pair(l2[idx], name(l2[idx+1]))), " :: ", matcode(W));
println(hlog, "RULE0 {", l1[idx], ", ", l1[idx+1], ", ", l2[idx], ", ", l2[idx+1], ", ", ghatid(matcode(W)), "},");
}
vector<pair<hyperpoint, hyperpoint> > extedges;
void edge_label(vector<int>& lbl, hyperpoint a, hyperpoint b) {
auto ha = makehash(a);
auto hb = makehash(b);
if(connection_mode >= 2) return;
if(connection_mode == 1) {
if(seen_edges.count({ha, hb})) {
extedges.emplace_back(a, b);
/* vid.linewidth *= 10;
queueline(shiftless(Id) * a, shiftless(Id) * b, 0xFF00FF80);
vid.linewidth /= 10;
*/
}
return;
}
if(seen_edges.count({hb, ha})) {
edge_connect(lbl, seen_edges[{hb, ha}]);
edge_connect(seen_edges[{hb, ha}], lbl);
seen_edges.erase({hb, ha});
found_pairs++;
return;
}
if(seen_edges.count({ha, hb})) {
println(hlog, "CON ", lbl, " TO ", seen_edges[{hb, ha}], " SWAP");
seen_edges.erase({ha, hb});
found_pairs_swap++;
return;
}
seen_edges[{ha, hb}] = lbl;
}
void point_label(vector<int>& lbl, hyperpoint h) {
if(lbl == curlabel) draw_cross(h);
ld dist = hdist(unshift(mouseh), h);
if(dist < ldist) {
ldist = dist;
curlabel = lbl;
hfound = h;
println(hlog, "found: ", lbl, " at: ", dist);
}
}
void draw_superhat_label(transmatrix T, const vector<transmatrix>& ms, int q, color_t lc, color_t fc, vector<int>& label) {
for(int i=0; i<q; i++) {
auto& hc = hatcorners[i == 0];
for(int j=0; j<isize(hc); j++) {
label.push_back(i);
label.push_back(j);
point_label(label, T * ms[i] * hc[j]);
edge_label(label, T * ms[i] * hc[j], T * ms[i] * hc[(j+1)%isize(hc)]);
label.pop_back();
label.pop_back();
}
}
for(int i=0; i<q; i++) {
auto& hc = hatcorners[i == 0];
draw_shape(T * ms[i], hc, lc, fc);
}
}
void draw_recurse_label(transmatrix T, int levs, int t, color_t col, vector<int>& label) {
if(levs == 0) {
draw_superhat_label(T, hats[0], t, 0xFFFFFFFF, col, label);
return;
}
if(connection_mode == 2 && levs == toplev-1) {
int eid = 0;
for(auto e: extedges) {
queueline(shiftless(Id) * T * e.first, shiftless(Id) * T * e.second, col);
label.push_back(eid++);
point_label(label, T * e.first);
label.pop_back();
}
return;
}
transmatrix scap = Id;
for(int i=1; i<levs; i++) scap = scap * sca;
scap = inverse(scap);
for(int i=0; i<t-1; i++) {
auto col1 = col;
if(col == 0) col1 = coltables[i];
label.push_back(i);
draw_recurse_label(T * hats[levs][i], levs-1, hattype[i], col1, label);
label.pop_back();
}
}
int next_hattype = 7;
void hatframe() {
if(isize(hatcorners_add) >= 2) draw_shape(Id, hatcorners_add, 0xFF0000FF, 0xFF000080);
transmatrix B = rgpushxto0( unshift(ggmatrix(cwt.at)) * C0 );
vector<int> glabel;
draw_recurse_label(B, toplev, 8, 0, glabel);
if(connection_mode == 0) {
println(hlog, "CON found = ", found_pairs, " swap = ", found_pairs_swap, " not found = ", isize(seen_edges));
// seen_edges.clear(); found_pairs = 0;
connection_mode = 1;
}
else if(connection_mode == 1) {
connection_mode = 2;
toplev++;
}
draw_cross(C0);
}
string writematrix(transmatrix T) {
return hr::format("mt(%.10f,%.10f,%.10f, %.10f,%.10f,%.10f, %.10f,%.10f,%.10f)",
T[0][0],
T[0][1],
T[0][2],
T[1][0],
T[1][1],
T[1][2],
T[2][0],
T[2][1],
T[2][2]
);
}
void hatter() {
cmode = sm::NORMAL | sm::CENTER | sm::PANNING;
clearMessages();
dialog::init();
gamescreen();
shiftpoint s = mapeditor::full_mouseh();
sh = unshift(s);
dialog::add_key_action('a', [] {
hatcorners_add.push_back(sh);
println(hlog, "hatcorners = {");
for(auto h: hatcorners_add) println(hlog, hr::format(" pt(%.10f,%.10f),", h[0], h[1]));
println(hlog, " }");
});
/* dialog::add_key_action('b', [] {
if(hats.empty()) return;
hats.pop_back();
hattype.pop_back();
}); */
dialog::add_key_action('[', [] {
// hyperpoint h = currentmap->get_corner(cwt.at, 0);
// rot = rot * gpushxto0(h);
rot = rot * spin(60._deg);
// rot = rot * rgpushxto0(h);
});
dialog::add_key_action(']', [] {
// hyperpoint h = currentmap->get_corner(cwt.at, 0);
// rot = rot * gpushxto0(h);
rot = MirrorX * rot;
// rot = rot * rgpushxto0(h);
});
dialog::add_key_action('7', [] { next_hattype = 7; });
dialog::add_key_action('8', [] { next_hattype = 8; });
dialog::add_key_action('f', [] { hfound1 = hfound; });
dialog::add_key_action('b', [] {
int id = curlabel[0];
hats[toplev][id] = rgpushxto0(hfound1 - hfound) * hats[toplev][id];
println(hlog, "hats[", toplev, "] = {");
for(auto h: hats[toplev]) println(hlog, " ", writematrix(h), ",");
println(hlog, " }");
});
dialog::add_key_action('q', [] {
exit(0);
});
dialog::add_key_action('g', [] {
ldist = 9999;
});
keyhandler = [] (int sym, int uni) { dialog::handleNavigation(sym, uni); };
}
void enable_hatter() {
init();
mapeditor::snapping = true;
rv_hook(hooks_frame, 100, hatframe);
pushScreen(hatter);
}
auto hathook = arg::add3("-hatter", enable_hatter);
}

View File

@ -0,0 +1,559 @@
/**
Honeycomb data generator. See rulegen.sh
This algorithm works as follows:
- We use a DFS-like algorithm to identify all the required states. To tell whether two cells
c1 and c2 are in the same state, we compute its generate_ext_nei -- the same generate_ext_nei
is the same state. To compute generate_ext_nei(c), we list all cells vertex-adjacent to c,
and for each c' in this list, we compute FV(c')-FV(c), where FV is the distance from
some central tile. It is crucial to identify the directions in unique way (in 2D we can simply
use clockwise order, in 3D it is more difficult) -- we do this by using a regular pattern
(see get_id).
After all states are identified, we construct the tree of states -- every non-root state is
attached to the first neighbor (according to the direction order) which has smaller FV.
For non-tree directions, we construct a path going through nodes with smaller values of FV --
this guarantees termination of the algorithm in amortized time O(1).
*/
#include "zlib.h"
#include "../hyper.h"
namespace hr {
int exh;
map<string, map<string,int> > rules;
/** \brief distance from the center */
#define FV master->fiftyval
/** \brief change i into a string containing a displayable character */
auto dis = [] (int i, char init='a') { return s0 + char(init + i); };
bool optimize_344 = false;
/** \brief we use a regular pattern to make sure that the directions are identified consistently.
In {5,3,5} we can just use the Seifert-Weber space for this identification; otherwise,
we use the field pattern. */
int get_id(cell *c) {
if(geometry == gSpace535) return 0;
if(optimize_344 && geometry == gSpace344) {
/* we use the 'pattern from crystal' */
/* but it is mod 4, mod 2 is enough for us */
int res = 0;
int fv = c->master->fieldval;
for(int i=0; i<4; i++) {
res = 2 * res + (fv&1);
fv >>= 2;
}
return res;
}
return c->master->fieldval;
}
/** \brief aux function for find_path which limits path length
* the rule is that we make some moves which decrease FV, then we make some moves which increase FV
*/
string find_path(cell *x, cell *y, int steps) {
if(x->FV != y->FV) {
println(hlog, x, y, " steps=", steps, " d=", x->FV, " vs ", y->FV);
exit(3);
}
if(x == y) return "";
if(steps == 0) return "?";
for(int i=0; i<S7; i++)
if(x->move(i) && x->move(i)->FV < x->FV)
for(int j=0; j<S7; j++)
if(y->move(j) && y->move(j)->FV < y->FV) {
string ch = find_path(x->move(i), y->move(j), steps-1);
if(ch == "?") continue;
return dis(i) + ch + dis(y->c.spin(j));
}
return "?";
}
/** \brief aux function for find_path which limits path length
* the rule is that we keep to a fixed FV-level (this works better in {x,x,3})
*/
string find_path_side(cell *x, cell *y, int steps) {
if(x->FV != y->FV) {
println(hlog, x, y, " steps=", steps, " d=", x->FV, " vs ", y->FV);
exit(3);
}
if(x == y) return "";
if(steps == 0) return "?";
for(int i=0; i<S7; i++)
if(x->move(i) && x->move(i)->FV == x->FV) {
string ch = find_path_side(x->move(i), y, steps-1);
if(ch == "?") continue;
return dis(i) + ch;
}
return "?";
}
/** \brief find the sequence of moves we need to take to get from y to x (x and y must be the same fv-level)
* return '?' if nothing found
*/
string find_path(cell *x, cell *y) {
if(x == y) return "";
if(geometry == gSpace353) {
static int max_steps = -1;
for(int steps=0; steps<5; steps++) {
string f = find_path_side(x, y, steps);
if(f != "?") {
if(steps > max_steps) {
println(hlog, "found a sidepath with ", max_steps = steps, " steps");
}
return f;
}
}
if(max_steps < 10) {
max_steps = 10;
println(hlog, "failed to find_path_side");
}
}
for(int steps=0;; steps++) {
string f = find_path(x, y, steps);
if(f != "?") return f;
}
}
/** a map of all the cells vertex-adjacent to c */
struct ext_nei_rules_t {
vector<int> from, dir, original;
};
/** ext_nei_rules_t need to be created only once for each get_id */
map<int, ext_nei_rules_t> ext_nei_rules;
/** aux recursive function of construct_rules: the compact variant */
void listnear_compact(cell *c, ext_nei_rules_t& e, const transmatrix& T, int id, set<cell*>& visi) {
visi.insert(c);
int a = 0, b = 0;
for(int i=0; i<S7; i++) {
bool ok = false;
transmatrix U = T * currentmap->adj(c, i);
for(auto v: cgi.heptshape->vertices_only) for(auto w: cgi.heptshape->vertices_only)
if(hdist(v, U*w) < 1e-3) ok = true;
if(!ok) continue;
cell *c1 = c->cmove(i);
int id1 = isize(e.from);
e.from.push_back(id);
e.dir.push_back(i);
a++;
e.original.push_back(!visi.count(c1));
if(e.original.back()) {
b++;
listnear_compact(c1, e, U, id1, visi);
}
}
}
/** aux recursive function of construct_rules: the maxdist variant */
void listnear_exh(cell *c, ext_nei_rules_t& e, int maxdist) {
map<cell*, int> dist;
map<cell*, int> origdir;
vector<cell*> lst;
println(hlog, "called listnear_exh for: ", c);
auto enqueue = [&] (cell *c, int d, int od) {
if(dist.count(c)) return;
dist[c] = d;
origdir[c] = od;
lst.push_back(c);
};
enqueue(c, 0, -1);
for(int k=0; k<isize(lst); k++) {
cell *ca = lst[k];
int di = dist[ca] + 1;
int odi = origdir[ca];
for(int i=0; i<S7; i++) {
if(odi >= 0 && cgi.heptshape->dirdist[i][odi] != 1) continue;
cell *c1 = ca->cmove(i);
e.from.push_back(k);
e.dir.push_back(i);
e.original.push_back(!dist.count(c1));
if(e.original.back() && di < maxdist)
enqueue(c1, di, ca->c.spin(i));
}
}
}
/** \brief create ext_nei_rules_t for the given c */
void construct_rules(cell *c, ext_nei_rules_t& e) {
e.from = {-1};
e.dir = {-1};
e.original = {1};
if(!exh) {
set<cell*> visi;
listnear_compact(c, e, Id, 0, visi);
}
else {
listnear_exh(c, e, exh);
}
int orgc = 0;
for(auto i: e.original) orgc += i;
println(hlog, "id ", get_id(c), " list length = ", isize(e.original), " original = ", orgc);
}
/** \brief we learn that a and b are connected -- make sure that their FV's match */
void fix_dist(cell *a, cell *b) {
if(a->FV > b->FV+1) {
a->FV = b->FV+1;
forCellEx(c, a) fix_dist(a, c);
}
if(b->FV > a->FV+1) {
b->FV = a->FV+1;
forCellEx(c, b) fix_dist(b, c);
}
}
/** \brief compute ext_nei_rules_t for the given cell, and make it into a string form; also do fix_dist */
string generate_ext_nei(cell *c) {
int fv = get_id(c);
auto& e = ext_nei_rules[fv];
if(e.from.empty()) construct_rules(c, e);
vector<cell*> ext_nei = {c};
for(int i=1; i<isize(e.from); i++) {
cell *last = ext_nei[e.from[i]];
cell *next = last->cmove(e.dir[i]);
fix_dist(last, next);
ext_nei.push_back(next);
}
string res;
for(int i=0; i<isize(e.from); i++) if(e.original[i]) res += char('L' + ext_nei[i]->FV - c->FV);
return its(fv) + ":" + res;
}
/** cells become 'candidates' before their generate_ext_nei is checked in order to let them become states */
set<cell*> candidates;
vector<cell*> candidates_list;
/** the state ID for a given string returned by generate_ext_nei */
map<string, int> id_of;
/** cell representing the given state ID */
vector<cell*> rep_of;
/** current number of states */
int number_states = 0;
/** \brief for state s, child_rules[s][i] is -1 if i-th neighbor not a child; otherwise, the state index of that neighbor */
vector<vector<int> > child_rules;
/** parent direction for every state */
vector<int> parent_list;
/** \brief if child_rules[s][i] is -1, the rules to get to that neighbor */
vector<vector<string> > side_rules;
void add_candidate(cell *c) {
if(candidates.count(c)) return;
candidates.insert(c);
candidates_list.push_back(c);
}
bool single_origin = false;
/** the main function */
void test_canonical(string fname) {
stop_game();
reg3::reg3_rule_available = false;
fieldpattern::use_rule_fp = true;
fieldpattern::use_quotient_fp = true;
start_game();
int qc = reg3::quotient_count();
vector<cell*> c0;
if(optimize_344 && geometry == gSpace344) qc = 16;
/* we start from a 'center' in every get_id-type */
if(single_origin) c0 = {cwt.at};
else if(geometry == gSpace535) {
c0.resize(qc, cwt.at);
}
else {
for(int fv=0; fv<qc; fv++) {
cell *c = cwt.at;
/* 100 to ensure that the FV-spheres around candidates do not interact */
for(int i=0; i<100 || get_id(c) != fv; i++) c = c->cmove(hrand(S7));
c->FV = 0;
c0.push_back(c);
}
}
for(cell* c: c0) add_candidate(c);
vector<int> empty(S7);
for(auto& e: empty) e = -1;
println(hlog, "empty = ", empty);
/** generate candidate_list using a BFS-like algorithm, starting from c0 */
for(int i=0; i<isize(candidates_list); i++) {
cell *c = candidates_list[i];
string s = generate_ext_nei(c);
if(!id_of.count(s)) {
// println(hlog, "found candidate for: ", s);
id_of[s] = number_states++;
rep_of.push_back(c);
for(int i=0; i<S7; i++) add_candidate(c->cmove(i));
}
}
child_rules.resize(number_states, empty);
parent_list.resize(number_states);
println(hlog, "found ", its(number_states), " states");
/** generate child_rules */
for(int i=0; i<number_states; i++) {
cell *c = rep_of[i];
string st = generate_ext_nei(c);
if(!id_of.count(st) || id_of[st] != i) {
println(hlog, "error: ext_nei changed");
}
for(int a=0; a<S7; a++) {
cell *c1 = c->move(a);
if(c1->FV < c->FV) parent_list[i] = a;
if(c1->FV <= c->FV) continue;
for(int b=0; b<S7; b++) {
cell *c2 = c1->move(b);
if(c2->FV != c->FV) continue;
if(c2 == c) {
string st = generate_ext_nei(c1);
if(!id_of.count(st)) {
println(hlog, "error: new state generated while generating child_rules");
}
child_rules[i][a] = id_of[st];
}
break;
}
continue;
}
}
if(true) {
/* minimize the automaton */
// println(hlog, "original rules: ", child_rules);
fflush(stdout);
vector<int> ih(number_states, 0);
int lqids = 0;
for(int a=0; a<100; a++) {
set<vector<int>> found;
vector<vector<int>> v(number_states);
map<vector<int>, int> ids;
for(int i=0; i<number_states; i++) {
vector<int> res(S7+1);
for(int d=0; d<S7; d++) res[d] = (child_rules[i][d] != -1) ? ih[child_rules[i][d]] : -1;
res[S7] = parent_list[i];
v[i] = res;
found.insert(res);
}
int qids = 0;
for(auto hash: found) ids[hash] = qids++;
println(hlog, "minimization step: ", qids, " states");
if(qids == lqids) break;
lqids = qids;
for(int i=0; i<number_states; i++)
ih[i] = ids[v[i]];
}
println(hlog, "reduced states to = ", lqids);
vector<vector<int> > new_child_rules;
new_child_rules.resize(lqids, empty);
for(int i=0; i<number_states; i++) {
int j = ih[i];
for(int d=0; d<S7; d++) {
int cid = child_rules[i][d];
new_child_rules[j][d] = cid == -1 ? -1 : ih[cid];
}
}
child_rules = new_child_rules;
number_states = lqids;
for(auto& p: id_of) p.second = ih[p.second];
println(hlog, "rehashed");
fflush(stdout);
}
// for(auto& a: child_rules) for(auto i:a) print(hlog, i, ",");
println(hlog);
/* generate side rules */
side_rules.resize(number_states);
for(auto& s: side_rules) s.resize(S7);
for(int i=0; i<isize(candidates_list); i++) {
cell *c = candidates_list[i];
string s = generate_ext_nei(c);
if(!id_of.count(s)) println(hlog, "error: MISSING");
int id = id_of[s];
cell *cpar = nullptr;
int a0;
for(int a=0; a<S7; a++) {
cell *c1 = c->move(a);
if(!c1) continue;
if(c1->FV < c->FV && !cpar) cpar = c1, a0 = a;
}
for(int a=0; a<S7; a++) {
cell *c1 = c->move(a);
if(!c1) continue;
bool is_child = false;
cell* c2 = nullptr;
int dir = 0;
if(c1->FV >= c->FV) {
for(int b=0; b<S7; b++) {
c2 = c1->move(b);
if(!c2) continue;
if(c2->FV >= c1->FV) continue;
dir = c1->c.spin(b);
break;
}
}
is_child = (c2 == c);
bool was_child = child_rules[id][a] >= 0;
if(is_child ^ was_child) {
println(hlog, "id=", id, " a=", a);
println(hlog, "is_child = ", is_child);
println(hlog, "was_child = ", was_child);
println(hlog, "c fv = ", c->FV);
println(hlog, "c1 fv = ", c1->FV, " [", a, "]");
if(c2 == nullptr) { println(hlog, "c2 missing"); }
else
println(hlog, "c2 fv = ", c2->FV, " [", c2->c.spin(dir), "]");
println(hlog, c, "->", c1, "->", c2);
fflush(stdout);
cell *r = rep_of[id];
println(hlog, r, " at ", r->FV);
cell *r1 = r->move(a);
if(!r1) { println(hlog, "error: r1 missing"); continue; }
println(hlog, r1, " at ", r1->FV);
for(int a=0; a<S7; a++) if(r1->move(a)) println(hlog, a, ":", r1->move(a), " at ", r1->move(a)->FV);
fflush(stdout);
exit(3);
}
if(is_child) continue;
string solu;
if(c1->FV < c->FV)
solu = dis(a0, 'A') + find_path(cpar, c1);
else if(c1->FV == c->FV)
solu = dis(a0, 'A') + find_path(cpar, c2) + dis(dir);
else
solu = find_path(c, c2) + dis(dir);
auto& sr = side_rules[id][a];
if(sr != "" && sr != solu) {
println(hlog, "conflict: ", solu, " vs ", sr, " FV = ", c->FV, " vs ", c1->FV);
if(isize(sr) < isize(solu)) continue;
}
sr = solu;
continue;
}
}
// println(hlog, side_rules);
string side_data;
for(auto& a: side_rules) for(auto&b :a) if(b != "") side_data += b + ",";
println(hlog, side_data);
vector<short> data;
for(auto& a: child_rules) for(auto i:a) data.push_back(i);
shstream ss;
auto& fp = currfp;
hwrite_fpattern(ss, fp);
qc = isize(c0);
vector<int> root(qc, 0);
for(int i=0; i<qc; i++) root[i] = id_of[generate_ext_nei(c0[i])];
println(hlog, "root = ", root);
hwrite(ss, root);
println(hlog, "copy data");
hwrite(ss, data);
println(hlog, "copy side_data");
hwrite(ss, side_data);
println(hlog, "compress_string");
string s = compress_string(ss.s);
fhstream of(fname, "wb");
print(of, s);
}
auto fqhook =
addHook(hooks_args, 100, [] {
using namespace arg;
if(0) ;
else if(argis("-extra-verification")) {
reg3::extra_verification++;
}
else if(argis("-exh")) {
shift(); exh = argi();
}
else if(argis("-no-rule")) {
reg3::reg3_rule_available = false;
}
else if(argis("-other-rule")) {
reg3::reg3_rule_available = true;
shift(); reg3::other_rule = args();
}
else if(argis("-urf")) {
cheat(); fieldpattern::use_rule_fp = true;
}
else if(argis("-uqf")) {
cheat(); fieldpattern::use_quotient_fp = true;
}
else if(argis("-gen-rule")) {
shift(); test_canonical(args());
}
else return 1;
return 0;
});
}
// 1 + 12 + 30 + 20 = 55

594
devmods/knuth-bendix.cpp Normal file
View File

@ -0,0 +1,594 @@
#include "../hyper.h"
#include <fstream>
#include <semaphore.h>
namespace hr {
namespace rulegen {
bool set_general(const string& s);
}
struct symbol {
unsigned char sid;
unsigned char eid;
bool operator < (const symbol s1) const { return (int16_t&) (*this) < (int16_t&) s1; }
bool operator == (const symbol s1) const { return (int16_t&) (*this) == (int16_t&) s1; }
bool operator != (const symbol s1) const { return (int16_t&) (*this) != (int16_t&) s1; }
};
using seq = vector<symbol>;
void block(symbol& s) {
s.sid ^= 128;
}
void unblock(symbol& s) {
s.sid ^= 128;
}
bool is_blocked(symbol& s) {
return s.sid & 128;
}
void print(hstream& hs, symbol s) {
print(hs, "[", int(s.sid), ":", int(s.eid), "]");
}
bool reversed;
bool lexless(const seq& a, const seq& b) {
int al = isize(a);
int bl = isize(b);
if(al != bl) return al < bl;
if(reversed) {
for(int i=al-1; i>=0; i--) if(a[i].eid < 120 && a[i] != b[i]) return a[i] < b[i];
return a.back() < b.back();
}
else {
return a < b;
}
}
struct lexless_comparator {
bool operator()(const seq& a, const seq& b) const { return lexless(a, b); }
};
map<seq, seq, lexless_comparator> rules;
seq sub(const seq& s, int a, int l) {
seq result;
for(int i=0; i<l; i++) result.push_back(s[a+i]);
return result;
}
seq cat(const seq& a, const seq& b) {
seq result;
for(auto e: a) result.push_back(e);
for(auto e: b) result.push_back(e);
return result;
}
void catto(seq& a, const seq& b) {
a.reserve(a.size() + b.size());
for(auto e: b) a.push_back(e);
}
void catto_sub(seq& a, const seq& b, int pos, int len) {
a.reserve(a.size() + len);
for(int i=0; i<len; i++) a.push_back(b[pos+i]);
}
int max_rule_length;
set<pair<seq, seq>> rules_checked;
queue<pair<seq, seq>> rulequeue;
void enqueue_rule(seq l, seq r) {
rulequeue.emplace(l, r);
}
cellwalker trace(cellwalker cw, const seq& sq, bool debug) {
for(auto sym: sq) {
if(shvid(cw.at) != sym.sid) println(hlog, "error: wrong type");
if(debug) println(hlog, "at: ", cw);
cw += sym.eid;
cw += wstep;
cw -= cw.spin % arb::current.shapes[shvid(cw.at)].cycle_length;
}
return cw;
}
cell *get_sample(int sid) {
celllister cl(currentmap->gamestart(), 20, 100000, nullptr);
for(cell *c: cl.lst) if(shvid(c) == sid) return c;
println(hlog, "sample not found of ", sid);
exit(1);
}
string verify_rule(const pair<seq, seq>& rule, bool debug = false) {
cell *cstart = get_sample(rule.first[0].sid);
cellwalker cw(cstart);
cellwalker cw1 = trace(cw, rule.first, debug);
cellwalker cw2 = trace(cw, rule.second, debug);
return cw1 == cw2 ? "OK" : lalign(0, "FAIL ", cw1, " VS ", cw2);
}
int add_rule(seq l, seq r) {
indenter ind(2);
if(l == r) return 0;
if(lexless(l, r)) swap(l, r);
again:
if(!rules.count(l)) {
// println(hlog, "rule added: ", l, " -> ", r, " verify: ", verify_rule({l, r}));
rules[l] = r;
return 1;
}
else if(rules[l] == r) return 0;
else if(lexless(r, rules[l])) {
l = rules[l];
goto again;
}
else {
// println(hlog, "rule simplified: ", l, " -> ", r);
auto x = rules[l];
x = r;
l = x;
goto again;
}
}
symbol gen_symbol(int sid, int eid) {
symbol sym;
sym.sid = sid;
sym.eid = eid;
return sym;
}
bool include_rotations = false;
void prepare_rules() {
auto& ac = arb::current;
int N = isize(ac.shapes);
/* move and back and move */
if(!include_rotations) for(int i=0; i<N; i++) {
auto& sh = ac.shapes[i];
int K = sh.size();
for(int k=0; k<K; k++)
for(int l=0; l<K; l++) {
seq sq, sq1;
sq.push_back(gen_symbol(i, k));
auto con = sh.connections[k % sh.cycle_length];
auto& sh1 = ac.shapes[con.sid];
con.eid %= sh1.cycle_length;
sq.push_back(gen_symbol(con.sid, con.eid));
sq.push_back(gen_symbol(i, l));
int k1 = k / sh.cycle_length * sh.cycle_length;
// if(k1)
sq1.push_back(gen_symbol(i, (k1 + l) % K));
enqueue_rule(sq, sq1);
}
}
/* move and back -> nothing or rotate */
if(include_rotations) for(int i=0; i<N; i++) {
auto& sh = ac.shapes[i];
int K = sh.size();
for(int k=0; k<K; k++) {
seq sq, sq1;
sq.push_back(gen_symbol(i, k));
auto con = sh.connections[k % sh.cycle_length];
auto& sh1 = ac.shapes[con.sid];
con.eid %= sh1.cycle_length;
sq.push_back(gen_symbol(con.sid, con.eid));
int k1 = k / sh.cycle_length * sh.cycle_length;
if(k1) sq1.push_back(gen_symbol(i, 120 + k1));
if(k1) sq1.push_back(gen_symbol(255, 255));
if(lexless(sq, sq1)) swap(sq, sq1);
enqueue_rule(sq, sq1);
}
}
/* rotate + move -> move */
if(include_rotations) for(int i=0; i<N; i++) {
auto& sh = ac.shapes[i];
int K = sh.size();
int C = sh.cycle_length;
for(int k=C; k<K; k+=C)
for(int l=0; l<K; l++) {
seq sq, sq1;
sq.push_back(gen_symbol(i, 120+k));
sq.push_back(gen_symbol(255, 255));
sq.push_back(gen_symbol(i, l));
sq1.push_back(gen_symbol(i, (k+l) % K));
if(lexless(sq, sq1)) swap(sq, sq1);
enqueue_rule(sq, sq1);
}
}
/* cycle a vertex */
for(int i=0; i<N; i++) {
auto& sh = ac.shapes[i];
for(int j=0; j<sh.cycle_length; j++) {
int val = sh.vertex_valence[j]; // (j+1) % sh.cycle_length];
int ai = i, aj = j;
seq sq;
// cellwalker cw(get_sample(i), j);
// auto cw0 = cw;
for(int v=0; v<val; v++) {
// println(hlog, "at: ", cw);
/*
cw++;
cw += wstep;
*/
auto& ash = ac.shapes[ai];
aj += 1;
aj %= ash.size();
sq.push_back(gen_symbol(ai, aj));
auto co = ash.connections[aj % ash.cycle_length];
ai = co.sid;
aj = co.eid;
aj %= ac.shapes[ai].cycle_length;
}
// println(hlog, "finish at: ", cw, " from: ", cw0);
aj %= sh.cycle_length;
if(i != ai || j != aj /* || cw != cw0 */) { println(hlog, "bad cycling!"); return; }
enqueue_rule(sq, {});
}
}
for(auto r: rules) println(hlog, r);
}
void final_rules() {
auto& ac = arb::current;
int N = isize(ac.shapes);
for(int i=0; i<N; i++) {
auto& sh = ac.shapes[i];
int K = sh.size();
int C = sh.cycle_length;
for(int k=0; k<K; k++)
for(int l=0; l<K; l+=C) {
seq sq, sq1;
sq.push_back(gen_symbol(i, k));
auto con = sh.connections[k % sh.cycle_length];
auto& sh1 = ac.shapes[con.sid];
con.eid %= sh1.cycle_length;
sq.push_back(gen_symbol(con.sid, con.eid));
sq.push_back(gen_symbol(i, 120 + l));
int k1 = k / sh.cycle_length * sh.cycle_length;
// if(k1)
sq1.push_back(gen_symbol(i, 120 + (k1 + l) % K));
enqueue_rule(sq, sq1);
}
}
}
/* the substring of s starting at pos equals needle */
bool sub_at(const seq& s, int pos, const seq& needle) {
for(int i=0; i<isize(needle); i++)
if(s[i+pos] != needle[i])
return false;
return true;
}
/* the suffix of s1 of length len, and the prefix of s2 of length len, agree */
bool suf_pref_agree(const seq& s1, const seq& s2, int len) {
for(int i=0; i<len; i++)
if(s1[isize(s1)-len+i] != s2[i])
return false;
return true;
}
bool is_reducible(const seq& s, const pair<seq, seq>& r, seq& result) {
int rl = isize(r.first);
int sl = isize(s);
for(int i=0; i<=sl-rl; i++)
if(sub_at(s, i, r.first)) {
result = sub(s, 0, i);
catto(result, r.second);
catto_sub(result, s, i+rl, sl-rl-i);
return true;
}
return false;
}
void find_critical(const pair<seq,seq>& p, const pair<seq,seq>& q) {
int pl = isize(p.first);
int ql = isize(q.first);
for(int i=1; i<pl && i < ql; i++)
if(suf_pref_agree(p.first, q.first, i)) {
seq nleft = sub(p.first, 0, pl-i);
catto(nleft, q.second);
seq nright = p.second;
catto_sub(nright, q.first, i, ql-i);
enqueue_rule(nleft, nright);
}
}
void handle_rule(const pair<seq, seq>& nr) {
auto& lh = nr.first;
auto& rh = nr.second;
for(auto& r: rules) {
seq res;
if(is_reducible(lh, r, res)) {
enqueue_rule(res, rh);
return;
}
if(is_reducible(rh, r, res)) {
enqueue_rule(lh, res);
return;
}
}
vector<seq> to_erase;
for(auto& r: rules) {
seq res;
if(is_reducible(r.first, nr, res)) {
to_erase.push_back(r.first);
enqueue_rule(res, r.second);
}
if(is_reducible(rh, r, res)) {
to_erase.push_back(r.first);
enqueue_rule(r.first, res);
}
}
for(auto s: to_erase) rules.erase(s);
for(auto& r: rules) {
find_critical(r, nr);
find_critical(nr, r);
}
rules[nr.first] = nr.second;
}
int kb_result;
double total_time;
int main_loop(int timelimit = 5, int lenlimit = 300) {
clock_t start = clock();
while(!rulequeue.empty()) {
if(clock() > start + timelimit * CLOCKS_PER_SEC) return 1;
auto p = rulequeue.front();
rulequeue.pop();
if(p.first == p.second) continue;
if(lexless(p.first, p.second)) swap(p.first, p.second);
if(rules_checked.count(p)) continue;
rules_checked.insert(p);
int len = p.first.size() + p.second.size();
if(len > max_rule_length) max_rule_length = len;
if(len > lenlimit) return 2;
handle_rule(p);
}
println(hlog, "finished in ", (clock() - start) * 1. / CLOCKS_PER_SEC);
return 0;
}
void test_knuth_bendix() {
rules.clear();
rulequeue = {};
rules_checked.clear();
max_rule_length = 0;
start_game();
prepare_rules();
clock_t total_start = clock();
println(hlog, "total_start = ", total_start * 1. / CLOCKS_PER_SEC);
kb_result = main_loop(10);
println(hlog, "after first phase = ", clock() * 1. / CLOCKS_PER_SEC);
if(kb_result == 0) {
println(hlog, "intermediate rules:");
for(auto s: rules) println(hlog, s.first, " => ", s.second);
final_rules();
kb_result = main_loop(50, 999999);
if(kb_result) kb_result += 2;
}
println(hlog, "after second phase = ", clock() * 1. / CLOCKS_PER_SEC);
total_time = (clock() - total_start) * 1. / CLOCKS_PER_SEC;
}
bool is_end_reducible(const seq& s1) {
for(auto r: rules)
if(isize(s1) >= isize(r.first) && sub(s1, isize(s1)-isize(r.first), isize(r.first)) == r.first)
return true;
return false;
}
int count_tree_states() {
set<seq> all_prefixes;
for(auto r: rules) {
auto left = r.first;
for(int i=0; i<isize(left); i++) {
seq prefix = sub(left, 0, i);
seq s = prefix;
s.emplace_back(gen_symbol(left[i].eid, 120));
if(!is_end_reducible(s))
all_prefixes.emplace(prefix);
}
}
all_prefixes.erase(seq{});
for(auto x: all_prefixes)
println(hlog, x);
return isize(all_prefixes) + isize(arb::current.shapes);
}
bool forked = false;
int max_children = 7;
void test_all(string setname) {
floorshapes_level = 1;
vector<string> filenames;
std::ifstream is("devmods/rulegen-tests/"+setname+".lst");
string s;
while(getline(is, s)) {
while(s != "" && s[0] == ' ') s = s.substr(1);
if(s != "" && s[0] != '#') filenames.push_back(s);
}
println(hlog, "CSV;kbres;Tp;kbrules;tree;maxlen;file");
int children = 0;
sem_t sem;
if(forked) sem_init(&sem, true, 1);
fflush(stdout);
for(const string& s: filenames) {
if(forked) {
int pid;
if(children >= max_children) {
wait(&pid); children--;
}
if((pid = fork())) children++;
else goto doit;
continue;
}
doit:
if(rulegen::set_general(s)) {
if(!arb::in()) try {
arb::convert::convert();
arb::convert::activate();
}
catch(hr_exception& e) {
println(hlog, "CSV; failed to convert ", s);
return;
}
// println(hlog, "will call test_knuth_bendix");
test_knuth_bendix();
// println(hlog, "after test_knuth_bendix");
if(forked) sem_wait(&sem);
println(hlog, "CSV;",kb_result,";", total_time, ";", isize(rules), ";", kb_result == 0 ? count_tree_states() : 0, ";", max_rule_length, ";", s);
if(forked) sem_post(&sem);
fflush(stdout);
}
if(forked) exit(0);
}
while(children) { int pid; wait(&pid); children--; }
if(forked) sem_destroy(&sem);
}
void kb_merge() {
vector<string> filenames;
std::ifstream is("devmods/rulegen-tests/all.lst");
string s;
while(getline(is, s)) {
while(s != "" && s[0] == ' ') s = s.substr(1);
if(s != "" && s[0] != '#') filenames.push_back(s);
}
map<string, string> cas;
if(std::ifstream is = std::ifstream("devmods/rulegen-tests/kbmerge.txt")) {;
while(getline(is, s)) {
int i = 0, j = 0;
for(char c: s) { i++; if(c == ';') j = i; }
string fname = s.substr(j);
if(cas.count(fname) && cas[fname].substr(0,5) != s.substr(0,5)) {
// println(hlog, "repetition:\n", cas[fname], "\n", s);
s = min(s, cas[fname]);
}
cas[fname] = s;
// println(hlog, "assigned to ", fname, ": ", s);
}
}
println(hlog, "CSV;kbres;Tp;kbrules;tree;maxlen;file");
for(auto ss: filenames)
if(!cas.count(ss))
println(hlog, "MISSING: ", ss);
else
println(hlog, cas[ss]);
}
map<cell*, seq> first_seq_last;
map<cell*, seq> first_seq;
map<cell*, int> qty;
void view_kb_tree(const shiftmatrix& V, cellwalker cw, seq s) {
qty[cw.at]++;
if(cw.at == lmouseover) println(hlog, s, " ; ", cw.spin);
for(int i=0; i<cw.at->type; i++) {
seq s1 = s;
s1.emplace_back(gen_symbol(shvid(cw.at), i));
if(is_end_reducible(s1)) continue;
auto cw1 = cw;
cw1 += i;
int is = cw1.spin;
cw1 += wstep;
if(!gmatrix.count(cw1.at)) continue;
transmatrix A = currentmap->adj(cw.at, is);
int eid = shvid(cw1.at);
int clen = arb::current.shapes[eid].cycle_length;
cw1 -= cw1.spin % clen;
// queueline(V * get_corner_position(cw.at, cw.spin, 6), V * A * get_corner_position(cw1.at, cw1.spin, 6), 0xC00000FF);
seq s2 = s1;
s2.emplace_back(gen_symbol(shvid(cw1.at), 120));
if(!is_end_reducible(s2)) { // first_seq_last[cw1.at] == s1) {
if(cw1.at == lmouseover) println(hlog, "is not end_reducible: ", s2);
vid.linewidth *= 3;
queueline(V * C0, V * mid(tC0(A), mid(C0, tC0(A))), 0xFFC0C0FF, 3);
vid.linewidth /= 3;
}
if(!first_seq.count(cw1.at))
first_seq[cw1.at] = s1;
else
first_seq[cw1.at] = min(s1, first_seq[cw1.at]);
view_kb_tree(V*A, cw1, s1);
}
}
void kb_marker() {
qty.clear();
first_seq_last = std::move(first_seq);
first_seq.clear();
view_kb_tree(gmatrix[cwt.at], cellwalker(cwt.at, 0), {});
for(auto p: qty)
queuestr(gmatrix[p.first], .5, its(p.second), 0xFFFFFFFF, 1);
}
void add_kb_view() {
addHook(hooks_markers, 100, kb_marker);
}
int u = arg::add3("-kb", [] {
test_knuth_bendix();
println(hlog, "result: ", kb_result, " rules: ", isize(rules));
println(hlog, "final rules:");
for(auto s: rules) println(hlog, s.first, " => ", s.second);
if(kb_result == 0) println(hlog, "tree states: ", count_tree_states());
})
+ arg::add3("-kb-test-all", [] { arg::shift(); test_all(arg::args()); })
+ arg::add3("-kb-forked", [] { arg::shift(); max_children = arg::argi(); forked = max_children; })
+ arg::add3("-kb-rev", [] { arg::shift(); reversed = arg::argi(); })
+ arg::add3("-kb-view", add_kb_view)
+ arg::add3("-kb-merge", kb_merge);
}

View File

@ -0,0 +1,633 @@
#include "../hyper.h"
// A tool to create smooth manually controlled movement animations in 3D geometries.
// Press 'f' to start controlling
// 'qweasdzxc' will move the camera and additionally rotate the view a bit (except 's')
// 'b' goes back 1 frame, 'e' undoes 30 frames
// 'r' starts recording
// 1234 change movement speed (see console for details)
// 67890 change rotation speed (see console for details)
namespace hr {
bool saving_positions;
bool smooth_aim = true;
int next_pos_tick;
struct frame {
transmatrix V;
transmatrix lp;
transmatrix msm;
cell *co;
int steps_to_change;
int step_smoothing;
ld stepdist;
ld stepang;
};
vector<frame> saved;
int collection;
bool recording;
bool keys_on = false;
ld stepdist = 0.02;
ld stepang = 0.01;
EX int step_smoothing = 1;
EX int steps_to_change;
void move_camera1(transmatrix T);
void recall(frame& f = saved.back()) {
View = f.V;
current_display->local_perspective = f.lp;
stretch::mstretch_matrix = f.msm;
centerover = f.co;
steps_to_change = f.steps_to_change;
step_smoothing = f.step_smoothing;
stepdist = f.stepdist;
stepang = f.stepang;
playermoved = false;
}
frame saveframe() {
frame f;
f.V = View;
f.lp = current_display->local_perspective;
f.msm = stretch::mstretch_matrix;
f.co = centerover;
f.steps_to_change = steps_to_change;
f.step_smoothing = step_smoothing;
f.stepdist = stepdist;
f.stepang = stepang;
playermoved = false;
return f;
}
void trailer_frame() {
// if(saving_positions || !isize(saved))
if(!recording && keys_on) queuestr(current_display->xcenter, current_display->ycenter, 0, 16, "+", 0xFFFFFFFF);
if(!recording && keys_on) queuestr(current_display->xcenter/2, current_display->ycenter, 0, 16, "+", 0xFFFFFFFF);
if(!recording && keys_on) queuestr(current_display->xcenter*3/2, current_display->ycenter, 0, 16, "+", 0xFFFFFFFF);
if(!recording && keys_on) queuestr(mousex, mousey, 0, 16, "+", 0xFFFFFFFF);
}
ld next_stepdist = stepdist;
ld next_stepang = stepang;
void apply_steps_to_change() {
if(steps_to_change) {
stepang = stepang + (next_stepang-stepang) / steps_to_change;
stepdist = stepdist + (next_stepdist-stepdist) / steps_to_change;
steps_to_change--;
}
}
bool trailer_turn(int delta) {
if(saving_positions) {
collection += delta * 60;
while(collection > 1000) {
apply_steps_to_change();
collection -= 1000;
View = cpush(2, -stepdist) * View;
if(smooth_aim) {
ld dx = (mousex - current_display->xcenter) * stepang / -50.;
ld dy = (mousey - current_display->ycenter) * stepang / -50.;
View = cspin(0, 2, dx) * cspin(1, 2, dy) * View;
}
optimizeview();
saved.emplace_back(saveframe());
if(isize(saved) % 100 == 0)
println(hlog, "frames = ", isize(saved));
}
}
return true;
}
ld spin_distance = 0;
bool spinning_around;
bool fixed_orientation;
transmatrix orientation_to_fix;
string videofile;
void move_camera1(transmatrix T) {
// println(hlog, "rayfix: saving frame ", isize(saved));
// optimizeview();
// ray::cast();
optimizeview();
saved.emplace_back(saveframe());
if(spinning_around) {
for(int s=0; s<100; s++)
shift_view(ztangent(-spin_distance/100));
rotate_view(T);
for(int s=0; s<100; s++)
shift_view(ztangent(spin_distance/100));
}
else {
shift_view(ztangent(-stepdist));
spin_distance += stepdist;
rotate_view(T);
}
if(fixed_orientation) {
println(hlog, "cat ", inverse(View) * C0);
transmatrix iView = inverse(View);
iView = nisot::translate(iView * C0) * orientation_to_fix;
View = inverse(iView);
println(hlog, "cat ", inverse(View) * C0);
}
}
bool move_camera(transmatrix T) {
for(int it=0; it<5; it++)
move_camera1(T);
println(hlog, "frames = ", isize(saved), " distance = ", spin_distance);
playermoved = false;
return true;
}
template<class Type> bool move_camera_smoothchange(const Type& T) {
for(int it=0; it<5; it++) {
println(hlog, "steps_to_change = ", steps_to_change, " stepdist = ", stepdist);
apply_steps_to_change();
move_camera1(T());
}
println(hlog, "frames = ", isize(saved), " distance = ", spin_distance);
playermoved = false;
return true;
}
bool spin_around(transmatrix T) {
for(int it=0; it<5; it++) {
}
println(hlog, "frames = ", isize(saved), " spinning");
playermoved = false;
return true;
}
namespace sn { pair<heptagon*,heptagon*> getcoord(heptagon *h); }
bignum bdiff(heptagon *h1, heptagon *h2) {
if(h1 == h2) return 0;
auto p = bdiff(h1->move(3), h2->move(3));
int d = h1->c.spin(3) - h2->c.spin(3);
println(hlog, "d=", d, " p = ", p.get_str(10000));
return p + p + bignum(d);
}
#define BASE 10
/*
void o_addmul(bignum& b0, const bignum& b, int factor) {
int K = isize(b.digits);
if(K > isize(b0.digits)) b0.digits.resize(K);
int carry = 0;
for(int i=0; ; i++) {
bool cnt = (i<K || (carry > 0 && carry < -1) || (carry == -1 && i < isize(b0.digits)));
println(hlog, "cnt = ", cnt, " carry = ", carry
if(!cnt) break;
println(hlog, "i=", i, " carry start=", carry);
if(i >= isize(b0.digits)) b0.digits.push_back(0);
long long l = b0.digits[i];
l += carry;
if(i < K) l += b.digits[i] * factor;
carry = 0;
if(l >= BASE) carry = l / BASE;
if(l < 0) carry = -(BASE-1-l) / BASE;
l -= carry * BASE;
b0.digits[i] = l;
println(hlog, "carry=", carry);
}
println(hlog, "carry end=", carry);
if(carry < 0) b0.digits.back() -= BASE;
while(isize(b0.digits) && b0.digits.back() == 0) b0.digits.pop_back();
} */
void get_b4_distance() {
heptagon *h1 = currentmap->gamestart()->master;
heptagon *h2 = centerover->master;
if(h1->distance != h2->distance)
println(hlog, "Z difference: ", h2->distance - h1->distance);
else if(sn::in()) {
auto c1 = sn::getcoord(h1);
auto c2 = sn::getcoord(h2);
println(hlog, "X difference: ", bdiff(c1.first, c2.first).get_str(10000));
println(hlog, "Y difference: ", bdiff(c1.second, c2.second).get_str(10000));
println(hlog, "X difference> ", bdiff(c2.first, c1.first).get_str(10000));
println(hlog, "Y difference> ", bdiff(c2.second, c1.second).get_str(10000));
}
}
void load_animation(string fname) {
fhstream f(fname, "r");
int siz;
f.read<int>(siz);
saved.resize(siz);
for(int i=0; i<isize(saved); i++) {
auto& s = saved[i];
hread_raw(f, s.V);
hread_raw(f, s.lp);
int tmp = 0; hread_raw(f, tmp);
if(cryst) {
crystal::coord co;
hread_raw(f, co);
s.co = crystal::get_heptagon_at(co)->c7;
}
else
if(nil) {
nilv::mvec co;
hread_raw(f, co);
s.co = nilv::get_heptagon_at(co)->c7;
}
else if(bounded) {
auto ac = currentmap->allcells();
int i;
hread_raw(f, i);
s.co = ac[i];
}
else s.co = cwt.at;
}
println(hlog, "loaded animation of ", isize(saved), " frames");
recall();
}
EX transmatrix spintox_good(const hyperpoint& H) {
if(GDIM == 2 || prod) return spintox(H);
double v = -atan2(H[2], H[1]);
return cspin(2, 1, -v) * spintoc(cspin(2, 1, v) * H, 0, 1) *cspin(2, 1, v);
// cspin(2, 1, v) * spintoc(cspin(2, 1, -v) * H, 0, 1);
}
void denan() {
for(int i=1; i<isize(saved)-1; i++) {
auto& s = saved[i];
if(isnan(s.V[0][0])) {
println(hlog, "nan at ", i, " @ ", s.co);
saved[i] = saved[i-1];
}
}
}
transmatrix relm(cell *a, cell *b) {
forCellIdEx(c, id, b) if(c == a) return currentmap->adj(b, id);
forCellIdEx(c, id, b)
forCellIdEx(d, id2, c) if(d == a) return currentmap->adj(b, id) * currentmap->adj(c, id2);
return currentmap->relative_matrix(a, b, C0);
}
void smoothen() {
ld total = 0;
for(int a=1; a<3; a++)
for(int i=1; i<isize(saved)-1; i++) if((a^i)&1) {
auto& s = saved[i];
auto& sl = saved[i-1];
auto& sn = saved[i+1];
forCellCM(c, s.co);
hyperpoint hl = s.V * relm(sl.co, s.co) * inverse(sl.V) * C0;
hyperpoint hn = s.V * relm(sl.co, s.co) * inverse(sn.V) * C0;
hyperpoint hm = mid(hl, hn);
if(isnan(hm[0])) {
println(hlog, "Vl = ", sl.V);
println(hlog, "V = ", s.V);
println(hlog, "Vn = ", sn.V);
println(hlog, "cells ", sl.co, s.co, sn.co);
println(hlog, "crl= ", relm(sl.co, s.co));
println(hlog, "crm= ", relm(sn.co, s.co));
continue;
}
total += hdist0(hm);
s.V = gpushxto0(hm) * s.V;
auto xhn = gpushxto0(hm) * hn;
transmatrix T = cspin(0, 2, -M_PI/2) * spintox_good(cspin(0, 2, M_PI/2) * xhn) * cspin(0, 2, M_PI/2);
s.V = T * s.V;
// println(hlog, hn, " -> ", T * xhn);
}
println(hlog, "total = ", total);
}
string mrec_file = "devmods/manual/%05d.png";
int mrec_fps = 60;
int mrec_first = 0, mrec_last = 999999;
int mrec_first_opt = 0, mrec_last_opt = 0;
void set_stepdist(ld x) {
println(hlog, "stepdist = ", x);
next_stepdist = x;
steps_to_change = step_smoothing;
}
void set_stepang(ld x) {
println(hlog, "stepang = ", x);
next_stepang = x;
steps_to_change = step_smoothing;
}
void do_recording() {
recording = true;
if(mouseaim_sensitivity) {
mouseaim_sensitivity = 0;
println(hlog, "disabled mouseaim");
return;
}
if(musicvolume) {
println(hlog, "disabled music");
musicvolume = 0;
Mix_VolumeMusic(0);
return;
}
dynamicval dp(arg::pos, arg::pos);
dynamicval vs(vid, vid);
for(arg::pos=mrec_first_opt; arg::pos < mrec_last_opt; arg::pos++) {
int r = callhandlers(1, hooks_args);
switch (r) {
case 0: arg::lshift(); break;
case 1:
printf("Unknown option: %s\n", arg::argcs()); break;
case 2:
printf("Error\n"); break;
}
}
println(hlog, "starting recording");
shot::take("anim/start.png");
saving_positions = false;
// vid.cells_drawn_limit = 1000000;
int i = 0;
system("mkdir -p devmods/manual/");
auto f = [&] {
for(auto& p: saved) {
recall(p);
println(hlog, "rayfix: render ", i);
ticks = i * 1000 / mrec_fps;
if(i >= mrec_first && i < mrec_last) {
string s = hr::format(mrec_file.c_str(), i);
println(hlog, "recording frame ", i, "/", isize(saved), " to ", s);
shot::take(s);
}
else
println(hlog, "skipping frame ", i);
i++;
}
return true;
};
if(videofile != "") {
anims::record_video(videofile, f);
}
else
f();
// lasti = i;
recording = false;
}
void show_man_options() {
gamescreen(2);
dialog::init("manual animation");
dialog::addSelItem("stepdist", fts(next_stepdist), 'd');
dialog::add_action([] {
dialog::editNumber(next_stepdist, 0, 1, 0.001, 0.02, "stepdist", "stepdist");
dialog::reaction = [] { set_stepdist(next_stepdist); };
});
dialog::addSelItem("stepang", fts(next_stepang), 'a');
dialog::add_action([] {
dialog::editNumber(next_stepang, 0, 1, 0.001, 0.02, "stepang", "stepang");
dialog::reaction = [] { set_stepang(next_stepang); };
});
dialog::addItem("b4 distance", 'b');
dialog::add_action(get_b4_distance);
dialog::addSelItem("step smoothing", its(step_smoothing), 's');
dialog::add_action([] {
dialog::editNumber(step_smoothing, 1, 30, 1, 1, "step_smoothing", "step_smoothing");
dialog::reaction = [] { steps_to_change = step_smoothing; };
});
dialog::addItem("save path", '[');
dialog::add_action([] {
fhstream f("devmods/manan-record.mar", "w");
f.write<int>(isize(saved));
for(int i=0; i<isize(saved); i++) {
auto& s = saved[i];
hwrite_raw(f, s.V);
hwrite_raw(f, s.lp);
int tmp = 0; hwrite_raw(f, tmp);
if(cryst) {
auto at = crystal::get_coord(s.co->master);
hwrite_raw(f, at);
}
else if(nil) {
auto at = nilv::get_coord(s.co->master);
hwrite_raw(f, at);
}
else if(bounded) {
auto ac = currentmap->allcells();
for(int i=0; i<isize(ac); i++) if(ac[i] == s.co)
hwrite_raw(f, i);
}
}
println(hlog, "saved animation of ", isize(saved), " frames");
});
dialog::addItem("load path", ']');
dialog::add_action([] {
load_animation("devmods/manan-record.mar");
});
dialog::addItem("do record", 'r');
dialog::add_action(do_recording);
dialog::addItem("clear", 'c');
dialog::add_action([] { saved.clear(); });
dialog::display();
}
bool trailer_handleKey(int sym, int uni) {
if(sym == 'f' && (cmode & sm::NORMAL)) {
keys_on = !keys_on;
println(hlog, "keys_on = ", keys_on);
return true;
}
if(keys_on && (cmode & sm::NORMAL)) {
if(sym == ',') { vid.fov *= 1.1; mouseaim_sensitivity *= 1.1; println(hlog, "fov = ", vid.fov, " sens = ", mouseaim_sensitivity); }
if(sym == '.') { vid.fov /= 1.1; mouseaim_sensitivity /= 1.1; println(hlog, "fov = ", vid.fov, " sens = ", mouseaim_sensitivity); }
if(sym == 't') {
if(!saved.empty()) {
println(hlog, "frames = ", isize(saved));
saved.pop_back();
}
if(!saved.empty()) {
recall();
}
return true;
}
/* if(sym == 'e') {
dialog::editNumber(stepdist, 0, 1, 0.1, 0.1, "", "");
dialog::scaleLog();
} */
if(sym == 's') return move_camera_smoothchange([&] { return Id; });
if(sym == 'a') return move_camera_smoothchange([&] { return cspin(0, 2, stepang); });
if(sym == 'd') return move_camera_smoothchange([&] { return cspin(0, 2, -stepang); });
if(sym == 'q') return move_camera_smoothchange([&] { return cspin(0, 2, stepang) * cspin(1, 2, stepang); });
if(sym == 'w') return move_camera_smoothchange([&] { return cspin(1, 2, stepang); });
if(sym == 'e') return move_camera_smoothchange([&] { return cspin(0, 2, -stepang) * cspin(1, 2, stepang); });
if(sym == 'z') return move_camera_smoothchange([&] { return cspin(0, 2, stepang) * cspin(1, 2, -stepang); });
if(sym == 'x') return move_camera_smoothchange([&] { return cspin(1, 2, -stepang); });
if(sym == 'c') return move_camera_smoothchange([&] { return cspin(0, 2, -stepang) * cspin(1, 2, -stepang); });
if(sym == '1') { set_stepdist(0); return true; }
if(sym == '2') { set_stepdist(0.005); return true; }
if(sym == '3') { set_stepdist(0.02); return true; }
if(sym == '5') { set_stepang(0); return true; }
if(sym == '6') { set_stepang(0.001); return true; }
if(sym == '7') { set_stepang(0.003); return true; }
if(sym == '8') { set_stepang(0.01); return true; }
if(sym == '9') { set_stepang(0.03); return true; }
if(sym == '0') { set_stepang(0.1); return true; }
if(sym == 'o') {
println(hlog, "spin_distance = ", spin_distance, " reset to 0, i to spin");
spin_distance = 0;
return true;
}
if(sym == 'j') {
fixed_orientation = !fixed_orientation;
orientation_to_fix = inverse(inverse(nisot::translate(inverse(View) * C0)) * inverse(View));
transmatrix iView = inverse(View);
orientation_to_fix = inverse(nisot::translate(iView * C0)) * iView;
println(hlog, "fixed_orientation = ", orientation_to_fix);
return true;
}
if(sym == 'i') {
spinning_around = !spinning_around;
if(spinning_around) println(hlog, "spinning mode");
else println(hlog, "tank mode");
}
if(sym == SDLK_F4) {
saving_positions = !saving_positions;
next_pos_tick = ticks;
println(hlog, "saving_positions = ", saving_positions);
mouseaim_sensitivity = 0;
return true;
}
if(sym == 'b' && isize(saved) > 1) {
saved.pop_back();
println(hlog, "back to ", isize(saved), " frames");
recall();
return true;
}
if(sym == 'u') {
for(int i=0; i<30; i++) if(isize(saved)) saved.pop_back();
println(hlog, "back to ", isize(saved), " frames");
if(isize(saved)) recall();
return true;
}
if(sym == 'r') pushScreen(show_man_options);
}
return false;
}
int ma_readArgs() {
using namespace arg;
if(0) ;
else if(argis("-loada")) {
start_game();
shift(); load_animation(args());
}
else if(argis("-smoothen")) {
PHASEFROM(2);
shift(); int nsm = argi();
denan();
for(int i=0; i<nsm; i++) smoothen();
}
else if(argis("-mrecf")) {
PHASEFROM(2);
shift(); mrec_first = argi();
}
else if(argis("-mrecl")) {
PHASEFROM(2);
shift(); mrec_last = argi();
}
else if(argis("-mrec-to")) {
PHASEFROM(2);
shift(); mrec_file = args();
}
else if(argis("-mrecv")) {
PHASEFROM(2);
shift(); videofile = args();
}
else if(argis("-mrec-fps")) {
PHASEFROM(2);
shift(); mrec_fps = argi();
}
else if(argis("-shot-half")) {
shot::shotx /= 2;
shot::shoty /= 2;
}
else if(argis("-mrec-opt")) {
PHASEFROM(2);
shift(); string cap = args();
shift(); mrec_first_opt = pos;
while(args() != cap) shift();
mrec_last_opt = pos;
}
else return 1;
return 0;
}
auto mahook =
addHook(hooks_handleKey, 100, trailer_handleKey)
+ addHook(hooks_drawmap, 100, trailer_frame)
+ addHook(shmup::hooks_turn, 100, trailer_turn)
+ addHook(hooks_args, 100, ma_readArgs)
+ 0;
}

39
devmods/musictable.cpp Normal file
View File

@ -0,0 +1,39 @@
#include "../hyper.h"
// a tool to generate the music tables for Android and iOS
namespace hr {
string crop(string s) {
string res;
for(char c: s) if(c == '-') res = ""; else res += c;
return res;
}
string cropios(string s) {
string res;
for(char c: s) if(c == '.') return res; else res += c;
return res;
}
auto aec =
arg::add3("-music-ios", [] {
for(int i=0; i<landtypes; i++)
if(musfname[i] == "") printf(" NULL,\n");
else printf(" @\"%s\", // %2d : %s\n", cropios(musfname[i]).c_str(), i, dnameof(eLand(i)).c_str());
})
+ arg::add3("-music-android", [] {
for(int i=0; i<landtypes; i++)
if(musfname[i] != "") {
string s = musfname[i].substr(4, isize(musfname[i])-8);
printf(" if(curland == %2d) id = R.raw.%s; // %s\n", i, crop(s).c_str(), dnameof(eLand(i)).c_str());
}
})
+ arg::add3("-music-license", [] {
printf("musiclicense = \"");
for(int i=0; i<isize(musiclicense); i++)
if(musiclicense[i] == '\n') printf("\\n\"\n\""); else printf("%c", musiclicense[i]);
printf("\";\n");
});
}

73
devmods/reps/counter.cpp Normal file
View File

@ -0,0 +1,73 @@
// a float-like type to count operations
namespace reps {
std::map<std::string, int> counts;
#define C(x) {}
std::array<int, 16> cbc;
constexpr int cbcAdd = 1;
constexpr int cbcMul = 2;
constexpr int cbcDiv = 3;
constexpr int cbcTrig = 4;
struct countfloat {
ld x;
countfloat() {}
explicit countfloat(ld _x) : x(_x) {}
explicit operator ld() { return x; }
operator bool() { return x != 0; }
countfloat operator +(countfloat a) const { C("plus"); cbc[1]++; return countfloat(x + a.x); }
countfloat operator -(countfloat a) const { C("plus"); cbc[1]++; return countfloat(x + a.x); }
countfloat operator -() const { return countfloat(-x); }
countfloat operator +() const { return countfloat(+x); }
countfloat operator *(countfloat a) const { C("mul"); cbc[2]++; return countfloat(x * a.x); }
countfloat operator /(countfloat a) const { C("div"); cbc[3]++; return countfloat(x / a.x); }
bool operator <(countfloat a) const { return x < a.x; }
bool operator >(countfloat a) const { return x > a.x; }
bool operator <=(countfloat a) const { return x <= a.x; }
bool operator >=(countfloat a) const { return x >= a.x; }
countfloat& operator +=(countfloat a) { C("plus"); cbc[1]++; x += a.x; return self; }
countfloat& operator -=(countfloat a) { C("plus"); cbc[1]++; x -= a.x; return self; }
countfloat& operator *=(countfloat a) { C("mul"); cbc[2]++; x *= a.x; return self; }
countfloat& operator /=(countfloat a) { C("mul"); cbc[2]++; x /= a.x; return self; }
countfloat& operator *=(int a) { if(a != 1 && a != -1) C("mul"+hr::its(a)); x *= a; return self; }
countfloat& operator /=(int a) { if(a != 1 && a != -1) C("div"+hr::its(a)); x /= a; return self; }
friend countfloat sin(countfloat a) { cbc[4]++; C("sin"); return countfloat(sin(a.x)); }
friend countfloat cos(countfloat a) { cbc[4]++; C("cos"); return countfloat(cos(a.x)); }
friend countfloat tan(countfloat a) { cbc[4]++; C("tan"); return countfloat(tan(a.x)); }
friend countfloat sinh(countfloat a) { cbc[4]++; C("sinh"); return countfloat(sinh(a.x)); }
friend countfloat cosh(countfloat a) { cbc[4]++; C("cosh"); return countfloat(cosh(a.x)); }
friend countfloat tanh(countfloat a) { cbc[4]++; C("cosh"); return countfloat(tanh(a.x)); }
friend countfloat asinh(countfloat a) { cbc[4]++; C("asinh"); return countfloat(asinh(a.x)); }
friend countfloat acosh(countfloat a) { cbc[4]++; C("acosh"); return countfloat(acosh(a.x)); }
friend countfloat acos(countfloat a) { cbc[4]++; C("acos"); return countfloat(acos(a.x)); }
friend countfloat exp(countfloat a) { cbc[4]++; C("exp"); return countfloat(exp(a.x)); }
friend countfloat log(countfloat a) { cbc[4]++; C("log"); return countfloat(log(a.x)); }
friend countfloat sqrt(countfloat a) { cbc[4]++; C("sqrt"); return countfloat(sqrt(a.x)); }
friend countfloat atan2(countfloat a, countfloat b) { cbc[4]++; C("atan"); return countfloat(atan2(a.x, b.x)); }
friend countfloat pow(countfloat a, ld b) { cbc[4]++; C("pow" + hr::fts(b)); return countfloat(pow(a.x, b)); }
friend countfloat abs(countfloat a) { return countfloat(abs(a.x)); }
countfloat operator *(int a) const { if(a != 1 && a != -1) C("mul" + hr::its(a)); return countfloat(x * a); }
countfloat operator /(int a) const { if(a != 1 && a != -1) C("div" + hr::its(a)); return countfloat(x / a); }
friend bool isinf(countfloat a) { return isinf(a.x); }
friend bool isnan(countfloat a) { return isnan(a.x); }
};
template<> countfloat get_deg<countfloat> (int deg) { return countfloat( M_PI * deg / 180 ); }
}
namespace hr {
void print(hr::hstream& hs, ::reps::countfloat b) {
print(hs, b.x);
}
}

View File

@ -0,0 +1,330 @@
namespace reps {
TD struct mvector {
array<typename D::Number, D::Dim> values;
typename D::Number& operator [] (int i) { return values[i]; }
const typename D::Number& operator [] (int i) const { return values[i]; }
mvector operator + (const mvector& M) const {
mvector result;
for(int i=0; i<D::Dim; i++) result[i] = self[i] + M[i];
return result;
}
mvector operator - (const mvector& M) const {
mvector result;
for(int i=0; i<D::Dim; i++) result[i] = self[i] - M[i];
return result;
}
mvector operator * (const typename D::Number& x) const {
mvector result;
for(int i=0; i<D::Dim; i++) result[i] = self[i] * x;
return result;
}
mvector operator / (const typename D::Number& x) const {
mvector result;
for(int i=0; i<D::Dim; i++) result[i] = self[i] / x;
return result;
}
mvector operator * (int x) const {
mvector result;
for(int i=0; i<D::Dim; i++) result[i] = self[i] * x;
return result;
}
mvector operator / (int x) const {
mvector result;
for(int i=0; i<D::Dim; i++) result[i] = self[i] / x;
return result;
}
};
TD struct matrix {
array<array<typename D::Number, D::Dim>, D::Dim> values;
array<typename D::Number, D::Dim>& operator [] (int i) { return values[i]; }
const array<typename D::Number, D::Dim>& operator [] (int i) const { return values[i]; }
matrix operator * (const matrix& M) const {
matrix result;
for(int i=0; i<D::Dim; i++)
for(int k=0; k<D::Dim; k++) {
result[i][k] = typename D::Number(0);
for(int j=0; j<D::Dim; j++) result[i][k] += self[i][j] * M[j][k];
}
return result;
}
mvector<D> operator * (const mvector<D>& V) const {
mvector<D> result;
for(int i=0; i<D::Dim; i++) {
result[i] = typename D::Number(0);
for(int j=0; j<D::Dim; j++) result[i] += self[i][j] * V[j];
}
return result;
}
matrix operator * (const typename D::Number& x) const {
matrix result;
for(int i=0; i<D::Dim; i++) for(int j=0; j<D::Dim; j++) result[i][j] = self[i][j] * x;
return result;
}
matrix operator / (const typename D::Number& x) const {
matrix result;
for(int i=0; i<D::Dim; i++) for(int j=0; j<D::Dim; j++) result[i][j] = self[i][j] / x;
return result;
}
matrix operator * (int x) const {
matrix result;
for(int i=0; i<D::Dim; i++) for(int j=0; j<D::Dim; j++) result[i][j] = self[i][j] * x;
return result;
}
matrix operator / (int x) const {
matrix result;
for(int i=0; i<D::Dim; i++) for(int j=0; j<D::Dim; j++) result[i][j] = self[i][j] / x;
return result;
}
};
TD constexpr mvector<D> zero_vector() {
mvector<D> result;
for(int i=0; i<D::Dim; i++) result[i] = typename D::Number(0);
return result;
}
TD constexpr mvector<D> unit_vector(int id) {
mvector<D> result;
for(int i=0; i<D::Dim; i++) result[i] = typename D::Number(0);
result[id] = typename D::Number(1);
return result;
}
TD struct multivector_data {
using Number = typename D::Number;
static constexpr int Dim = 1<<D::Dim;
static constexpr int Flipped = -1;
};
TD using multivector = mvector<multivector_data<D>>;
TD std::string nz(const multivector<D>& a) {
constexpr int mdim = 1<<D::Dim;
using Number = typename D::Number;
hr::shstream str;
for(int i=0; i<mdim; i++) if(abs(a[i]) > Number(1e-10)) {
if(str.s != "") print(str, " ");
if(a[i] > Number(0)) print(str, "+");
print(str, a[i]);
for(int u=0; u<D::Dim; u++) if(i & (1<<u)) print(str, hr::s0 + char('A'+u));
}
if(str.s == "") return "0";
return str.s;
}
TD constexpr multivector<D> unit(const typename D::Number& a) {
auto res = zero_vector<multivector_data<D>>();
res[0] = a;
return res;
}
TD constexpr multivector<D> embed(const mvector<D>& a) {
auto res = zero_vector<multivector_data<D>>();
for(int i=0; i<D::Dim; i++) res[1<<i] = a[i];
return res;
}
TD constexpr mvector<D> unembed(const multivector<D>& a) {
mvector<D> res;
for(int i=0; i<D::Dim; i++) res[i] = a[1<<i];
return res;
}
/* for clarity */
using mvindex = int;
using signtype = int;
/* mvindex decimal 10 (binary 1010) corresponds to unit_vector(1) * unit_vector(3) */
TD constexpr signtype conj_sign(mvindex mvid) {
int b = __builtin_popcount(mvid);
b = b * (b+1) / 2;
return (b&1) ? -1 : 1;
}
TD constexpr signtype tra_sign(mvindex mvid) {
int b = __builtin_popcount(mvid);
b = b * (b-1) / 2;
return (b&1) ? -1 : 1;
}
TD constexpr signtype mul_sign(mvindex a, mvindex b) {
int flips = 0;
for(int i=0; i<D::Dim; i++) if(b & (1<<i)) {
// we will need to swap it with that many 1-bits of a
flips += __builtin_popcount(a & ((1<<i)-1));
if((i == D::Flipped) && (a & (1<<i))) flips++;
}
return (flips&1) ? -1 : 1;
}
TD struct all {
static constexpr bool check(mvindex a) { return true; }
static constexpr bool isflat(mvindex a) { return false; }
};
TD struct even {
static constexpr bool check(mvindex a) { return __builtin_popcount(a) % 2 == 0; }
static constexpr bool isflat(mvindex a) { return false; }
};
TD struct flat_even {
static constexpr bool check(mvindex a) { return __builtin_popcount(a) % 2 == 0; }
static constexpr bool isflat(mvindex a) { return nm == nmFlatten && a == 0; }
};
TD struct odd {
static constexpr bool check(mvindex a) { return __builtin_popcount(a) % 2 == 1; }
static constexpr bool isflat(mvindex a) { return false; }
};
TD struct units {
static constexpr bool check(mvindex a) { return a == 0; }
static constexpr bool isflat(mvindex a) { return false; }
};
TD struct rotational {
static constexpr bool check(mvindex a) { return __builtin_popcount(a) % 2 == 0 && a < (1<<(D::Dim-1)); }
static constexpr bool isflat(mvindex a) { return false; }
};
TD struct underling {
static constexpr bool check(mvindex a) { return __builtin_popcount(a) == 1; }
static constexpr bool isflat(mvindex a) { return false; }
};
TD struct flat_underling {
static constexpr bool check(mvindex a) { return __builtin_popcount(a) == 1; }
static constexpr bool isflat(mvindex a) { return nm == nmFlatten && a == 1<<(D::Dim-1); }
};
TD struct poincare {
static constexpr bool check(mvindex a) { return __builtin_popcount(a ^ (1<<(D::Dim-1))) == 1; }
static constexpr bool isflat(mvindex a) { return false; }
};
TD multivector<D> multimul(const multivector<D>& a, const multivector<D>& b) {
constexpr int mdim = 1<<D::Dim;
auto res = zero_vector<multivector_data<D>>();
for(mvindex i=0; i<mdim; i++)
for(mvindex j=0; j<mdim; j++) {
res[i^j] += a[i] * b[j] * mul_sign<D>(i, j);
}
return res;
}
template<class A, class B, class C, class D>
multivector<D> chkmul(const multivector<D>& a, const multivector<D>& b) {
constexpr int mdim = 1<<D::Dim;
auto res = zero_vector<multivector_data<D>>();
/* we initialize with 0s and then add stuff, so one add per component is not necessary */
for(mvindex i=0; i<mdim; i++) if(C::check(i)) cbc[cbcAdd]--;
for(mvindex i=0; i<mdim; i++) if(A::check(i))
for(mvindex j=0; j<mdim; j++) if(B::check(j) && C::check(i^j)) {
if(A::isflat(i))
res[i^j] += b[j] * mul_sign<D>(i, j);
else if(B::isflat(j))
res[i^j] += a[i] * mul_sign<D>(i, j);
else
res[i^j] += a[i] * b[j] * mul_sign<D>(i, j);
}
return res;
}
TD multivector<D> conjugate(const multivector<D>& a) {
constexpr int mdim = 1<<D::Dim;
auto res = a;
for(int i=0; i<mdim; i++) res[i] *= conj_sign<D>(i);
return res;
}
TD multivector<D> transpose(const multivector<D>& a) {
constexpr int mdim = 1<<D::Dim;
auto res = a;
for(int i=0; i<mdim; i++) res[i] *= tra_sign<D>(i);
return res;
}
template<class C, class D> multivector<D> apply_nm(multivector<D> a);
TD using poincare_rotation = std::pair<multivector<D>, multivector<D>>;
/** decompose o into the poincare part and the rotational component */
TD poincare_rotation<D> despin2(const multivector<D>& a) {
auto p = a;
for(int i=(1<<(D::Dim-1)); i<(1<<(D::Dim)); i++) p[i] = typename D::Number(0);
p = p * pow(chkmul<rotational<D>,rotational<D>,units<D>>(p, conjugate(p))[0], -0.5);
auto p1 = chkmul<even<D>,rotational<D>,poincare<D>>(a, conjugate(p));
return {apply_nm<poincare<D>, D>(p1), p};
}
/** remove the rotational component of a, leaving only the poincare part */
TD multivector<D> despin(const multivector<D>& a) {
auto p = a;
for(int i=(1<<(D::Dim-1)); i<(1<<(D::Dim)); i++) p[i] = typename D::Number(0);
auto p1 = chkmul<even<D>,rotational<D>,poincare<D>>(a, conjugate(p));
if(nm == nmInvariant) return p1 * pow(chkmul<rotational<D>,rotational<D>,units<D>>(p, conjugate(p))[0], -0.5);
return apply_nm<poincare<D>, D>(p1);
}
TD std::string nzv(const mvector<D>& a) { return "vector(" + nz(embed(a)) + ")"; }
TD std::string nzv(const matrix<D>& a) { return "<matrix>"; }
template<class C, class D>
typename D::Number sqnorm(multivector<D> a) {
using N = typename D::Number;
auto res = chkmul<C, C, units<D>>(a, conjugate(a))[0];
if(res <= N(0) || isinf(res) || isnan(res)) res = N(1);
return res;
}
TD typename D::Number sqnorm(mvector<D> a) {
using N = typename D::Number;
N res(0);
for(int i=0; i<D::Dim; i++) res += a[i] * a[i] * (i == D::Flipped ? -1:1);
if(D::Flipped != -1) res = -res;
if(nm ==nmWeak && (res <= N(0) || isinf(res) || isnan(res))) res = N(1);
return res;
}
/** if nm is set to nmFlatten or nmForced or nmBinary, apply the requested operation */
template<class C, class D> multivector<D> flatten(multivector<D> a) {
using N = typename D::Number;
auto divby = a[0]; a[0] = N(1);
for(int i=1; i<(1<<D::Dim); i++) if(C::check(i)) a[i] /= divby;
return a;
}
template<class C, class D>
multivector<D> apply_nm(multivector<D> a) {
if(nm == nmFlatten) return flatten<C>(a);
if(nm == nmForced || nm == nmWeak) return a * pow(sqnorm<C,D>(a), -0.5);
if(nm == nmBinary) { while(a[0] >= 2) { a = a / 2; } while(a[0] > 0 && a[0] < 0.5) { a = a * 2; } }
return a;
}
TD mvector<D> apply_nm(mvector<D> a) {
if(nm == nmFlatten) { cbc[cbcDiv]--; return a / a[D::Dim-1]; }
if(nm == nmForced || nm == nmWeak) return a * pow(sqnorm<D>(a), -0.5);
if(nm == nmBinary) { while(a[D::Dim-1] >= 2) { a = a / 2; } while(a[D::Dim-1] > 0 && a[D::Dim-1] < 0.5) { a = a * 2; } }
return a;
}
/** get b which is a coordinate of a, but in normalized form. That is, if a is normalized simply return b, otherwise, multiply b appropriately */
template<class C, class D, class E> E get_normalized(multivector<D> a, E b) {
if(nm != nmInvariant && nm != nmForced) return b * pow(sqnorm<C,D>(a), -0.5);
return b;
}
template<class D, class E> E get_normalized(mvector<D> a, E b) {
if(nm != nmInvariant && nm != nmForced) return b * pow(sqnorm<D>(a), -0.5);
return b;
}
}

View File

@ -0,0 +1,182 @@
/** representation based on the halfplane model; assumes Dim=3 */
namespace reps {
template<class F> struct sl2 : public array<F, 4> {
sl2(F a, F b, F c, F d) { self[0] = a; self[1] = b; self[2] = c; self[3] = d; }
sl2 operator * (const sl2& sec) const {
return sl2(
self[0] * sec[0] + self[1] * sec[2],
self[0] * sec[1] + self[1] * sec[3],
self[2] * sec[0] + self[3] * sec[2],
self[2] * sec[1] + self[3] * sec[3]
);
}
std::string print() {
return hr::lalign(0, "[", self[0], ",", self[1], ";", self[2], ",", self[3], "]");
}
};
TD sl2<typename D::Number> split_quaternion_to_sl2(const multivector<D>& h) {
auto h3 = h[0], h2 = h[1 | 2], h1 = h[1 | 4], h0 = h[2 | 4];
return sl2(h3 - h1, h2 + h0, -h2 + h0, h3 + h1);
}
TD multivector<D> sl2_to_split_quaternion(const sl2<typename D::Number>& e) {
auto h0 = (e[1] + e[2]) / 2;
auto h3 = (e[0] + e[3]) / 2;
auto h1 = (e[3] - e[0]) / 2;
auto h2 = (e[1] - e[2]) / 2;
auto res = zero_vector<multivector_data<D>>();
res[0] = h3; res[1 | 2] = h2; res[1 | 4] = h1; res[2 | 4] = h0;
return res;
}
template<class N> using sl2c = sl2<std::complex<N>>;
TD sl2c<typename D::Number> split_biquaternion_to_sl2c(const multivector<D>& h) {
using cn = std::complex<typename D::Number>;
return sl2(cn(h[0]-h[9], h[15]-h[6]), cn(h[3]+h[10], -h[5]-h[12]), cn(h[10]-h[3], h[12]-h[5]), cn(h[0]+h[9], h[6]+h[15]));
}
TD multivector<D> sl2c_to_split_biquaternion(const sl2c<typename D::Number>& e) {
auto res = zero_vector<multivector_data<D>>();
res[0] = +(real(e[0]) + real(e[3])) / 2;
res[3] = +(real(e[1]) - real(e[2])) / 2;
res[5] = -(imag(e[1]) + imag(e[2])) / 2;
res[6] = +(imag(e[3]) - imag(e[0])) / 2;
res[9] = +(real(e[3]) - real(e[0])) / 2;
res[10] = +(real(e[1]) + real(e[2])) / 2;
res[12] = +(imag(e[2]) - imag(e[1])) / 2;
res[15] = +(imag(e[0]) + imag(e[3])) / 2;
return res;
}
TD struct rep_halfplane {
using data = D;
using N = typename D::Number;
using point = std::complex<N>;
using isometry = sl2<N>;
static isometry cspin(int i, int j, N alpha) {
// return split_quaternion_to_sl2( rep_clifford<D>::cspin(i, j, alpha) );
if(i>j) std::swap(i, j), alpha = -alpha; alpha /= 2;
auto ca = cos(alpha), sa = sin(alpha);
return isometry(ca, -sa, sa, ca);
}
static isometry cspin90(int i, int j, N alpha) {
// return split_quaternion_to_sl2( rep_clifford<D>::cspin(i, j, alpha) );
auto ca = sqrt(N(2)), sa = sqrt(N(2));
if(i>j) std::swap(i, j), sa = -sa;
return isometry(ca, -sa, sa, ca);
}
static isometry lorentz(int i, int j, N alpha) {
// return split_quaternion_to_sl2( rep_clifford<D>::lorentz(i, j, alpha) );
if(i>j) std::swap(i, j); alpha /= 2;
if(i == 0) return isometry(exp(-alpha), N(0), N(0), exp(alpha));
if(i == 1) {
auto ca = cosh(alpha), sa = sinh(alpha);
return isometry(ca, sa, sa, ca);
}
throw hr::hr_exception("bad lorentz");
}
static isometry id() { return isometry(N(1),N(0),N(0),N(1)); };
static point center() { return point(N(0), N(1)); };
static point apply(const isometry& T, const point& x) {
return (T[0] * x + T[1] * 1) / (T[2] * x + T[3] * 1);
};
static isometry apply(const isometry& T, const isometry& U) { return T * U; };
static typename rep_clifford<D>::point to_poincare(const point& x) {
auto a = real(x), b = imag(x);
auto tmp = isometry(sqrt(b), a/sqrt(b), N(0), N(1)/sqrt(b));
auto sq = sl2_to_split_quaternion<D>(tmp);
// sq[0] = (sqrt(b) + 1/sqrt(b)) / 2;; sq[1 | 2] = a/sqrt(b)/2; sq[1 | 4] = (1/sqrt(b) - sqrt(b)) / 2; sq[2 | 4] = a/sqrt(b)/2;
sq = despin(sq);
return typename rep_clifford<D>::point({{sq}});
}
static isometry inverse(isometry T) { return isometry(T[3], -T[1], -T[2], T[0]); }
static isometry push(const point& p) { return split_quaternion_to_sl2<D>(to_poincare(p)[0]); }
static N dist0(const point& x) { return rep_clifford<D>::dist0(to_poincare(x)); }
static N angle(const point& x) { return rep_clifford<D>::angle(to_poincare(x)); }
static N get_coord(const point& x, int i) { return rep_clifford<D>::get_coord(to_poincare(x), i); }
// imag may be very small and still important, so do not use the default complex print
static std::string print(const point& x) { return hr::lalign(0, "{real:", real(x), " imag:", imag(x), "}"); }
static std::string print(const isometry& x) { return x.print(); }
};
TD struct rep_halfspace {
using data = D;
using N = typename D::Number;
struct point { std::complex<N> xy; N z; };
using isometry = sl2c<N>;
static isometry cspin(int i, int j, N alpha) {
return split_biquaternion_to_sl2c( rep_clifford<D>::cspin(i, j, alpha) );
}
static isometry cspin90(int i, int j) {
return split_biquaternion_to_sl2c( rep_clifford<D>::cspin90(i, j) );
}
static isometry lorentz(int i, int j, N alpha) {
return split_biquaternion_to_sl2c( rep_clifford<D>::lorentz(i, j, alpha) );
}
static isometry id() { return isometry(N(1),N(0),N(0),N(1)); }
static point center() { return point{ .xy = N(0), .z = N(1) }; }
static point apply(const isometry& T, const point& x) {
auto nom = T[0] * x.xy + T[1] * N(1);
auto nomz= T[0] * x.z;
auto den = T[2] * x.xy + T[3] * N(1);
auto denz= T[2] * x.z;
// D = den + denz * j
auto dnorm = std::norm(den) + std::norm(denz);
using std::conj;
// conj(D) = conj(den) - denz * j
// N / D = (nom + nomz * j) / (den + denz * j) =
// = (nom + nomz * j) * (conj(den) - denz * j) / dnorm
// auto rxy = (nom * conj(den) - nomz * j * denz * j);
// auto rz*j = (-nom * denz * j + nomz * j * conj(den))
// apply the formula: j * a = conj(a) * j
auto rxy = (nom * conj(den) + nomz * conj(denz));
auto rz = (nomz * den - nom * denz); // todo only real part
// println(hlog, "imag of rz = ", imag(rz));
return point { .xy = rxy / dnorm, .z = real(rz) / dnorm };
};
static isometry apply(const isometry& T, const isometry& U) { return T * U; };
static typename rep_clifford<D>::point to_poincare(const point& x) {
auto tmp = isometry(sqrt(x.z), x.xy/sqrt(x.z), N(0), N(1)/sqrt(x.z));
auto sq = sl2c_to_split_biquaternion<D>(tmp);
sq = despin(sq);
return typename rep_clifford<D>::point({{sq}});
}
static isometry inverse(isometry T) { return isometry(T[3], -T[1], -T[2], T[0]); }
static isometry push(const point& p) { return split_biquaternion_to_sl2c<D>(to_poincare(p)[0]); }
static N dist0(const point& x) { return rep_clifford<D>::dist0(to_poincare(x)); }
static N angle(const point& x) { return rep_clifford<D>::angle(to_poincare(x)); }
static N get_coord(const point& x, int i) { return rep_clifford<D>::get_coord(to_poincare(x), i); }
// imag may be very small and still important, so do not use the default complex print
static std::string print(const point& x) { return hr::lalign(0, "{x:", real(x.xy), " y:", imag(x.xy), " z:", x.z, "}"); }
static std::string print(const isometry& x) { return x.print(); }
};
template<class D> using rep_half = typename std::conditional<D::Dim==3, rep_halfplane<D>, rep_halfspace<D>>::type;
}

27
devmods/reps/rep-hr.cpp Normal file
View File

@ -0,0 +1,27 @@
namespace reps {
/* pull the HyperRogue representation; assumes HyperRogue geometry is set correctly, Number = ld, and Dim=3 or 4 */
TD struct rep_hr {
using data = D;
using N = typename D::Number;
using point = hr::hyperpoint;
using isometry = hr::transmatrix;
static constexpr isometry cspin(int i, int j, N alpha) { return hr::cspin(i, j, ld(alpha)); }
static constexpr isometry cspin90(int i, int j) { return hr::cspin90(i, j); }
static constexpr isometry lorentz(int i, int j, N alpha) { return hr::lorentz(i, j, ld(alpha)); }
static isometry id() { return hr::Id; };
static point center() { return D::Dim == 4 ? hr::C03 : hr::C02; };
static point apply(const isometry& T, const point& x) { return T * x; };
static isometry apply(const isometry& T, const isometry& U) { return T * U; };
static ld dist0(const point& x) { return hdist0(x); }
static ld angle(const point& x) { return atan2(x[1], x[0]); }
static ld get_coord(const point& x, int i) { return x[i]; }
static isometry inverse(const isometry& T) { return iso_inverse(T); }
static isometry push(const point& p) { return rgpushxto0(p); }
static std::string print(point p) { return hr::lalign(0, p); }
static std::string print(isometry p) { return hr::lalign(0, p); }
};
}

355
devmods/reps/rep-multi.cpp Normal file
View File

@ -0,0 +1,355 @@
namespace reps {
TD typename D::Number acos_auto(typename D::Number x) {
using N = typename D::Number;
if(hyperbolic) {
if(x < N(1)) return N(0);
return acosh(x);
}
if(sphere) {
if(x > N(1)) return N(0);
return acos(x);
}
throw hr::hr_exception("error");
}
/* use the linear representation, as in HyperRogue, but DO NOT apply nm, for comparison */
TD struct rep_linear_nn {
using data = D;
using point = mvector<data>;
using isometry = matrix<data>;
using N = typename D::Number;
static constexpr isometry id() {
matrix<D> result;
for(int i=0; i<D::Dim; i++)
for(int j=0; j<D::Dim; j++)
result[i][j] = N(i == j);
return result;
};
static constexpr isometry cspin(int i, int j, typename D::Number angle) {
auto res = id();
auto ca = cos(angle), sa = sin(angle);
res[i][i] = ca;
res[j][j] = ca;
res[i][j] = sa;
res[j][i] = -sa;
return res;
};
static constexpr isometry cspin90(int i, int j) {
auto res = id();
res[i][i] = 0;
res[j][j] = 0;
res[i][j] = 1;
res[j][i] = -1;
return res;
};
static constexpr isometry lorentz(int i, int j, typename D::Number angle) {
auto res = id();
auto ca = cosh(angle), sa = sinh(angle);
res[i][i] = ca;
res[j][j] = ca;
res[i][j] = sa;
res[j][i] = sa;
return res;
}
static constexpr point center() { return unit_vector<data>(D::Dim-1); }
static point apply(const isometry& T, const point& x) { return T * x; };
static isometry apply(const isometry& T, const isometry& U) { return T * U; };
static typename D::Number dist0(point x) {
return acos_auto<D> (x[D::Dim-1]);
}
static typename D::Number angle(const point& x) { return atan2(x[1], x[0]); }
static typename D::Number get_coord(point x, int i) { return x[i]; }
static isometry inverse(isometry T) {
for(int i=0; i<D::Dim; i++)
for(int j=0; j<i; j++) std::swap(T[i][j], T[j][i]);
if constexpr(D::Flipped != -1) {
for(int i=0; i<D::Dim-1; i++) T[i][D::Dim-1] = -T[i][D::Dim-1];
for(int i=0; i<D::Dim-1; i++) T[D::Dim-1][i] = -T[D::Dim-1][i];
}
return T;
}
static isometry push(const point& p) {
auto res = id();
// to do: for spherical!
N fac = N(1)/(p[D::Dim-1]+N(1));
for(int i=0; i<D::Dim-1; i++)
for(int j=0; j<D::Dim-1; j++)
res[i][j] += p[i] * p[j] * fac;
for(int d=0; d<D::Dim-1; d++)
res[d][D::Dim-1] = p[d],
res[D::Dim-1][d] = p[d];
res[D::Dim-1][D::Dim-1] = p[D::Dim-1];
return res;
}
static std::string print(point p) { return nzv(p); }
static std::string print(isometry p) { return nzv(p); }
};
TD mvector<D> get_column(matrix<D> a, int id) {
mvector<D> tmp;
for(int i=0; i<D::Dim; i++) tmp[i] = a[i][id];
return tmp;
}
TD typename D::Number inner(mvector<D> a, mvector<D> b) {
using N = typename D::Number;
N res(0);
for(int i=0; i<D::Dim; i++) res += a[i] * b[i] * (i==D::Flipped?-1:1);
if(isnan(res) || isinf(res)) return N(0);
return res;
}
TD void set_column(matrix<D>& a, int id, mvector<D> v) {
for(int i=0; i<D::Dim; i++) a[i][id] = v[i];
}
TD typename D::Number sqnorm(matrix<D> a) { return sqnorm<D>(get_column<D>(a, D::Dim-1)); }
bool fix_matrices;
TD matrix<D> apply_nm(matrix<D> a) {
using N = typename D::Number;
// normalize first
auto& lead = a[D::Dim-1][D::Dim-1];
if(nm == nmFlatten) a = a / lead, cbc[cbcDiv]--;
if(nm == nmForced || nm == nmWeak) a = a * pow(sqnorm<D>(a), -0.5);
if(nm == nmBinary) {
while(lead >= 2 && !isinf(lead)) { a = a / 2; } while(lead > 0 && lead < 0.5) { a = a * 2; }
}
// fixmatrix later
if(!fix_matrices) return a;
auto divby = (nm == nmBinary || nm == nmWeak || nm == nmCareless || nm == nmFlatten) ? sqnorm<D>(a) : N(1);
for(int i=D::Dim-2; i>=0; i--) {
auto ro = get_column(a, i);
auto last = get_column(a, D::Dim-1);
ro = ro + last * inner(ro, last) / divby;
for(int j=i+1; j<D::Dim-1; j++) {
auto next = get_column(a, j);
ro = ro - next * inner(ro, next) / divby;
}
auto in = inner(ro, ro);
if(in > N(0)) ro = ro * (pow(in*in, -.5) * divby);
set_column(a, i, ro);
}
return a;
}
/* use the linear representation, as in HyperRogue */
TD struct rep_linear {
using data = D;
using point = mvector<data>;
using isometry = matrix<data>;
using N = typename D::Number;
static constexpr isometry cspin(int i, int j, typename D::Number angle) {
return apply_nm<D>( rep_linear_nn<D>::cspin(i, j, angle) );
}
static constexpr isometry cspin90(int i, int j) {
return rep_linear_nn<D>::cspin90(i, j);
}
static constexpr isometry lorentz(int i, int j, typename D::Number angle) {
return apply_nm<D>( rep_linear_nn<D>::lorentz(i, j, angle) );
}
static isometry id() { return rep_linear_nn<D>::id(); };
static constexpr point center() { return unit_vector<data>(D::Dim-1); }
static point apply(const isometry& T, const point& x) { return apply_nm(T * x); };
static isometry apply(const isometry& T, const isometry& U) { return apply_nm(T * U); };
static typename D::Number dist0(point x) {
return acos_auto<D> (get_normalized(x, x[D::Dim-1]));
}
static typename D::Number angle(const point& x) { return atan2(x[1], x[0]); }
static typename D::Number get_coord(point x, int i) {
return get_normalized(x, x[i]); }
static isometry inverse(isometry T) {
return rep_linear_nn<D>::inverse(T);
}
static isometry push(const point& p) {
return apply_nm( rep_linear_nn<D>::push(get_normalized(p, p)) );
}
static std::string print(point p) { return nzv(p); }
static std::string print(isometry p) { return nzv(p); }
};
/* use the linear representation of points and the multivector representation of isometries */
TD struct rep_mixed {
using data = D;
using N = typename D::Number;
using point = mvector<data>;
using isometry = multivector<data>;
static isometry cspin(int i, int j, typename data::Number alpha, bool noflat = false) {
/* auto u = unit_vector<multivector_data<data>> (0);
auto ui = unit_vector<data> (i);
auto uj = unit_vector<data> (j);
return u * cos(alpha/2) + multimul(embed(ui), embed(uj)) * sin(alpha/2); */
auto res = zero_vector<multivector_data<data>> ();
if(nm == nmFlatten && !noflat) {
res[0] = N(1);
res[(1<<i) | (1<<j)] = tan(alpha/2) * (i > j ? 1 : -1);
return res;
}
res[0] = cos(alpha/2);
res[(1<<i) | (1<<j)] = sin(alpha/2) * (i > j ? 1 : -1);
return res;
}
static isometry cspin90(int i, int j, bool noflat = false) {
auto res = zero_vector<multivector_data<data>> ();
if(nm == nmFlatten && !noflat) {
res[0] = N(1);
res[(1<<i) | (1<<j)] = N(i > j ? 1 : -1);
return res;
}
res[0] = sqrt(N(.5));
res[(1<<i) | (1<<j)] = sqrt(N(.5)) * (i > j ? 1 : -1);
return res;
}
static isometry lorentz(int i, int j, typename data::Number alpha) {
/* // j must be time coordinate
auto u = unit_vector<multivector_data<data>> (0);
auto ui = unit_vector<data> (i);
auto uj = unit_vector<data> (j);
return u * cosh(alpha/2) + multimul(embed(uj), embed(ui)) * sinh(alpha/2); */
auto res = zero_vector<multivector_data<data>> ();
if(nm == nmFlatten) {
res[0] = N(1);
res[(1<<i) | (1<<j)] = tanh(alpha/2);
return res;
}
res[0] = cosh(alpha/2);
res[(1<<i) | (1<<j)] = sinh(alpha/2);
return res;
}
static isometry id() { return unit_vector<multivector_data<data>> (0); };
static constexpr point center() { return unit_vector<data>(D::Dim-1); }
static point apply(const isometry& T, const point& x) {
// return unembed(multimul(multimul(T, embed(x)), conjugate(T)));
return apply_nm(unembed(chkmul<odd<D>,flat_even<D>,underling<D>>(chkmul<flat_even<D>,flat_underling<D>,odd<D>>(T, embed(x)), conjugate(T))));
};
static isometry apply(const isometry& T, const isometry& U) {
auto res = apply_nm<even<D>, D>(chkmul<flat_even<D>,flat_even<D>,even<D>>(T, U));
return res;
}
static isometry inverse(isometry T) { return conjugate(T); }
static isometry push(const point& p) {
auto pm = get_normalized(p, p);
pm[D::Dim-1] = pm[D::Dim-1] + N(1);
// since p was normalized, sqnorm of pm is 2 * pm[D::Dim-1]
pm = pm * pow(2 * pm[D::Dim-1], -0.5);
multivector<data> v1 = embed(pm);
multivector<data> v2 = unit_vector<multivector_data<data>>(1<<(D::Dim-1));
multivector<data> v3 = chkmul<underling<D>,underling<D>,poincare<D>>(v1, v2);
v3 = apply_nm<poincare<D>, D>(v3);
return v3;
}
static typename D::Number dist0(point x) { return acos_auto<D> (get_normalized(x, x[D::Dim-1])); }
static typename D::Number angle(const point& x) { return atan2(x[1], x[0]); }
static typename D::Number get_coord(point x, int i) { return get_normalized(x, x[i]); }
static std::string print(point p) { return nzv(p); }
static std::string print(isometry p) { return nz(p); }
};
/* use the hyperboloid-Poincare representation of points and the multivector representation of isometries */
TD struct rep_clifford {
using data = D;
using N = typename D::Number;
using point = array< multivector<data>, 1>;
using isometry = multivector<data>;
static isometry cspin(int i, int j, typename data::Number alpha) { return rep_mixed<D>::cspin(i, j, alpha); }
static isometry cspin90(int i, int j) { return rep_mixed<D>::cspin90(i, j); }
// j must be the neg coordinate!
static isometry lorentz(int i, int j, N alpha) { return rep_mixed<D>::lorentz(i, j, alpha); }
static isometry id() { return rep_mixed<D>::id(); }
static constexpr point center() { return point{{ id() }}; }
static point apply(const isometry& T, const point& x) { return point{{ despin(chkmul<even<D>,poincare<D>,even<D>>(T, x[0])) }}; }
static isometry apply(const isometry& T, const isometry& U) { return apply_nm<even<D>,D>( chkmul<even<D>,even<D>,even<D>>(T, U) ); }
static isometry inverse(isometry T) { return conjugate(T); }
static isometry push(const point& p) { return p[0]; }
static typename D::Number dist0(const point& ax) {
return acos_auto<D>(get_normalized<poincare<D>, D, N>(ax[0], ax[0][0]))*2;
}
static constexpr int mvlast = 1<<(D::Dim-1);
static typename D::Number angle(const point& x) {
return atan2(x[0][2 | mvlast], x[0][1 | mvlast]);
}
static typename D::Number get_coord(const point& x, int i) {
auto x1 = multimul(multimul(x[0], unit_vector<multivector_data<data>> (mvlast)), conjugate(x[0]));
auto x2 = unembed(x1);
return get_normalized(x2, x2[i]);
}
static std::string print(point p) { return nz(p[0]); }
static std::string print(isometry p) { return nz(p); }
};
/* split isometries into the poincare and rotational part */
TD struct rep_gyro {
using data = D;
using N = typename D::Number;
using point = multivector<data>;
using isometry = poincare_rotation<data>;
static isometry cspin(int i, int j, typename data::Number alpha) { return { rep_mixed<D>::id(), rep_mixed<D>::cspin(i, j, alpha, true) }; }
static isometry cspin90(int i, int j, typename data::Number alpha) { return { rep_mixed<D>::id(), rep_mixed<D>::cspin90(i, j, alpha, true) }; }
static isometry lorentz(int i, int j, typename data::Number alpha) { return {rep_mixed<D>::lorentz(i, j, alpha), rep_mixed<D>::id() }; }
static isometry id() { return { rep_mixed<D>::id(), rep_mixed<D>::id() }; }
static constexpr point center() { return rep_mixed<D>::id(); }
static point apply(const isometry& T, const point& x) { return despin(chkmul<poincare<D>,poincare<D>,even<D>>(T.first, chkmul<rotational<D>,poincare<D>,poincare<D>>(T.second, x))); }
static isometry apply(const isometry& T, const isometry& U) {
auto R1 = apply_nm<rotational<D>, poincare<D>, poincare<D>> (T.second, U.first);
auto R2 = apply_nm<poincare<D>, poincare<D>, even<D>> (T.first, R1);
auto R3 = despin2(R2);
return { R3.first, apply_nm<rotational<D>, rotational<D>, rotational<D>> (R3.second, U.second) };
}
static isometry inverse(isometry T) { return { conjugate(T.first), conjugate(T.second) }; }
static isometry push(const point& p) { return { p, rep_mixed<D>::id() }; }
static typename D::Number dist0(const point& ax) {
return acos_auto<D>(get_normalized<poincare<D>, D, N>(ax, ax[0]))*2;
}
static constexpr int mvlast = 1<<(D::Dim-1);
static typename D::Number angle(const point& x) {
return atan2(x[0][2 | mvlast], x[0][1 | mvlast]);
}
static typename D::Number get_coord(const point& x, int i) {
auto x1 = multimul(multimul(x[0], unit_vector<multivector_data<data>> (mvlast)), conjugate(x[0]));
auto x2 = unembed(x1);
return get_normalized(x2, x2[i]);
}
static std::string print(point p) { return nz(p[0]); }
static std::string print(isometry p) { return "["+nz(p.first)+","+nz(p.second)+"]"; }
};
}

261
devmods/reps/rep-polar.cpp Normal file
View File

@ -0,0 +1,261 @@
bool polar_mod = true, polar_choose = true;
namespace reps {
template<class N> static void cyclefix(N& a) {
while(a > + get_deg<N>(180)) a -= get_deg<N>(360);
while(a < - get_deg<N>(180)) a += get_deg<N>(360);
}
template<class N> static N cyclefix_on(N a) { cyclefix(a); return a; }
/** the Taylor polynomial for 1-sqrt(1-y*y) */
template<class N> N ssqrt(N y) {
return y*y/2 + y*y*y*y/8 + y*y*y*y*y*y*y/16 + y*y*y*y*y*y*y*y*y/128;
}
TD struct rep_polar2 {
using data = D;
using N = typename D::Number;
struct point { N phi, r; };
struct isometry { N psi, phi, r; }; // spin by psi first
static isometry cspin(int i, int j, N alpha) {
if(i>j) std::swap(i, j), alpha = -alpha;
return isometry{.psi = -alpha, .phi = N(0), .r = N(0) };
}
static isometry cspin90(int i, int j) { return cspin(i, j, get_deg<N>(90)); }
static isometry lorentz(int i, int j, N alpha) {
if(i>j) std::swap(i, j);
if(i == 0) return isometry{.psi = N(0), .phi = N(0), .r = alpha};
if(i == 1) return isometry{.psi = N(0), .phi = get_deg<N>(90), .r = alpha};
throw hr::hr_exception("bad lorentz");
}
static isometry id() { return isometry{.psi = N(0), .phi = N(0), .r = N(0)}; };
static point center() { return point{.phi = N(0), .r = N(0)}; };
static std::string print(isometry T) {
return hr::lalign(0, "{phi=", T.phi, " r=", T.r, " psi=", T.psi, "}");
}
static std::string print(point T) {
return hr::lalign(0, "{phi=", T.phi, " r=", T.r, "}");
}
static isometry apply(isometry T, isometry U, bool need_psi = true) {
if(T.r == 0) return isometry {.psi = T.psi+U.psi, .phi = T.psi+U.phi, .r = U.r};
if(U.r == 0) return isometry {.psi = T.psi+U.psi, .phi = T.phi, .r = T.r};
N alpha = U.phi + T.psi - T.phi;
if(polar_mod) cyclefix(alpha);
isometry res;
N y1 = sinh(U.r) * sin(alpha);
auto ca = cos(alpha);
auto sa = sin(alpha);
N x1, x2;
// choose the appropriate method
if(polar_choose && ca >= N(0.5)) {
N u = ca >= N(.999999) ? ssqrt(sa) : N(1) - ca;
res.r = cosh(T.r + U.r) - u * sinh(T.r) * sinh(U.r);
x1 = sinh(T.r + U.r) - u * cosh(T.r) * sinh(U.r);
if(need_psi) x2 = sinh(T.r + U.r) - u * cosh(U.r) * sinh(T.r);
}
else if(polar_choose && ca <= N(-0.5)) {
N u = ca <= N(-.999999) ? ssqrt(-sa) : ca + N(1);
res.r = cosh(T.r - U.r) + u * sinh(T.r) * sinh(U.r);
x1 = sinh(T.r - U.r) + u * cosh(T.r) * sinh(U.r);
if(need_psi) x2 = sinh(U.r - T.r) + u * cosh(U.r) * sinh(T.r);
}
else {
res.r = sinh(T.r) * sinh(U.r) * ca + cosh(T.r) * cosh(U.r);
x1 = cosh(T.r) * sinh(U.r) * ca + cosh(U.r) * sinh(T.r);
if(need_psi) x2 = cosh(U.r) * sinh(T.r) * ca + cosh(T.r) * sinh(U.r);
}
if(res.r < N(1)) res.r = N(0); else res.r = acosh(res.r);
N beta = (y1 || x1) ? atan2(y1, x1) : N(0);
res.phi = T.phi + beta;
if(polar_mod) cyclefix(res.phi);
if(need_psi) {
N y2 = sinh(T.r) * sin(alpha);
N gamma = (y2 || x2) ? atan2(y2, x2) : N(0);
res.psi = T.psi + U.psi + beta + gamma - alpha;
if(polar_mod) cyclefix(res.psi);
}
return res;
};
static point apply(const isometry& T, const point& x) {
isometry x1 = apply(T, push(x), false);
return point { .phi = x1.phi, .r = x1.r};
};
static isometry inverse(isometry T) { return isometry{.psi = -T.psi, .phi = cyclefix_on<N>(get_deg<N>(180)+T.phi-T.psi), .r=T.r }; };
static isometry push(const point& p) { return isometry{.psi = N(0), .phi = p.phi, .r = p.r}; }
static N dist0(const point& x) { return x.r; }
static N angle(const point& x) { return x.phi; }
static N get_coord(const point& x, int i) {
if(i == 0) return cos(x.phi) * sinh(x.r);
if(i == 1) return sin(x.phi) * sinh(x.r);
if(i == 2) return cosh(x.r);
throw hr::hr_exception("bad get_coord");
}
};
TD struct rep_high_polar {
using data = D;
using N = typename D::Number;
struct sphere_data {
using Number = N;
static constexpr int Dim = D::Dim-1;
static constexpr int Flipped = -1;
};
using subsphere = rep_linear_nn<sphere_data>;
struct point { typename subsphere::point phi; N r; };
struct isometry { typename subsphere::isometry psi; typename subsphere::point phi; N r; };
static isometry cspin(int i, int j, N alpha) {
return isometry{.psi = subsphere::cspin(i, j, alpha), .phi = subsphere::center(), .r = N(0) };
}
static isometry cspin90(int i, int j) {
return isometry{.psi = subsphere::cspin90(i, j), .phi = subsphere::center(), .r = N(0) };
}
static isometry lorentz(int i, int j, N alpha) {
if(i>j) std::swap(i, j);
auto is = isometry{.psi = subsphere::id(), .phi = subsphere::center(), .r = alpha};
is.phi[D::Dim-2] = N(0);
is.phi[i] = N(1);
return is;
}
static isometry id() { return isometry{.psi = subsphere::id(), .phi = subsphere::center(), .r = N(0)}; }
static point center() { return point{.phi = subsphere::center(), .r = N(0)}; };
static std::string print(isometry T) {
return hr::lalign(0, "{phi=", subsphere::print(T.phi), " r=", T.r, " psi=", hr::kz(T.psi.values), "}");
}
static std::string print(point T) {
return hr::lalign(0, "{phi=", subsphere::print(T.phi), " r=", T.r, "}");
}
static isometry apply(isometry T, isometry U, bool need_psi = true) {
auto apsi = need_psi ? T.psi * U.psi : subsphere::id();
if(T.r == 0) return isometry {.psi = apsi, .phi = T.psi*U.phi, .r = U.r};
if(U.r == 0) return isometry {.psi = apsi, .phi = T.phi, .r = T.r};
auto aphi = T.psi * U.phi;
auto cos_alpha = inner<sphere_data>(aphi, T.phi);
auto& ca = cos_alpha;
isometry res;
N x1, x2;
auto orth = (aphi - T.phi * ca);
N sin_alpha;
if(ca > N(0.999999) || ca < N(0.999999))
sin_alpha = pow(sqnorm<sphere_data>(orth), .5);
else
sin_alpha = pow(N(1) - ca * ca, .5);
if(sin_alpha == N(0)) {
if(ca >= N(1)) {
return isometry{.psi = apsi, .phi = T.phi, .r = T.r + U.r };
}
if(ca <= N(-1)) {
if(T.r >= U.r) {
return isometry{.psi = apsi, .phi = T.phi, .r = T.r - U.r };
}
else {
return isometry{.psi = apsi, .phi = T.phi*-1, .r = U.r - T.r };
}
}
}
orth = orth / sin_alpha;
N y1 = sinh(U.r) * sin_alpha;
// choose the appropriate method
if(polar_choose && ca >= N(0.5)) {
N u = ca >= N(.999999) ? ssqrt(sin_alpha) : N(1) - ca;
res.r = cosh(T.r + U.r) - u * sinh(T.r) * sinh(U.r);
x1 = sinh(T.r + U.r) - u * cosh(T.r) * sinh(U.r);
if(need_psi) x2 = sinh(T.r + U.r) - u * cosh(U.r) * sinh(T.r);
}
else if(polar_choose && ca <= N(-0.5)) {
N u = ca <= N(-.999999) ? ssqrt(sin_alpha) : ca + N(1); // ca = u - 1
res.r = cosh(T.r - U.r) + u * sinh(T.r) * sinh(U.r);
x1 = sinh(T.r - U.r) + u * cosh(T.r) * sinh(U.r);
if(need_psi) x2 = sinh(U.r - T.r) + u * cosh(U.r) * sinh(T.r);
}
else {
res.r = sinh(T.r) * sinh(U.r) * ca + cosh(T.r) * cosh(U.r);
x1 = cosh(T.r) * sinh(U.r) * ca + cosh(U.r) * sinh(T.r);
if(need_psi) x2 = cosh(U.r) * sinh(T.r) * ca + cosh(T.r) * sinh(U.r);
}
if(res.r < N(1)) res.r = N(0); else res.r = acosh(res.r);
auto h1 = pow(x1*x1+y1*y1, -0.5);
N cos_beta = x1*h1, sin_beta = y1*h1;
res.phi = T.phi * cos_beta + orth * sin_beta;
if(need_psi) {
N y2 = sinh(T.r) * sin_alpha;
auto h2 = pow(x2*x2+y2*y2, -0.5);
N cos_gamma = x2*h2, sin_gamma = y2*h2;
// delta = beta + gamma - alpha
auto cos_beta_gamma = cos_beta * cos_gamma - sin_beta * sin_gamma;
auto sin_beta_gamma = cos_beta * sin_gamma + sin_beta * cos_gamma;
auto cos_delta = cos_beta_gamma * cos_alpha + sin_beta_gamma * sin_alpha;
auto sin_delta = sin_beta_gamma * cos_alpha - cos_beta_gamma * sin_alpha;
auto phi1 = T.phi * cos_delta + orth * sin_delta;
auto orth1 = orth * cos_delta - T.phi * sin_delta;
auto phi2 = phi1 - T.phi;
auto orth2 = orth1 - orth;
typename subsphere::isometry spinner = subsphere::id();
// Tv = v + <v, phi> * (phi'-phi) + <v, orth> * (orth'-orth)
for(int i=0; i<D::Dim-1; i++)
for(int j=0; j<D::Dim-1; j++)
spinner[i][j] += phi2[i] * T.phi[j] + orth2[i] * orth[j];
res.psi = spinner * apsi;
}
return res;
};
static point apply(const isometry& T, const point& x) {
isometry x1 = apply(T, push(x), false);
return point { .phi = x1.phi, .r = x1.r};
};
static isometry inverse(isometry T) { return isometry{.psi = subsphere::inverse(T.psi), .phi = subsphere::inverse(T.psi)*T.phi*-1, .r=T.r }; };
static isometry push(const point& p) { return isometry{.psi = subsphere::id(), .phi = p.phi, .r = p.r}; }
static N dist0(const point& x) { return x.r; }
static N angle(const point& x) { return subsphere::angle(x.phi); }
static N get_coord(const point& x, int i) { if(i == D::Dim-1) return cosh(x.r); else return x.phi[i] * sinh(x.r); }
};
template<class D> using rep_polar = typename std::conditional<D::Dim==3, rep_polar2<D>, rep_high_polar<D>>::type;
}

81
devmods/reps/reps.cpp Normal file
View File

@ -0,0 +1,81 @@
#include <boost/multiprecision/mpfr.hpp>
#include "../../hyper.h"
#define TD template<class D>
#undef sl2
namespace reps {
using namespace boost::multiprecision;
using big = mpfr_float_50;
}
namespace hr {
void print(hr::hstream& hs, ::reps::big b) {
std::stringstream ss;
ss << std::setprecision(10);
ss << b; string u; ss >> u; print(hs, u);
}
}
namespace reps {
using std::array;
using std::vector;
using hr::cell;
using hr::print;
using hr::hlog;
using hr::celldistance;
using hr::ld;
using hr::ginf;
using hr::geometry;
using hr::gcHyperbolic;
using hr::gcSphere;
using hr::C02;
using hr::C03;
using hr::qANYQ;
template <class N> N get_deg(int deg);
template<> ld get_deg<ld> (int deg) { return M_PI*deg/180; }
template<> big get_deg<big> (int deg) { return atan(big(1))*deg/45; }
enum eNormalizeMode {
nmInvariant, // if the input was normalized, the output will be normalized too
nmForced, // normalize the output
nmWeak, // weakly normalize the output
nmCareless, // do not try to keep the output normalized
nmFlatten, // flatten the representation
nmBinary // try to avoid overflow
};
eNormalizeMode nm;
}
#include "counter.cpp"
#include "multivector.cpp"
#include "rep-hr.cpp"
#include "rep-multi.cpp"
#include "rep-halfplane.cpp"
#include "rep-polar.cpp"
#include "tests.cpp"
namespace reps {
// -- tests ---
void test_systems() {
run_all_tests();
fflush(stdout);
exit(1);
}
void set_repgeo() {
if(test_dim == 3) { hr::set_geometry(hr::gNormal); hr::set_variation(hr::eVariation::pure); }
if(test_dim == 4) { hr::set_geometry(hr::gSpace435); }
}
int a = hr::arg::add1("-test-reps", test_systems) + hr::arg::add1("-repgeo", set_repgeo);
}

733
devmods/reps/results.Md Normal file
View File

@ -0,0 +1,733 @@
# What is it
This is a study of numerical precision errors in various representations of 2D hyperbolic geometry.
It is generally the best to combine a representation with tiling; the tests take this into
account.
# Representations studied
The following representations are studied:
* **linear**: points in the hyperboloid model; isometries as linear transformation matrices.
* **mixed**: points in the hyperboloid model; isometries using Clifford algebras. (Clifford algebras
are a generalization of 'quaternions' commonly used in 3D graphics.)
* **clifford**: points are also represented using Clifford algebras, that is, p is represented as
the isometry u such as u(C0) = p and u does not introduce extra rotations.
* **halfplane (2D)**: points are represented using the half-plane model; isometries are represented using
SL(2,R).
* **halfspace (3D)**: points are represented using the half-space model; isometries are represented using
SL(2,C).
* **polar 2D**: points are represented using polar coordinates; isometries need one extra angle.
* **general polar**: like polar 2D, but instead of angles, we use rotated unit vectors and rotation
matrices; this also makes it work in higher dimension.
## Variations
Both in linear and Clifford representations, there is the correct "normalized" representation;
if the normalized representation is multiplied by some factor x, most formulas still work,
and for those which do not, it is easy to compute x. This yields the following variations:
* **invariant**: keep the invariant that the points and isometries are normalized
(that is: output is normalized under the assumption that the input is normalized)
* **careless**: do not care about normalization
(advantages: some computations are avoided; possible to represent ultra-ideal points in
linear representations)
* **forced**: normalize the output after every computation
(might be a good idea for points/isometries close to the center, but generally a bad
idea if they are far away -- in that case, the norm generally cannot be computed, but
distances and angles still tend to be correct in the invariant computations)
* **weakly forced**: like forced, but do not normalize if the norm could not be computed
due to precision errors
* **flatten**: instead of normal normalization, make the leading coordinate equal to 1.
The leading coordinate is the 'timelike' coordinate of linear representations
of points, and the 'unit' coordinate of Clifford representations.
(advantage: save memory: H2 represented only 2 coordinates instead of 3;
disadvantage: might not represent ultra-ideal points if they would be infinite)
* **binary**: in careless, values may easily explode and cause underflow/overflow; avoid this
by making the leading coordinate in \[0.5, 2) range (by multiplying by powers of 2, which is
presumably fast)
Furthermore:
* in linear, matrices can be **fixed** by replacing them by a correct orthogonal matrix close
to the current computation
* in (non-general) polar, forcing angles into [-pi,pi] may be needed to prevent explosion
* in **improved** polar, one of three variants of the cosine rule can be used, depending on the angle,
to improve the numerical precision; also even more precise computation to avoid numerical
precision errors for angles very close to 0 or pi
* in the Clifford representation, the **gyro** variant splits the isometries into
the translational part (which is flattened, making it equivalent to the Poincare disk model)
and the rotational part (for which 'invariant' is used). This fixes the problem
with full flattening where rotations by 180° are flattened to infinity. (AFAIK
Hyperbolica uses roughly this)
## Observations
* except linear, all the methods of representing isometries can only represent
orientation-preserving ones
* Clifford isometries of H2 is essentially the same as SL(2,R) of halfplane -- it is
just the change of the basis
* linear/Clifford representations are not that good at representing points close to the
boundary of the disk (invariant can somewhat tell the distance but flattened cannot);
halfplane is better here
# Tests
## test_loop_iso
In this test, for each i, we construct a path in the tiling by always moving to a random
adjacent tile, until we get to a tile i afar; then, we return to the start (also randomly,
may stray further from the path). We compose all the relative tile isometries into T and see
if T(C0) = C0. The score is the first i for which it fails.
Discussion: This makes rep_mixed worse than rep_lorentz.
## test_loop_point
Same as test_loop_iso but we apply the consecutive isometries to point right away.
Discussion: This makes rep_mixed worse than rep_lorentz.
## test_angledist
For each i (skipping some), construct a path outwards in the tiling, compose isometries,
and see if the distance and angle to that tile have been computed correctly.
Discussion: Invariant representations have no problem with this, even if the points obtained are beyond the precision otherwise.
## test_similarity, test_dissimilarity, test_other
For each i, compute the distance between two points in distance i from the starting point.
The angle between them is very small (test_similarity), close to 180° (test_dissimilarity),
close to 1° (test_other).
Discussion: Similarity is obviously the most difficult. Halfplane is surprisingly powerful in all cases.
## test_walk
This is essentially walking in a straight line in HyperRogue. After some time, it can be often clearly observed that we
have 'deviated' from the original straight line. This test checks how long we can walk.
We construct an isometry T representing a random direction. In each step, we compose this isometry with a translation (T := T * translate(1/16)).
Whenever the point T * C0 is closer to the center of another tile, we rebase to that new tile.
For a test, we actually do this in parallel with two isometries T0 and T1, where T1 = T0 * translate(1/32). We count the number of steps
until the paths diverge. Numbers over 1000 are not actually that good, 1000+n means that, after n steps, the implementation no longer detects tile
changes. Numbers of 10000 signify that some even weirder problem happened.
Discussion: Since the isometry matrices are always small (constrained to tiles), fixing definitely helps here. Without fixing, T stops
being an isometry (an effect visible in HyperRogue when fixing is disabled).
## test_close
Here we see whether small errors accumulate when moving close to the center. In test i, we move randomly until we reach distance i+1,
after which we return to the start (always reducing the distance). After each return to the start, we check if the representation is
still fine (if not, we restart with the original representation). The number given is the number of errors in 10000 steps.
Discussion: Errors do not appear to accumulate when we simply move close to the start (or rather, they accumulate very slowly).
## test_count
This simply computes the number of numerical operations performed for every geometric operation. Numerical operations are categorized as:
* Addition/subtraction
* Multiplication (multiplication by constant not counted)
* Division (division by constant not counted)
* Functions: exp, log, (a)sin/cos/tan(h), sqrt, inverse sqrt
Geometric operations are:
* spin: return rotation by given angle in given axes
* L0: return translation by given value in axis 0
* L1: return translation by given value in axis 1
* ip: apply isometry to point
* ii: compose isometries
* d0: compute the distance of point from 0
* angle: compute the (2D) angle of point
* inverse: compute the inverse of an isometry
* push: convert a point into a translation
# Implementation notes
Note: the program currently assumes hyperbolic geometry (it was intended to support spherical
geometry but not everywhere the correct handling is implemented).
# Results
## Results on the {7,3} tiling
```
test_loop_iso
linear+F invariant: (17,16,17,16,17,17,17,17,16,17,17,17,17,16,16,17,17,16,17,17)
linear+F forced : (20,19,19,20,20,19,20,20,19,20,20,18,19,19,19,19,20,19,19,19)
linear+F weak : (21,19,20,20,20,19,24,20,19,25,24,18,19,19,19,19,20,19,19,19)
linear+F flatten : (19,19,21,20,20,20,20,20,19,19,19,21,19,20,19,19,19,19,19,20)
linear+F careless : (19,19,19,19,20,19,20,20,19,20,18,18,19,18,19,19,19,19,19,19)
linear+F binary : (19,19,19,19,20,19,20,20,19,20,18,18,19,18,19,19,19,19,19,19)
linear-F invariant: (17,17,17,18,18,18,21,17,16,17,19,18,17,18,23,17,18,17,19,17)
linear-F forced : (19,19,19,19,20,19,19,20,19,20,20,20,19,19,19,19,19,19,19,19)
linear-F weak : (19,19,20,19,20,19,19,20,19,21,20,20,21,19,19,19,20,19,19,19)
linear-F flatten : (20,19,20,20,21,19,20,18,19,19,20,21,19,21,20,19,19,19,19,20)
linear-F careless : (20,19,19,21,19,19,20,17,19,20,19,20,19,19,19,19,19,19,19,20)
linear-F binary : (20,19,19,21,19,19,20,17,19,20,19,20,19,19,19,19,19,19,19,20)
mixed invariant: (34,35,34,36,34,35,34,34,36,35,34,35,36,34,35,34,33,35,32,36)
mixed forced : (34,34,34,35,34,36,33,34,36,35,35,36,36,34,35,34,34,35,34,34)
mixed weak : (34,34,34,35,34,36,33,34,36,35,35,36,36,34,35,34,34,35,34,34)
mixed flatten : (20,5,18,13,13,13,4,13,9,29,25,9,36,22,19,30,5,35,14,2)
mixed careless : (34,34,34,35,34,34,35,34,36,35,35,36,36,34,35,34,35,35,34,34)
mixed binary : (34,34,34,35,34,34,35,34,36,35,35,36,36,34,35,34,35,35,34,34)
Clifford invariant: (32,35,34,36,34,35,34,34,36,33,34,35,36,34,35,34,33,34,32,36)
Clifford forced : (34,34,34,35,34,36,33,34,36,35,35,36,36,34,35,34,34,35,34,34)
Clifford weak : (34,34,34,35,34,36,33,34,36,35,35,36,36,34,35,34,34,35,34,34)
Clifford flatten : (34,34,34,35,34,36,35,34,36,35,35,36,37,34,35,34,36,35,34,34)
Clifford careless : (34,34,34,35,34,34,35,34,36,35,35,36,36,34,35,34,35,35,34,34)
Clifford binary : (34,34,34,35,34,34,35,34,36,35,35,36,36,34,35,34,35,35,34,34)
Clifford gyro : (34,34,34,35,34,36,35,34,36,35,35,36,36,34,35,34,35,35,34,34)
halfplane invariant: (34,34,34,35,34,36,35,34,36,35,35,36,36,34,35,34,35,35,34,34)
polar basic : (34,34,34,35,34,34,33,34,36,35,35,24,36,34,35,34,35,35,34,34)
polar improved : (34,34,34,34,33,36,35,33,36,35,35,36,35,34,35,34,34,35,34,35)
polar F/F : (34,36,35,35,33,34,33,33,36,35,35,36,36,34,35,34,35,35,34,34)
polar F/T : (34,34,34,34,33,36,35,33,36,35,35,36,35,34,35,34,34,35,34,35)
polar T/F : (34,34,35,36,34,36,35,34,35,35,35,36,35,34,35,34,35,35,34,36)
polar T/T : (34,36,35,34,34,36,35,34,36,35,35,36,35,34,35,34,34,35,34,35)
test_loop_point
linear+F invariant: (17,16,17,16,17,17,17,17,16,17,17,17,17,16,16,17,17,16,17,17)
linear+F forced : (20,19,19,20,20,19,20,20,19,20,20,18,19,19,19,19,20,19,19,19)
linear+F weak : (21,19,20,20,20,19,24,20,19,25,24,18,19,19,19,19,20,19,19,19)
linear+F flatten : (19,19,21,20,20,20,20,20,19,19,19,21,19,20,19,19,19,19,19,20)
linear+F careless : (19,19,19,19,20,19,20,20,19,20,18,18,19,18,19,19,19,19,19,19)
linear+F binary : (19,19,19,19,20,19,20,20,19,20,18,18,19,18,19,19,19,19,19,19)
linear-F invariant: (17,17,17,18,18,18,21,17,16,17,19,18,17,18,23,17,18,17,19,17)
linear-F forced : (19,19,19,19,20,19,19,20,19,20,20,20,19,19,19,19,19,19,19,19)
linear-F weak : (19,19,20,19,20,19,19,20,19,21,20,20,21,19,19,19,20,19,19,19)
linear-F flatten : (20,19,20,20,21,19,20,18,19,19,20,21,19,21,20,19,19,19,19,20)
linear-F careless : (20,19,19,21,19,19,20,17,19,20,19,20,19,19,19,19,19,19,19,20)
linear-F binary : (20,19,19,21,19,19,20,17,19,20,19,20,19,19,19,19,19,19,19,20)
mixed invariant: (18,17,17,19,20,18,19,19,17,17,18,17,17,16,16,18,25,17,17,19)
mixed forced : (19,19,19,19,19,19,19,17,19,20,19,20,19,19,19,20,19,19,20,20)
mixed weak : (19,23,19,19,19,19,21,17,19,23,19,20,24,20,19,20,22,19,23,20)
mixed flatten : (20,19,19,20,19,19,19,18,20,20,19,18,18,19,18,20,19,19,19,19)
mixed careless : (19,19,19,19,19,20,19,18,19,19,19,21,19,20,18,19,20,19,19,20)
mixed binary : (19,19,19,19,19,20,19,18,19,19,19,21,19,20,18,19,20,19,19,20)
Clifford invariant: (32,34,31,34,33,36,31,35,32,33,32,36,32,34,33,36,33,32,34,34)
Clifford forced : (34,34,34,35,34,36,35,34,35,35,35,36,35,34,35,34,35,35,34,34)
Clifford weak : (34,34,34,35,34,36,35,34,35,35,35,36,35,34,35,34,35,35,34,34)
Clifford flatten : (34,34,34,35,34,36,35,34,36,35,34,36,36,34,35,34,35,35,34,34)
Clifford careless : (3,1,3,2,2,2,2,2,2,3,2,2,3,2,2,3,2,2,1,3)
Clifford binary : (34,34,34,35,34,34,35,34,36,35,35,36,35,34,35,34,35,35,34,34)
Clifford gyro : (34,36,34,35,34,36,35,34,36,35,35,36,36,34,35,34,35,35,34,34)
halfplane invariant: (34,36,34,35,34,36,35,34,36,35,35,36,36,34,35,34,35,35,34,34)
polar basic : (34,34,34,35,34,34,33,34,36,35,35,24,36,34,35,34,35,35,34,34)
polar improved : (34,34,34,34,33,36,35,33,36,35,35,36,35,34,35,34,34,35,34,35)
polar F/F : (34,36,35,35,33,34,33,33,36,35,35,36,36,34,35,34,35,35,34,34)
polar F/T : (34,34,34,34,33,36,35,33,36,35,35,36,35,34,35,34,34,35,34,35)
polar T/F : (34,34,35,36,34,36,35,34,35,35,35,36,35,34,35,34,35,35,34,36)
polar T/T : (34,36,35,34,34,36,35,34,36,35,35,36,35,34,35,34,34,35,34,35)
test_angledist
linear+F invariant: (767,767,767)
linear+F forced : (21,21,21)
linear+F weak : (21,21,21)
linear+F flatten : (21,21,21)
linear+F careless : (21,21,21)
linear+F binary : (21,21,21)
linear-F invariant: (767,767,767)
linear-F forced : (21,21,21)
linear-F weak : (21,21,21)
linear-F flatten : (21,21,21)
linear-F careless : (21,21,21)
linear-F binary : (21,21,21)
mixed invariant: (767,767,767)
mixed forced : (21,21,21)
mixed weak : (21,21,21)
mixed flatten : (21,21,21)
mixed careless : (21,21,21)
mixed binary : (21,21,21)
Clifford invariant: (767,767,767)
Clifford forced : (39,39,47)
Clifford weak : (39,39,39)
Clifford flatten : (39,39,39)
Clifford careless : (2,3,3)
Clifford binary : (39,47,39)
Clifford gyro : (39,47,39)
halfplane invariant: (767,767,767)
polar basic : (443,443,443)
polar improved : (443,443,443)
polar F/F : (767,767,767)
polar F/T : (767,767,767)
polar T/F : (767,767,767)
polar T/T : (767,767,767)
test_similarity
linear+F invariant: (18,17,17,18,17,18,18,17,18,17,18,18,17,17,17,18,17,17,17,17)
linear+F forced : (19,18,18,18,19,18,18,19,19,18,18,18,19,18,19,19,18,19,19,18)
linear+F weak : (19,18,18,18,19,18,18,19,19,18,18,18,19,18,19,19,18,19,19,18)
linear+F flatten : (18,19,18,18,18,19,19,19,19,18,18,18,19,18,19,19,19,19,18,19)
linear+F careless : (19,18,19,18,19,18,18,19,19,18,18,18,19,19,19,19,18,18,19,18)
linear+F binary : (19,18,19,18,19,18,18,19,19,18,18,18,19,19,19,19,18,18,19,18)
linear-F invariant: (18,18,19,18,18,18,18,18,18,18,18,19,19,19,18,18,19,18,18,18)
linear-F forced : (18,19,19,19,19,19,18,19,18,19,19,19,19,19,18,19,19,19,19,19)
linear-F weak : (18,19,19,19,19,19,18,19,18,19,19,19,19,19,18,19,19,19,19,19)
linear-F flatten : (19,18,19,19,19,19,19,19,18,19,19,19,19,19,18,19,19,19,19,19)
linear-F careless : (18,19,19,19,19,19,19,19,18,19,19,19,19,19,19,19,19,19,19,19)
linear-F binary : (18,19,19,19,19,19,19,19,18,19,19,19,19,19,19,19,19,19,19,19)
mixed invariant: (18,19,18,19,18,18,18,18,18,19,19,19,18,19,18,18,18,19,19,18)
mixed forced : (19,19,19,19,19,18,19,19,18,18,18,19,20,19,19,20,19,19,19,19)
mixed weak : (19,19,19,19,19,18,19,19,18,18,19,19,21,20,19,19,19,20,19,20)
mixed flatten : (19,19,19,19,19,19,19,19,20,18,19,19,19,19,20,19,19,19,19,19)
mixed careless : (19,20,19,19,19,18,19,19,19,19,19,20,20,19,19,19,19,19,19,19)
mixed binary : (19,20,19,19,19,18,19,19,19,19,19,20,20,19,19,19,19,19,19,19)
Clifford invariant: (33,33,33,32,32,34,34,33,32,34,33,33,34,33,33,33,33,34,33,33)
Clifford forced : (36,35,35,35,35,35,37,35,36,36,36,35,35,35,35,37,36,36,35,35)
Clifford weak : (36,35,35,35,35,35,37,35,36,36,36,35,35,35,35,37,36,36,35,35)
Clifford flatten : (35,37,36,35,36,35,35,38,36,37,36,35,37,35,37,38,36,38,35,36)
Clifford careless : (37,35,36,35,35,36,35,35,37,35,38,36,38,35,37,36,35,35,35,37)
Clifford binary : (37,35,36,35,35,36,35,35,37,35,38,36,38,35,37,36,35,35,35,37)
Clifford gyro : (37,35,37,37,37,36,35,36,36,36,37,36,35,36,37,37,36,37,37,35)
halfplane invariant: (35,36,36,36,36,35,35,37,37,37,37,36,35,36,38,37,36,36,37,35)
polar basic : (19,18,18,18,19,18,18,18,18,18,18,18,18,19,18,18,18,18,18,18)
polar improved : (37,37,37,37,37,38,38,37,37,36,37,37,38,39,38,37,37,39,37,38)
polar F/F : (19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19)
polar F/T : (35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35)
polar T/F : (19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19)
polar T/T : (35,35,35,35,35,36,35,35,35,36,36,35,35,35,35,35,35,35,35,36)
test_dissimilarity
linear+F invariant: (125,124,147,123,134,130,126,128,123,125,130,130,127,125,125,131,123,124,125,127)
linear+F forced : (7,6,7,7,7,7,8,7,6,7,7,7,7,7,7,7,7,7,7,7)
linear+F weak : (7,7,7,7,9,13,8,7,9,7,9,7,7,7,11,9,7,8,7,7)
linear+F flatten : (7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7)
linear+F careless : (7,7,7,7,7,7,7,7,6,7,8,7,7,7,7,7,7,7,7,7)
linear+F binary : (7,7,7,7,7,7,7,7,6,7,8,7,7,7,7,7,7,7,7,7)
linear-F invariant: (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
linear-F forced : (10,10,10,10,10,10,10,10,10,9,9,10,10,10,10,10,10,9,10,10)
linear-F weak : (9,15,13,12,11,11,10,9,16,9,10,9,13,10,12,11,10,9,10,9)
linear-F flatten : (9,10,10,10,10,10,9,9,10,10,10,10,10,10,9,10,10,10,10,10)
linear-F careless : (10,10,10,9,10,9,10,10,10,10,9,10,10,9,9,10,9,10,10,9)
linear-F binary : (10,10,10,9,10,9,10,10,10,10,9,10,10,9,9,10,9,10,10,9)
mixed invariant: (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
mixed forced : (10,9,10,9,10,10,10,9,10,10,10,10,10,10,10,10,10,9,10,10)
mixed weak : (10,9,12,9,9,10,10,11,10,9,12,11,10,9,11,11,11,9,11,10)
mixed flatten : (10,9,10,10,9,10,10,10,10,10,10,10,10,10,9,10,10,10,10,10)
mixed careless : (10,10,10,10,10,10,10,10,10,10,10,10,9,9,9,10,10,10,10,9)
mixed binary : (10,10,10,10,10,10,10,10,10,10,10,10,9,9,9,10,10,10,10,9)
Clifford invariant: (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
Clifford forced : (18,19,18,18,19,18,19,18,19,19,18,19,18,17,19,19,19,19,19,19)
Clifford weak : (18,18,18,18,19,18,18,18,19,18,18,19,18,18,18,18,19,18,18,19)
Clifford flatten : (18,19,18,19,19,18,18,18,19,19,18,18,19,19,18,18,18,19,19,18)
Clifford careless : (19,18,19,18,18,19,19,18,18,18,18,18,19,18,19,19,19,18,19,18)
Clifford binary : (19,18,19,18,18,19,19,18,18,18,18,18,19,18,19,19,19,18,19,18)
Clifford gyro : (18,18,18,19,19,18,19,20,18,18,18,18,18,19,19,19,18,19,18,18)
halfplane invariant: (35,35,35,35,35,35,35,35,34,36,37,34,35,36,35,35,35,35,36,35)
polar basic : (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
polar improved : (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
polar F/F : (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
polar F/T : (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
polar T/F : (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
polar T/T : (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
test_other
linear+F invariant: (97,97,101,107,97,97,126,107,101,101,112,112,99,101,112,131,107,97,97,94)
linear+F forced : (10,10,10,10,10,10,10,10,11,10,10,10,10,11,10,11,10,10,10,10)
linear+F weak : (10,11,10,11,12,13,11,11,13,14,10,10,10,11,11,11,12,10,13,10)
linear+F flatten : (10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,10)
linear+F careless : (10,11,10,10,10,10,10,10,10,10,10,10,10,11,10,10,10,10,10,10)
linear+F binary : (10,11,10,10,10,10,10,10,10,10,10,10,10,11,10,10,10,10,10,10)
linear-F invariant: (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
linear-F forced : (12,12,12,13,13,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12)
linear-F weak : (12,12,12,18,13,12,12,14,14,14,12,12,12,12,13,12,12,12,12,12)
linear-F flatten : (12,12,12,12,12,12,12,12,12,12,13,12,12,12,12,12,12,12,12,12)
linear-F careless : (12,12,13,12,12,12,13,12,13,13,12,12,12,12,12,12,12,12,12,12)
linear-F binary : (12,12,13,12,12,12,13,12,13,13,12,12,12,12,12,12,12,12,12,12)
mixed invariant: (359,360,359,359,359,359,359,359,359,359,359,359,359,359,360,359,359,359,359,359)
mixed forced : (14,13,14,14,13,13,13,14,13,14,14,14,14,13,14,13,13,14,13,13)
mixed weak : (13,13,14,14,13,13,13,14,13,18,13,16,14,13,15,14,13,14,13,13)
mixed flatten : (13,14,14,14,14,14,13,14,14,14,13,14,13,14,14,13,13,14,14,13)
mixed careless : (14,13,14,14,13,14,14,14,14,14,14,14,13,14,13,14,13,14,13,13)
mixed binary : (14,13,14,14,13,14,14,14,14,14,14,14,13,14,13,14,13,14,13,13)
Clifford invariant: (361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361)
Clifford forced : (21,21,23,21,21,21,22,21,23,21,22,21,21,21,21,22,21,21,21,22)
Clifford weak : (21,21,23,21,21,21,22,21,23,21,21,21,21,21,21,22,21,21,21,22)
Clifford flatten : (21,21,22,21,22,22,21,23,21,21,22,22,22,22,22,21,21,22,22,22)
Clifford careless : (21,22,22,21,21,22,22,23,21,21,21,22,22,21,21,21,22,22,22,23)
Clifford binary : (21,22,22,21,21,22,22,23,21,21,21,22,22,21,21,21,22,22,22,23)
Clifford gyro : (23,23,23,23,24,23,23,24,23,24,23,23,23,23,23,23,23,23,23,23)
halfplane invariant: (35,35,35,35,36,38,37,35,36,36,37,36,35,36,35,36,36,38,38,35)
polar basic : (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
polar improved : (360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360)
polar F/F : (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
polar F/T : (360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360)
polar T/F : (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
polar T/T : (360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360)
test_walk
linear+F invariant: (658,606,622,603,606,608,667,620,615,616,616,619,631,609,613,614,632,635,592,612)
linear+F forced : (632,617,606,617,608,607,607,628,627,632,626,627,596,652,623,639,615,617,615,616)
linear+F weak : (613,626,622,636,606,605,640,594,609,615,592,639,625,607,613,600,635,620,622,604)
linear+F flatten : (605,618,608,625,677,649,612,607,614,649,621,609,602,599,615,645,609,597,597,638)
linear+F careless : (617,615,620,608,603,606,654,597,612,598,626,624,601,613,616,609,602,627,601,619)
linear+F binary : (617,615,620,608,603,606,654,597,612,598,626,624,601,613,616,609,602,627,601,619)
linear-F invariant: (309,298,341,329,349,304,302,301,292,314,305,310,322,307,314,1315,1312,295,10000,10000)
linear-F forced : (1294,1290,1318,1308,1297,1287,1297,1295,1348,1304,1301,1309,1303,1318,292,1299,1294,1291,1288,1298)
linear-F weak : (298,295,301,289,299,289,287,301,297,294,305,297,316,286,292,291,301,293,303,299)
linear-F flatten : (297,1324,1299,1293,1315,1301,1313,1305,1305,306,1282,1310,1307,1309,1292,1306,1296,1315,1313,1289)
linear-F careless : (1305,1310,1299,1298,1308,307,1318,1296,1293,1300,302,1306,1298,1287,1299,1315,1312,290,1290,1298)
linear-F binary : (1305,1310,1299,1298,1308,307,1318,1296,1293,1300,302,1306,1298,1287,1299,1315,1312,290,1290,1298)
mixed invariant: (622,634,587,620,607,619,609,612,599,646,607,623,616,590,615,592,637,636,659,613)
mixed forced : (599,666,588,608,607,602,630,671,601,602,618,630,618,601,599,599,614,601,596,617)
mixed weak : (599,666,588,608,607,602,630,671,601,602,618,630,618,601,599,599,614,601,596,617)
mixed flatten : (611,616,607,605,610,603,595,605,593,614,617,593,602,642,610,616,625,593,636,617)
mixed careless : (622,634,587,620,607,619,609,612,599,646,607,623,616,590,615,592,637,636,659,613)
mixed binary : (622,634,587,620,607,619,609,612,599,646,607,623,616,590,615,592,637,636,659,613)
Clifford invariant: (622,634,587,620,607,619,609,612,599,646,607,623,616,590,615,592,637,636,659,613)
Clifford forced : (599,666,588,608,607,602,630,671,601,602,618,630,618,601,599,599,614,601,596,617)
Clifford weak : (599,666,588,608,607,602,630,671,601,602,618,630,618,601,599,599,614,601,596,617)
Clifford flatten : (611,616,607,605,610,603,595,605,593,614,617,593,602,642,610,616,625,593,636,617)
Clifford careless : (622,634,587,620,607,619,609,612,599,646,607,623,616,590,615,592,637,636,659,613)
Clifford binary : (622,634,587,620,607,619,609,612,599,646,607,623,616,590,615,592,637,636,659,613)
Clifford gyro : (600,586,602,621,625,621,625,603,593,630,634,600,586,597,600,609,601,592,617,615)
halfplane invariant: (600,586,602,621,625,621,625,603,593,630,634,600,586,597,600,609,601,592,617,615)
polar basic : (1055,67,1078,66,72,1050,66,1073,70,1052,66,1070,66,67,71,73,1064,1070,67,66)
polar improved : (71,1068,1073,1059,67,55,67,1071,65,1052,1067,1078,67,63,69,1067,57,66,69,1059)
polar F/F : (605,566,605,563,566,583,565,591,578,616,591,568,601,569,584,559,621,579,589,601)
polar F/T : (573,596,633,569,581,590,565,588,590,581,600,614,597,571,595,619,576,573,582,631)
polar T/F : (594,662,662,598,591,686,590,610,593,592,588,588,600,581,598,572,618,578,589,588)
polar T/T : (583,594,601,586,570,601,594,579,585,581,582,614,649,614,674,639,588,580,587,588)
test_close
linear+F invariant: (0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,18,78,130,126,118)
linear+F forced : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,70,110,118)
linear+F weak : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,11,70,110,118)
linear+F flatten : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,55,99,116)
linear+F careless : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,67,107,113)
linear+F binary : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,67,107,113)
linear-F invariant: (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,89,117,118)
linear-F forced : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,73,117,117)
linear-F weak : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,73,117,116)
linear-F flatten : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,15,49,103,115)
linear-F careless : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,62,112,115)
linear-F binary : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,62,112,115)
mixed invariant: (0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,36,101,117,115)
mixed forced : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,72,114,117)
mixed weak : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,72,114,115)
mixed flatten : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,20,75,115,116)
mixed careless : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,73,113,112)
mixed binary : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,73,113,112)
Clifford invariant: (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
Clifford forced : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
Clifford weak : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
Clifford flatten : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
Clifford careless : (1666,1698,1241,859,666,545,447,378,339,298,262,245,244,207,196,175,170,168,157,144)
Clifford binary : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
Clifford gyro : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
halfplane invariant: (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
polar basic : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
polar improved : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
polar F/F : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
polar F/T : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
polar T/F : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
polar T/T : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
test_count
linear+F invariant: (spin(24A 34M 9D 4F) L0(24A 34M 9D 4F) L1(24A 34M 9D 4F) ip(9A 9M) ii(51A 51M 9D) d0(1F) angle(1F) inverse() push(29A 42M 10D 2F))
linear+F forced : (spin(27A 46M 9D 5F) L0(27A 46M 9D 5F) L1(27A 46M 9D 5F) ip(12A 15M 1F) ii(54A 73M 9D 3F) d0(1F) angle(1F) inverse() push(32A 54M 10D 3F))
linear+F weak : (spin(30A 49M 9D 5F) L0(30A 49M 9D 5F) L1(30A 49M 9D 5F) ip(12A 15M 1F) ii(57A 76M 9D 3F) d0(3A 4M 2F) angle(1F) inverse() push(38A 63M 10D 4F))
linear+F flatten : (spin(27A 37M 17D 4F) L0(27A 37M 17D 4F) L1(27A 37M 17D 4F) ip(9A 9M 2D) ii(54A 54M 17D) d0(3A 4M 2F) angle(1F) inverse() push(35A 51M 18D 3F))
linear+F careless : (spin(27A 37M 9D 4F) L0(27A 37M 9D 4F) L1(27A 37M 9D 4F) ip(9A 9M) ii(54A 64M 9D 2F) d0(3A 4M 2F) angle(1F) inverse() push(35A 51M 10D 3F))
linear+F binary : (spin(27A 37M 9D 4F) L0(27A 37M 9D 4F) L1(27A 37M 9D 4F) ip(9A 9M) ii(54A 64M 9D 2F) d0(3A 4M 2F) angle(1F) inverse() push(35A 51M 10D 3F))
linear-F invariant: (spin(2F) L0(2F) L1(2F) ip(9A 9M) ii(27A 27M) d0(1F) angle(1F) inverse() push(5A 8M 1D))
linear-F forced : (spin(3A 12M 3F) L0(3A 12M 3F) L1(3A 12M 3F) ip(12A 15M 1F) ii(30A 39M 1F) d0(1F) angle(1F) inverse() push(8A 20M 1D 1F))
linear-F weak : (spin(3A 12M 3F) L0(3A 12M 3F) L1(3A 12M 3F) ip(12A 15M 1F) ii(30A 39M 1F) d0(3A 4M 2F) angle(1F) inverse() push(11A 26M 1D 2F))
linear-F flatten : (spin(8D 2F) L0(8D 2F) L1(8D 2F) ip(9A 9M 2D) ii(27A 27M 8D) d0(3A 4M 2F) angle(1F) inverse() push(8A 14M 9D 1F))
linear-F careless : (spin(2F) L0(2F) L1(2F) ip(9A 9M) ii(27A 27M) d0(3A 4M 2F) angle(1F) inverse() push(8A 14M 1D 1F))
linear-F binary : (spin(2F) L0(2F) L1(2F) ip(9A 9M) ii(27A 27M) d0(3A 4M 2F) angle(1F) inverse() push(8A 14M 1D 1F))
mixed invariant: (spin(2F) L0(2F) L1(2F) ip(17A 24M) ii(12A 16M) d0(1F) angle(1F) inverse() push(5A 7M))
mixed forced : (spin(2F) L0(2F) L1(2F) ip(20A 30M 1F) ii(15A 28M 1F) d0(1F) angle(1F) inverse() push(7A 18M 1F))
mixed weak : (spin(2F) L0(2F) L1(2F) ip(20A 30M 1F) ii(15A 28M 1F) d0(3A 4M 2F) angle(1F) inverse() push(10A 24M 2F))
mixed flatten : (spin(1F) L0(1F) L1(1F) ip(17A 15M 2D) ii(12A 12M) d0(3A 4M 2F) angle(1F) inverse() push(8A 15M 1F))
mixed careless : (spin(2F) L0(2F) L1(2F) ip(17A 24M) ii(12A 16M) d0(3A 4M 2F) angle(1F) inverse() push(8A 13M 1F))
mixed binary : (spin(2F) L0(2F) L1(2F) ip(17A 24M) ii(12A 16M) d0(3A 4M 2F) angle(1F) inverse() push(8A 13M 1F))
Clifford invariant: (spin(2F) L0(2F) L1(2F) ip(12A 28M 1F) ii(12A 16M) d0(1F) angle(1F) inverse() push())
Clifford forced : (spin(2F) L0(2F) L1(2F) ip(13A 29M 1F) ii(15A 28M 1F) d0(1F) angle(1F) inverse() push())
Clifford weak : (spin(2F) L0(2F) L1(2F) ip(13A 29M 1F) ii(15A 28M 1F) d0(2A 4M 2F) angle(1F) inverse() push())
Clifford flatten : (spin(1F) L0(1F) L1(1F) ip(11A 20M) ii(12A 19M) d0(2A 4M 2F) angle(1F) inverse() push())
Clifford careless : (spin(2F) L0(2F) L1(2F) ip(11A 18M) ii(12A 16M) d0(2A 4M 2F) angle(1F) inverse() push())
Clifford binary : (spin(2F) L0(2F) L1(2F) ip(11A 18M) ii(12A 16M) d0(2A 4M 2F) angle(1F) inverse() push())
Clifford gyro : (spin(2F) L0(2F) L1(2F) ip(5A 10M 2D) ii(4A 8M) d0(9A 12M 2D 5F) angle(7A 8M 2D 4F) inverse() push(11A 8M 2D 3F))
halfplane invariant: (spin(2F) L0(2F) L1(2F) ip(5A 10M 2D) ii(4A 8M) d0(8A 16M 2D 5F) angle(8A 16M 2D 5F) inverse() push(12A 16M 2D 4F))
polar basic : (spin(2F) L0() L1() ip(15A 25M 2D 12F) ii(53A 73M 2D 17F) d0() angle(1F) inverse(4A 4M) push())
polar improved : (spin(2F) L0() L1() ip(20A 41M 2D 10F) ii(59A 88M 2D 15F) d0() angle(1F) inverse(4A 4M) push())
polar F/F : (spin() L0() L1() ip(5A 7M 14F) ii(10A 11M 21F) d0() angle() inverse(14A) push())
polar F/T : (spin() L0() L1() ip(5A 7M 14F) ii(14A 8M 18F) d0() angle() inverse(14A) push())
polar T/F : (spin() L0() L1() ip(5A 7M 14F) ii(11A 11M 21F) d0() angle() inverse(2A) push())
polar T/T : (spin() L0() L1() ip(5A 7M 14F) ii(15A 8M 18F) d0() angle() inverse(2A) push())
```
## Results on the {4,3,5} honeycomb
```
test_loop_iso
linear+F invariant: (32,32,34,34,41,39,60,43,32,31,38,36,36,36,41,50,33,37,33,53)
linear+F forced : (22,22,24,25,25,23,25,25,25,26,23,26,24,26,24,25,24,24,24,26)
linear+F weak : (24,25,26,25,28,26,25,25,27,25,23,27,27,27,27,26,24,24,27,26)
linear+F flatten : (22,22,24,25,25,23,27,26,25,26,25,26,24,26,26,26,24,24,24,26)
linear+F careless : (26,25,26,25,25,26,27,25,26,26,23,26,27,27,26,26,25,24,27,26)
linear+F binary : (26,25,26,25,25,26,27,25,26,26,23,26,27,27,26,26,25,24,27,26)
linear-F invariant: (35,72,27,37,38,43,27,25,29,44,24,47,26,27,28,29,42,35,29,29)
linear-F forced : (26,25,26,25,25,26,25,25,26,27,25,26,27,27,26,27,24,25,24,26)
linear-F weak : (31,25,30,25,26,29,25,25,26,27,25,26,29,27,27,27,24,31,24,26)
linear-F flatten : (22,22,26,25,25,23,25,26,25,26,23,24,24,26,24,27,24,24,24,26)
linear-F careless : (22,22,24,25,26,23,25,25,25,26,23,24,27,26,24,26,24,24,27,26)
linear-F binary : (22,22,24,25,26,23,25,25,25,26,23,24,27,26,24,26,24,24,27,26)
mixed invariant: (49,47,44,47,42,44,47,45,46,47,45,49,46,50,45,49,42,48,49,45)
mixed forced : (51,50,49,49,47,47,46,47,48,47,48,49,50,50,49,47,52,47,48,49)
mixed weak : (51,50,49,49,47,47,46,47,48,47,48,49,50,50,49,47,52,47,48,49)
mixed flatten : (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
mixed careless : (51,50,46,50,47,47,48,47,48,47,48,49,50,50,49,51,52,51,48,49)
mixed binary : (51,50,46,50,47,47,48,47,48,47,48,49,50,50,49,51,52,51,48,49)
Clifford invariant: (46,47,44,44,42,44,47,45,45,46,45,50,46,50,45,39,42,44,49,45)
Clifford forced : (51,50,49,49,47,47,46,47,48,47,48,49,50,50,49,47,52,47,48,49)
Clifford weak : (51,50,49,49,47,47,46,47,48,47,48,49,50,50,49,47,52,47,48,49)
Clifford flatten : (55,78,999,58,57,81,55,79,98,999,58,51,66,52,99,51,58,54,88,66)
Clifford careless : (51,50,46,50,47,47,48,47,48,47,48,49,50,50,49,51,52,51,48,49)
Clifford binary : (51,50,46,50,47,47,48,47,48,47,48,49,50,50,49,51,52,51,48,49)
Clifford gyro : (51,50,49,50,50,47,48,47,51,47,50,49,50,50,49,51,52,54,50,51)
halfplane invariant: (51,50,49,50,47,47,48,47,48,47,50,49,50,50,49,51,52,51,48,51)
polar basic : (12,50,46,49,47,47,48,47,48,3,46,49,50,50,47,7,52,3,48,49)
polar improved : (49,46,49,50,50,47,48,47,51,47,50,49,50,50,49,51,48,51,48,49)
test_loop_point
linear+F invariant: (999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999)
linear+F forced : (22,22,24,25,25,23,25,25,25,26,23,26,24,26,24,25,24,24,24,26)
linear+F weak : (24,25,26,25,28,26,25,25,27,25,23,27,27,27,27,26,24,24,27,26)
linear+F flatten : (22,22,24,25,25,23,27,26,25,26,25,27,24,26,26,26,24,24,24,26)
linear+F careless : (26,25,26,25,25,26,27,25,26,26,23,26,27,27,26,26,25,24,27,26)
linear+F binary : (26,25,26,25,25,26,27,25,26,26,23,26,27,27,26,26,25,24,27,26)
linear-F invariant: (35,72,27,37,38,43,27,25,29,44,24,47,26,27,28,29,42,35,29,29)
linear-F forced : (26,25,26,25,25,26,25,25,26,27,25,26,27,27,26,27,24,25,24,26)
linear-F weak : (31,25,30,25,26,29,25,25,26,27,25,26,29,27,27,27,24,31,24,26)
linear-F flatten : (22,22,26,25,25,23,25,26,25,26,23,24,24,26,24,27,24,24,24,26)
linear-F careless : (22,22,24,25,26,23,25,25,25,26,23,24,27,26,24,26,24,24,27,26)
linear-F binary : (22,22,24,25,26,23,25,25,25,26,23,24,27,26,24,26,24,24,27,26)
mixed invariant: (24,22,22,25,23,25,26,22,24,22,23,25,26,27,24,23,25,22,23,24)
mixed forced : (26,25,26,25,25,23,25,25,26,27,23,26,27,26,26,26,25,24,24,26)
mixed weak : (27,25,30,25,25,23,25,25,26,27,23,26,27,26,26,28,25,24,24,28)
mixed flatten : (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
mixed careless : (26,25,24,25,25,26,27,25,26,26,26,26,27,27,26,26,24,25,24,26)
mixed binary : (26,25,24,25,25,26,27,25,26,26,26,26,27,27,26,26,24,25,24,26)
Clifford invariant: (46,45,48,44,42,44,45,48,47,48,46,41,45,49,48,39,50,48,51,45)
Clifford forced : (49,50,46,49,47,47,46,45,48,47,45,49,50,50,49,51,52,47,48,49)
Clifford weak : (49,50,46,49,47,47,46,45,48,47,45,49,50,50,49,51,52,47,48,49)
Clifford flatten : (50,48,46,49,47,46,48,47,48,47,45,47,50,50,49,47,42,47,48,49)
Clifford careless : (3,3,1,2,2,2,2,2,3,3,3,2,3,2,1,2,3,3,1,3)
Clifford binary : (51,48,49,49,47,47,48,47,48,47,45,49,50,50,49,47,52,47,48,49)
Clifford gyro : (51,50,46,50,50,47,48,48,51,47,50,49,50,50,49,51,52,51,48,49)
halfplane invariant: (49,50,46,49,47,47,48,47,51,47,50,49,50,50,49,51,52,51,48,49)
polar basic : (12,50,46,49,47,47,48,47,48,3,46,49,50,50,47,7,52,3,48,49)
polar improved : (49,46,49,50,50,47,48,47,51,47,50,49,50,50,49,51,48,51,48,49)
test_angledist
linear+F invariant: (999,999,999)
linear+F forced : (26,26,32)
linear+F weak : (26,32,32)
linear+F flatten : (26,26,32)
linear+F careless : (26,26,32)
linear+F binary : (26,26,32)
linear-F invariant: (999,999,999)
linear-F forced : (26,26,32)
linear-F weak : (32,26,32)
linear-F flatten : (26,26,32)
linear-F careless : (26,32,32)
linear-F binary : (26,32,32)
mixed invariant: (999,999,999)
mixed forced : (26,26,32)
mixed weak : (26,26,32)
mixed flatten : (2,2,1)
mixed careless : (26,26,32)
mixed binary : (26,26,32)
Clifford invariant: (999,999,999)
Clifford forced : (57,57,47)
Clifford weak : (69,57,47)
Clifford flatten : (57,57,47)
Clifford careless : (5,4,4)
Clifford binary : (57,57,47)
Clifford gyro : (57,69,57)
halfplane invariant: (999,999,999)
polar basic : (532,532,5)
polar improved : (532,532,532)
test_similarity
linear+F invariant: (17,16,16,16,16,16,17,16,17,16,17,17,16,16,16,17,17,16,16,17)
linear+F forced : (17,17,17,18,19,18,18,18,18,17,18,18,17,18,17,18,18,17,17,17)
linear+F weak : (17,17,17,18,18,18,18,18,17,17,18,18,17,18,17,18,17,17,17,17)
linear+F flatten : (17,17,17,18,18,18,18,18,17,17,18,18,17,18,17,18,18,17,17,17)
linear+F careless : (17,17,17,18,19,18,17,18,17,17,18,18,17,18,17,17,18,17,17,17)
linear+F binary : (17,17,17,18,19,18,17,18,17,17,18,18,17,18,17,17,18,17,17,17)
linear-F invariant: (17,18,18,17,17,17,17,18,17,18,17,18,17,18,17,17,17,17,17,17)
linear-F forced : (18,19,18,18,18,18,18,18,18,18,18,19,19,18,19,19,18,19,18,18)
linear-F weak : (18,19,18,18,18,17,18,18,18,18,19,19,19,18,19,19,18,19,18,18)
linear-F flatten : (19,18,19,18,18,18,18,20,18,19,18,18,20,19,19,19,18,19,18,18)
linear-F careless : (19,18,18,18,19,18,18,20,19,18,18,19,19,19,18,18,19,18,18,18)
linear-F binary : (19,18,18,18,19,18,18,20,19,18,18,19,19,19,18,18,19,18,18,18)
mixed invariant: (18,19,19,19,19,19,18,19,19,18,18,19,19,19,19,19,19,18,19,18)
mixed forced : (19,19,19,18,18,19,19,18,19,19,19,19,19,19,19,20,19,19,19,19)
mixed weak : (19,19,19,18,18,19,19,18,18,19,19,19,19,20,19,18,19,18,18,19)
mixed flatten : (19,19,18,19,19,18,19,20,18,19,19,20,19,19,20,18,19,19,19,20)
mixed careless : (19,19,19,19,19,20,20,19,19,19,19,19,19,19,19,18,19,19,19,19)
mixed binary : (19,19,19,19,19,20,20,19,19,19,19,19,19,19,19,18,19,19,19,19)
Clifford invariant: (34,33,34,35,33,34,33,32,34,34,33,34,34,34,34,35,33,34,33,34)
Clifford forced : (35,36,35,37,36,35,35,36,36,36,35,37,35,36,36,36,36,36,36,35)
Clifford weak : (35,36,35,37,36,35,35,36,36,36,35,37,35,36,36,36,36,36,36,35)
Clifford flatten : (35,36,35,35,36,36,37,37,36,36,36,36,36,36,38,35,37,36,37,36)
Clifford careless : (36,36,38,36,37,35,35,37,36,36,37,35,37,35,35,35,35,37,36,38)
Clifford binary : (36,36,38,36,37,35,35,37,36,36,37,35,37,35,35,35,35,37,36,38)
Clifford gyro : (36,37,38,36,35,37,35,36,38,36,36,36,36,36,36,37,35,34,35,36)
halfplane invariant: (36,35,36,36,37,38,38,36,37,36,37,36,35,36,35,37,35,36,36,35)
polar basic : (17,18,18,17,17,17,17,18,18,18,17,17,17,18,17,17,17,17,17,17)
polar improved : (34,37,35,36,37,36,34,36,35,35,35,34,36,35,36,36,35,35,35,35)
test_dissimilarity
linear+F invariant: (63,63,64,75,63,63,64,64,64,64,63,63,73,66,63,63,76,74,64,64)
linear+F forced : (6,7,7,7,7,7,7,7,7,7,7,7,6,7,7,7,7,7,7,6)
linear+F weak : (7,9,8,8,7,8,8,7,13,8,7,8,6,7,7,8,8,7,8,7)
linear+F flatten : (8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,7,7,7)
linear+F careless : (7,7,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6)
linear+F binary : (7,7,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6)
linear-F invariant: (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
linear-F forced : (10,10,10,10,10,10,10,10,10,10,10,9,9,10,9,10,10,9,10,9)
linear-F weak : (12,9,9,14,10,9,9,11,11,11,11,13,9,12,10,13,9,10,15,10)
linear-F flatten : (10,10,10,9,9,9,10,10,10,10,10,10,10,9,9,10,10,10,10,10)
linear-F careless : (10,9,9,10,9,10,9,10,9,10,10,10,10,10,9,9,9,10,10,9)
linear-F binary : (10,9,9,10,9,10,9,10,9,10,10,10,10,10,9,9,9,10,10,9)
mixed invariant: (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
mixed forced : (10,10,10,10,10,10,10,10,9,10,10,10,10,10,9,9,9,10,9,10)
mixed weak : (10,16,11,15,9,12,10,9,10,14,10,10,10,11,11,11,11,10,11,11)
mixed flatten : (9,10,9,10,10,10,9,10,9,10,10,10,10,9,10,9,10,9,9,9)
mixed careless : (10,9,9,10,10,10,10,9,10,10,9,10,10,10,10,10,9,9,9,10)
mixed binary : (10,9,9,10,10,10,10,9,10,10,9,10,10,10,10,10,9,9,9,10)
Clifford invariant: (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
Clifford forced : (18,17,17,19,20,17,18,18,19,19,18,18,17,19,18,18,19,18,19,18)
Clifford weak : (19,17,17,18,19,17,18,18,17,18,18,18,17,18,18,17,18,18,19,19)
Clifford flatten : (19,18,18,18,19,18,18,18,18,18,18,19,19,18,18,19,18,19,18,18)
Clifford careless : (18,18,18,18,18,18,18,19,19,18,18,18,18,18,18,19,18,19,19,18)
Clifford binary : (18,18,18,18,18,18,18,19,19,18,18,18,18,18,18,19,18,19,19,18)
Clifford gyro : (18,17,18,19,19,19,18,19,18,19,18,18,19,19,19,19,18,18,19,17)
halfplane invariant: (34,35,36,35,35,35,35,34,35,35,36,35,35,37,36,37,35,35,34,35)
polar basic : (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
polar improved : (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
test_other
linear+F invariant: (73,50,65,68,65,50,68,50,64,67,65,63,50,66,63,50,68,50,64,67)
linear+F forced : (10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10)
linear+F weak : (10,10,11,10,11,17,10,12,13,12,11,11,10,10,10,11,11,16,10,14)
linear+F flatten : (10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10)
linear+F careless : (10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10)
linear+F binary : (10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10)
linear-F invariant: (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
linear-F forced : (12,12,13,12,12,12,12,12,12,12,12,13,12,12,12,12,12,12,12,12)
linear-F weak : (12,12,12,12,13,12,14,13,12,15,12,14,16,12,15,12,12,16,12,12)
linear-F flatten : (12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12)
linear-F careless : (13,12,13,12,12,12,12,12,12,12,12,12,12,12,12,12,13,12,12,12)
linear-F binary : (13,12,13,12,12,12,12,12,12,12,12,12,12,12,12,12,13,12,12,12)
mixed invariant: (359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359)
mixed forced : (14,14,14,13,14,13,14,13,14,14,13,14,14,13,13,14,13,14,14,13)
mixed weak : (15,13,14,13,14,14,16,13,16,14,14,14,13,13,13,14,13,13,14,15)
mixed flatten : (14,13,13,14,13,14,14,14,13,13,14,14,14,14,13,14,14,13,14,14)
mixed careless : (14,14,13,13,13,13,13,13,14,14,13,14,14,13,13,14,13,13,14,13)
mixed binary : (14,14,13,13,13,13,13,13,14,14,13,14,14,13,13,14,13,13,14,13)
Clifford invariant: (361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361)
Clifford forced : (22,21,21,21,22,21,22,22,22,22,22,21,21,22,22,22,22,21,21,22)
Clifford weak : (22,21,21,21,22,21,22,22,22,22,22,21,21,22,22,22,22,21,21,22)
Clifford flatten : (22,22,22,22,22,22,22,22,22,22,22,21,21,22,22,22,22,22,22,22)
Clifford careless : (22,21,22,22,22,23,21,21,21,22,22,21,22,21,22,22,22,22,22,22)
Clifford binary : (22,21,22,22,22,23,21,21,21,22,22,21,22,21,22,22,22,22,22,22)
Clifford gyro : (23,24,23,23,23,24,23,23,23,23,23,23,23,23,23,23,23,24,23,23)
halfplane invariant: (35,35,35,35,35,35,35,35,35,36,37,35,35,35,36,36,35,35,35,35)
polar basic : (356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356)
polar improved : (360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360)
test_walk
linear+F invariant: (614,576,600,601,581,579,609,600,596,565,596,610,583,588,595,606,591,592,579,614)
linear+F forced : (598,653,583,603,584,597,581,582,618,568,608,621,586,596,636,604,584,619,585,586)
linear+F weak : (606,604,616,593,604,592,583,611,598,576,597,579,603,584,575,591,584,587,600,591)
linear+F flatten : (619,599,580,615,608,615,600,593,601,577,615,603,579,590,635,589,589,586,560,589)
linear+F careless : (620,596,575,593,602,591,576,587,603,574,596,604,589,615,599,623,586,620,612,602)
linear+F binary : (620,596,575,593,602,591,576,587,603,574,596,604,589,615,599,623,586,620,612,602)
linear-F invariant: (293,291,289,304,1295,307,285,302,290,297,1311,289,320,292,305,289,285,2132,2137,284)
linear-F forced : (1292,288,1303,1298,301,1288,1285,1290,297,288,304,298,293,299,1300,1291,1294,1276,1281,1288)
linear-F weak : (288,288,284,300,301,291,286,294,297,288,304,288,293,299,300,286,291,10000,281,293)
linear-F flatten : (1292,1297,1303,1311,1292,1285,1296,1297,10000,1299,1321,298,1311,1288,293,1315,1287,1280,1283,1286)
linear-F careless : (1288,1292,1288,303,1295,1295,1285,1303,291,1290,1310,289,1321,1290,1298,1289,1284,1276,1282,1287)
linear-F binary : (1288,1292,1288,303,1295,1295,1285,1303,291,1290,1310,289,1321,1290,1298,1289,1284,1276,1282,1287)
mixed invariant: (592,582,592,572,580,598,589,597,594,567,595,600,605,591,602,611,596,580,589,587)
mixed forced : (592,587,597,579,582,627,592,603,603,565,596,576,589,591,596,606,592,594,591,592)
mixed weak : (592,587,597,579,582,627,592,603,603,565,596,576,589,591,596,606,592,594,591,592)
mixed flatten : (28,363,52,303,296,336,292,316,288,287,308,298,298,298,310,314,293,371,353,324)
mixed careless : (592,582,592,572,580,598,589,597,594,567,595,600,605,591,602,611,596,580,589,587)
mixed binary : (592,582,592,572,580,598,589,597,594,567,595,600,605,591,602,611,596,580,589,587)
Clifford invariant: (592,582,592,572,580,598,589,597,594,567,595,600,605,591,602,611,596,580,589,587)
Clifford forced : (592,587,597,579,582,627,592,603,603,565,596,576,589,591,596,606,592,594,591,592)
Clifford weak : (592,587,597,579,582,627,592,603,603,565,596,576,589,591,596,606,592,594,591,592)
Clifford flatten : (614,604,595,598,570,595,589,587,599,573,599,585,603,602,634,602,596,600,584,596)
Clifford careless : (592,582,592,572,580,598,589,597,594,567,595,600,605,591,602,611,596,580,589,587)
Clifford binary : (592,582,592,572,580,598,589,597,594,567,595,600,605,591,602,611,596,580,589,587)
Clifford gyro : (601,581,606,584,595,604,609,589,582,596,601,601,579,601,619,589,588,583,588,587)
halfplane invariant: (576,614,594,596,580,604,594,600,610,566,593,584,603,597,606,608,588,579,575,590)
polar basic : (25,1047,69,1045,1045,1033,59,1065,1041,67,1064,56,1044,1034,70,68,55,53,53,55)
polar improved : (55,58,70,1045,1045,1057,56,1065,59,68,1065,55,1044,1034,1070,66,1056,53,52,58)
test_close
linear+F invariant: (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,22)
linear+F forced : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
linear+F weak : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
linear+F flatten : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
linear+F careless : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
linear+F binary : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
linear-F invariant: (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8)
linear-F forced : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
linear-F weak : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
linear-F flatten : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
linear-F careless : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)
linear-F binary : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)
mixed invariant: (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)
mixed forced : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)
mixed weak : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)
mixed flatten : (5000,2716,1760,1229,986,774,667,584,500,460,430,365,344,299,286,283,257,237,231,234)
mixed careless : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
mixed binary : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
Clifford invariant: (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
Clifford forced : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
Clifford weak : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
Clifford flatten : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
Clifford careless : (1666,1539,1427,1047,817,653,547,483,418,381,350,308,283,260,247,230,212,202,188,183)
Clifford binary : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
Clifford gyro : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
halfplane invariant: (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
polar basic : (0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
polar improved : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
test_count
linear+F invariant: (spin(60A 78M 24D 5F) L0(60A 78M 24D 5F) L1(60A 78M 24D 5F) ip(16A 16M) ii(124A 142M 24D 3F) d0(1F) angle(1F) inverse() push(70A 96M 25D 3F))
linear+F forced : (spin(64A 98M 24D 6F) L0(64A 98M 24D 6F) L1(64A 98M 24D 6F) ip(20A 24M 1F) ii(128A 162M 24D 4F) d0(1F) angle(1F) inverse() push(74A 116M 25D 4F))
linear+F weak : (spin(68A 102M 24D 6F) L0(68A 102M 24D 6F) L1(68A 102M 24D 6F) ip(20A 24M 1F) ii(132A 166M 24D 4F) d0(4A 5M 2F) angle(1F) inverse() push(82A 128M 25D 5F))
linear+F flatten : (spin(64A 82M 39D 5F) L0(64A 82M 39D 5F) L1(64A 82M 39D 5F) ip(16A 16M 3D) ii(128A 146M 39D 3F) d0(4A 5M 2F) angle(1F) inverse() push(78A 108M 40D 4F))
linear+F careless : (spin(64A 82M 24D 5F) L0(64A 82M 24D 5F) L1(64A 82M 24D 5F) ip(16A 16M) ii(128A 146M 24D 3F) d0(4A 5M 2F) angle(1F) inverse() push(78A 108M 25D 4F))
linear+F binary : (spin(64A 82M 24D 5F) L0(64A 82M 24D 5F) L1(64A 82M 24D 5F) ip(16A 16M) ii(128A 146M 24D 3F) d0(4A 5M 2F) angle(1F) inverse() push(78A 108M 25D 4F))
linear-F invariant: (spin(2F) L0(2F) L1(2F) ip(16A 16M) ii(64A 64M) d0(1F) angle(1F) inverse() push(10A 18M 1D))
linear-F forced : (spin(4A 20M 3F) L0(4A 20M 3F) L1(4A 20M 3F) ip(20A 24M 1F) ii(68A 84M 1F) d0(1F) angle(1F) inverse() push(14A 38M 1D 1F))
linear-F weak : (spin(4A 20M 3F) L0(4A 20M 3F) L1(4A 20M 3F) ip(20A 24M 1F) ii(68A 84M 1F) d0(4A 5M 2F) angle(1F) inverse() push(18A 46M 1D 2F))
linear-F flatten : (spin(15D 2F) L0(15D 2F) L1(15D 2F) ip(16A 16M 3D) ii(64A 64M 15D) d0(4A 5M 2F) angle(1F) inverse() push(14A 26M 16D 1F))
linear-F careless : (spin(2F) L0(2F) L1(2F) ip(16A 16M) ii(64A 64M) d0(4A 5M 2F) angle(1F) inverse() push(14A 26M 1D 1F))
linear-F binary : (spin(2F) L0(2F) L1(2F) ip(16A 16M) ii(64A 64M) d0(4A 5M 2F) angle(1F) inverse() push(14A 26M 1D 1F))
mixed invariant: (spin(2F) L0(2F) L1(2F) ip(52A 64M) ii(56A 64M) d0(1F) angle(1F) inverse() push(7A 10M))
mixed forced : (spin(2F) L0(2F) L1(2F) ip(56A 72M 1F) ii(63A 88M 1F) d0(1F) angle(1F) inverse() push(10A 30M 1F))
mixed weak : (spin(2F) L0(2F) L1(2F) ip(56A 72M 1F) ii(63A 88M 1F) d0(4A 5M 2F) angle(1F) inverse() push(14A 38M 2F))
mixed flatten : (spin(1F) L0(1F) L1(1F) ip(52A 49M 3D) ii(56A 56M) d0(4A 5M 2F) angle(1F) inverse() push(11A 21M 1F))
mixed careless : (spin(2F) L0(2F) L1(2F) ip(52A 64M) ii(56A 64M) d0(4A 5M 2F) angle(1F) inverse() push(11A 18M 1F))
mixed binary : (spin(2F) L0(2F) L1(2F) ip(52A 64M) ii(56A 64M) d0(4A 5M 2F) angle(1F) inverse() push(11A 18M 1F))
Clifford invariant: (spin(2F) L0(2F) L1(2F) ip(39A 68M 1F) ii(56A 64M) d0(1F) angle(1F) inverse() push())
Clifford forced : (spin(2F) L0(2F) L1(2F) ip(39A 68M 1F) ii(63A 88M 1F) d0(1F) angle(1F) inverse() push())
Clifford weak : (spin(2F) L0(2F) L1(2F) ip(39A 68M 1F) ii(63A 88M 1F) d0(3A 5M 2F) angle(1F) inverse() push())
Clifford flatten : (spin(1F) L0(1F) L1(1F) ip(36A 51M) ii(56A 71M) d0(3A 5M 2F) angle(1F) inverse() push())
Clifford careless : (spin(2F) L0(2F) L1(2F) ip(36A 48M) ii(56A 64M) d0(3A 5M 2F) angle(1F) inverse() push())
Clifford binary : (spin(2F) L0(2F) L1(2F) ip(36A 48M) ii(56A 64M) d0(3A 5M 2F) angle(1F) inverse() push())
Clifford gyro : (spin(8A 1F) L0(8A 1F) L1(8A 1F) ip(23A 38M 1D) ii(24A 32M) d0(23A 26M 1D 5F) angle(20A 21M 1D 4F) inverse() push(28A 21M 1D 3F))
halfplane invariant: (spin(8A 2F) L0(8A 2F) L1(8A 2F) ip(23A 38M 1D) ii(24A 32M) d0(23A 38M 1D 5F) angle(23A 38M 1D 5F) inverse() push(31A 38M 1D 4F))
polar basic : (spin(2F) L0() L1() ip(24A 35M 3D 12F) ii(114A 135M 3D 17F) d0() angle(1F) inverse(9A 9M) push())
polar improved : (spin(2F) L0() L1() ip(29A 51M 3D 10F) ii(120A 150M 3D 15F) d0() angle(1F) inverse(9A 9M) push())
```

538
devmods/reps/tests.cpp Normal file
View File

@ -0,0 +1,538 @@
namespace reps {
constexpr int test_dim = 3;
constexpr bool in_hyperbolic = true;
int edges, valence;
void prepare_tests() {
hr::start_game();
if(MDIM != test_dim) throw hr::hr_exception("fix your dimension");
if(!(in_hyperbolic ? hyperbolic : sphere)) throw hr::hr_exception("fix your geometry");
if(hr::variation != hr::eVariation::pure) throw hr::hr_exception("fix your variation");
if(quotient) throw hr::hr_exception("fix your quotient");
if(test_dim == 4) {
if(cginf.tiling_name != "{4,3,5}") throw hr::hr_exception("only {4,3,5} implemented in 3D");
edges = 4;
valence = 5;
}
else {
edges = hr::cwt.at->type;
bool ok;
valence = hr::get_valence(hr::cwt.at, 1, ok);
}
}
struct data {
using Number = hr::ld;
static constexpr int Dim = test_dim;
static constexpr int Flipped = in_hyperbolic ? test_dim-1 : -1;
};
struct countdata {
using Number = countfloat;
static constexpr int Dim = data::Dim;
static constexpr int Flipped = data::Flipped;
};
struct bigdata {
using Number = big;
static constexpr int Dim = data::Dim;
static constexpr int Flipped = data::Flipped;
};
using good = rep_linear_nn<bigdata>;
int debug; // 0 -- never, 1 -- only errors, 2 -- always
vector<cell*> randomwalk(std::mt19937& gen, cell *from, int dist) {
vector<cell*> res = { from };
while(celldistance(from, res.back()) < dist) {
int i = gen() % res.back()->type;
res.push_back(res.back()->cmove(i));
}
return res;
}
template<class N> N rand01(std::mt19937& gen) { return N(((gen() & HRANDMAX) | 1) / (HRANDMAX+1.)); }
vector<cell*> random_return(std::mt19937& gen, cell *from, cell *to, ld peq, ld pbad) {
vector<cell*> res = { from };
ld d = celldistance(to, from);
while(to != res.back()) {
int i = gen() % res.back()->type;
cell *r1 = res.back()->cmove(i);
ld d1 = celldistance(to, r1);
bool ok = d1 < d ? true : d1 == d ? rand01<ld>(gen) < peq : rand01<ld>(gen) < pbad;
if(ok) { res.push_back(r1); d = d1; }
}
return res;
}
vector<cell*> vrev(vector<cell*> a) { reverse(a.begin(), a.end()); return a; }
vector<cell*> vcon(vector<cell*> a, vector<cell*> b) { for(auto bi: b) a.push_back(bi); return a; }
template<class N> N edge_of_triangle_with_angles(N alpha, N beta, N gamma) {
N of = (cos(alpha) + cos(beta) * cos(gamma)) / (sin(beta) * sin(gamma));
if(hyperbolic) return acosh(of);
return acos(of);
}
template<class N> N get_edgelen() {
N beta = get_deg<N>(360)/valence;
return edge_of_triangle_with_angles<N> (beta, get_deg<N>(180)/edges, get_deg<N>(180)/edges);
}
template<class T> typename T::isometry cpush(int c, typename T::data::Number distance) {
return T::lorentz(c, T::data::Dim-1, distance);
}
template<class T> struct cube_rotation_data_t {
std::vector<std::pair<hr::transmatrix, typename T::isometry>> mapping;
};
template<class T> cube_rotation_data_t<T> cube_rotation_data;
template<class T> cube_rotation_data_t<T>& build_cube_rotation() {
auto& crd = cube_rotation_data<T>;
auto& crdm = crd.mapping;
// using N = typename T::data::Number;
if(crdm.empty()) {
crdm.emplace_back(hr::Id, T::id());
for(int i=0; i<isize(crdm); i++)
for(int j=0; j<3; j++) for(int k=0; k<3; k++) if(j != k) {
hr::transmatrix U = crdm[i].first * hr::cspin90(j, k);
bool is_new = true;
for(int i0=0; i0<isize(crdm); i0++) if(hr::eqmatrix(U, crdm[i0].first)) is_new = false;
// if(is_new) crdm.emplace_back(U, T::apply(crdm[i].second, T::cspin(j, k, get_deg<N>(90))));
if(is_new) crdm.emplace_back(U, T::apply(crdm[i].second, T::cspin90(j, k)));
}
if(isize(crdm) != 24) {
println(hlog, "the number of rotations found: ", isize(crdm));
throw hr::hr_exception("wrong number of rotations");
}
}
return crd;
}
template<class T, class U> U apply_move(cell *a, cell *b, U to) {
if(a == b) return to;
using N = typename T::data::Number;
if constexpr(test_dim == 4) {
auto& crdm = build_cube_rotation<T>().mapping;
int ida = neighborId(a, b);
auto M = hr::currentmap->adj(a, ida);
for(int i0=0; i0<isize(crdm); i0++)
for(int i1=0; i1<isize(crdm); i1++)
if(hr::eqmatrix(M, crdm[i0].first * hr::xpush(1.06128) * crdm[i1].first)) {
to = T::apply(crdm[i1].second, to);
to = T::apply(cpush<T>(0, get_edgelen<N>()), to);
to = T::apply(crdm[i0].second, to);
return to;
}
println(hlog, "tessf = ", hr::cgip->tessf);
println(hlog, "len = ", get_edgelen<N>());
throw hr::hr_exception("rotation not found");
}
int ida = neighborId(a, b);
int idb = neighborId(b, a);
auto P1 = T::cspin(0, 1, idb * get_deg<N>(360) / edges);
to = T::apply(P1, to);
auto P2 = cpush<T>(0, get_edgelen<N>());
to = T::apply(P2, to);
auto P3 = T::cspin(1, 0, get_deg<N>(180) + ida * get_deg<N>(360) / edges);
to = T::apply(P3, to);
return to;
}
template<class T, class U> U apply_path(vector<cell*> path, U to) {
for(int i=hr::isize(path)-2; i>=0; i--)
to = apply_move<T, U> (path[i], path[i+1], to);
return to;
}
template<class T> double test_sanity(int i) {
hr::indenter in(2);
ld d1 = 1.25, d2 = 1.5;
typename good::point gp = good::center();
gp = good::apply(cpush<good>(0, d1), gp);
gp = good::apply(cpush<good>(1, d2), gp);
gp = good::apply(good::cspin(0, 1, get_deg<big>(72)), gp);
typename T::point p = T::center();
p = T::apply(cpush<T>(0, d1), p);
p = T::apply(cpush<T>(1, d2), p);
p = T::apply(T::cspin(0, 1, get_deg<typename T::data::Number>(72)), p);
double res = 0;
#define ADD(x, y) if(debug) println(hlog, "VS ", x, ",", y); res += pow( double(x-y), 2);
#define ADDA(x, y) if(debug) println(hlog, "VS ", x, ",", y); res += pow( cyclefix_on(double(x-y)), 2);
if(debug) println(hlog, "p=", T::print(p));
ADD(T::get_coord(p, 0), good::get_coord(gp, 0));
ADD(T::get_coord(p, 1), good::get_coord(gp, 1));
ADD(T::get_coord(p, 2), good::get_coord(gp, 2));
ADD(T::dist0(p), good::dist0(gp));
ADDA(T::angle(p), good::angle(gp));
return res;
}
template<class T> double test_consistency(int i) {
double res = 0;
using D = typename T::data;
auto a = cpush<T>(0, 1);
auto b = cpush<T>(1, 1);
auto c = cpush<T>(0, 1);
auto s = T::apply(T::apply(a, b), c);
auto sp = T::apply(s, T::center());
auto s1 = T::apply(a, T::apply(b, c));
auto sp1 = T::apply(s1, T::center());
auto sp2 = T::apply(a, T::apply(b, T::apply(c, T::center())));
ADD(T::dist0(sp), T::dist0(sp1));
ADD(T::dist0(sp), T::dist0(sp2));
for(int i=0; i<D::Dim; i++) { ADD(T::get_coord(sp, i), T::get_coord(sp1, i)); }
for(int i=0; i<D::Dim; i++) { ADD(T::get_coord(sp, i), T::get_coord(sp2, i)); }
if(test_dim == 3) {
ADDA(T::angle(sp), T::angle(sp1));
ADDA(T::angle(sp), T::angle(sp2));
}
return res;
}
template<class T> double test_tba(int id) {
std::mt19937 testr; testr.seed(id);
for(int i=0; i<hr::cwt.at->type; i++) {
vector<cell*> p = {hr::cwt.at, hr::cwt.at->cmove(i), hr::cwt.at};
auto h = apply_path<T>(p, T::center());
if(debug == 2) println(hlog, "i=", hr::lalign(3, i), " h = ", T::print(h), " distance =", T::dist0(h));
if(T::dist0(h) >= 0 && T::dist0(h) < 0.1) continue;
exit(1);
}
return 999;
}
template<class T> double test_loop_point(int id) {
std::mt19937 testr; testr.seed(id);
for(int i=0; i<100; i++) {
auto p1 = randomwalk(testr, hr::cwt.at, i);
auto p2 = random_return(testr, p1.back(), hr::cwt.at, 1/16., 1/32.);
auto p = vcon(p1, p2);
if(debug == 2) println(hlog, "path = ", p);
auto h = apply_path<T>(vrev(p), T::center());
if(debug == 2) println(hlog, "i=", hr::lalign(3, i), " h = ", T::print(h), " distance =", T::dist0(h));
if(T::dist0(h) >= 0 && T::dist0(h) < 0.1) continue;
return i;
}
return 999;
}
template<class T> double test_loop_iso(int id) {
std::mt19937 testr; testr.seed(id);
for(int i=0; i<100; i++) {
auto p1 = randomwalk(testr, hr::cwt.at, i);
auto p2 = random_return(testr, p1.back(), hr::cwt.at, 1/16., 1/32.);
auto p = vcon(p1, p2);
if(debug == 2) println(hlog, "path = ", p);
auto h = apply_path<T>(vrev(p), T::id());
auto hr = T::apply(h, T::center());
// println(hlog, "i=", hr::lalign(3, i), " h=", hr);
if(debug == 2) println(hlog, "i=", hr::lalign(3, i), " hr = ", T::print(hr), " distance = ", T::dist0(hr));
if(T::dist0(hr) >= 0 && T::dist0(hr) < 0.1) continue;
if(debug == 1) println(hlog, "i=", hr::lalign(3, i), " hr = ", T::print(hr), " distance = ", T::dist0(hr));
return i;
}
return 999;
}
template<class T, class F> vector<T> repeat_test(const F& f, int qty) {
vector<T> res;
for(int i=0; i<qty; i++) res.push_back(f(i));
return res;
}
template<class T> typename T::isometry random_rotation(std::mt19937& testr) {
using D = typename T::data;
using N = typename D::Number;
if(D::Dim == 3) {
auto alpha = rand01<N>(testr) * get_deg<N>(360);
return T::cspin(0, 1, alpha);
}
auto x = T::id();
for(int i=0; i<100; i++) {
int c0 = testr() % (D::Dim-1);
int c1 = testr() % (D::Dim-1);
if(c0 == c1) continue;
auto len = rand01<N>(testr) * get_deg<N>(360);
x = T::apply(T::cspin(c0, c1, len), x);
}
return x;
}
template<class T> typename T::isometry random_iso(std::mt19937& testr) {
auto x = T::id();
using D = typename T::data;
using N = typename D::Number;
for(int i=0; i<100; i++) {
int c0 = testr() % D::Dim;
int c1 = testr() % D::Dim;
if(c0 == c1) continue;
if(c0 == D::Flipped) std::swap(c0, c1);
N len = c1 < D::Flipped ? rand01<N>(testr) * get_deg<N>(360) : (rand01<N>(testr)-N(0.5)) * N(0.25);
if(c1 == D::Flipped) x = T::apply(T::lorentz(c0, c1, len), x);
else x = T::apply(T::cspin(c0, c1, len), x);
}
return x;
}
template<class T> std::string test_count(int id) {
std::mt19937 testr; testr.seed(id);
hr::shstream out;
auto A = random_iso<T>(testr);
auto B = random_iso<T>(testr);
auto C = random_iso<T>(testr);
auto P = T::apply(C, T::center());
for(int i=0; i<9; i++) {
counts.clear();
for(auto& i: cbc) i = 0;
std::string s;
switch(i) {
case 0: s = "spin"; T::cspin(0, 1, countfloat(.5)); break;
case 1: s = "L0"; T::lorentz(0, T::data::Dim-1, countfloat(.5)); break;
case 2: s = "L1"; T::lorentz(1, T::data::Dim-1, countfloat(.5)); break;
case 3: s = "ip"; T::apply(A, P); break;
case 4: s = "ii"; T::apply(A, B); break;
case 5: s = "d0"; T::dist0(P); break;
case 6: s = "angle"; T::angle(P); break;
case 7: s = "inverse"; T::inverse(A); break;
case 8: s = "push"; T::push(P); break;
}
if(i) print(out, " ");
if(1) {
print(out, s, "(");
bool nsp = false;
for(int i=1; i<5; i++) if(cbc[i]) {
if(nsp) print(out, " ");
print(out, cbc[i], hr::s0+".AMDF"[i]);
nsp = true;
}
print(out, ")");
}
}
return out.s;
}
template<class A, class B> bool closeto(A a, B b) { return abs(a-b) < 0.1; }
template<class A, class B> bool closeto_angle(A a, B b) { return abs(cyclefix_on(double(a-b))) < 0.1; }
template<class T> double test_angledist(int id) {
std::mt19937 testr; testr.seed(id);
for(int i=1; i<1000; i += (1 + i/5)) {
auto p = randomwalk(testr, hr::cwt.at, i);
auto h = apply_path<T>(vrev(p), T::center());
auto gh = apply_path<good>(vrev(p), good::center());
if(debug == 2) {
println(hlog, "good: ", good::print(gh), " dist = ", good::dist0(gh), " angle = ", good::angle(gh));
println(hlog, "test: ", T::print(h), " dist = ", T::dist0(h), " angle = ", T::angle(h), " [i=", i, "]");
}
if(closeto(good::dist0(gh), T::dist0(h)) && closeto_angle(good::angle(gh), T::angle(h))) continue;
if(debug == 1) {
println(hlog, "good: ", good::print(gh), " dist = ", good::dist0(gh), " angle = ", good::angle(gh));
println(hlog, "test: ", T::print(h), " dist = ", T::dist0(h), " angle = ", T::angle(h), " [i=", i, "]");
}
return i;
}
return 999;
}
#define TEST_VARIANTS(x,D,q,t,rn, r) \
nm = nmInvariant; println(hlog, rn, "invariant: ", repeat_test<t>(x<r<D>>, q)); \
nm = nmForced; println(hlog, rn, "forced : ", repeat_test<t>(x<r<D>>, q)); \
nm = nmWeak; println(hlog, rn, "weak : ", repeat_test<t>(x<r<D>>, q)); \
nm = nmFlatten; println(hlog, rn, "flatten : ", repeat_test<t>(x<r<D>>, q)); \
nm = nmCareless; println(hlog, rn, "careless : ", repeat_test<t>(x<r<D>>, q)); \
nm = nmBinary; println(hlog, rn, "binary : ", repeat_test<t>(x<r<D>>, q));
/*
#define TEST_ALL(x,D,q,t) \
println(hlog, "HyperRogue: ", repeat_test<t>(x<rep_hr<D>>, q)); \
polar_mod = polar_choose = false; println(hlog, "high polar: ", repeat_test<t>(x<rep_high_polar<D>>, q)); \
if(test_dim == 3) { polar_mod = polar_choose = false; println(hlog, "low polar : ", repeat_test<t>(x<rep_polar2<D>>, q)); }
*/
// println(hlog, "HyperRogue : ", repeat_test<t>(x<rep_hr<D>>, q));
#define TEST_ALL(x,D,q,t) \
fix_matrices = true; TEST_VARIANTS(x,D,q,t,"linear+F ", rep_linear) \
fix_matrices = false; TEST_VARIANTS(x,D,q,t,"linear-F ", rep_linear) \
TEST_VARIANTS(x,D,q,t,"mixed ", rep_mixed) \
TEST_VARIANTS(x,D,q,t,"Clifford ", rep_clifford) \
nm = nmFlatten; println(hlog, "Clifford gyro : ", repeat_test<t>(x<rep_half<D>>, q)); \
nm = nmInvariant; println(hlog, "halfplane invariant: ", repeat_test<t>(x<rep_half<D>>, q)); \
polar_choose = false; println(hlog, "polar basic : ", repeat_test<t>(x<rep_high_polar<D>>, q)); \
polar_choose = true; println(hlog, "polar improved : ", repeat_test<t>(x<rep_high_polar<D>>, q)); \
if(test_dim == 3) { \
polar_mod = false; polar_choose = false; println(hlog, "polar F/F : ", repeat_test<t>(x<rep_polar2<D>>, q)); \
polar_mod = false; polar_choose = true; println(hlog, "polar F/T : ", repeat_test<t>(x<rep_polar2<D>>, q)); \
polar_mod = true; polar_choose = false; println(hlog, "polar T/F : ", repeat_test<t>(x<rep_polar2<D>>, q)); \
polar_mod = true; polar_choose = true; println(hlog, "polar T/T : ", repeat_test<t>(x<rep_polar2<D>>, q)); \
}
template<class T> double test_distances(int id, int a) {
std::mt19937 testr; testr.seed(id);
using N = typename T::data::Number;
for(int i=1; i<1000; i ++) {
auto R = random_rotation<T>(testr);
auto dif = exp(N(-1) * i) + get_deg<N>(a);
auto p1 = T::apply(T::apply(R, cpush<T>(0, N(i))), T::center());
auto p2 = T::apply(T::apply(R, T::apply(T::cspin(0, 1, dif), cpush<T>(0, N(i)))), T::center());
auto pd = T::apply(T::inverse(T::push(p1)), p2);
auto d = T::dist0(pd);
// for good we do not need R actually
auto gp1 = good::apply(cpush<good>(0, N(i)), good::center());
auto gp2 = good::apply(good::apply(good::cspin(0, 1, dif), cpush<good>(0, N(i))), good::center());
auto gd = good::dist0(good::apply(good::inverse(good::push(gp1)), gp2));
if(debug == 2) println(hlog, T::print(p1), " ... ", T::print(p2), " = ", T::print(pd), " d=", d, " [i=", i, " dif=", dif, "]");
if(closeto(d, gd)) continue;
return i;
}
return 999;
}
template<class T> double test_similarity(int id) { return test_distances<T>(id, 0); }
template<class T> double test_dissimilarity(int id) { return test_distances<T>(id, 180); }
template<class T> double test_other(int id) { return test_distances<T>(id, 1); }
template<class T> double test_walk(int id) {
std::mt19937 testr; testr.seed(id);
ld step = 1/16.;
// mover-relative to cell-relative
auto R0 = random_rotation<T>(testr);
cell *c0 = hr::cwt.at;
auto R1 = T::apply(R0, cpush<T>(0, step/2));
cell *c1 = hr::cwt.at;
int i = 0;
int lastchange = 0;
while(i< lastchange + 1000 && i < 10000 && celldistance(c0, c1) < 3) {
// println(hlog, "iteration ", i, " in ", c0, " vs ", c1);
auto rebase = [&] (typename T::isometry& R, cell*& c, int id) {
ld d = T::dist0(T::apply(R, T::center()));
for(int dir=0; dir<c->type; dir++) {
cell *altc = c->cmove(dir);
auto altR = apply_move<T>(altc, c, R);
ld altd = T::dist0(T::apply(altR, T::center()));
if(altd < d + 1/256.) {
R = altR; c = altc; lastchange = i; return;
}
}
};
R0 = T::apply(R0, cpush<T>(0, step)); rebase(R0, c0, 0);
R1 = T::apply(R1, cpush<T>(0, step)); rebase(R1, c1, 1);
i++;
}
return i;
}
template<class T> double test_close(int id) {
std::mt19937 testr; testr.seed(id);
cell *c = hr::cwt.at;
int phase = 0;
auto p0 = T::apply(cpush<T>(0, 1/8.), T::center());
auto p = p0;
int steps = 0;
const int maxdist = id + 1;
int errors = 0;
while(steps < 10000) {
int d = testr() % c->type;
cell *c1 = c->cmove(d);
bool do_move = false;
switch(phase) {
case 0:
/* always move */
do_move = true;
if(celldistance(c1, hr::cwt.at) == maxdist) phase = 1;
break;
case 1:
/* move only towards the center */
int d0 = celldistance(c, hr::cwt.at);
int d1 = celldistance(c1, hr::cwt.at);
do_move = d1 < d0;
if(d1 == 0) phase = 0;
break;
}
if(do_move) {
p = apply_move<T>(c1, c, p); c = c1; steps++;
if(debug == 2) println(hlog, "dist = ", celldistance(c, hr::cwt.at), " dist = ", T::dist0(p));
if(c == hr::cwt.at) {
auto d = T::dist0(p);
auto a = T::angle(p);
if(!closeto(d, 1/8.) || !closeto_angle(a, 0)) {
errors++; phase = 0; c = hr::cwt.at; p = p0;
}
}
}
}
return errors;
}
void run_all_tests() {
prepare_tests();
// println(hlog, "test_sanity"); TEST_ALL(test_sanity, data, 1, ld);
// println(hlog, "test_consistency"); TEST_ALL(test_consistency, data, 1, ld);
println(hlog, "test_loop_iso"); TEST_ALL(test_loop_iso, data, 20, int);
println(hlog, "test_loop_point"); TEST_ALL(test_loop_point, data, 20, int);
println(hlog, "test_angledist"); TEST_ALL(test_angledist, data, 3, int);
println(hlog, "test_similarity"); TEST_ALL(test_similarity, data, 20, int);
println(hlog, "test_dissimilarity"); TEST_ALL(test_dissimilarity, data, 20, int);
println(hlog, "test_other"); TEST_ALL(test_other, data, 20, int);
println(hlog, "test_walk"); TEST_ALL(test_walk, data, 20, int);
println(hlog, "test_close"); TEST_ALL(test_close, data, 20, int);
println(hlog, "test_count"); TEST_ALL(test_count, countdata, 1, std::string);
}
}

1806
devmods/rulegen-tests.cpp Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,241 @@
tessellations/multitile/4-7/1+3a/1a2+3af/4-7-1a2+3af-30.tes
tessellations/other/toimine/toimine884/112/toimine884-112-076.tes
tessellations/other/toimine/toimine884/211/051-100/toimine884-211-072.tes
tessellations/pseudo-Archimedean/Euclidean/4-uniform/eu\ 666\ 666\ 3366\ 333333\ AFAS6.tes
tessellations/multitile/6-3/1+3a/6-3-1r2+3af-3.tes
tessellations/other/heavpoot-a/hp-3a+6s3b+6a1.tes
tessellations/multitile/3-6/1+3/3-6-1a+3a-3.tes
tessellations/pseudo-Archimedean/Euclidean/4-uniform/eu 4444 33344 33344 33434 A1AFF.tes
tessellations/pseudo-Archimedean/Euclidean/4-uniform/eu 33344 33434 333333 333333 FAS6S3b.tes
tessellations/pseudo-Archimedean/Euclidean/4-uniform/eu 3cc 334c 33434 333333.tes
tessellations/pseudo-Archimedean/Euclidean/4-uniform/eu 46c 3366 3446 33344.tes
tessellations/multitile/4-6/2+2/2a1+2f/001-100/4-6-2a1+2f-083.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-58.tes
tessellations/other/toimine/toimine6612/121/101-150/toimine6612-121-116.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-18.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-34.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-04.tes
tessellations/multitile/3-7/1+2+3/3-7-1f+2r+3f-19.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-51.tes
tessellations/multitile/3-8/1+2+3/1f+2f+3f/501-596/3-8-1f+2f+3f-545.tes
tessellations/other/toimine/toimine6620/211/toimine6620-211-54.tes
tessellations/other/toimine/toimine886/111/toimine886-111-08.tes
tessellations/multitile/3-8/1+2+3/1f+2f+3f/501-596/3-8-1f+2f+3f-503.tes
tessellations/other/toimine/toimine6610/121/toimine6610-121-20.tes
tessellations/other/toimine/toimine6612/211/101-150/toimine6612-211-126.tes
tessellations/polyschwartz/245/2-2 + 6-39.tes
tessellations/other/toimine/toimine6615/121/toimine6615-121-02.tes
tessellations/other/toimine/toimine6612/211/101-150/toimine6612-211-131.tes
tessellations/multitile/polyforms/schwarz/245/1-1 + 4-8 s1.tes
tessellations/other/toimine/toimine6617/113/toimine6617-113-16.tes
tessellations/multitile/polyforms/schwarz/245/2-2 + 6-39.tes
tessellations/other/toimine/toimine6618/211/151-159/toimine6618-211-151.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-16.tes
tessellations/polyschwartz/237/1-1 + 7-08.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-59.tes
tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-146.tes
tessellations/multitile/3-8/1+2+3/1f+2f+3f/501-596/3-8-1f+2f+3f-568.tes
tessellations/other/toimine/toimine6618/111/toimine6618-111-17.tes
tessellations/other/toimine/toimine6612/211/201-243/toimine6612-211-243.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-52.tes
tessellations/other/toimine/toimine885/211/toimine885-211-23.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-64.tes
tessellations/other/toimine/toimine885/211/toimine885-211-44.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-58.tes
tessellations/other/toimine/toimine6612/112/151-200/toimine6612-112-188.tes
tessellations/multitile/polyforms/schwarz/245/45 + 410/12/45 + 410 + 410 s02.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-49.tes
tessellations/multitile/3-8/1+2+3/1f+2f+3f/501-596/3-8-1f+2f+3f-564.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-42.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-03.tes
tessellations/other/toimine/toimine6610/211/toimine6610-211-13.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-36.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-22.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-57.tes
tessellations/other/toimine/toimine6618/112/toimine6618-112-002.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-60.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-06.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-53.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-02.tes
tessellations/multitile/3-8/1+2+3/1f+2a1+3f/3-8-1f+2a1+3f-44.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-57.tes
tessellations/other/toimine/toimine885/112/toimine885-112-10.tes
tessellations/other/toimine/toimine6618/211/151-159/toimine6618-211-159.tes
tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-117.tes
tessellations/other/toimine/toimine6611/112/toimine6611-112-09.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-33.tes
tessellations/other/toimine/toimine6618/211/051-100/toimine6618-211-070.tes
tessellations/other/toimine/toimine6610/112/toimine6610-112-28.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-25.tes
tessellations/other/toimine/toimine6610/211/toimine6610-211-27.tes
tessellations/multitile/3-8/1+2+3/1f+2f+3f/401-500/3-8-1f+2f+3f-425.tes
tessellations/other/toimine/toimine6617/113/toimine6617-113-13.tes
tessellations/other/toimine/toimine6612/112/051-100/toimine6612-112-082.tes
tessellations/other/toimine/toimine6620/111/toimine6620-111-09.tes
tessellations/other/toimine/toimine668/121/toimine668-121-12.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-40.tes
tessellations/multitile/3-8/1+2+3/1f+2f+3f/401-500/3-8-1f+2f+3f-496.tes
tessellations/multitile/3-8/1+2+3/1f+2f+3f/101-200/3-8-1f+2f+3f-101.tes
tessellations/other/toimine/toimine6612/112/151-200/toimine6612-112-164.tes
tessellations/other/toimine/toimine6612/211/051-100/toimine6612-211-080.tes
tessellations/other/toimine/toimine6611/121/toimine6611-121-11.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-11.tes
tessellations/other/toimine/toimine6612/211/051-100/toimine6612-211-078.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-24.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-62.tes
tessellations/other/toimine/toimine6612/121/001-050/toimine6612-121-012.tes
tessellations/multitile/3-8/1+2+3/1f+2f+3f/401-500/3-8-1f+2f+3f-424.tes
tessellations/other/toimine/toimine6617/113/toimine6617-113-12.tes
tessellations/other/toimine/toimine6615/121/toimine6615-121-19.tes
tessellations/other/toimine/toimine6612/121/201-227/toimine6612-121-226.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-12.tes
tessellations/other/toimine/toimine6620/211/toimine6620-211-19.tes
tessellations/multitile/3-8/1+2+3/1f+2f+3f/501-596/3-8-1f+2f+3f-563.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-03.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-31.tes
tessellations/other/toimine/toimine6615/211/toimine6615-211-53.tes
tessellations/other/toimine/toimine2311/4+2/toimine2311-4+2-07.tes
tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-150.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-04.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-64.tes
tessellations/multitile/polyforms/schwarz/245/1-1 + 4-8 s2.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-54.tes
tessellations/multitile/polyforms/schwarz/237/1-1 + 7-08.tes
tessellations/other/toimine/toimine6620/121/toimine6620-121-29.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-09.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-45.tes
tessellations/other/toimine/toimine6612/211/101-150/toimine6612-211-122.tes
tessellations/other/toimine/toimine6612/121/151-200/toimine6612-121-172.tes
tessellations/other/toimine/toimine6612/121/201-227/toimine6612-121-211.tes
tessellations/other/toimine/toimine6615/211/toimine6615-211-61.tes
tessellations/other/toimine/toimine6612/112/151-200/toimine6612-112-155.tes
tessellations/other/toimine/toimine6618/211/051-100/toimine6618-211-088.tes
tessellations/other/toimine/toimine6612/211/051-100/toimine6612-211-086.tes
tessellations/other/toimine/toimine6618/111/toimine6618-111-14.tes
tessellations/polyschwartz/245/1-1 + 4-8 s2.tes
tessellations/other/toimine/toimine6612/112/101-150/toimine6612-112-142.tes
tessellations/other/toimine/toimine6612/211/001-050/toimine6612-211-045.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-36.tes
tessellations/multitile/4-6/2+2/2a1+2f/001-100/4-6-2a1+2f-033.tes
tessellations/other/toimine/toimine6612/121/151-200/toimine6612-121-177.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-20.tes
tessellations/multitile/3-8/1+2+3/1f+2f+3f/401-500/3-8-1f+2f+3f-445.tes
tessellations/other/toimine/toimine6618/121/051-100/toimine6618-121-066.tes
tessellations/other/toimine/toimine6612/111/toimine6612-111-30.tes
tessellations/multitile/4-6/2+2/2f+2f/401-500/4-6-2f+2f-466.tes
tessellations/other/toimine/toimine6617/113/toimine6617-113-14.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-12.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-09.tes
tessellations/other/toimine/toimine6610/211/toimine6610-211-17.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-69.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-17.tes
tessellations/other/toimine/toimine6611/121/toimine6611-121-04.tes
tessellations/other/toimine/toimine6610/211/toimine6610-211-23.tes
tessellations/other/toimine/toimine668/211/toimine668-211-08.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-40.tes
tessellations/other/toimine/toimine6612/211/201-243/toimine6612-211-233.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-35.tes
tessellations/other/toimine/toimine6618/211/051-100/toimine6618-211-058.tes
tessellations/multitile/3-8/1+2+3/1f+2f+3f/301-400/3-8-1f+2f+3f-396.tes
tessellations/other/toimine/toimine6612/112/101-150/toimine6612-112-124.tes
tessellations/other/toimine/toimine668/112/toimine668-112-04.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-53.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-50.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-47.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-05.tes
tessellations/other/toimine/toimine668/112/toimine668-112-02.tes
tessellations/other/toimine/toimine6612/112/101-150/toimine6612-112-136.tes
tessellations/polyschwartz/245/1-1 + 5-01.tes
tessellations/other/toimine/toimine6612/112/201-250/toimine6612-112-219.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-18.tes
tessellations/multitile/polyforms/schwarz/245/1-1 + 5-01.tes
tessellations/other/toimine/toimine6618/121/101-126/toimine6618-121-114.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-51.tes
tessellations/other/toimine/toimine6618/211/051-100/toimine6618-211-060.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-21.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-37.tes
tessellations/other/toimine/toimine6612/211/201-243/toimine6612-211-232.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-08.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-15.tes
tessellations/other/toimine/toimine6620/211/toimine6620-211-36.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-45.tes
tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-129.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-70.tes
tessellations/other/toimine/toimine6610/121/toimine6610-121-16.tes
tessellations/polyschwartz/245/45 + 410/12/45 + 410 + 410 s02.tes
tessellations/multitile/polyforms/schwarz/245/1-1 + 4-8 s3.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-76.tes
tessellations/other/toimine/toimine6620/112/toimine6620-112-47.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-14.tes
tessellations/multitile/3-7/1+1+3/3-7-1f+1f+3f-20.tes
tessellations/other/toimine/toimine6618/211/051-100/toimine6618-211-065.tes
tessellations/other/toimine/toimine6610/112/toimine6610-112-06.tes
tessellations/other/toimine/toimine885/121/toimine885-121-34.tes
tessellations/other/toimine/toimine6615/211/toimine6615-211-04.tes
tessellations/other/toimine/toimine6618/121/051-100/toimine6618-121-086.tes
tessellations/multitile/3-8/1+2+3/1f+2f+3f/101-200/3-8-1f+2f+3f-169.tes
tessellations/other/toimine/toimine885/211/toimine885-211-37.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-55.tes
tessellations/other/toimine/toimine2311/4+2/toimine2311-4+2-60.tes
tessellations/multitile/4-6/2+2/2f+2f/401-500/4-6-2f+2f-447.tes
tessellations/other/toimine/toimine6612/211/051-100/toimine6612-211-059.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-61.tes
tessellations/other/toimine/toimine6620/111/toimine6620-111-07.tes
tessellations/other/toimine/toimine6618/121/051-100/toimine6618-121-056.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-48.tes
tessellations/other/toimine/toimine6612/211/101-150/toimine6612-211-125.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-47.tes
tessellations/polyschwartz/245/1-1 + 4-8 s3.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-13.tes
tessellations/other/toimine/toimine885/121/toimine885-121-25.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-59.tes
tessellations/other/toimine/toimine6615/211/toimine6615-211-44.tes
tessellations/other/toimine/toimine6612/111/toimine6612-111-26.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-26.tes
tessellations/multitile/3-8/1+2+3/1f+2f+3f/501-596/3-8-1f+2f+3f-596.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-49.tes
tessellations/other/toimine/toimine2311/4+2/toimine2311-4+2-42.tes
tessellations/other/toimine/toimine6618/211/151-159/toimine6618-211-156.tes
tessellations/other/toimine/toimine6618/121/051-100/toimine6618-121-096.tes
tessellations/other/toimine/toimine6618/121/101-126/toimine6618-121-125.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-11.tes
tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-46.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-34.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-54.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-56.tes
tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-128.tes
tessellations/multitile/3-8/1+2+3/1f+2f+3f/001-100/3-8-1f+2f+3f-091.tes
tessellations/other/toimine/toimine668/211/toimine668-211-17.tes
tessellations/other/toimine/toimine6612/112/151-200/toimine6612-112-153.tes
tessellations/other/toimine/toimine6612/112/201-250/toimine6612-112-215.tes
tessellations/other/toimine/toimine668/112/toimine668-112-28.tes
tessellations/other/toimine/toimine668/112/toimine668-112-01.tes
tessellations/other/toimine/toimine6620/121/toimine6620-121-37.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-63.tes
tessellations/other/toimine/toimine6610/211/toimine6610-211-19.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-29.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-43.tes
tessellations/other/toimine/toimine6618/121/101-126/toimine6618-121-126.tes
tessellations/other/toimine/toimine668/211/toimine668-211-19.tes
tessellations/other/toimine/toimine6612/112/101-150/toimine6612-112-140.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-30.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-32.tes
tessellations/multitile/3-11/1+1+1/3-11-1a+1a+1f-2.tes
tessellations/polyschwartz/245/1-1 + 4-8 s1.tes
tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-110.tes
tessellations/other/toimine/toimine6612/112/151-200/toimine6612-112-176.tes
tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-149.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-50.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-62.tes
tessellations/other/toimine/toimine886/211/toimine886-211-011.tes
tessellations/other/toimine/toimine6615/111/toimine6615-111-28.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-44.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-10.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-38.tes
tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-46.tes
tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-125.tes
tessellations/other/toimine/toimine6620/211/toimine6620-211-18.tes
tessellations/other/toimine/toimine668/211/toimine668-211-21.tes
tessellations/other/toimine/toimine6610/121/toimine6610-121-04.tes
tessellations/other/toimine/toimine6611/112/toimine6611-112-02.tes
tessellations/multitile/3-8/1+2+3/1f+2f+3f/501-596/3-8-1f+2f+3f-565.tes

19
devmods/rulegen.sh Normal file
View File

@ -0,0 +1,19 @@
#!/bin/sh
# compact honeycombs
./mymake -O3 devmods/honeycomb-rule-generator
./hyper -geo 534h -gen-rule honeycomb-rules-534.dat -quit
./hyper -geo 535h -gen-rule honeycomb-rules-535.dat -quit
./hyper -geo 435h -gen-rule honeycomb-rules-435.dat -quit
./hyper -geo 353h -gen-rule honeycomb-rules-353.dat -quit
# exh 2 optimized
./hyper -geo 436h -exh 2 -gen-rule honeycomb-rules-436.dat -quit
./hyper -geo 344h -exh 2 -gen-rule honeycomb-rules-344.dat -quit
./hyper -geo 354h -exh 2 -gen-rule honeycomb-rules-354.dat -quit
./hyper -geo 536h -exh 2 -gen-rule honeycomb-rules-536.dat -quit
# still generates conflicts on exh 2:
# ./hyper -geo 355h -exh 2 -gen-rule honeycomb-rules-355.dat -quit #
# ./hyper -geo 345h -exh 2 -gen-rule honeycomb-rules-345.dat -quit #

View File

@ -0,0 +1,593 @@
#include "../hyper.h"
// This program generates the error table for Solv approxiations.
#define D3 1
#define D2 0
#if CAP_FIELD
namespace hr {
ld solerror(hyperpoint ok, hyperpoint chk) {
return geo_dist(chk, ok);
}
ld minz = -1e-9, maxz = 1e-9;
int max_iter = 999999;
bool isok;
hyperpoint iterative_solve(hyperpoint xp, hyperpoint candidate, ld minerr, bool debug = false) {
transmatrix T = Id; T[0][1] = 8; T[2][2] = 5;
auto f = [&] (hyperpoint x) { return nisot::numerical_exp(x); }; // T * x; };
auto ver = f(candidate);
ld err = solerror(xp, ver);
auto at = candidate;
ld eps = 1e-6;
hyperpoint c[6];
for(int a=0; a<3; a++) c[a] = point3(a==0, a==1, a==2);
for(int a=0; a<3; a++) c[3+a] = point3(-(a==0), -(a==1), -(a==2));
int iter = 0;
while(err > minerr) { again:
iter++; if(iter > max_iter) { isok = false; return at; }
// cands.push_back(at);
if(debug) println(hlog, "\n\nf(", at, "?) = ", ver, " (error ", err, ")");
array<hyperpoint, 3> pnear;
for(int a=0; a<3; a++) {
auto x = at + c[a] * eps;
if(debug) println(hlog, "f(", x, ") = ", f(x), " = y + ", f(x)-ver, "imp ", err - solerror(xp, f(x)) );
auto y = at - c[a] * eps;
if(debug) println(hlog, "f(", y, ") = ", f(y), " = y + ", f(y)-ver, "imp ", err - solerror(xp, f(y)) );
pnear[a] = (f(x) - ver) / eps; // (direct_exp(at + c[a] * eps, prec) - ver) / eps;
}
transmatrix U = Id;
for(int a=0; a<3; a++)
for(int b=0; b<3; b++)
U[a][b] = pnear[b][a];
hyperpoint diff = (xp - ver);
hyperpoint bonus = inverse(U) * diff;
ld lbonus = hypot_d(3, bonus);
if(lbonus > 0.1) bonus = bonus * 0.1 / hypot_d(3, bonus);
if(false && lbonus > 1000) {
int best = -1;
ld besti = err;
for(int a=0; a<6; a++) {
auto x = at + c[a] * eps;
auto nerr = solerror(xp, f(x));
if(nerr < besti) best = a, besti = nerr;
}
if(best == -1) {
println(hlog, "local best");
for(int a=0; a<1000000; a++) {
auto x = at;
for(int i=0; i<3; i++) x[i] += (hrand(1000000) - hrand(1000000)) * 1e-5;
auto nerr = solerror(xp, f(x));
if(nerr < besti) { println(hlog, "moved to ", x); at = x; goto again; }
}
break;
}
bonus = c[best] * 1e-3;
}
int fixes = 0;
if(debug)
println(hlog, "\nU = ", U, "\ndiff = ", diff, "\nbonus = ", bonus, " of ", lbonus, "\n");
nextfix:
hyperpoint next = at + bonus;
hyperpoint nextver = f(next);
ld nexterr = solerror(xp, nextver);
if(debug) println(hlog, "f(", next, ") = ", nextver, ", imp = ", err - nexterr);
if(nexterr < err) {
// println(hlog, "reduced error ", err, " to ", nexterr);
at = next;
ver = nextver;
err = nexterr;
continue;
}
else {
bonus /= 2;
fixes++;
if(fixes > 10) {
if(err > 999) {
for(ld s = 1; abs(s) > 1e-9; s *= 0.5)
for(int k=0; k<27; k++) {
int kk = k;
next = at;
for(int i=0; i<3; i++) { if(kk%3 == 1) next[i] += s; if(kk%3 == 2) next[i] -= s; kk /= 3; }
// next = at + c[k] * s;
nextver = f(next);
nexterr = solerror(xp, nextver);
// println(hlog, "f(", next, ") = ", nextver, ", error = ", nexterr);
if(nexterr < err) { at = next; ver = nextver; err = nexterr; goto nextiter; }
}
println(hlog, "cannot improve error ", err);
exit(1);
}
if(debug) println(hlog, "fixes = ", fixes, " : break");
isok = false;
return at;
}
goto nextfix;
}
nextiter: ;
}
if(debug) println(hlog, "\n\nsolution found: f(", at, ") = ", ver, " (error ", err, ")");
isok = true;
return at;
}
EX void geodesic_step_euler(hyperpoint& at, hyperpoint& velocity) {
auto acc = nisot::christoffel(at, velocity, velocity);
at = at + velocity + acc / 2;
velocity += acc;
}
EX void geodesic_step_poor(hyperpoint& at, hyperpoint& velocity) {
auto acc = nisot::christoffel(at, velocity, velocity);
at = at + velocity;
velocity += acc;
}
EX void geodesic_step_midpoint(hyperpoint& at, hyperpoint& velocity) {
// y(n+1) = y(n) + f(y(n) + 1/2 f(y(n)))
auto acc = nisot::christoffel(at, velocity, velocity);
auto at2 = at + velocity / 2;
auto velocity2 = velocity + acc / 2;
auto acc2 = nisot::christoffel(at2, velocity2, velocity2);
at = at + velocity + acc2 / 2;
velocity = velocity + acc2;
}
auto& chr = nisot::get_acceleration;
EX bool invalid_any(const hyperpoint h) {
return isnan(h[0]) || isnan(h[1]) || isnan(h[2]) || isinf(h[0]) || isinf(h[1]) || isinf(h[2]) ||
abs(h[0]) > 1e20 || abs(h[1]) > 1e20 || abs(h[2]) > 1e20;
}
EX void geodesic_step_rk4(hyperpoint& at, hyperpoint& vel) {
auto acc1 = chr(at, vel);
auto acc2 = chr(at + vel/2, vel + acc1/2);
auto acc3 = chr(at + vel/2 + acc1/4, vel + acc2/2);
auto acc4 = chr(at + vel + acc2/2, vel + acc3);
at += vel + (acc1+acc2+acc3)/6;
vel += (acc1+2*acc2+2*acc3+acc4)/6;
}
template<class T>
hyperpoint numerical_exp(hyperpoint v, int steps, const T& gstep) {
hyperpoint at = point31(0, 0, 0);
v /= steps;
v[3] = 0;
for(int i=0; i<steps; i++) {
if(invalid_any(at)) return at;
gstep(at, v);
}
return at;
}
ld x_to_scr(ld x) { return 150 + 100 * x; }
ld y_to_scr(ld x) { return 950 - log(x * 1e9) / log(10) * 80; }
hyperpoint pt(ld x, ld y) { return tC0(atscreenpos(x, y, 1)); };
map<pair<string, color_t>, map<double, double>> maxerr;
bool scatterplot;
void queueline1(hyperpoint a, hyperpoint b, color_t c) {
queueline(shiftless(a), shiftless(b), c);
}
void draw_graph() {
vid.linewidth *= 2;
queueline1(pt(0, 950), pt(1500, 950), 0xFF);
queueline1(pt(150, 0), pt(150, 1000), 0xFF);
vid.linewidth /= 2;
for(int i=1; i<=9; i++) {
queueline1(pt(x_to_scr(i), 950), pt(x_to_scr(i), 960), 0xFF);
queuestr(x_to_scr(i), 980, 0, 60, its(i), 0, 0, 8);
}
for(int i=-8; i<=2; i++) {
ld v = pow(10, i);
queueline1(pt(140, y_to_scr(v)), pt(150, y_to_scr(v)), 0xFF);
queuestr(70, y_to_scr(v), 0, 60, "1e"+its(i), 0, 0, 8);
vid.linewidth /= 2;
queueline1(pt(1100, y_to_scr(v)), pt(150, y_to_scr(v)), 0xFF);
vid.linewidth *= 2;
}
vid.linewidth *= 2;
for(auto& [id, graph]: maxerr) {
auto& [name, col] = id;
ld last = 1e-9;
ld lastx = 0;
for(auto [x, y]: graph) {
if(scatterplot) {
curvepoint(pt(x_to_scr(x)+2, y_to_scr(y)));
curvepoint(pt(x_to_scr(x)-2, y_to_scr(y)));
queuecurve(shiftless(Id), col, 0, PPR::LINE);
curvepoint(pt(x_to_scr(x), y_to_scr(y)+2));
curvepoint(pt(x_to_scr(x), y_to_scr(y)-2));
queuecurve(shiftless(Id), col, 0, PPR::LINE);
}
if(y_to_scr(y) > y_to_scr(last) - x_to_scr(lastx) + x_to_scr(x)) continue;
if(y > 100) y = 100;
last = y;
lastx = x;
ld xx = x;
if(xx > 9) xx = 9;
if(!scatterplot) curvepoint(pt(x_to_scr(x), y_to_scr(y)));
if(xx == 9) break;
}
if(!scatterplot) {
queuestr(1100, y_to_scr(last), 0, 60, name, col >> 8, 0, 0);
queuecurve(shiftless(Id), col, 0, PPR::LINE);
}
}
vid.linewidth /= 2;
drawqueue();
}
void draw_sol_diffeq_graph() {
}
void make_graph(string fname) {
start_game();
flat_model_enabler fme;
shot::shotx = 1500;
shot::shoty = 1000;
shot::format = shot::screenshot_format::svg;
svg::divby = 1;
shot::take(fname, draw_graph);
}
void sol_diffeq_graph() {
auto& s = sn::get_tabled();
s.load();
for(int x=0; x<s.PRECX-1; x++)
for(int y=0; y<s.PRECY-1; y++)
for(int z=0; z<s.PRECZ-1; z++) {
println(hlog, tie(x,y,z));
auto ax = sn::ix_to_x(x / (s.PRECX-1.));
auto ay = sn::ix_to_x(y / (s.PRECY-1.));
auto az = sn::iz_to_z(z / (s.PRECZ-1.));
ld d = hypot(ax, hypot(ay, az));
hyperpoint h = point31(ax, ay, az);
hyperpoint v = inverse_exp(shiftless(h)); // , pfNO_INTERPOLATION);
hyperpoint actual = numerical_exp(v, 2000, geodesic_step_rk4);
if(invalid_any(actual)) continue;
auto test = [&] (string name, color_t col, int iter, auto method) {
hyperpoint res = numerical_exp(v, iter, method);
if(invalid_any(res)) return;
ld err = geo_dist(actual, res);
ld& me = maxerr[{name, col}][d];
me = max(me, err);
};
test("RK2 5", 0xB0E0B0FF, 5, geodesic_step_rk4);
test("RK2 10", 0x8AD0A0FF, 10, geodesic_step_rk4);
test(" ", 0x90E090FF, 20, geodesic_step_rk4);
test("RK2 30", 0x80C080FF, 30, geodesic_step_rk4);
test("RK4 100", 0x408040FF, 100, geodesic_step_rk4);
test("RK4 300", 0x306030FF, 300, geodesic_step_rk4);
test("RK4 1000", 0x204020FF, 1000, geodesic_step_rk4);
test("mid 100", 0x8080C0FF, 100, geodesic_step_midpoint);
test("mid 1000", 0x404080FF, 1000, geodesic_step_midpoint);
}
make_graph("sol-diff-graph.svg");
}
void sol_numerics_out() {
hyperpoint v = inverse_exp(shiftless(point31(2, 1, 0)));
// point3(0.1, 0, 10);
hyperpoint result = numerical_exp(v, 1000000, geodesic_step_rk4);
println(hlog, "exp(", v, ") = ", result);
for(int steps: {1, 2, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000}) {
shstream ss;
auto experiment = [&] (string name, auto f) {
print(ss, name, lalign(30, hdist0(numerical_exp(v, steps, f) - result)));
};
experiment(" P ", geodesic_step_poor);
experiment(" E ", geodesic_step_euler);
experiment(" M ", geodesic_step_midpoint);
experiment(" R ", geodesic_step_rk4);
println(hlog, " steps=", lalign(6, steps), ss.s);
}
println(hlog, "timing M");
numerical_exp(v, 10000000, geodesic_step_midpoint);
println(hlog, "timing R");
numerical_exp(v, 10000000, geodesic_step_rk4);
println(hlog, "ok");
}
vector<ld> quantiles(vector<ld> data) {
sort(data.begin(), data.end());
if(isize(data) <= 20) return data;
vector<ld> q;
for(int i=0; i<=20; i++)
q.push_back(data[(isize(data)-1)*i/20]);
return q;
}
auto smax(auto& tab, ld& i, ld x) { if(x) tab[i] = max(tab[i], x); }
ld median(vector<ld> v) {
sort(v.begin(), v.end());
return v[isize(v)/2];
}
void sol_table_test() {
// auto& length_good = maxerr[{"length/good", 0x408040FF}];
// auto& angle_good = maxerr[{"angle/good", 0x404080FF}];
// auto& length_good2 = maxerr[{"length/mid", 0x808040FF}];
// auto& angle_good2 = maxerr[{"angle/mid", 0x804080FF}];
// auto& length_bad = maxerr[{"length/bad", 0xC08040FF}];
// auto& angle_bad = maxerr[{"angle/bad", 0xC04080FF}];
// map<string, int> wins;
auto& s = sn::get_tabled();
s.load();
map<double, double> maxerr;
int good = 0, bad = 0;
vector<ld> length_errors;
vector<ld> angle_errors;
vector<ld> split;
vector<ld> lerrs[4][4][4], aerrs[4][4][4];
for(int a: {16, 32, 48, 60})
println(hlog, "xy_", a, " : ", sn::ix_to_x(a / (s.PRECX-1.)));
for(int a: {16, 32, 48, 60})
println(hlog, "z_", a, " : ", sn::iz_to_z(a / (s.PRECZ-1.)));
FILE *g = fopen("solv-error-data.csv", "wt");
for(ld x=0; x<s.PRECX-4; x+=.25)
for(ld y=0; y<s.PRECY-4; y+=.25)
for(ld z=0; z<s.PRECZ-4; z+=.25) {
int xp = x * 4 / s.PRECX;
int yp = y * 4 / s.PRECY;
int zp = z * 4 / s.PRECZ;
if(y == 0.5 && z== 0.5) println(hlog, x, " : ", good, " vs ", bad);
int a0 = 0, b0 = 0;
for(ld x1: {floor(x), ceil(x)})
for(ld y1: {floor(y), ceil(y)})
for(ld z1: {floor(z), ceil(z)}) {
auto ax = sn::ix_to_x(x1 / (s.PRECX-1.));
auto ay = sn::ix_to_x(y1 / (s.PRECY-1.));
auto az = sn::iz_to_z(z1 / (s.PRECZ-1.));
hyperpoint h = point31(ax, ay, az);
hyperpoint v = inverse_exp(shiftless(h), pfNO_INTERPOLATION);
if(v[2] > 0) a0++;
else b0++;
}
bool bad_region = x > s.PRECX/2 && y > s.PRECY/2 && z < s.PRECZ/2;
bool bad_break = bad_region && a0 && b0;
auto ax = sn::ix_to_x(x / (s.PRECX-1.));
auto ay = sn::ix_to_x(y / (s.PRECY-1.));
auto az = sn::iz_to_z(z / (s.PRECZ-1.));
hyperpoint h = point31(ax, ay, az);
hyperpoint v = inverse_exp(shiftless(h), bad_break ? pfNO_INTERPOLATION : pNORMAL);
// println(hlog, "looking for ", h);
// println(hlog, "exp(", v, ") = ", nisot::numerical_exp(v));
hyperpoint v1 = iterative_solve(h, v, 1e-9, false);
// println(hlog, "exp(", v1, ") = ", nisot::numerical_exp(v1));
hyperpoint h2 = nisot::numerical_exp(v1);
if(sqhypot_d(3, h-h2) > 1e-6) {
bad++;
continue;
}
else good++;
ld dv = hypot_d(3, v);
ld dv1 = hypot_d(3, v1);
ld lerr = abs(dv - dv1);
ld aerr = asin(hypot_d(3, v^v1) / dv / dv1);
ld d = hypot_d(3, v1);
if(dv == 0 || dv1 == 0) continue;
if(invalid_any(v1) || invalid_any(v)) {
println(hlog, "invalid");
continue;
}
if(isnan(aerr)) println(hlog, "v = ", v, " v1 = ", v1, "aerr");
else fprintf(g, "%lf;%lf;%lf;%lf;%lf;%lf;%lf;%lf;%d\n",
x, y, z,
ax, ay, az,
lerr, aerr,
bad_break
);
lerrs[zp][yp][xp].push_back(lerr);
aerrs[zp][yp][xp].push_back(aerr);
}
fclose(g);
/*
if(d >= 3 && d <= 3.1 && !bad_region) {
println(hlog, tie(x,y,z), " : ", lerr);
split.push_back(lerr);
}
if(bad_break)
smax(length_bad, d, lerr),
smax(angle_bad, d, aerr),
0;
else if(bad_region)
smax(length_good2, d, lerr),
smax(angle_good2, d, aerr),
0;
else
smax(length_good, d, lerr),
smax(angle_good, d, aerr),
0;
length_errors.push_back(lerr);
ld cross = hypot_d(3, v^v1) / dv / dv1;
angle_errors.push_back(cross);
}
// println(hlog, quantiles(length_errors));
println(hlog, quantiles(split)); */
// for(auto p: angle_good) println(hlog, p);
// make_graph("sol-la-errors.svg");
FILE *f = fopen("devmods/graph.tex", "wt");
fprintf(f, "\\documentclass{article}\n\\begin{document}\n");
fprintf(f, "\\small\\setlength{\\tabcolsep}{3pt}\n");
fprintf(f, "\\begin{tabular}{|c|cccc|cccc|cccc|cccc|}\n\\hline\n");
for(int z=0; z<4; z++) {
fprintf(f, " & ");
fprintf(f, "\\multicolumn{4}{|c%s}{$z_%d$}", z==3?"|":"", z);
}
fprintf(f, "|\\\\\n");
for(int z=0; z<4; z++) {
for(int x=0; x<4; x++) {
fprintf(f, " & ");
fprintf(f, "$x_%d$", x);
}
}
fprintf(f, "\\\\\n\\hline");
for(int y=0; y<4; y++) {
fprintf(f, "$y_%d$ ", y);
for(int z=0; z<4; z++) {
for(int x=0; x<4; x++) {
fprintf(f, " & ");
fprintf(f, "%4.2g", log10(median(lerrs[z][y][x])));
}
}
fprintf(f, "\\\\\n");
}
fprintf(f, "\\hline \n");
for(int y=0; y<4; y++) {
fprintf(f, "$y_%d$ ", y);
for(int z=0; z<4; z++) {
for(int x=0; x<4; x++) {
fprintf(f, " & ");
fprintf(f, "%4.2g", log10(median(aerrs[z][y][x])));
}
}
fprintf(f, "\\\\\n");
}
fprintf(f, "\\hline\n");
fprintf(f, "\\end{tabular}\n");
fprintf(f, "\\end{document}\n");
fclose(f);
}
int readArgs() {
using namespace arg;
if(0) ;
else if(argis("-sol-diff-graph")) {
sol_diffeq_graph();
}
else if(argis("-sol-tabletest")) {
sol_table_test();
}
else if(argis("-sol-numerics")) {
sol_numerics_out();
}
else return 1;
return 0;
}
auto nhook = addHook(hooks_args, 100, readArgs);
}
#endif

585
devmods/solv-table.cpp Normal file
View File

@ -0,0 +1,585 @@
// This generates the inverse geodesics tables.
// Usage:
// [executable] -geo sol -build -write solv-geodesics.dat
// -geo 3:2 -build -write shyp-geodesics.dat
// -geo 3:1/2 -build -write ssol-geodesics.dat
// -exit
// Loading generated tables and visualization:
// [executable] /hyper -fsol [filename] -geo sol -visualize filename-%03d.png
// You can also do -geo [...] -build to build and test the table
// without writing it.
// By default this generates 64x64x64 tables.
// Add e.g. '-dim 128 128 128' before -write to generate
// a more/less precise table.
// # ./hyper -rk-steps 100 -geo Sol -iz-list -sn-unittest -build -write solv-geodesics-a.dat -visualize devmods/san1/solva-%04d.png -improve -write solv-geodesics.dat -visualize devmods/san1/solvb-%04d.png
// # ./hyper -dim 32 32 32 -geo 3:1/2 -iz-list -sn-unittest -build -write ssol-geodesics-a.dat -visualize devmods/san1/ssola-%04d.png -improve -write ssol-geodesics.dat -visualize devmods/san1/ssolb-%04d.png
// # ./hyper -dim 32 32 32 -geo 3:2 -iz-list -sn-unittest -build -write shyp-geodesics.dat -visualize devmods/san1/shypa-%04d.png
#include "../hyper.h"
#include <thread>
#include <mutex>
namespace hr {
transmatrix parabolic1(ld u);
namespace sn {
template<class T> void parallelize(int threads, int Nmin, int Nmax, T action) {
std::vector<std::thread> v;
for(int k=0; k<threads; k++)
v.emplace_back([&,k] () {
for(int i=Nmin+k; i < Nmax; i += threads) action(k, i);
});
for(std::thread& t:v) t.join();
}
ld solerror(hyperpoint ok, hyperpoint chk) {
auto zok = point3( x_to_ix(ok[0]), x_to_ix(ok[1]), z_to_iz(ok[2]) );
auto zchk = point3( x_to_ix(chk[0]), x_to_ix(chk[1]), z_to_iz(chk[2]) );
return hypot_d(3, zok - zchk);
}
int max_iter = 999999;
hyperpoint fail(.1, .2, .3, .4);
hyperpoint iterative_solve(hyperpoint xp, hyperpoint candidate, ld minerr, bool debug = false) {
transmatrix T = Id; T[0][1] = 8; T[2][2] = 5;
auto f = [&] (hyperpoint x) { return nisot::numerical_exp(x); }; // T * x; };
auto ver = f(candidate);
ld err = solerror(xp, ver);
auto at = candidate;
ld eps = 1e-6;
hyperpoint c[3];
for(int a=0; a<3; a++) c[a] = point3(a==0, a==1, a==2);
int iter = 0;
while(err > minerr) {
iter++; if(iter > max_iter) return fail;
if(debug) println(hlog, "\n\nf(", at, "?) = ", ver, " (error ", err, ")");
array<hyperpoint, 3> pnear;
for(int a=0; a<3; a++) {
auto x = at + c[a] * eps;
if(debug) println(hlog, "f(", x, ") = ", f(x), " = y + ", f(x)-ver );
pnear[a] = (f(x) - ver) / eps; // (direct_exp(at + c[a] * eps, prec) - ver) / eps;
}
transmatrix U = Id;
for(int a=0; a<3; a++)
for(int b=0; b<3; b++)
U[a][b] = pnear[b][a];
hyperpoint diff = (xp - ver);
hyperpoint bonus = inverse(U) * diff;
if(hypot_d(3, bonus) > 0.1) bonus = bonus * 0.1 / hypot_d(3, bonus);
int fixes = 0;
if(debug)
println(hlog, "\nU = ", U, "\ndiff = ", diff, "\nbonus = ", bonus, "\n");
nextfix:
hyperpoint next = at + bonus;
hyperpoint nextver = f(next);
ld nexterr = solerror(xp, nextver);
if(debug) println(hlog, "f(", next, ") = ", nextver, ", error = ", nexterr);
if(nexterr < err) {
// println(hlog, "reduced error ", err, " to ", nexterr);
at = next;
ver = nextver;
err = nexterr;
continue;
}
else {
bonus /= 2;
fixes++;
if(fixes > 10) {
if(err > 999) {
for(ld s = 1; abs(s) > 1e-9; s *= 0.5)
for(int k=0; k<27; k++) {
int kk = k;
next = at;
for(int i=0; i<3; i++) { if(kk%3 == 1) next[i] += s; if(kk%3 == 2) next[i] -= s; kk /= 3; }
// next = at + c[k] * s;
nextver = f(next);
nexterr = solerror(xp, nextver);
// println(hlog, "f(", next, ") = ", nextver, ", error = ", nexterr);
if(nexterr < err) { at = next; ver = nextver; err = nexterr; goto nextiter; }
}
println(hlog, "cannot improve error ", err);
exit(1);
}
return fail;
}
goto nextfix;
}
nextiter: ;
}
// println(hlog, "#it = ", iter);
return at;
}
using ptlow = compressed_point;
ptlow operator +(ptlow a, ptlow b) { return make_array<float>(a[0]+b[0], a[1]+b[1], a[2]+b[2]); }
ptlow operator -(ptlow a, ptlow b) { return make_array<float>(a[0]-b[0], a[1]-b[1], a[2]-b[2]); }
ptlow operator *(ptlow a, ld x) { return make_array<float>(a[0]*x, a[1]*x, a[2]*x); }
void fint(FILE *f, int x) { fwrite(&x, sizeof(x), 1, f); }
void ffloat(FILE *f, float x) { fwrite(&x, sizeof(x), 1, f); }
void write_table(sn::tabled_inverses& tab, const char *fname) {
FILE *f = fopen(fname, "wb");
fint(f, tab.PRECX);
fint(f, tab.PRECY);
fint(f, tab.PRECZ);
fwrite(&tab.tab[0], sizeof(ptlow) * tab.PRECX * tab.PRECY * tab.PRECZ, 1, f);
fclose(f);
}
void alloc_table(sn::tabled_inverses& tab, int X, int Y, int Z) {
tab.PRECX = X;
tab.PRECY = Y;
tab.PRECZ = Z;
tab.tab.resize(X*Y*Z);
}
ld ptd(ptlow p) {
return p[0]*p[0] + p[1]*p[1] + p[2] * p[2];
}
void fix_boundaries(sn::tabled_inverses& tab, int last_x, int last_y, int last_z) {
int PRECX = tab.PRECX;
int PRECY = tab.PRECY;
int PRECZ = tab.PRECZ;
for(int x=0; x<last_x; x++)
for(int y=0; y<last_y; y++) {
for(int z=last_z; z<PRECZ; z++)
tab.get_int(x,y,z) = tab.get_int(x,y,z-1) * 2 - tab.get_int(x,y,z-2);
if(nih)
tab.get_int(x,y,0) = tab.get_int(x,y,1) * 2 - tab.get_int(x,y,2);
}
for(int x=0; x<last_x; x++)
for(int y=last_y; y<PRECY; y++)
for(int z=0; z<PRECZ; z++)
tab.get_int(x,y,z) = tab.get_int(x,y-1,z) * 2 - tab.get_int(x,y-2,z);
for(int x=last_x; x<PRECX; x++)
for(int y=0; y<PRECY; y++)
for(int z=0; z<PRECZ; z++)
tab.get_int(x,y,z) = tab.get_int(x-1,y,z) * 2 - tab.get_int(x-2,y,z);
}
void build_sols(int PRECX, int PRECY, int PRECZ) {
std::mutex file_mutex;
ld max_err = 0;
auto& tab = sn::get_tabled();
alloc_table(tab, PRECX, PRECY, PRECZ);
int last_x = PRECX-1, last_y = PRECY-1, last_z = PRECZ-1;
auto act = [&] (int tid, int iz) {
if((nih && iz == 0) || iz == PRECZ-1) return;
auto solve_at = [&] (int ix, int iy) {
// if(ix != 30 || iy <= 50 || iz) return;
ld x = ix_to_x(ix / (PRECX-1.));
ld y = ix_to_x(iy / (PRECY-1.));
ld z = iz_to_z(iz / (PRECZ-1.));
auto v = hyperpoint ({x,y,z,1});
vector<hyperpoint> candidates;
hyperpoint cand;
candidates.push_back(point3(0,0,0));
// sort(candidates.begin(), candidates.end(), [&] (hyperpoint a, hyperpoint b) { return solerror(v, direct_exp(a, prec)) > solerror(v, direct_exp(b, prec)); });
// cand_best = candidates.back();
vector<hyperpoint> solved_candidates;
for(auto c: candidates) {
auto solt = iterative_solve(v, c, 1e-6, false);
solved_candidates.push_back(solt);
if(solerror(v, nisot::numerical_exp(solt)) < 1e-9) break;
}
sort(solved_candidates.begin(), solved_candidates.end(), [&] (hyperpoint a, hyperpoint b) { return solerror(v, nisot::numerical_exp(a)) > solerror(v, nisot::numerical_exp(b)); });
cand = solved_candidates.back();
auto xerr = solerror(v, nisot::numerical_exp(cand));
if(cand == fail) {
println(hlog, hr::format("[%2d %2d %2d] FAIL", iz, iy, ix));
}
else if(xerr > 1e-3) {
println(hlog, hr::format("[%2d %2d %2d] ", iz, iy, ix));
println(hlog, "f(?) = ", v);
println(hlog, "f(", cand, ") = ", nisot::numerical_exp(cand));
println(hlog, "error = ", xerr);
println(hlog, "canned = ", compress(azeq_to_table(cand)));
max_err = xerr;
return;
}
auto& so = tab.get_int(ix, iy, iz);
so = compress(azeq_to_table(cand));
for(int z=0; z<3; z++) if(isnan(so[z]) || isinf(so[z])) {
println(hlog, cand, "canned to ", so);
exit(4);
}
};
for(int it=0; it<max(last_x, last_y); it++) {
for(int a=0; a<it; a++) {
if(it < last_x && a < last_y) solve_at(it, a);
if(a < last_x && it < last_y) solve_at(a, it);
}
if(it < last_x && it < last_y) solve_at(it, it);
std::lock_guard<std::mutex> fm(file_mutex);
if(0) println(hlog, hr::format("%2d: %2d", iz, it));
}
};
parallelize(PRECZ, 0, PRECZ, act);
fix_boundaries(tab, last_x, last_y, last_z);
}
std::mutex file_mutex_global;
bool deb = false;
hyperpoint find_optimal_geodesic(hyperpoint res) {
auto p0 = point3(0, 0, 0);
hyperpoint h = iterative_solve(res, p0, 100, 1e-9);
if(h == fail) return fail;
ld d = hypot_d(3, h);
auto solve = [&] (hyperpoint m, pair<hyperpoint, hyperpoint> last) {
hyperpoint t = // inverse_exp(m, iTable, false);
iterative_solve(m, last.first, 100, 1e-9);
hyperpoint u = // inverse_exp(inverse(nisot::translate(m)) * res, iTable, false);
iterative_solve(inverse(nisot::translate(m)) * res, last.second, 100, 1e-6);
return make_pair(t, u);
};
auto quality = [&] (pair<hyperpoint, hyperpoint> p) {
return hypot_d(3, p.first) + hypot_d(3, p.second);
};
auto attempt = [&] (hyperpoint mid) {
auto p = solve(mid, {p0, p0});
ld qd = quality(p);
if(true) {
// println(hlog, "there is something better: ", qd, " vs ", d);
bool found;
bool failed = false;
auto tryit = [&] (hyperpoint h) {
auto p2 = solve(h, p);
auto qd2 = quality(p2);
if(p2.first == fail || p2.second == fail) failed = true;
else if(qd2 < qd) {
qd = qd2, p = p2, mid = h;
found = true;
return true;
}
return false;
};
ld delta = 1e-3;
/*
auto q_x = quality(solve(mid + point3(delta, 0, 0), p)) - qd;
auto q_xx = quality(solve(mid + point3(delta+delta, 0, 0), p)) - qd - 2 * q_x;
auto q_y = quality(solve(mid + point3(0, delta, 0), p)) - qd;
auto q_yy = quality(solve(mid + point3(0, delta+delta, 0), p)) - qd - 2 * q_y;
auto q_z = quality(solve(mid + point3(0, 0, delta), p)) - qd;
auto q_zz = quality(solve(mid + point3(0, 0, delta+delta), p)) - qd - 2 * q_z;
auto q_xy = quality(solve(mid + point3(delta, delta, 0), p)) - qd - q_x - q_y;
auto q_xz = quality(solve(mid + point3(delta, 0, delta), p)) - qd - q_x - q_z;
auto q_yz = quality(solve(mid + point3(0, delta, delta), p)) - qd - q_y - q_z;
transmatrix T = build_matrix(
hyperpoint(q_xx, q_xy, q_xz, 0),
hyperpoint(q_xy, q_yy, q_yz, 0),
hyperpoint(q_xz, q_yz, q_zz, 0),
hyperpoint(0, 0, 0, 1)
);
hyperpoint q = hyperpoint(q_x, q_y, q_z, 0);
*/
int itera = 0;
while(true) {
itera++;
if(itera % 1000 == 0) {
std::lock_guard<std::mutex> fm(file_mutex_global);
println(hlog, "itera = ", itera);
if(itera >= 5000) return;
}
auto q_v = quality(solve(mid + point3(delta, -delta, 0), p)) - qd;
auto q_vv = quality(solve(mid + point3(delta+delta, -delta-delta, 0), p)) - qd - 2 * q_v;
auto q_z = quality(solve(mid + point3(0, 0, delta), p)) - qd;
auto q_zz = quality(solve(mid + point3(0, 0, delta+delta), p)) - qd - 2 * q_z;
auto q_vz = quality(solve(mid + point3(delta, -delta, delta), p)) - qd - q_v - q_z;
ld d = q_vv * q_zz - q_vz * q_vz;
if(d == 0 || isnan(d) || isinf(d)) {
std::lock_guard<std::mutex> fm(file_mutex_global);
println(hlog, "bad matrix in iteration #", itera);
println(hlog, "p = ", p, " mid = ", mid);
println(hlog, solve(mid, p));
return;
}
transmatrix T = build_matrix(
hyperpoint(q_vv, 0, q_vz, 0),
hyperpoint(0, 1, 0, 0),
hyperpoint(q_vz, 0, q_zz, 0),
hyperpoint(0, 0, 0, 1)
);
hyperpoint q = hyperpoint(q_v, 0, q_z, 0);
hyperpoint res = inverse(T) * -q;
// println(hlog, "res = ", res);
// println(hlog, "check = ", q + T * res);
res[1] = -res[0];
res = res * delta;
res /= 10.;
if(tryit(mid + res)) continue;
if(tryit(mid + res/2)) continue;
if(tryit(mid + res/4)) continue;
break;
}
// q_x + q_xx * x + q_xy * y + q_xz * z == 0
// q + Txyz == 0
int it = 0;
ld qd0 = qd;
if(false) while(delta > 1e-6) {
it++;
// if(it % 1000 == 0) println(hlog, "iterations ", it);
if(it > 1000) return;
if(failed) return;
found = false;
while(tryit(mid + point3(delta, -delta, 0)));
while(tryit(mid + point3(-delta, +delta, 0)));
while(tryit(mid + point3(0, 0, delta)));
while(tryit(mid + point3(0, 0, -delta)));
// while(tryit(mid + point3(delta, delta, 0)));
// while(tryit(mid + point3(-delta, -delta, 0)));
if(found) println(hlog, "improved further from ", qd0, " to ", qd);
if(!found) delta /= 2;
}
max_iter = 1000;
auto h1 = iterative_solve(res, p.first * quality(p) / hypot_d(3, p.first), 100, 1e-6);
if(deb) println(hlog, "h1 returns ", h1, " of length ", hypot_d(3, h1), " and error ", hypot_d(3, nisot::numerical_exp(h1) - res));
if(h1 == fail) return;
auto d1 = hypot_d(3, h1);
if(d1 < d) h = h1, d = d1;
}
};
hyperpoint old = h;
attempt(point31(res[0], 0, res[2]/2));
attempt(point31(0, res[1], res[2]/2));
std::lock_guard<std::mutex> fm(file_mutex_global);
if(h != old && hypot_d(3, h) < hypot_d(3, old) - 1e-5)
println(hlog, "new = ", h, " vs old = ", old, " length ", hypot_d(3, h), " vs ", hypot_d(3, old));
else if(deb)
println(hlog, " not improved: ", old);
return h;
}
void fix_bugs(sn::tabled_inverses& tab) {
auto bug = compress(azeq_to_table(fail));
for(int iz=0; iz<tab.PRECZ; iz++)
for(int iy=0; iy<tab.PRECY; iy++)
for(int ix=0; ix<tab.PRECX; ix++) {
if(tab.get_int(ix, iy, iz) == bug)
for(int a=0; a<3; a++)
tab.get_int(ix, iy, iz)[a] = (tab.get_int(ix-1, iy, iz)[a]*2 - tab.get_int(ix-2, iy, iz)[a]);
}
}
void visualize_table(sn::tabled_inverses& tab, const string& s) {
renderbuffer rb(tab.PRECX, tab.PRECY, false);
rb.make_surface();
for(int iz=0; iz<tab.PRECZ; iz++) {
println(hlog, "iz=", iz);
for(int iy=0; iy<tab.PRECY; iy++)
for(int ix=0; ix<tab.PRECX; ix++) {
auto& p = qpixel(rb.srf, ix, iy);
if(ix == 52 && iy >= 30 && iy <= 40 && iz == 15)
println(hlog, "A ", tie(ix,iy,iz), " : ", tab.get_int(ix, iy, iz));
// println(hlog, ix, ", ", iy);
p = 0xFFFFFFFF;
for(int i=0; i<3; i++)
part(p, i) = 0x80 + 0x70 * tab.get_int(ix, iy, iz)[i];
}
SDL_SavePNG(rb.srf, hr::format(s.c_str(), iz).c_str());
}
}
void improve(sn::tabled_inverses& tab) {
int PRECX = tab.PRECX;
int PRECY = tab.PRECY;
int PRECZ = tab.PRECZ;
int last_x = PRECX-1, last_y = PRECY-1, last_z = PRECZ-1;
max_iter = 1000;
auto act = [&] (int tid, int iz) {
if((nih && iz == 0) || iz == PRECZ-1) return;
for(int iy=0; iy<last_y; iy++)
for(int ix=0; ix<last_x; ix++) {
if(ix < 32 || iy < 32) continue;
if(deb) { if(ix < 50 || ix > 54 || iy != 46 || iz != 6) continue; }
if(deb) println(hlog, tie(ix, iy, iz), ":");
ld x = ix_to_x(ix / (PRECX-1.));
ld y = ix_to_x(iy / (PRECY-1.));
ld z = iz_to_z(iz / (PRECZ-1.));
hyperpoint p = point31(x, y, z);
// hyperpoint h1 = inverse_exp(p, iTable, false);
hyperpoint h2 = find_optimal_geodesic(p);
std::lock_guard<std::mutex> fm(file_mutex_global);
if(ix == last_x-1) println(hlog, "solved ", tie(ix, iy, iz));
if(h2 != fail) {
auto& so = tab.get_int(ix, iy, iz);
so = compress(azeq_to_table(h2));
}
}
};
max_iter = 1000000;
parallelize(PRECZ, 0, PRECZ, act);
if(deb) exit(7);
fix_boundaries(tab, last_x, last_y, last_z);
}
int dimX=64, dimY=64, dimZ=64;
EX hyperpoint recompress(hyperpoint h) { return decompress(compress(h)); }
int readArgs() {
using namespace arg;
if(0) ;
else if(argis("-dim")) {
PHASEFROM(2);
shift(); dimX = argi();
shift(); dimY = argi();
shift(); dimZ = argi();
}
else if(argis("-build")) {
PHASEFROM(2);
build_sols(dimX, dimY, dimZ);
}
else if(argis("-load-old")) {
sn::get_tabled().load();
}
else if(argis("-improve")) {
sn::get_tabled().load();
improve(sn::get_tabled());
}
else if(argis("-write")) {
shift();
write_table(sn::get_tabled(), argcs());
}
else if(argis("-fix-bugs")) {
sn::get_tabled().load();
fix_bugs(sn::get_tabled());
}
else if(argis("-iz-list")) {
sn::get_tabled().load();
for(int iz=0; iz<dimZ-1; iz++)
println(hlog, "iz=", iz, " z=", iz_to_z(iz / (dimZ-1.)));
}
else if(argis("-visualize")) {
shift();
sn::get_tabled().load();
visualize_table(sn::get_tabled(), argcs());
}
else if(argis("-sn-unittest")) {
println(hlog, "nih = ", (bool)nih);
ld maxerr;
auto test_result = [&maxerr] (ld a, ld b) { maxerr = max(maxerr, (a-b)); };
auto test_result_p = [&maxerr] (hyperpoint a, hyperpoint b) { maxerr = max(maxerr, hypot_d(3, a-b)); };
auto test = [&maxerr] (string s, reaction_t tester) {
maxerr = 0;
tester();
println(hlog, "unittest: ", s, " error = ", maxerr);
};
test("x_to_ix", [&] { for(ld a=0; a<=20; a+=.1) test_result(a, sn::ix_to_x(sn::x_to_ix(a))); });
test("z_to_iz", [&] { for(ld a=nih?-20:0; a<=20; a+=.1) test_result(a, sn::iz_to_z(sn::z_to_iz(a))); });
test("azeq_to_table", [&] { for(ld a=-5; a<=5; a++) for(ld b=-5; b<=5; b++) for(ld c=-5; c<=5; c++) { hyperpoint h = point3(a,b,c); test_result_p(h, sn::table_to_azeq(sn::azeq_to_table(h))); }});
test("azeq_to_table recompressed", [&] {
for(ld a=-5; a<=5; a++) for(ld b=-5; b<=5; b++) for(ld c=-5; c<=5; c++) {
hyperpoint h = point3(a,b,c); test_result_p(h, sn::table_to_azeq(recompress(sn::azeq_to_table(h))));
}
});
}
else return 1;
return 0;
}
auto hook = addHook(hooks_args, 100, readArgs);
}
}

132
devmods/tests.cpp Normal file
View File

@ -0,0 +1,132 @@
#include "../hyper.h"
#include <iostream>
#include <thread>
namespace hr {
namespace tests {
int errors = 0;
string test_eq(hyperpoint h1, hyperpoint h2, ld err = 1e-6) {
if(sqhypot_d(MDIM, h1 -h2) < err)
return lalign(0, "OK ", h1, " ", h2);
else {
errors++;
return lalign(0, "ERROR", " ", h1, " ", h2);
}
}
string test_eq(transmatrix T1, transmatrix T2, ld err = 1e-6) {
if(eqmatrix(T1, T2, err))
return "OK";
else {
errors++;
return "ERROR";
}
}
int readArgs() {
using namespace arg;
if(0) ;
else if(argis("-test-dist")) {
start_game();
shift(); int d = argi();
vector<cell*> l = currentmap->allcells();
int unknown = 0;
for(cell *c1: l) if(c1->cpdist <= d)
for(cell *c2: l) if(c2->cpdist <= d) {
int cd = celldistance(c1, c2);
int bcd = bounded_celldistance(c1, c2);
if(bcd == DISTANCE_UNKNOWN)
unknown++;
else if(cd != bcd) {
errors++;
println(hlog, "distance error: ", tie(c1,c2), " cd = ", cd, " bcd = ", bcd);
}
}
int q = 0;
for(cell *c: l) if(c->cpdist <= d) q++;
println(hlog, "cells checked: ", q, " errors: ", errors, " unknown: ", unknown, " in: ", full_geometry_name());
if(errors) exit(1);
}
else if(argis("-test-bt")) {
PHASEFROM(3);
for(int i=0; i<gGUARD; i++) {
eGeometry g = eGeometry(i);
set_geometry(g);
ld aer = bt::area_expansion_rate();
if(!aer) continue;
// if(cgflags & qDEPRECATED) continue;
// if(cgflags & qHYBRID) continue;
// if(arb::in() || arcm::in()) continue;
// if(!(bt::in() || nonisotropic || among(geometry, gEuclidSquare,
println(hlog, "testing geometry: ", ginf[g].menu_displayed_name);
start_game();
int co = bt::expansion_coordinate();
int cx = (co + 1) % WDIM;
int cy = (co + 2) % WDIM;
auto oxy = [&] (ld x, ld y, ld z) { hyperpoint h = Hypc; h[co] = z; h[cx] = x; if(WDIM == 3) h[cy] = y; return tC0(bt::normalized_at(h)); };
ld shrunk_x = geo_dist(oxy(0,0,-1), oxy(.01,0,-1));
ld shrunk_y = geo_dist(oxy(0,0,-1), oxy(0,.01,-1));
ld expand_x = geo_dist(oxy(0,0,+1), oxy(.01,0,+1));
ld expand_y = geo_dist(oxy(0,0,+1), oxy(0,.01,+1));
if(WDIM == 2) shrunk_y = expand_y = 1;
println(hlog, "should be 1: ", lalign(10, (shrunk_x * shrunk_y * bt::area_expansion_rate()) / (expand_x * expand_y)), " : ", tie(shrunk_x, shrunk_y, expand_x, expand_y, aer));
if(geometry == gArnoldCat)
println(hlog, "(but not in Arnold's cat)");
}
}
else if(argis("-test-push")) {
PHASEFROM(3);
for(eGeometry g: {gSol, gNil, gCubeTiling, gSpace534, gCell120}) {
stop_game();
set_geometry(g);
println(hlog, "testing geometry: ", geometry_name());
hyperpoint h = hyperpoint(.1, .2, .3, 1);
h = normalize(h);
println(hlog, "h = ", h);
println(hlog, "test rgpushxto0: ", test_eq(rgpushxto0(h) * C0, h));
println(hlog, "test gpushxto0: ", test_eq(gpushxto0(h) * h, C0));
println(hlog, "test inverses: ", test_eq(inverse(rgpushxto0(h)), gpushxto0(h)));
println(hlog, "test iso_inverse: ", test_eq(iso_inverse(rgpushxto0(h)), gpushxto0(h)));
}
if(errors) exit(1);
}
else if(argis("-partest", [] {
hyperpoint h = point31(.01, .05, 0);
if(LDIM == 3) h[2] = .015;
println(hlog, "h = ", h);
println(hlog, "good Ph = ", parabolic13(h));
println(hlog, "good DPh = ", test_eq(h, deparabolic13(parabolic13(h))));
// println(hlog, "bad Ph = ", parabolic10(h));
// println(hlog, "bad DPh = ", test_eq(h, deparabolic10(parabolic10(h))));
if(LDIM == 3) {
println(hlog, "min Ph = ", bt::bt_to_minkowski(h));
println(hlog, "min DPh = ", test_eq(h, bt::minkowski_to_bt(bt::bt_to_minkowski(h))));
}
});
else return 1;
return 0;
}
auto hooks = addHook(hooks_args, 100, readArgs);
// Bolza:: genus 2 => Euler characteristic -2
// octagon: -2/6
// ~> 6 octagons
}
}

File diff suppressed because it is too large Load Diff

2975
drawing.cpp Normal file

File diff suppressed because it is too large Load Diff

799
earcut.hpp Normal file
View File

@ -0,0 +1,799 @@
/*
ISC License
Copyright (c) 2015, Mapbox
Permission to use, copy, modify, and/or distribute this software for any purpose
with or without fee is hereby granted, provided that the above copyright notice
and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.
*/
#pragma once
#include <algorithm>
#include <cassert>
#include <cmath>
#include <memory>
#include <vector>
namespace mapbox {
namespace util {
template <std::size_t I, typename T> struct nth {
inline static typename std::tuple_element<I, T>::type
get(const T& t) { return std::get<I>(t); }
};
}
namespace detail {
template <typename N = uint32_t>
class Earcut {
public:
std::vector<N> indices;
std::size_t vertices;
template <typename Polygon>
void operator()(const Polygon& points);
Earcut() { vertices = 0; inv_size = 0; }
private:
struct Node {
Node(N index, double x_, double y_) : i(index), x(x_), y(y_) { z = 0; prev = nullptr; next = nullptr; prevZ = nextZ = nullptr; steiner = false; }
Node(const Node&) = delete;
Node& operator=(const Node&) = delete;
Node(Node&&) = delete;
Node& operator=(Node&&) = delete;
const N i;
const double x;
const double y;
// previous and next vertice nodes in a polygon ring
Node* prev;
Node* next;
// z-order curve value
int32_t z;
// previous and next nodes in z-order
Node* prevZ;
Node* nextZ;
// indicates whether this is a steiner point
bool steiner;
};
template <typename Ring> Node* linkedList(const Ring& points, const bool clockwise);
Node* filterPoints(Node* start, Node* end = nullptr);
void earcutLinked(Node* ear, int pass = 0);
bool isEar(Node* ear);
bool isEarHashed(Node* ear);
Node* cureLocalIntersections(Node* start);
void splitEarcut(Node* start);
template <typename Polygon> Node* eliminateHoles(const Polygon& points, Node* outerNode);
void eliminateHole(Node* hole, Node* outerNode);
Node* findHoleBridge(Node* hole, Node* outerNode);
void indexCurve(Node* start);
Node* sortLinked(Node* list);
int32_t zOrder(const double x_, const double y_);
Node* getLeftmost(Node* start);
bool pointInTriangle(double ax, double ay, double bx, double by, double cx, double cy, double px, double py) const;
bool isValidDiagonal(Node* a, Node* b);
double area(const Node* p, const Node* q, const Node* r) const;
bool equals(const Node* p1, const Node* p2);
bool intersects(const Node* p1, const Node* q1, const Node* p2, const Node* q2);
bool intersectsPolygon(const Node* a, const Node* b);
bool locallyInside(const Node* a, const Node* b);
bool middleInside(const Node* a, const Node* b);
Node* splitPolygon(Node* a, Node* b);
template <typename Point> Node* insertNode(std::size_t i, const Point& p, Node* last);
void removeNode(Node* p);
bool hashing;
double minX, maxX;
double minY, maxY;
double inv_size;
template <typename T> // , typename Alloc = std::allocator<T>>
class ObjectPool {
public:
ObjectPool() { currentIndex = blockSize = 1; currentBlock = nullptr; }
ObjectPool(std::size_t blockSize_) {
reset(blockSize_);
}
~ObjectPool() {
clear();
}
template <typename... Args>
T* construct(Args&&... args) {
if (currentIndex >= blockSize) {
currentBlock = (T*) new char[sizeof(T) * blockSize];
// alloc_traits::allocate(alloc, blockSize);
allocations.emplace_back(currentBlock);
currentIndex = 0;
}
T* object = &currentBlock[currentIndex++];
// alloc_traits::construct(alloc, object, std::forward<Args>(args)...);
::new (static_cast<void*>(object)) T(std::forward<Args>(args)...);
return object;
}
void reset(std::size_t newBlockSize) {
for (auto allocation : allocations) {
// alloc_traits::deallocate(alloc, allocation, blockSize);
delete[] allocation;
}
allocations.clear();
blockSize = std::max<std::size_t>(1, newBlockSize);
currentBlock = nullptr;
currentIndex = blockSize;
}
void clear() { reset(blockSize); }
private:
T* currentBlock;
std::size_t currentIndex;
std::size_t blockSize;
std::vector<T*> allocations;
// Alloc alloc;
// typedef typename std::allocator_traits<Alloc> alloc_traits;
};
ObjectPool<Node> nodes;
};
template <typename N> template <typename Polygon>
void Earcut<N>::operator()(const Polygon& points) {
// reset
indices.clear();
vertices = 0;
if (points.empty()) return;
double x;
double y;
int threshold = 80;
std::size_t len = 0;
for (size_t i = 0; threshold >= 0 && i < points.size(); i++) {
threshold -= static_cast<int>(points[i].size());
len += points[i].size();
}
//estimate size of nodes and indices
nodes.reset(len * 3 / 2);
indices.reserve(len + points[0].size());
Node* outerNode = linkedList(points[0], true);
if (!outerNode || outerNode->prev == outerNode->next) return;
if (points.size() > 1) outerNode = eliminateHoles(points, outerNode);
// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox
hashing = threshold < 0;
if (hashing) {
Node* p = outerNode->next;
minX = maxX = outerNode->x;
minY = maxY = outerNode->y;
do {
x = p->x;
y = p->y;
minX = std::min<double>(minX, x);
minY = std::min<double>(minY, y);
maxX = std::max<double>(maxX, x);
maxY = std::max<double>(maxY, y);
p = p->next;
} while (p != outerNode);
// minX, minY and size are later used to transform coords into integers for z-order calculation
inv_size = std::max<double>(maxX - minX, maxY - minY);
inv_size = inv_size != .0 ? (1. / inv_size) : .0;
}
earcutLinked(outerNode);
nodes.clear();
}
// create a circular doubly linked list from polygon points in the specified winding order
template <typename N> template <typename Ring>
typename Earcut<N>::Node*
Earcut<N>::linkedList(const Ring& points, const bool clockwise) {
typedef typename Ring::value_type Point;
double sum = 0;
const std::size_t len = points.size();
std::size_t i, j;
Node* last = nullptr;
// calculate original winding order of a polygon ring
for (i = 0, j = len > 0 ? len - 1 : 0; i < len; j = i++) {
const auto& p1 = points[i];
const auto& p2 = points[j];
const double p20 = util::nth<0, Point>::get(p2);
const double p10 = util::nth<0, Point>::get(p1);
const double p11 = util::nth<1, Point>::get(p1);
const double p21 = util::nth<1, Point>::get(p2);
sum += (p20 - p10) * (p11 + p21);
}
// link points into circular doubly-linked list in the specified winding order
if (clockwise == (sum > 0)) {
for (i = 0; i < len; i++) last = insertNode(vertices + i, points[i], last);
} else {
for (i = len; i-- > 0;) last = insertNode(vertices + i, points[i], last);
}
if (last && equals(last, last->next)) {
removeNode(last);
last = last->next;
}
vertices += len;
return last;
}
// eliminate colinear or duplicate points
template <typename N>
typename Earcut<N>::Node*
Earcut<N>::filterPoints(Node* start, Node* end) {
if (!end) end = start;
Node* p = start;
bool again;
do {
again = false;
if (!p->steiner && (equals(p, p->next) || area(p->prev, p, p->next) == 0)) {
removeNode(p);
p = end = p->prev;
if (p == p->next) break;
again = true;
} else {
p = p->next;
}
} while (again || p != end);
return end;
}
// main ear slicing loop which triangulates a polygon (given as a linked list)
template <typename N>
void Earcut<N>::earcutLinked(Node* ear, int pass) {
if (!ear) return;
// interlink polygon nodes in z-order
if (!pass && hashing) indexCurve(ear);
Node* stop = ear;
Node* prev;
Node* next;
int iterations = 0;
// iterate through ears, slicing them one by one
while (ear->prev != ear->next) {
iterations++;
prev = ear->prev;
next = ear->next;
if (hashing ? isEarHashed(ear) : isEar(ear)) {
// cut off the triangle
indices.emplace_back(prev->i);
indices.emplace_back(ear->i);
indices.emplace_back(next->i);
removeNode(ear);
// skipping the next vertice leads to less sliver triangles
ear = next->next;
stop = next->next;
continue;
}
ear = next;
// if we looped through the whole remaining polygon and can't find any more ears
if (ear == stop) {
// try filtering points and slicing again
if (!pass) earcutLinked(filterPoints(ear), 1);
// if this didn't work, try curing all small self-intersections locally
else if (pass == 1) {
ear = cureLocalIntersections(ear);
earcutLinked(ear, 2);
// as a last resort, try splitting the remaining polygon into two
} else if (pass == 2) splitEarcut(ear);
break;
}
}
}
// check whether a polygon node forms a valid ear with adjacent nodes
template <typename N>
bool Earcut<N>::isEar(Node* ear) {
const Node* a = ear->prev;
const Node* b = ear;
const Node* c = ear->next;
if (area(a, b, c) >= 0) return false; // reflex, can't be an ear
// now make sure we don't have other points inside the potential ear
Node* p = ear->next->next;
while (p != ear->prev) {
if (pointInTriangle(a->x, a->y, b->x, b->y, c->x, c->y, p->x, p->y) &&
area(p->prev, p, p->next) >= 0) return false;
p = p->next;
}
return true;
}
template <typename N>
bool Earcut<N>::isEarHashed(Node* ear) {
const Node* a = ear->prev;
const Node* b = ear;
const Node* c = ear->next;
if (area(a, b, c) >= 0) return false; // reflex, can't be an ear
// triangle bbox; min & max are calculated like this for speed
const double minTX = std::min<double>(a->x, std::min<double>(b->x, c->x));
const double minTY = std::min<double>(a->y, std::min<double>(b->y, c->y));
const double maxTX = std::max<double>(a->x, std::max<double>(b->x, c->x));
const double maxTY = std::max<double>(a->y, std::max<double>(b->y, c->y));
// z-order range for the current triangle bbox;
const int32_t minZ = zOrder(minTX, minTY);
const int32_t maxZ = zOrder(maxTX, maxTY);
// first look for points inside the triangle in increasing z-order
Node* p = ear->nextZ;
while (p && p->z <= maxZ) {
if (p != ear->prev && p != ear->next &&
pointInTriangle(a->x, a->y, b->x, b->y, c->x, c->y, p->x, p->y) &&
area(p->prev, p, p->next) >= 0) return false;
p = p->nextZ;
}
// then look for points in decreasing z-order
p = ear->prevZ;
while (p && p->z >= minZ) {
if (p != ear->prev && p != ear->next &&
pointInTriangle(a->x, a->y, b->x, b->y, c->x, c->y, p->x, p->y) &&
area(p->prev, p, p->next) >= 0) return false;
p = p->prevZ;
}
return true;
}
// go through all polygon nodes and cure small local self-intersections
template <typename N>
typename Earcut<N>::Node*
Earcut<N>::cureLocalIntersections(Node* start) {
Node* p = start;
do {
Node* a = p->prev;
Node* b = p->next->next;
// a self-intersection where edge (v[i-1],v[i]) intersects (v[i+1],v[i+2])
if (!equals(a, b) && intersects(a, p, p->next, b) && locallyInside(a, b) && locallyInside(b, a)) {
indices.emplace_back(a->i);
indices.emplace_back(p->i);
indices.emplace_back(b->i);
// remove two nodes involved
removeNode(p);
removeNode(p->next);
p = start = b;
}
p = p->next;
} while (p != start);
return p;
}
// try splitting polygon into two and triangulate them independently
template <typename N>
void Earcut<N>::splitEarcut(Node* start) {
// look for a valid diagonal that divides the polygon into two
Node* a = start;
do {
Node* b = a->next->next;
while (b != a->prev) {
if (a->i != b->i && isValidDiagonal(a, b)) {
// split the polygon in two by the diagonal
Node* c = splitPolygon(a, b);
// filter colinear points around the cuts
a = filterPoints(a, a->next);
c = filterPoints(c, c->next);
// run earcut on each half
earcutLinked(a);
earcutLinked(c);
return;
}
b = b->next;
}
a = a->next;
} while (a != start);
}
// link every hole into the outer loop, producing a single-ring polygon without holes
template <typename N> template <typename Polygon>
typename Earcut<N>::Node*
Earcut<N>::eliminateHoles(const Polygon& points, Node* outerNode) {
const size_t len = points.size();
std::vector<Node*> queue;
for (size_t i = 1; i < len; i++) {
Node* list = linkedList(points[i], false);
if (list) {
if (list == list->next) list->steiner = true;
queue.push_back(getLeftmost(list));
}
}
std::sort(queue.begin(), queue.end(), [](const Node* a, const Node* b) {
return a->x < b->x;
});
// process holes from left to right
for (size_t i = 0; i < queue.size(); i++) {
eliminateHole(queue[i], outerNode);
outerNode = filterPoints(outerNode, outerNode->next);
}
return outerNode;
}
// find a bridge between vertices that connects hole with an outer ring and and link it
template <typename N>
void Earcut<N>::eliminateHole(Node* hole, Node* outerNode) {
outerNode = findHoleBridge(hole, outerNode);
if (outerNode) {
Node* b = splitPolygon(outerNode, hole);
filterPoints(b, b->next);
}
}
// David Eberly's algorithm for finding a bridge between hole and outer polygon
template <typename N>
typename Earcut<N>::Node*
Earcut<N>::findHoleBridge(Node* hole, Node* outerNode) {
Node* p = outerNode;
double hx = hole->x;
double hy = hole->y;
double qx = -std::numeric_limits<double>::infinity();
Node* m = nullptr;
// find a segment intersected by a ray from the hole's leftmost Vertex to the left;
// segment's endpoint with lesser x will be potential connection Vertex
do {
if (hy <= p->y && hy >= p->next->y && p->next->y != p->y) {
double x = p->x + (hy - p->y) * (p->next->x - p->x) / (p->next->y - p->y);
if (x <= hx && x > qx) {
qx = x;
if (x == hx) {
if (hy == p->y) return p;
if (hy == p->next->y) return p->next;
}
m = p->x < p->next->x ? p : p->next;
}
}
p = p->next;
} while (p != outerNode);
if (!m) return 0;
if (hx == qx) return m->prev;
// look for points inside the triangle of hole Vertex, segment intersection and endpoint;
// if there are no points found, we have a valid connection;
// otherwise choose the Vertex of the minimum angle with the ray as connection Vertex
const Node* stop = m;
double tanMin = std::numeric_limits<double>::infinity();
double tanCur = 0;
p = m->next;
double mx = m->x;
double my = m->y;
while (p != stop) {
if (hx >= p->x && p->x >= mx && hx != p->x &&
pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p->x, p->y)) {
tanCur = std::abs(hy - p->y) / (hx - p->x); // tangential
if ((tanCur < tanMin || (tanCur == tanMin && p->x > m->x)) && locallyInside(p, hole)) {
m = p;
tanMin = tanCur;
}
}
p = p->next;
}
return m;
}
// interlink polygon nodes in z-order
template <typename N>
void Earcut<N>::indexCurve(Node* start) {
assert(start);
Node* p = start;
do {
p->z = p->z ? p->z : zOrder(p->x, p->y);
p->prevZ = p->prev;
p->nextZ = p->next;
p = p->next;
} while (p != start);
p->prevZ->nextZ = nullptr;
p->prevZ = nullptr;
sortLinked(p);
}
// Simon Tatham's linked list merge sort algorithm
// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
template <typename N>
typename Earcut<N>::Node*
Earcut<N>::sortLinked(Node* list) {
assert(list);
Node* p;
Node* q;
Node* e;
Node* tail;
int i, numMerges, pSize, qSize;
int inSize = 1;
for (;;) {
p = list;
list = nullptr;
tail = nullptr;
numMerges = 0;
while (p) {
numMerges++;
q = p;
pSize = 0;
for (i = 0; i < inSize; i++) {
pSize++;
q = q->nextZ;
if (!q) break;
}
qSize = inSize;
while (pSize > 0 || (qSize > 0 && q)) {
if (pSize == 0) {
e = q;
q = q->nextZ;
qSize--;
} else if (qSize == 0 || !q) {
e = p;
p = p->nextZ;
pSize--;
} else if (p->z <= q->z) {
e = p;
p = p->nextZ;
pSize--;
} else {
e = q;
q = q->nextZ;
qSize--;
}
if (tail) tail->nextZ = e;
else list = e;
e->prevZ = tail;
tail = e;
}
p = q;
}
tail->nextZ = nullptr;
if (numMerges <= 1) return list;
inSize *= 2;
}
}
// z-order of a Vertex given coords and size of the data bounding box
template <typename N>
int32_t Earcut<N>::zOrder(const double x_, const double y_) {
// coords are transformed into non-negative 15-bit integer range
int32_t x = static_cast<int32_t>(32767.0 * (x_ - minX) * inv_size);
int32_t y = static_cast<int32_t>(32767.0 * (y_ - minY) * inv_size);
x = (x | (x << 8)) & 0x00FF00FF;
x = (x | (x << 4)) & 0x0F0F0F0F;
x = (x | (x << 2)) & 0x33333333;
x = (x | (x << 1)) & 0x55555555;
y = (y | (y << 8)) & 0x00FF00FF;
y = (y | (y << 4)) & 0x0F0F0F0F;
y = (y | (y << 2)) & 0x33333333;
y = (y | (y << 1)) & 0x55555555;
return x | (y << 1);
}
// find the leftmost node of a polygon ring
template <typename N>
typename Earcut<N>::Node*
Earcut<N>::getLeftmost(Node* start) {
Node* p = start;
Node* leftmost = start;
do {
if (p->x < leftmost->x || (p->x == leftmost->x && p->y < leftmost->y))
leftmost = p;
p = p->next;
} while (p != start);
return leftmost;
}
// check if a point lies within a convex triangle
template <typename N>
bool Earcut<N>::pointInTriangle(double ax, double ay, double bx, double by, double cx, double cy, double px, double py) const {
return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&
(ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&
(bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;
}
// check if a diagonal between two polygon nodes is valid (lies in polygon interior)
template <typename N>
bool Earcut<N>::isValidDiagonal(Node* a, Node* b) {
return a->next->i != b->i && a->prev->i != b->i && !intersectsPolygon(a, b) &&
locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b);
}
// signed area of a triangle
template <typename N>
double Earcut<N>::area(const Node* p, const Node* q, const Node* r) const {
return (q->y - p->y) * (r->x - q->x) - (q->x - p->x) * (r->y - q->y);
}
// check if two points are equal
template <typename N>
bool Earcut<N>::equals(const Node* p1, const Node* p2) {
return p1->x == p2->x && p1->y == p2->y;
}
// check if two segments intersect
template <typename N>
bool Earcut<N>::intersects(const Node* p1, const Node* q1, const Node* p2, const Node* q2) {
if ((equals(p1, q1) && equals(p2, q2)) ||
(equals(p1, q2) && equals(p2, q1))) return true;
return (area(p1, q1, p2) > 0) != (area(p1, q1, q2) > 0) &&
(area(p2, q2, p1) > 0) != (area(p2, q2, q1) > 0);
}
// check if a polygon diagonal intersects any polygon segments
template <typename N>
bool Earcut<N>::intersectsPolygon(const Node* a, const Node* b) {
const Node* p = a;
do {
if (p->i != a->i && p->next->i != a->i && p->i != b->i && p->next->i != b->i &&
intersects(p, p->next, a, b)) return true;
p = p->next;
} while (p != a);
return false;
}
// check if a polygon diagonal is locally inside the polygon
template <typename N>
bool Earcut<N>::locallyInside(const Node* a, const Node* b) {
return area(a->prev, a, a->next) < 0 ?
area(a, b, a->next) >= 0 && area(a, a->prev, b) >= 0 :
area(a, b, a->prev) < 0 || area(a, a->next, b) < 0;
}
// check if the middle Vertex of a polygon diagonal is inside the polygon
template <typename N>
bool Earcut<N>::middleInside(const Node* a, const Node* b) {
const Node* p = a;
bool inside = false;
double px = (a->x + b->x) / 2;
double py = (a->y + b->y) / 2;
do {
if (((p->y > py) != (p->next->y > py)) && p->next->y != p->y &&
(px < (p->next->x - p->x) * (py - p->y) / (p->next->y - p->y) + p->x))
inside = !inside;
p = p->next;
} while (p != a);
return inside;
}
// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits
// polygon into two; if one belongs to the outer ring and another to a hole, it merges it into a
// single ring
template <typename N>
typename Earcut<N>::Node*
Earcut<N>::splitPolygon(Node* a, Node* b) {
Node* a2 = nodes.construct(a->i, a->x, a->y);
Node* b2 = nodes.construct(b->i, b->x, b->y);
Node* an = a->next;
Node* bp = b->prev;
a->next = b;
b->prev = a;
a2->next = an;
an->prev = a2;
b2->next = a2;
a2->prev = b2;
bp->next = b2;
b2->prev = bp;
return b2;
}
// create a node and util::optionally link it with previous one (in a circular doubly linked list)
template <typename N> template <typename Point>
typename Earcut<N>::Node*
Earcut<N>::insertNode(std::size_t i, const Point& pt, Node* last) {
Node* p = nodes.construct(static_cast<N>(i), util::nth<0, Point>::get(pt), util::nth<1, Point>::get(pt));
if (!last) {
p->prev = p;
p->next = p;
} else {
assert(last);
p->next = last->next;
p->prev = last;
last->next->prev = p;
last->next = p;
}
return p;
}
template <typename N>
void Earcut<N>::removeNode(Node* p) {
p->next->prev = p->prev;
p->prev->next = p->next;
if (p->prevZ) p->prevZ->nextZ = p->nextZ;
if (p->nextZ) p->nextZ->prevZ = p->prevZ;
}
}
template <typename N = uint32_t, typename Polygon>
std::vector<N> earcut(const Polygon& poly) {
mapbox::detail::Earcut<N> earcut;
earcut(poly);
return std::move(earcut.indices);
}
}

1397
embeddings.cpp Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,3 @@
#!/bin/sh
/usr/lib/emscripten/em++ hyperweb.cpp -O3 -s LEGACY_GL_EMULATION=1 -s TOTAL_MEMORY=128*1024*1024 -std=c++11 -o hyper.html
/usr/lib/emscripten/em++ hyperweb.cpp -O3 -s USE_ZLIB=1 -s LEGACY_GL_EMULATION=1 -s TOTAL_MEMORY=128*1024*1024 -std=c++11 -o hyper.html

934
environment.cpp Normal file
View File

@ -0,0 +1,934 @@
// Hyperbolic Rogue - environment
// Copyright (C) 2011-2019 Zeno Rogue, see 'hyper.cpp' for details
/** \file environment.cpp
* \brief game environment: routines related to the game that affect all the map. Monsters to move are detected here, but their moves are implemented in monstermove.cpp
*/
#include "hyper.h"
namespace hr {
#if HDR
#define HF_BUG Flag(0)
#define HF_EARTH Flag(1)
#define HF_BIRD Flag(2)
#define HF_LEADER Flag(3)
#define HF_HEX Flag(4)
#define HF_WHIRLPOOL Flag(5)
#define HF_WATER Flag(6)
#define HF_AIR Flag(7)
#define HF_MUTANT Flag(8)
#define HF_OUTLAW Flag(9)
#define HF_WHIRLWIND Flag(10)
#define HF_ROSE Flag(11)
#define HF_DRAGON Flag(12)
#define HF_KRAKEN Flag(13)
#define HF_SHARK Flag(14)
#define HF_BATS Flag(15)
#define HF_REPTILE Flag(16)
#define HF_EAGLES Flag(17)
#define HF_SLOW Flag(18)
#define HF_FAST Flag(19)
#define HF_WARP Flag(20)
#define HF_MOUSE Flag(21)
#define HF_RIVER Flag(22)
#define HF_MIRROR Flag(23)
#define HF_VOID Flag(24)
#define HF_HUNTER Flag(25)
#define HF_FAILED_AMBUSH Flag(26)
#define HF_MAGNET Flag(27)
#define HF_HEXD Flag(28)
#define HF_ALT Flag(29)
#define HF_MONK Flag(30)
#define HF_WESTWALL Flag(31)
#define HF_JUMP Flag(32)
#define HF_DICE Flag(33)
#endif
EX flagtype havewhat, hadwhat;
/** monsters of specific types to move */
EX vector<cell*> worms, ivies, ghosts, golems, hexsnakes;
/** temporary changes during bfs */
vector<pair<cell*, eMonster>> tempmonsters;
/** The position of the first cell in dcal in distance 7. New wandering monsters can be generated in dcal[first7..]. */
EX int first7;
/** the list of all nearby cells, according to cpdist */
EX vector<cell*> dcal;
/** the list of all nearby cells, according to current pathdist */
EX vector<cellwalker> pathq;
/** the number of big statues -- they increase monster generation */
EX int statuecount;
/** the number of slimes in Wetland -- they create ghosts */
EX int wetslime;
/** list of monsters to move (pathq restriced to monsters) */
EX vector<cell*> pathqm;
/** which hex snakes are there */
EX set<int> snaketypes;
EX int gamerange_bonus = 0;
EX int gamerange() { return getDistLimit() + gamerange_bonus; }
// pathdist begin
EX cell *pd_from;
EX int pd_range;
#if HDR
/** The pathdata is used to keep a list of visited cells. It is used as follows:
* 1) create pathdata object: pathdata pd(identifier)
* 2) use one of the following methods to mark cells as visited:
* 2a) onpath_with_dir or onpath_random_dir, to mark a cell together with its distance and the direction we came from (used by computePathdist to make pathfinding not sensitive to direction indexing)
* 2b) onpath, to mark a cell at its distance (used when ordering is irrelevant: compute_graphical_distance and in shmup)
* 2c) onpatk_mark, to just mark a cell (used in groupmove2)
* 3) All the visited cells are listed in pathq, and they have 'pathdist' set to their recorded distance (0 in case of onpath_mark).
* 4) When the pathdata object is deleted, all the pathdist values are cleared back to PINFD.
* The variable 'pathlock' ensures that we do not use two pathdata objects at once.
**/
struct pathdata {
void checklock();
~pathdata();
pathdata(eMonster m, bool include_allies IS(true));
pathdata(int i);
};
#endif
/** using pathdata, record a cell (together with direction) as visited */
EX void onpath_with_dir(cellwalker cw, int d) {
if(!pathlock) {
println(hlog, "onpath(", cw, ", ", d, ") without pathlock");
}
cw.at->pathdist = d;
pathq.push_back(cw);
}
/** using pathdata, record a cell as visited, with random direction */
EX void onpath_random_dir(cell *c, int d) {
onpath_with_dir(cellwalker(c, hrand(c->type), hrand(2)), d);
}
EX void onpath(cell *c, int d) {
onpath_with_dir(cellwalker(c, 0, 0), d);
}
EX void onpath_mark(cell *c) {
onpath_with_dir(cellwalker(c, 0, 0), 0);
}
EX void clear_pathdata() {
for(auto c: pathq) c.at->pathdist = PINFD;
pathq.clear();
pathqm.clear();
}
/** This ensures that we do not use two pathdata objects at once */
EX int pathlock = 0;
/** compute_graphical_distance determines the distance of every cell
* from the current FOV center. It uses the pathq structures but
* does not lock them */
EX void compute_graphical_distance() {
if(pathlock) { printf("path error: compute_graphical_distance\n"); }
cell *c1 = centerover ? centerover : pd_from ? pd_from : cwt.at;
int sr = get_sightrange_ambush();
if(pd_from == c1 && pd_range == sr) return;
clear_pathdata();
pathlock++;
pd_from = c1;
pd_range = sr;
onpath(c1, 0);
for(int qb=0; qb<isize(pathq); qb++) {
cell *c = pathq[qb].at;
if(c->pathdist == pd_range) break;
if(qb == 0) forCellCM(c1, c) ;
forCellEx(c1, c)
if(c1->pathdist == PINFD)
onpath(c1, c->pathdist + 1);
}
pathlock--;
}
const int max_radius = 16;
struct visit_set {
set<cell*> visited;
queue<cell*> q;
void visit(cell *c) {
if(visited.count(c)) return;
visited.insert(c);
q.push(c);
}
};
struct princess_ai {
array<visit_set, max_radius+1> info;
void visit_gate(cell *g) { info[0].visit(g); }
void run();
};
void princess_ai::run() {
int radius = toggle_radius(waOpenPlate);
if(pathq.empty()) return;
int d = pathq.back().at->pathdist;
if(d == PINFD - 1) return;
d++;
if(d < 5) d = 5; /* the Princess AI avoids plates when too close to the player */
hassert(radius <= max_radius);
for(int k=0; k<=radius; k++) while(!info[k].q.empty()) {
cell *c = info[k].q.front();
info[k].q.pop();
if(k < radius) forCellEx(c1, c) {
info[k+1].visit(c1);
if(k == 0 && c1->wall == waClosedGate)
info[0].visit(c1);
}
if(k == radius && c->wall == waOpenPlate && c->pathdist == PINFD)
onpath_random_dir(c, d);
}
}
EX void computePathdist(eMonster param, bool include_allies IS(true)) {
for(cell *c: targets)
if(include_allies || isPlayerOn(c))
onpath_random_dir(c, isPlayerOn(c) ? 0 : 1);
int qtarg = isize(targets);
int limit = gamerange();
int qb = 0;
bool princess = isPrincess(param);
princess_ai gd;
princess_retry:
for(; qb < isize(pathq); qb++) {
cellwalker cw = pathq[qb];
/* The opposite cell will be added to the queue first, which helps the AI. */
cw += cw.at->type/2;
cell*& c = cw.at;
if(c->monst && !isBug(c) && !(isFriendly(c) && !c->stuntime)) {
pathqm.push_back(c);
continue; // no paths going through monsters
}
if(isMounted(c) && !isPlayerOn(c)) {
// don't treat the Worm you are riding as passable
pathqm.push_back(c);
continue;
}
if(c->cpdist > limit && !(c->land == laTrollheim && turncount < c->landparam) && c->wall != waThumperOn) continue;
int d = c->pathdist;
if(d == PINFD - 1) continue;
for(int j=0; j<c->type; j++) {
cellwalker cw1 = cw + j;
// printf("i=%d cd=%d\n", i, c->move(i)->cpdist);
cell *c2 = cw1.peek();
flagtype f = P_MONSTER;
if(param == moTameBomberbird) f |= P_FLYING | P_ISFRIEND;
if(isPrincess(param)) f |= P_ISFRIEND | P_USEBOAT | P_CHAIN;
if(param == moGolem) f |= P_ISFRIEND;
bool pass = c2 && c2->pathdist == PINFD;
if(pass && qb < qtarg && !nonAdjacent(c, c2) && !thruVine(c,c2)) pass = passable(c2, NULL, f);
else pass = pass && passable(c, c2, f);
if(pass) {
if(qb >= qtarg) {
if(param == moTortoise && nogoSlow(c, c2)) continue;
if(param == moIvyRoot && strictlyAgainstGravity(c, c2, false, MF_IVY)) continue;
if(param == moWorm && (cellUnstable(c) || cellEdgeUnstable(c) || prairie::no_worms(c))) continue;
if(!isFriendly(param) && items[itOrbLava] && c2->cpdist <= 5 && pseudohept(c) && makeflame(c2, 1, true))
continue;
}
onpath_with_dir(cw1 + wstep, d+1);
}
else if(c2 && c2->wall == waClosedGate && princess)
gd.visit_gate(c2);
}
}
if(princess) {
gd.run();
if(qb < isize(pathq)) goto princess_retry;
}
}
pathdata::~pathdata() {
pathlock--;
clear_pathdata();
}
void pathdata::checklock() {
if(pd_from) pd_from = NULL, clear_pathdata();
if(pathlock) printf("path error\n");
pathlock++;
}
pathdata::pathdata(int i) { checklock(); }
pathdata::pathdata(eMonster m, bool include_allies IS(true)) {
checklock();
if(isize(pathq))
println(hlog, "! we got tiles on pathq: ", isize(pathq));
computePathdist(m, include_allies);
}
// pathdist end
/** additional direction information for BFS algorithms.
* It remembers from where we have got to this location
* the opposite cell will be added to the queue first,
* which helps the AI. Used in bfs().
**/
EX vector<int> bfs_reachedfrom;
/** calculate cpdist, 'have' flags, and do general fixings */
EX void bfs() {
yendor::onpath();
int dcs = isize(dcal);
for(int i=0; i<dcs; i++) dcal[i]->cpdist = INFD;
worms.clear(); ivies.clear(); ghosts.clear(); golems.clear();
tempmonsters.clear(); targets.clear();
statuecount = 0;
wetslime = 0;
hexsnakes.clear();
hadwhat = havewhat;
havewhat = 0; jiangshi_on_screen = 0;
snaketypes.clear();
if(!(hadwhat & HF_WARP)) { avengers = 0; }
if(!(hadwhat & HF_MIRROR)) { mirrorspirits = 0; }
elec::havecharge = false;
elec::afterOrb = false;
elec::haveelec = false;
airmap.clear();
if(!(hadwhat & HF_ROSE)) rosemap.clear();
dcal.clear(); bfs_reachedfrom.clear();
for(cell *c: player_positions()) {
if(c->cpdist == 0) continue;
c->cpdist = 0;
dcal.push_back(c);
bfs_reachedfrom.push_back(hrand(c->type));
if(!invismove) targets.push_back(c);
}
int distlimit = gamerange();
for(cell *c: player_positions()) {
if(items[itOrbDomination])
if(c->monst == moTentacle || c->monst == moTentaclewait || c->monst == moTentacleEscaping)
worms.push_back(c);
}
int qb = 0;
first7 = 0;
while(true) {
if(qb == isize(dcal)) break;
int i, fd = bfs_reachedfrom[qb] + dcal[qb]->type/2;
cell *c = dcal[qb++];
int d = c->cpdist;
if(WDIM == 2 && d == distlimit) { first7 = qb; break; }
for(int j=0; j<c->type; j++) if(i = (fd+j) % c->type, c->move(i)) {
// printf("i=%d cd=%d\n", i, c->move(i)->cpdist);
cell *c2 = c->move(i);
if(!c2) continue;
if(isWarpedType(c2->land)) havewhat |= HF_WARP;
if(c2->land == laMirror) havewhat |= HF_MIRROR;
if((c->wall == waBoat || c->wall == waSea) &&
(c2->wall == waSulphur || c2->wall == waSulphurC))
c2->wall = waSea;
if(c2 && signed(c2->cpdist) > d+1) {
if(WDIM == 3 && (d > 2 && !gmatrix.count(c2))) {
if(!first7) first7 = qb;
continue;
}
c2->cpdist = d+1;
// remove treasures
if(!peace::on && c2->item && c2->cpdist == distlimit && itemclass(c2->item) == IC_TREASURE &&
!among(c2->item, itBrownian, itBabyTortoise) && WDIM != 3 &&
(items[c2->item] >= (ls::any_chaos()?10:20) + currentLocalTreasure || getGhostcount() >= 2)) {
c2->item = itNone;
if(c2->land == laMinefield) { c2->landparam &= ~3; }
}
if(c2->item == itBombEgg && c2->cpdist == distlimit && items[itBombEgg] >= c2->landparam) {
c2->item = itNone;
c2->landparam |= 2;
c2->landparam &= ~1;
if(!c2->monst) c2->monst = moBomberbird, c2->stuntime = 0;
}
if(c2->item == itBarrow && c2->cpdist == distlimit && c2->wall != waBarrowDig) {
c2->item = itNone;
}
if(c2->item == itLotus && c2->cpdist == distlimit && items[itLotus] >= getHauntedDepth(c2)) {
c2->item = itNone;
}
if(c2->item == itMutant2 && timerghost) {
bool rotten = true;
for(int i=0; i<c2->type; i++)
if(c2->move(i) && c2->move(i)->monst == moMutant)
rotten = false;
if(rotten) c2->item = itNone;
}
if(c2->item == itDragon && (shmup::on ? shmup::curtime-c2->landparam>300000 :
turncount-c2->landparam > 500))
c2->item = itNone;
if(c2->item == itTrollEgg && c2->cpdist == distlimit && !shmup::on && c2->landparam && turncount-c2->landparam > 650)
c2->item = itNone;
if(c2->item == itWest && c2->cpdist == distlimit && items[itWest] >= c2->landparam + 4)
c2->item = itNone;
if(c2->item == itMutant && c2->cpdist == distlimit && items[itMutant] >= c2->landparam) {
c2->item = itNone;
}
if(c2->item == itIvory && c2->cpdist == distlimit && items[itIvory] >= c2->landparam) {
c2->item = itNone;
}
if(c2->item == itAmethyst && c2->cpdist == distlimit && items[itAmethyst] >= -celldistAlt(c2)/5) {
c2->item = itNone;
}
if(!keepLightning) c2->ligon = 0;
dcal.push_back(c2);
bfs_reachedfrom.push_back(c->c.spin(i));
if(c2->wall == waBigStatue && c2->land != laTemple)
statuecount++;
if(isAlch(c2->wall) && c2->land == laWet)
wetslime++;
if(cellHalfvine(c2) && isWarped(c2)) {
addMessage(XLAT("%The1 is destroyed!", c2->wall));
destroyHalfvine(c2);
}
if(c2->wall == waCharged) elec::havecharge = true;
if(isElectricLand(c2)) elec::haveelec = true;
if(c2->land == laWhirlpool) havewhat |= HF_WHIRLPOOL;
if(c2->land == laWhirlwind) havewhat |= HF_WHIRLWIND;
if(c2->land == laWestWall) havewhat |= HF_WESTWALL;
if(c2->land == laPrairie) havewhat |= HF_RIVER;
if(c2->land == laClearing) havewhat |= HF_MUTANT;
if(c2->wall == waRose) havewhat |= HF_ROSE;
if((hadwhat & HF_ROSE) && (rosemap[c2] & 3)) havewhat |= HF_ROSE;
if(c2->monst) {
if(isHaunted(c2->land) &&
c2->monst != moGhost && c2->monst != moZombie && c2->monst != moNecromancer)
fail_survivalist();
if(c2->monst == moHexSnake || c2->monst == moHexSnakeTail) {
havewhat |= HF_HEX;
if(c2->mondir != NODIR)
snaketypes.insert(snake_pair(c2));
if(c2->monst == moHexSnake) hexsnakes.push_back(c2);
else findWormIvy(c2);
}
else if(c2->monst == moKrakenT || c2->monst == moKrakenH) {
havewhat |= HF_KRAKEN;
}
else if(c2->monst == moDragonHead || c2->monst == moDragonTail) {
havewhat |= HF_DRAGON;
}
else if(c2->monst == moWitchSpeed)
havewhat |= HF_FAST;
else if(c2->monst == moMutant)
havewhat |= HF_MUTANT;
else if(c2->monst == moJiangshi)
jiangshi_on_screen++;
else if(c2->monst == moOutlaw)
havewhat |= HF_OUTLAW;
else if(isGhostMover(c2->monst))
ghosts.push_back(c2);
else if(isWorm(c2) || isIvy(c2)) findWormIvy(c2);
else if(isBug(c2)) {
havewhat |= HF_BUG;
targets.push_back(c2);
}
else if(isFriendly(c2)) {
if(c2->monst != moMouse && !markEmpathy(itOrbInvis) && !(isWatery(c2) && markEmpathy(itOrbFish)) &&
!c2->stuntime) targets.push_back(c2);
if(c2->monst == moGolem) golems.push_back(c2);
if(c2->monst == moFriendlyGhost) golems.push_back(c2);
if(c2->monst == moKnight) golems.push_back(c2);
if(c2->monst == moTameBomberbird) golems.push_back(c2);
if(c2->monst == moMouse) { golems.push_back(c2); havewhat |= HF_MOUSE; }
if(c2->monst == moPrincess || c2->monst == moPrincessArmed) golems.push_back(c2);
if(c2->monst == moIllusion) {
if(items[itOrbIllusion]) items[itOrbIllusion]--;
else c2->monst = moNone;
}
}
else if(c2->monst == moButterfly) {
addButterfly(c2);
}
else if(isAngryBird(c2->monst)) {
havewhat |= HF_BIRD;
if(c2->monst == moBat) havewhat |= HF_BATS | HF_EAGLES;
if(c2->monst == moEagle) havewhat |= HF_EAGLES;
}
else if(among(c2->monst, moFrog, moVaulter, moPhaser))
havewhat |= HF_JUMP;
else if(c2->monst == moReptile) havewhat |= HF_REPTILE;
else if(isLeader(c2->monst)) havewhat |= HF_LEADER;
else if(c2->monst == moEarthElemental) havewhat |= HF_EARTH;
else if(c2->monst == moWaterElemental) havewhat |= HF_WATER;
else if(c2->monst == moVoidBeast) havewhat |= HF_VOID;
else if(c2->monst == moHunterDog) havewhat |= HF_HUNTER;
else if(isMagneticPole(c2->monst)) havewhat |= HF_MAGNET;
else if(c2->monst == moAltDemon) havewhat |= HF_ALT;
else if(c2->monst == moHexDemon) havewhat |= HF_HEXD;
else if(among(c2->monst, moAnimatedDie, moAngryDie)) havewhat |= HF_DICE;
else if(c2->monst == moMonk) havewhat |= HF_MONK;
else if(c2->monst == moShark || c2->monst == moCShark || among(c2->monst, moRusalka, moPike)) havewhat |= HF_SHARK;
else if(c2->monst == moAirElemental)
havewhat |= HF_AIR, airmap.push_back(make_pair(c2,0));
}
// pheromones!
if(c2->land == laHive && c2->landparam >= 50 && c2->wall != waWaxWall)
havewhat |= HF_BUG;
if(c2->wall == waThumperOn)
targets.push_back(c2);
}
}
}
for(int i=first7; i<isize(dcal); i++)
forCellEx(c2, dcal[i])
if(c2->wall == waThumperOn) {
targets.push_back(c2);
}
for(auto& t: tempmonsters) t.first->monst = t.second;
buildAirmap();
}
EX void moverefresh(bool turn IS(true)) {
int dcs = isize(dcal);
for(int i=0; i<dcs; i++) {
cell *c = dcal[i];
if(c->monst == moWolfMoved) c->monst = moWolf;
if(c->monst == moIvyNext) {
c->monst = moIvyHead; ivynext(c);
}
if(c->monst == moIvyDead)
removeIvy(c);
refreshFriend(c);
if(c->monst == moSlimeNextTurn) c->monst = moSlime;
if(c->monst == moLesser && !cellEdgeUnstable(c)) c->monst = moLesserM;
else if(c->monst == moLesserM) c->monst = moLesser;
if(c->monst == moGreater && !cellEdgeUnstable(c)) c->monst = moGreaterM;
else if(c->monst == moGreaterM) c->monst = moGreater;
if(c->monst == moPair && !c->stuntime) {
cell *c2 = c->move(c->mondir);
if(c2->monst != moPair) continue;
if(true) for(int i: {-1, 1}) {
cell *c3 = c->modmove(c->mondir + i);
if(among(c3->wall, waRuinWall, waColumn, waStone, waVinePlant, waPalace)) {
drawParticles(c3, winf[c3->wall].color, 30);
c3->wall = waNone;
}
}
}
if(c->stuntime && !isMutantIvy(c)) {
if(turn) c->stuntime--;
int breathrange = sphere ? 2 : 3;
if(c->stuntime == 0 && c->monst == moDragonHead) {
// if moDragonHead is renamed to "Dragon Head", we might need to change this
eMonster subject = c->monst;
if(!c->hitpoints) c->hitpoints = 1;
else if(shmup::on && dragon::totalhp(c) > 2 && shmup::dragonbreath(c)) {
c->hitpoints = 0;
}
else if(dragon::totalhp(c) <= 2) ;
else if(isMounted(c)) {
if(dragon::target && celldistance(c, dragon::target) <= breathrange && makeflame(dragon::target, 5, true)) {
addMessage(XLAT("%The1 breathes fire!", subject));
makeflame(dragon::target, 5, false);
playSound(dragon::target, "fire");
c->hitpoints = 0;
}
}
else {
for(int i=0; i<isize(targets); i++) {
cell *t = targets[i];
if(celldistance(c, t) <= breathrange && makeflame(t, 5, true)) {
if(isPlayerOn(t)) addMessage(XLAT("%The1 breathes fire at you!", subject));
else if(t->monst)
addMessage(XLAT("%The1 breathes fire at %the2!", subject, t->monst));
else
addMessage(XLAT("%The1 breathes fire!", subject));
makeflame(t, 5, false);
playSound(t, "fire");
c->hitpoints = 0;
}
}
}
}
}
// tortoises who have found their children no longer move
if(saved_tortoise_on(c))
c->stuntime = 2;
if(c->monst == moReptile) {
if(c->wall == waChasm || cellUnstable(c)) {
c->monst = moNone;
c->wall = waReptile;
c->wparam = reptilemax();
playSound(c, "click");
}
else if(isChasmy(c) || isWatery(c)) {
if(c->wall == waMercury) {
fallMonster(c, AF_FALL);
c->wall = waNone;
}
else {
c->wall = waReptileBridge;
c->wparam = reptilemax();
c->monst = moNone;
}
c->item = itNone;
playSound(c, "click");
}
}
if(c->wall == waChasm) {
if(c->land != laWhirlwind) c->item = itNone;
if(c->monst && !survivesChasm(c->monst) && c->monst != moReptile && normal_gravity_at(c)) {
if(c->monst != moRunDog && c->land == laMotion)
achievement_gain_once("FALLDEATH1");
addMessage(XLAT("%The1 falls!", c->monst));
fallMonster(c, AF_FALL);
}
}
else if(isReptile(c->wall) && turn) {
if(c->monst || isPlayerOn(c)) c->wparam = -1;
else if(c->cpdist <= 7) {
c->wparam--;
if(c->wparam == 0) {
if(c->wall == waReptile) c->wall = waChasm;
else placeWater(c, NULL);
c->monst = moReptile;
c->hitpoints = 3;
c->stuntime = 0;
vector<int> gooddirs;
// in the peace mode, a reptile will
// prefer to walk on the ground, rather than the chasm
for(int i=0; i<c->type; i++) {
int i0 = (i+3) % c->type;
int i1 = (i+c->type-3) % c->type;
if(c->move(i0) && passable(c->move(i0), c, 0))
if(c->move(i1) && passable(c->move(i1), c, 0))
gooddirs.push_back(i);
}
c->mondir = hrand_elt(gooddirs, c->mondir);
playSound(c, "click");
}
}
}
else if(isFire(c)) {
if(c->monst == moSalamander) c->stuntime = max<int>(c->stuntime, 1);
else if(c->monst == moVaulter && c->mondir == JUMP)
c->mondir = NODIR;
else if(c->monst && !survivesFire(c->monst) && !isWorm(c->monst)) {
addMessage(XLAT("%The1 burns!", c->monst));
if(isBull(c->monst)) {
addMessage(XLAT("Fire is extinguished!"));
c->wall = waNone;
}
fallMonster(c, AF_CRUSH);
}
if(c->item && itemBurns(c->item)) {
addMessage(XLAT("%The1 burns!", c->item));
c->item = itNone;
}
}
else if(isWatery(c)) {
if(c->monst == moLesser || c->monst == moLesserM || c->monst == moGreater || c->monst == moGreaterM)
c->monst = moGreaterShark;
if(c->monst && !survivesWater(c->monst) && normal_gravity_at(c)) {
playSound(c, "splash"+pick12());
if(isNonliving(c->monst))
addMessage(XLAT("%The1 sinks!", c->monst));
else
addMessage(XLAT("%The1 drowns!", c->monst));
if(isBull(c->monst)) {
addMessage(XLAT("%The1 is filled!", c->wall));
c->wall = waShallow;
}
fallMonster(c, AF_FALL);
}
}
else if(c->wall == waSulphur || c->wall == waSulphurC || c->wall == waMercury) {
if(c->monst && !survivesPoison(c->monst, c->wall) && normal_gravity_at(c)) {
playSound(c, "splash"+pick12());
if(isNonliving(c->monst))
addMessage(XLAT("%The1 sinks!", c->monst));
else
addMessage(XLAT("%The1 drowns!", c->monst));
if(isBull(c->monst)) {
addMessage(XLAT("%The1 is filled!", c->wall));
c->wall = waNone;
}
fallMonster(c, AF_FALL);
}
}
else if(c->wall == waMagma) {
if(c->monst == moSalamander) c->stuntime = max<int>(c->stuntime, 1);
else if(c->monst && !survivesPoison(c->monst, c->wall) && normal_gravity_at(c)) {
if(isNonliving(c->monst))
addMessage(XLAT("%The1 is destroyed by lava!", c->monst));
else
addMessage(XLAT("%The1 is killed by lava!", c->monst));
playSound(c, "steamhiss", 70);
fallMonster(c, AF_FALL);
}
}
else if(!isWateryOrBoat(c) && c->wall != waShallow) {
if(c->monst == moGreaterShark)
c->monst = moGreaterM;
else if(c->monst == moShark || c->monst == moCShark) {
addMessage(XLAT("%The1 suffocates!", c->monst));
fallMonster(c, AF_CRUSH);
}
else if(c->monst == moKrakenH) {
addMessage(XLAT("%The1 suffocates!", c->monst));
kraken::kill(c, moNone);
}
}
if(c->monst == moVineSpirit && !cellHalfvine(c) && c->wall != waVinePlant) {
addMessage(XLAT("%The1 is destroyed!", c->monst));
fallMonster(c, AF_CRUSH);
}
if(c->monst) mayExplodeMine(c, c->monst);
if(c->monst && c->wall == waClosedGate && !survivesWall(c->monst)) {
playSound(c, "hit-crush"+pick123());
addMessage(XLAT("%The1 is crushed!", c->monst));
fallMonster(c, AF_CRUSH);
}
if(c->monst && cellUnstable(c) && !ignoresPlates(c->monst) && !shmup::on)
doesFallSound(c);
}
}
// find worms and ivies
EX void settemp(cell *c) {
tempmonsters.emplace_back(c, (eMonster) c->monst);
c->monst = moNone;
}
EX void findWormIvy(cell *c) {
while(true) {
if(c->monst == moWorm || c->monst == moTentacle || c->monst == moWormwait || c->monst == moTentaclewait ||
c->monst == moTentacleEscaping) {
worms.push_back(c); settemp(c);
break;
}
else if(c->monst == moHexSnake) {
hexsnakes.push_back(c); settemp(c);
}
else if(c->monst == moWormtail || c->monst == moHexSnakeTail) {
bool bug = true;
for(int i=0; i<c->type; i++) {
cell* c2 = c->move(i);
if(c2 && isWorm(c2) && c2->mondir != NODIR && c2->move(c2->mondir) == c) {
settemp(c);
c = c2;
bug = false;
}
}
if(bug) break;
}
else if(c->monst == moIvyWait) {
cell* c2 = c->move(c->mondir);
settemp(c); c=c2;
}
else if(c->monst == moIvyHead) {
ivies.push_back(c); settemp(c);
break;
}
else if(c->monst == moIvyBranch || c->monst == moIvyRoot) {
bool bug = true;
for(int i=0; i<c->type; i++) {
cell* c2 = c->move(i);
if(c2 && (c2->monst == moIvyHead || c2->monst == moIvyBranch) && c2->move(c2->mondir) == c) {
settemp(c);
c = c2;
bug = false;
}
}
if(bug) break;
}
else break;
}
}
EX void advance_tides() {
calcTidalPhase();
recalcTide = true;
while(recalcTide) {
recalcTide = false;
for(int i=0; i<isize(dcal); i++) checkTide(dcal[i]);
}
}
EX void monstersTurn() {
reset_spill();
checkSwitch();
mirror::breakAll();
DEBB(DF_TURN, ("bfs"));
bfs();
DEBB(DF_TURN, ("charge"));
if(elec::havecharge) elec::act();
DEBB(DF_TURN, ("mmo"));
int phase2 = (1 & items[itOrbSpeed]);
if(!phase2) movemonsters();
for(cell *pc: player_positions()) if(pc->item == itOrbSafety) {
collectItem(pc, pc, true);
return;
}
if(playerInPower() && (phase2 || !items[itOrbSpeed]) && (havewhat & HF_FAST))
moveNormals(moWitchSpeed);
if(phase2 && markOrb(itOrbEmpathy)) {
bfs();
movegolems(AF_FAST);
for(int i=0; i<isize(dcal); i++) {
if(dcal[i]->monst == moFriendlyGhost && dcal[i]->stuntime)
dcal[i]->stuntime--;
refreshFriend(dcal[i]);
}
}
DEBB(DF_TURN, ("rop"));
if(!dual::state) reduceOrbPowers();
int phase1 = (1 & items[itOrbSpeed]);
if(dual::state && items[itOrbSpeed]) phase1 = !phase1;
DEBB(DF_TURN, ("lc"));
if(!phase1) livecaves();
if(!phase1) ca::simulate();
if(!phase1) heat::processfires();
// this depends on turncount, so we do it always
advance_tides();
for(cell *c: crush_now) {
changes.ccell(c);
playSound(NULL, "closegate");
if(canAttack(c, moCrusher, c, c->monst, AF_GETPLAYER | AF_CRUSH)) {
attackMonster(c, AF_MSG | AF_GETPLAYER | AF_CRUSH, moCrusher);
}
moveEffect(movei(c, FALL), moDeadBird);
destroyBoats(c, NULL, true);
explodeBarrel(c);
}
changes.value_keep(crush_now);
changes.value_keep(crush_next);
crush_now = std::move(crush_next);
crush_next.clear();
DEBB(DF_TURN, ("heat"));
heat::processheat();
// if(elec::havecharge) elec::drawcharges();
orbbull::check();
#if CAP_COMPLEX2
if(!phase1) terracotta::check();
#endif
if(items[itOrbFreedom])
for(cell *pc: player_positions())
checkFreedom(pc);
DEBB(DF_TURN, ("check"));
checkmove();
if(canmove) elec::checklightningfast();
#if CAP_HISTORY
for(cell *pc: player_positions())
history::movehistory.push_back(pc);
#endif
}
/** check if whirlline is looped, if yes, remove the repeat; may not detect loops immediately */
EX bool looped(vector<cell*>& whirlline) {
if(isize(whirlline) == 1)
return false;
if(whirlline.back() == whirlline.front()) {
whirlline.pop_back();
return true;
}
int pos = isize(whirlline)/2;
if(isize(whirlline) > 2 && whirlline.back() == whirlline[pos]) {
while(pos && whirlline.back() == whirlline[pos])
whirlline.pop_back();
/* something weird must have happened... */
static bool once = true;
if(once) addMessage("warning: a looped line");
once = false;
return true;
}
return false;
}
}

1385
euclid.cpp Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +1,22 @@
// Hyperbolic Rogue -- fake mobile target
// Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details
//
// Compile with: g++ fake-mobile.cpp -o fake-mobile -I/usr/include/SDL -lSDL -lSDL_gfx -lGL -lSDL_ttf -lz -Wno-invalid-offsetof
#define ISFAKEMOBILE 1
#define MOBPAR_FORMAL int
#define MOBPAR_ACTUAL 0
#define MIX_MAX_VOLUME 128
#define NOMAIN
#include <string>
namespace hr {
const char *scorefile = "fakemobile_score.txt";
std::string scorefile = "fakemobile_score.txt";
}
#include <SDL/SDL.h>
#include "init.cpp"
#include "hyper.cpp"
#include <SDL/SDL_ttf.h>
#include <SDL/SDL_gfxPrimitives.h>
@ -32,14 +35,16 @@ transmatrix getOrientation() {
lasttick = curtick;
Uint8 *keystate = SDL_GetKeyState(NULL);
if(keystate[SDLK_LCTRL]) {
if(keystate['s']) Orient = Orient * rotmatrix(t, 2, 1);
if(keystate['w']) Orient = Orient * rotmatrix(t, 1, 2);
if(keystate['a']) Orient = Orient * rotmatrix(t, 2, 0);
if(keystate['d']) Orient = Orient * rotmatrix(t, 0, 2);
if(keystate['s']) Orient = Orient * cspin(2, 1, t);
if(keystate['w']) Orient = Orient * cspin(1, 2, t);
if(keystate['a']) Orient = Orient * cspin(2, 0, t);
if(keystate['d']) Orient = Orient * cspin(0, 2, t);
}
return Orient;
}
void resetmusic() { printf("resetmusic\n"); }
void playSound(cell *c, const string& fname, int vol) {
printf("Play sound: %s\n", fname.c_str());
}
@ -52,6 +57,17 @@ int gdpop() { return graphdata[gdpos++]; }
TTF_Font *font[256];
const char* fontname = "DejaVuSans-Bold.ttf";
void load_font() {
if(!font[size])
font[size] = TTF_OpenFont(fontname, size);
if(!font[size]) {
fprintf(stderr, "failed to open font: %s", fontname);
exit(1);
}
}
bool rawdisplaystr(int x, int y, int shift, int size, const char *str, int color, int align) {
if(strlen(str) == 0) return false;
@ -66,8 +82,7 @@ bool rawdisplaystr(int x, int y, int shift, int size, const char *str, int color
col.r >>= darken; col.g >>= darken; col.b >>= darken;
if(!font[size])
font[size] = TTF_OpenFont("VeraBd.ttf", size);
load_font();
SDL_Surface *txt = TTF_RenderText_Solid(font[size], str, col);
@ -92,7 +107,7 @@ bool rawdisplaystr(int x, int y, int shift, int size, const char *str, int color
int textwidth(int siz, const string &str) {
if(isize(str) == 0) return 0;
if(!font[siz]) font[siz] = TTF_OpenFont("VeraBd.ttf", siz);
load_font();
int w, h;
TTF_SizeUTF8(font[siz], str.c_str(), &w, &h);
@ -123,6 +138,7 @@ using namespace hr;
int main(int argc, char **argv) {
initAll();
glhr::init();
vid.xres = 800; vid.yres = 450;
vid.usingGL = false;
@ -200,11 +216,17 @@ int main(int argc, char **argv) {
case 4: {
int col = gdpop();
int out = gdpop();
int x = gdpop(), y = gdpop(), rad = gdpop();
aacircleColor(s, x, y, rad, (col << 8) + 0xFF);
}
case 5: {
int out = gdpop();
/* not implemented */
}
}
}
SDL_UpdateRect(s, 0, 0, vid.xres, vid.yres);

799
fake.cpp Normal file
View File

@ -0,0 +1,799 @@
#include "hyper.h"
// Fake non-Euclidean
namespace hr {
EX namespace fake {
EX ld scale;
EX bool multiple;
EX bool multiple_special_draw = true;
EX bool recursive_draw = false;
EX eGeometry underlying;
EX geometry_information *underlying_cgip;
EX hrmap *pmap;
EX geometry_information *pcgip;
EX eGeometry actual_geometry;
EX int ordered_mode = 0;
EX bool in() { return geometry == gFake; }
EX void on_dim_change() { pmap->on_dim_change(); }
/** like in() but takes slided arb into account */
EX bool split() { return in() || arb::in_slided(); }
EX bool available() {
if(in()) return true;
if(WDIM == 2 && standard_tiling() && (PURE || BITRUNCATED)) return true;
if(arcm::in() && PURE) return true;
if(hat::in()) return true;
if(WDIM == 2) return false;
if(among(geometry, gBitrunc3)) return false;
#if MAXMDIM >= 4
if(reg3::in() && !among(variation, eVariation::pure, eVariation::subcubes, eVariation::coxeter, eVariation::bch_oct)) return false;
return euc::in() || reg3::in();
#else
return euc::in();
#endif
}
map<cell*, ld> random_order;
// a dummy map that does nothing
struct hrmap_fake : hrmap {
hrmap *underlying_map;
template<class T> auto in_underlying(const T& t) -> decltype(t()) {
pcgip = cgip;
dynamicval<hrmap*> gpm(pmap, this);
dynamicval<eGeometry> gag(actual_geometry, geometry);
dynamicval<eGeometry> g(geometry, underlying);
dynamicval<int> uc(cgip->use_count, cgip->use_count+1);
dynamicval<geometry_information*> gc(cgip, underlying_cgip);
dynamicval<hrmap*> gu(currentmap, underlying_map);
return t();
}
heptagon *getOrigin() override { return in_underlying([this] { return underlying_map->getOrigin(); }); }
cell* gamestart() override { return in_underlying([this] { return underlying_map->gamestart(); }); }
hrmap_fake(hrmap *u) {
underlying_map = u;
for(hrmap*& m: allmaps) if(m == underlying_map) m = this;
if(currentmap == u) currentmap = this;
}
void find_cell_connection(cell *c, int d) override {
FPIU(createMov(c, d));
}
hrmap_fake() {
underlying_map = nullptr;
in_underlying([this] { initcells(); underlying_map = currentmap; });
for(hrmap*& m: allmaps) if(m == underlying_map) m = NULL;
}
~hrmap_fake() {
in_underlying([this] {
delete underlying_map;
});
}
heptagon *create_step(heptagon *parent, int d) override {
return FPIU(currentmap->create_step(parent, d));
}
hyperpoint get_corner(cell *c, int cid, ld cf=3) override {
if(embedded_plane) {
geom3::light_flip(true);
hyperpoint h = get_corner(c, cid, cf);
geom3::light_flip(false);
return cgi.emb->base_to_actual(h);
}
if(arcm::in() || hat::in()) {
return underlying_map->get_corner(c, cid, cf);
}
hyperpoint h;
h = FPIU(currentmap->get_corner(c, cid, cf));
return befake(h);
}
transmatrix adj(cell *c, int d) override {
if(embedded_plane) {
geom3::light_flip(true);
transmatrix T = adj(c, d);
geom3::light_flip(false);
return cgi.emb->base_to_actual(T);
}
if(hat::in()) return underlying_map->adj(c, d);
if(variation == eVariation::coxeter) {
array<int, 3> which;
in_underlying([&which, c, d] {
auto T = currentmap->adj(c, d);
auto& f1 = currentmap->get_cellshape(c).faces_local[d];
auto& f2 = currentmap->get_cellshape(c->move(d)).faces_local[c->c.spin(d)];
for(int i=0; i<3; i++) {
which[i] = -1;
for(int j=0; j<isize(f2); j++)
if(hdist(T * f2[j], f1[i]) < 1e-6)
which[i] = j;
}
});
auto& f1 = get_cellshape(c).faces_local[d];
auto& f2 = get_cellshape(c->move(d)).faces_local[c->c.spin(d)];
vector<ld> d1;
for(auto& v: f1) d1.push_back(hdist0(normalize(v)));
vector<hyperpoint> cf2(3);
for(int i=0; i<3; i++)
cf2[i] = f2[which[i]];
transmatrix F2, F1;
for(int i=0; i<3; i++) set_column(F2, i, cf2[i]);
for(int i=0; i<3; i++) set_column(F1, i, f1[i]);
auto dtang = [] (vector<hyperpoint> v) {
if(euclid) return (v[1] - v[0]) ^ (v[2] - v[0]);
transmatrix T = gpushxto0(normalize(v[0]));
hyperpoint h = iso_inverse(T) * ((T*v[1]) ^ (T*v[2]));
return h;
};
set_column(F2, 3, dtang(cf2));
set_column(F1, 3, dtang(f1));
transmatrix T = F1 * inverse(F2);
return T;
}
transmatrix S1, S2;
ld dist;
#if MAXMDIM >= 4
bool impure = reg3::in() && !PURE;
#else
bool impure = !PURE;
#endif
vector<int> mseq;
if(impure) {
mseq = FPIU ( currentmap->get_move_seq(c, d) );
if(mseq.empty()) {
auto& s1 = get_cellshape(c);
auto& s2 = get_cellshape(c->move(d));
return s1.from_cellcenter * s2.to_cellcenter;
}
if(isize(mseq) > 1)
throw hr_exception("fake adj not implemented for isize(mseq) > 1");
}
in_underlying([c, d, &S1, &S2, &dist, &impure, &mseq] {
#if CAP_ARCM
dynamicval<bool> u(arcm::use_gmatrix, false);
#endif
transmatrix T;
if(impure) {
T = currentmap->adj(c->master, mseq[0]);
}
else {
T = currentmap->adj(c, d);
}
S1 = rspintox(tC0(T));
transmatrix T1 = spintox(tC0(T)) * T;
dist = hdist0(tC0(T1));
S2 = xpush(-dist) * T1;
});
if(impure) {
auto& s1 = get_cellshape(c);
auto& s2 = get_cellshape(c->move(d));
S1 = s1.from_cellcenter * S1;
S2 = S2 * s2.to_cellcenter;
}
#if CAP_ARCM
if(arcm::in()) {
int t = arcm::id_of(c->master);
int t2 = arcm::id_of(c->move(d)->master);
auto& cof = arcm::current_or_fake();
cgi.adjcheck = cof.inradius[t/2] + cof.inradius[t2/2];
}
#else
if(0) ;
#endif
else if(WDIM == 2) {
ld dist;
in_underlying([c, d, &dist] {
dist = currentmap->spacedist(c, d);
});
auto& u = *underlying_cgip;
if(dist == u.tessf) cgi.adjcheck = cgi.tessf;
else if(dist == u.crossf) cgi.adjcheck = cgi.crossf;
else if(dist == u.hexhexdist) cgi.adjcheck = cgi.hexhexdist;
else cgi.adjcheck = dist * scale;
}
else if(underlying == gBitrunc3) {
ld x = (d % 7 < 3) ? 1 : sqrt(3)/2;
x *= scale;
cgi.adjcheck = 2 * atanh(x);
}
return S1 * xpush(cgi.adjcheck) * S2;
}
void draw_recursive(cell *c, const shiftmatrix& V, ld a0, ld a1, cell *parent, int depth) {
if(!do_draw(c, V)) return;
drawcell(c, V);
if(depth >= 15) return;
// queuestr(V, .2, fts(a0)+":"+fts(a1), 0xFFFFFFFF, 1);
ld d = hdist0(tC0(V));
if(false) {
curvepoint(spin(-a0) * xpush0(d));
curvepoint(spin(-a0) * xpush0(d+.2));
curvepoint(spin(-a1) * xpush0(d+.2));
curvepoint(spin(-a1) * xpush0(d));
curvepoint(spin(-a0) * xpush0(d));
queuecurve(shiftless(Id), 0xFF0000FF, 0, PPR::LINE);
}
indenter id(2);
for(int i=0; i<c->type; i++) if(c->move(i) && c->move(i) != parent) {
auto h0 = V * befake(FPIU(get_corner_position(c, i)));
auto h1 = V * befake(FPIU(get_corner_position(c, (i+1) % c->type)));
ld b0 = atan2(unshift(h0));
ld b1 = atan2(unshift(h1));
while(b1 < b0) b1 += TAU;
if(a0 == -1) {
draw_recursive(c->move(i), optimized_shift(V * adj(c, i)), b0, b1, c, depth+1);
}
else {
if(b1 - b0 > M_PI) continue;
cyclefix(b0, a0);
if(b0 < a0) b0 = a0;
cyclefix(b1, a1);
if(b1 > a1) b1 = a1;
if(b0 > b1) continue;
draw_recursive(c->move(i), optimized_shift(V * adj(c, i)), b0, b1, c, depth+1);
}
}
}
transmatrix relative_matrixc(cell *h2, cell *h1, const hyperpoint& hint) override {
if(arcm::in()) return underlying_map->relative_matrix(h2, h1, hint);
if(h1 == h2) return Id;
for(int a=0; a<h1->type; a++) if(h1->move(a) == h2)
return adj(h1, a);
return Id;
}
transmatrix relative_matrixh(heptagon *h2, heptagon *h1, const hyperpoint& hint) override {
if(arcm::in()) return underlying_map->relative_matrix(h2, h1, hint);
return relative_matrix(h2->c7, h1->c7, hint);
}
void draw_at(cell *at, const shiftmatrix& where) override {
sphereflip = Id;
// for(int i=0; i<S6; i++) queuepoly(ggmatrix(cwt.at), shWall3D[i], 0xFF0000FF);
if(pmodel == mdDisk && WDIM == 2 && recursive_draw) {
draw_recursive(at, where, -1, -1, nullptr, 0);
return;
}
dq::clear_all();
int id = 0;
int limit = 100 * pow(1.2, sightrange_bonus);
if(WDIM == 3 || vid.use_smart_range)
limit = INT_MAX;
if(ordered_mode && !(multiple && multiple_special_draw)) {
using pct = pair<cell*, shiftmatrix>;
auto comparer = [] (pct& a1, pct& a2) {
if(ordered_mode > 2) {
auto val = [] (pct& a) {
if(!random_order.count(a.first))
random_order[a.first] = randd() * 2;
return random_order[a.first] + hdist0(tC0(a.second));
};
return val(a1) > val(a2);
}
return a1.second[LDIM][LDIM] > a2.second[LDIM][LDIM];
};
std::priority_queue<pct, std::vector<pct>, decltype(comparer)> myqueue(comparer);
auto enq = [&] (cell *c, const shiftmatrix& V) {
if(!c) return;
if(ordered_mode == 1 || ordered_mode == 3) {
if(dq::visited_c.count(c)) return;
dq::visited_c.insert(c);
}
myqueue.emplace(c, V);
};
enq(centerover, cview());
while(!myqueue.empty()) {
auto& p = myqueue.top();
id++;
cell *c = p.first;
shiftmatrix V = p.second;
myqueue.pop();
if(ordered_mode == 2 || ordered_mode == 4) {
if(dq::visited_c.count(c)) continue;
dq::visited_c.insert(c);
}
if(!do_draw(c, V)) continue;
drawcell(c, V);
if(in_wallopt() && isWall3(c) && isize(dq::drawqueue_c) > 1000) continue;
if(id > limit) continue;
for(int i=0; i<c->type; i++) if(c->move(i)) {
enq(c->move(i), optimized_shift(V * adj(c, i)));
}
}
return;
}
auto enqueue = (multiple && multiple_special_draw ? dq::enqueue_by_matrix_c : dq::enqueue_c);
enqueue(at, where);
while(!dq::drawqueue_c.empty()) {
auto& p = dq::drawqueue_c.front();
id++;
cell *c = p.first;
shiftmatrix V = p.second;
dq::drawqueue_c.pop();
if(!do_draw(c, V)) continue;
drawcell(c, V);
if(in_wallopt() && isWall3(c) && isize(dq::drawqueue_c) > 1000) continue;
if(id > limit) continue;
for(int i=0; i<c->type; i++) if(c->move(i)) {
enqueue(c->move(i), optimized_shift(V * adj(c, i)));
}
}
}
ld spin_angle(cell *c, int d) override {
return underlying_map->spin_angle(c,d);
}
int shvid(cell *c) override {
return FPIU( currentmap->shvid(c) );
}
subcellshape& get_cellshape(cell *c) override {
return *FPIU( (cgip = pcgip, &(currentmap->get_cellshape(c))) );
}
transmatrix ray_iadj(cell *c, int i) override {
if(WDIM == 2)
return to_other_side(get_corner(c, i), get_corner(c, i+1));
#if MAXMDIM >= 4
if(PURE) return iadj(c, i);
auto& v = get_cellshape(c).faces_local[i];
hyperpoint h =
project_on_triangle(v[0], v[1], v[2]);
transmatrix T = rspintox(h);
return T * xpush(-2*hdist0(h)) * spintox(h);
#else
return Id;
#endif
}
};
EX hrmap* new_map() { return new hrmap_fake; }
EX hrmap* get_umap() { if(!dynamic_cast<hrmap_fake*>(currentmap)) return nullptr; else return ((hrmap_fake*)currentmap)->underlying_map; }
#if HDR
template<class T> auto in_underlying_geometry(const T& f) -> decltype(f()) {
if(!fake::in()) return f();
pcgip = cgip;
dynamicval<eGeometry> g(geometry, underlying);
dynamicval<eGeometry> gag(actual_geometry, geometry);
dynamicval<geometry_information*> gc(cgip, underlying_cgip);
dynamicval<hrmap*> gpm(pmap, currentmap);
dynamicval<hrmap*> gm(currentmap, get_umap());
return f();
}
#define FPIU(x) hr::fake::in_underlying_geometry([&] { return (x); })
#endif
EX hyperpoint befake(hyperpoint h) {
auto h1 = h / h[LDIM] * scale;
h1[LDIM] = 1;
if(material(h1) > 1e-3)
h1 = normalize(h1);
return h1;
}
EX vector<hyperpoint> befake(const vector<hyperpoint>& v) {
vector<hyperpoint> res;
for(auto& h: v) res.push_back(befake(h));
return res;
}
EX vector<vector<hyperpoint>> befake(const vector<vector<hyperpoint>>& v) {
vector<vector<hyperpoint>> res;
for(auto& h: v) res.push_back(befake(h));
return res;
}
EX ld compute_around(bool setup) {
auto &ucgi = *underlying_cgip;
auto fcs = befake(ucgi.heptshape->faces);
if(setup) {
cgi.heptshape->faces = fcs;
cgi.heptshape->compute_hept();
}
hyperpoint h = Hypc;
for(int i=0; i<ucgi.face; i++) h += fcs[0][i];
if(material(h) > 0)
h = normalize(h);
if(setup)
cgi.adjcheck = 2 * hdist0(h);
hyperpoint h2 = rspintox(h) * xpush0(2 * hdist0(h));
auto kh= kleinize(h);
auto k0 = kleinize(fcs[0][0]);
auto k1 = kleinize(fcs[0][1]);
auto vec = k1 - k0;
// u = fcs[0] + vec * z
// (f1-u) | (vec-u) = 0
// (f1 - f0 + vec*z) |
// (vec | h2-vec*z) == (vec | h2) - (vec | vec*z) == 0
auto z = (vec|(kh-k0)) / (vec|vec);
hyperpoint u = k0 + vec * z;
if(material(u) <= 0)
return HUGE_VAL;
u = normalize(u);
h2 = spintox(u) * h2;
u = spintox(u) * u;
h2 = gpushxto0(u) * h2;
u = gpushxto0(u) * u;
ld x = hypot(h2[1], h2[2]);
ld y = h2[0];
ld ans = 360 / (90 + atan(y/x) / degree);
return ans;
}
EX void generate() {
FPIU( cgi.require_basics() );
#if MAXMDIM >= 4
auto &ucgi = *underlying_cgip;
cgi.loop = ucgi.loop;
cgi.face = ucgi.face;
cgi.schmid = ucgi.schmid;
auto& hsh = get_hsh();
hsh = *ucgi.heptshape;
for(int b=0; b<32; b++)
cgi.spins[b] = ucgi.spins[b];
compute_around(true);
hsh.compute_hept();
reg3::compute_ultra();
reg3::generate_subcells();
if(variation == eVariation::coxeter) {
for(int i=0; i<isize(cgi.subshapes); i++) {
auto& s = cgi.subshapes[i];
s.faces_local = ucgi.subshapes[i].faces_local;
for(auto &face: s.faces_local) for(auto& v: face) {
v = kleinize(v);
for(int i=0; i<3; i++) v[i] *= scale;
}
reg3::make_vertices_only(s.vertices_only, s.faces_local);
}
}
#endif
}
int get_middle() {
if(S7 == 20) return 5;
if(S7 == 8) return 4;
return 3;
}
EX ld around;
/** @brief the value of 'around' which makes the tiling Euclidean */
EX ld compute_euclidean() {
#if CAP_ARCM
if(arcm::in()) return arcm::current.N * 2 / arcm::current.euclidean_angle_sum;
#endif
if(underlying == gAperiodicHat) return 6;
if(WDIM == 2) return 4 / (S7-2.) + 2;
if(underlying == gRhombic3) return 3;
if(underlying == gBitrunc3) return 2.55208;
int middle = get_middle();
if(!fake::in()) underlying_cgip = cgip;
return M_PI / asin(cos(M_PI/middle) / sin(M_PI/underlying_cgip->face));
}
EX ld around_orig() {
#if CAP_ARCM
if(arcm::in())
return arcm::current.N;
#endif
if(hat::in()) return 6;
if(WDIM == 2)
return S3;
if(underlying == gRhombic3)
return 3;
if(underlying == gBitrunc3)
return 2.24259;
return
geometry == gFake ? underlying_cgip->loop : cgi.loop;
}
EX geometryinfo1 geometry_of_curvature(ld curvature, int dim) {
if(curvature == 0)
return WDIM == 3 ? giEuclid3 : giEuclid2;
if(curvature < 0)
return WDIM == 3 ? giHyperb3 : giHyperb2;
return WDIM == 3 ? giSphere3 : giSphere2;
}
EX void compute_scale() {
ld good = compute_euclidean();
if(around < 0) around = good;
if(abs(good - around) < 1e-6) good = around;
int s3 = around_orig();
multiple = false;
int mcount = int(around / s3 + .5);
multiple = abs(around - mcount * s3) < 1e-6;
ginf[gFake].g = geometry_of_curvature(good - around, WDIM);
ld around_ideal = 1/(1/2. - 1./get_middle());
bool have_ideal = abs(around_ideal - around) < 1e-6;
if(underlying == gRhombic3 || underlying == gBitrunc3) have_ideal = false;
finalizer f([&] {if(vid.always3 && WDIM == 2) {
geom3::ginf_backup[gFake] = ginf[gFake];
geom3::apply_always3_to(ginf[gFake]);
}});
if(arcm::in()) {
ginf[gFake].tiling_name = "(" + ginf[gArchimedean].tiling_name + ")^" + fts(around / around_orig());
return;
}
else if(WDIM == 2) {
ginf[gFake].tiling_name = lalign(0, "{", S7, ",", around, "}");
return;
}
else if(euclid) scale = 1;
else if(have_ideal) {
hyperpoint h0 = underlying_cgip->heptshape->faces[0][0];
auto s = kleinize(h0);
ld d = hypot_d(LDIM, s);
scale = 1/d;
hyperpoint h = h0;
auto h1 = h / h[WDIM] * scale;
h1[WDIM] = 1;
set_flag(ginf[gFake].flags, qIDEAL, true);
set_flag(ginf[gFake].flags, qULTRA, false);
}
else {
set_flag(ginf[gFake].flags, qIDEAL, false);
set_flag(ginf[gFake].flags, qULTRA, around > around_ideal);
ld minscale = 0, maxscale = 10;
for(int it=0; it<100; it++) {
scale = (minscale + maxscale) / 2;
ld ar = compute_around(false);
if(sphere) {
if(ar < around) maxscale = scale;
else minscale = scale;
}
else {
if(ar > around) maxscale = scale;
else minscale = scale;
}
}
/* ultra a bit earlier */
if(underlying == gRhombic3 || underlying == gBitrunc3) {
auto fcs = befake(underlying_cgip->heptshape->faces[0][0]);
set_flag(ginf[gFake].flags, qULTRA, material(fcs) < 0);
}
}
auto& u = underlying_cgip;
ginf[gFake].tiling_name = lalign(0, "{", u->face, ",", get_middle(), ",", around, "}");
}
void set_gfake(ld _around) {
cgi.require_basics();
underlying = geometry;
underlying_cgip = cgip;
ginf[gFake] = ginf[underlying];
geometry = gFake;
around = _around;
compute_scale();
check_cgi();
cgi.require_basics();
if(currentmap) new hrmap_fake(currentmap);
if(hat::in()) hat::reshape();
}
EX void change_around() {
if(around >= 0 && around <= 2) return;
ld t = in() ? scale : 1;
hyperpoint h = inverse_exp(shiftless(tC0(View)));
transmatrix T = gpushxto0(tC0(View)) * View;
ld range = sightranges[geometry];
if(!fake::in()) {
underlying = geometry;
if(around == around_orig()) return; /* do nothing */
set_gfake(around);
}
else {
compute_scale();
ray::reset_raycaster();
/* to compute scale */
if(WDIM == 2)
cgi.require_basics();
}
t = scale / t;
h *= t;
View = rgpushxto0(direct_exp(h)) * T;
fixmatrix(View);
sightranges[gFake] = range * t;
#if CAP_TEXTURE
texture::config.remap();
#endif
geom3::apply_always3();
}
EX void configure() {
if(!in()) {
underlying_cgip = cgip;
around = around_orig();
}
dialog::editNumber(around, 2.01, 10, 1, around, XLAT("fake curvature"),
XLAT(
"This feature lets you construct the same tiling, but "
"from shapes of different curvature.\n\n"
"The number you give here is (2D) vertex degree or (3D) "
"the number of cells around an edge.\n\n")
);
if(fake::in())
dialog::get_di().reaction = change_around;
else
dialog::get_di().reaction_final = change_around;
dialog::get_di().extra_options = [] {
ld e = compute_euclidean();
dialog::addSelItem(XLAT("Euclidean"), fts(e), 'E');
dialog::add_action([e] {
around = e;
popScreen();
change_around();
});
dialog::addSelItem(XLAT("original"), fts(around_orig()), 'O');
dialog::add_action([] {
around = around_orig();
popScreen();
change_around();
});
dialog::addSelItem(XLAT("double original"), fts(2 * around_orig()), 'D');
dialog::add_action([] {
around = 2 * around_orig();
popScreen();
change_around();
});
dialog::addBoolItem_action(XLAT("draw all if multiple of original"), multiple_special_draw, 'M');
dialog::addBoolItem_action(XLAT("draw copies (2D only)"), recursive_draw, 'C');
dialog::addBoolItem_choice(XLAT("unordered"), ordered_mode, 0, 'U');
dialog::addBoolItem_choice(XLAT("pre-ordered"), ordered_mode, 1, 'P');
dialog::addBoolItem_choice(XLAT("post-ordered"), ordered_mode, 2, 'Q');
};
}
#if CAP_COMMANDLINE
int readArgs() {
using namespace arg;
if(0) ;
else if(argis("-gfake-euc")) {
start_game();
around = compute_euclidean();
change_around();
}
else if(argis("-gfake")) {
start_game();
shift_arg_formula(around, change_around);
}
else if(argis("-gfake-order")) {
shift(); ordered_mode = argi();
}
else return 1;
return 0;
}
auto fundamentalhook = addHook(hooks_args, 100, readArgs);
#endif
EX }
}

File diff suppressed because it is too large Load Diff

796
flags.cpp
View File

@ -1,157 +1,147 @@
// Hyperbolic Rogue
// implementation of various simple flags for lands, items, monsters, and walls
// Hyperbolic Rogue - Flags
// Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details
// Copyright (C) 2011-2019 Zeno Rogue, see 'hyper.cpp' for details
/** \file flags.cpp
* \brief Implementation of various simple flags for lands, items, monsters, and walls.
*/
#include "hyper.h"
namespace hr {
bool isIcyLand(eLand l) {
return l == laIce || l == laCocytus || l == laBlizzard;
}
#if HDR
const inline flagtype& classflag(eItem it) { return iinf[it].flags; }
const inline flagtype& classflag(eWall w) { return winf[w].flags; }
const inline flagtype& classflag(eMonster m) { return minf[m].flags; }
const inline flagtype& classflag(eLand l) { return linf[l].flags; }
bool isIcyLand(cell *c) {
return isIcyLand(c->land);
}
#define ANYFLAGCHECK(name, cond, field, enum) inline bool name(enum w) { flagtype flag = classflag(w); return cond; } inline bool name(cell *c) { return name(c->field); }
bool isGravityLand(eLand l) {
return
l == laIvoryTower || l == laEndorian ||
l == laMountain || l == laDungeon;
}
#define MONFLAGCHECK(name, cond) ANYFLAGCHECK(name, cond, monst, eMonster)
#define WALLFLAGCHECK(name, cond) ANYFLAGCHECK(name, cond, wall, eWall)
#define ITEMFLAGCHECK(name, cond) ANYFLAGCHECK(name, cond, item, eItem)
#define LANDFLAGCHECK(name, cond) ANYFLAGCHECK(name, cond, land, eLand)
bool isEquidLand(eLand l) {
return
l == laIvoryTower || l == laEndorian || l == laDungeon ||
isHaunted(l) || l == laOcean;
}
WALLFLAGCHECK(isWatery, flag & WF_WATER)
WALLFLAGCHECK(isBoat, flag & WF_BOAT)
WALLFLAGCHECK(isChasmy, flag & WF_CHASM)
WALLFLAGCHECK(isWateryOrBoat, (flag & WF_WATER) || w == waBoat)
WALLFLAGCHECK(isNoFlight, flag & WF_NOFLIGHT)
WALLFLAGCHECK(isFire, flag & WF_FIRE)
WALLFLAGCHECK(isThumper, flag & WF_THUMPER)
WALLFLAGCHECK(isActivable, flag & WF_ACTIVABLE)
WALLFLAGCHECK(hasTimeout, flag & WF_TIMEOUT)
WALLFLAGCHECK(isOnCIsland, flag & WF_CISLAND)
WALLFLAGCHECK(cellHalfvine, flag & WF_HALFVINE)
WALLFLAGCHECK(isAlch, flag & WF_ALCHEMY)
WALLFLAGCHECK(isAlchAny, flag & WF_ALCHEMY)
WALLFLAGCHECK(realred, flag & WF_RED)
WALLFLAGCHECK(isWall, flag & WF_WALL)
WALLFLAGCHECK(isNonblock, flag & WF_NONBLOCK)
WALLFLAGCHECK(isPushable, flag & WF_PUSHABLE)
WALLFLAGCHECK(conegraphtype, flag & WF_CONE)
WALLFLAGCHECK(isStandardTree, flag & WF_STDTREE)
WALLFLAGCHECK(isGrave, flag & WF_GRAVE)
WALLFLAGCHECK(isReptile, flag & WF_REPTILE)
WALLFLAGCHECK(useHeatColoring, flag & WF_HEATCOLOR)
WALLFLAGCHECK(isThorny, flag & WF_THORNY)
LANDFLAGCHECK(generateAll, flag & LF_GENERATE_ALL)
LANDFLAGCHECK(isIcyLand, flag & LF_ICY)
LANDFLAGCHECK(isGravityLand, flag & LF_GRAVITY)
LANDFLAGCHECK(isEquidLand, flag & LF_EQUI)
LANDFLAGCHECK(isWarpedType, flag & LF_WARPED)
LANDFLAGCHECK(isCyclic, flag & LF_CYCLIC)
LANDFLAGCHECK(isTechnicalLand, flag & LF_TECHNICAL)
LANDFLAGCHECK(is_mirrorland, flag & LF_MIRROR)
LANDFLAGCHECK(isSealand, flag & LF_SEA)
LANDFLAGCHECK(isCoastal, flag & LF_COASTAL)
LANDFLAGCHECK(isPureSealand, flag & LF_PURESEA)
LANDFLAGCHECK(isElemental, flag & LF_ELEMENTAL)
LANDFLAGCHECK(isHaunted, flag & LF_HAUNTED)
LANDFLAGCHECK(isTrollLand, flag & LF_TROLL)
LANDFLAGCHECK(inmirror, flag & LF_INMIRROR)
LANDFLAGCHECK(inmirrororwall, flag & LF_INMIRRORORWALL)
LANDFLAGCHECK(isElectricLand, flag & LF_ELECTRIC)
MONFLAGCHECK(isGhostable, !(flag & CF_NOGHOST))
MONFLAGCHECK(isRaider, flag & CF_RAIDER)
MONFLAGCHECK(isMimic, flag & CF_MIMIC)
MONFLAGCHECK(isPrincess, flag & CF_PRINCESS)
MONFLAGCHECK(isGolemOrKnight, flag & CF_GOK)
MONFLAGCHECK(isNonliving, flag & CF_NONLIVING)
MONFLAGCHECK(isMetalBeast, flag & CF_METAL)
MONFLAGCHECK(isStunnable, flag & CF_STUNNABLE)
MONFLAGCHECK(hasHitpoints, flag & CF_HP)
MONFLAGCHECK(isMountable, flag & CF_MOUNTABLE)
MONFLAGCHECK(isFriendlyType, flag & CF_FRIENDLY)
MONFLAGCHECK(isFriendlyOrPlayer, flag & (CF_FRIENDLY | CF_PLAYER))
MONFLAGCHECK(isBug, flag & CF_BUG)
MONFLAGCHECK(isIvy, flag & CF_IVY)
MONFLAGCHECK(isMonsterPart, flag & CF_PART)
MONFLAGCHECK(isMutantIvy, flag & CF_MUTANTIVY)
MONFLAGCHECK(isAnyIvy, flag & CF_ANYIVY)
MONFLAGCHECK(isBulletType, flag & CF_BULLET)
MONFLAGCHECK(isDemon, flag & CF_DEMON)
MONFLAGCHECK(isWorm, flag & CF_WORM)
MONFLAGCHECK(isWitch, flag & CF_WITCH)
MONFLAGCHECK(isAngryBird, (flag & CF_BIRD) && !(flag & CF_FRIENDLY))
MONFLAGCHECK(isBird, flag & CF_BIRD)
MONFLAGCHECK(slowMover, flag & CF_SLOWMOVER)
MONFLAGCHECK(isMagneticPole, flag & CF_MAGNETIC)
MONFLAGCHECK(isSwitch, flag & CF_SWITCH)
MONFLAGCHECK(isGhost, flag & CF_GHOST)
MONFLAGCHECK(isShark, flag & CF_SHARK)
MONFLAGCHECK(isSlimeMover, flag & CF_SLIME)
MONFLAGCHECK(isDragon, flag & CF_DRAGON)
MONFLAGCHECK(isKraken, flag & CF_KRAKEN)
MONFLAGCHECK(isBlowableMonster, !(flag & CF_NOBLOW))
MONFLAGCHECK(isMultitile, flag & CF_MULTITILE)
MONFLAGCHECK(isLeader, flag & CF_LEADER)
MONFLAGCHECK(isFlyingType, flag & CF_FLYING)
MONFLAGCHECK(attackThruVine, flag & CF_ATTACK_THRU_VINE)
MONFLAGCHECK(attackNonAdjacent, flag & CF_ATTACK_NONADJACENT)
MONFLAGCHECK(noHighlight, flag & CF_NOHIGHLIGHT)
MONFLAGCHECK(isInactiveEnemyType, flag & CF_INACTIVE)
MONFLAGCHECK(isUnarmed, flag & CF_UNARMED)
MONFLAGCHECK(ignoresPlatesType, flag & CF_IGNORE_PLATE)
MONFLAGCHECK(isBull, flag & CF_BULL)
MONFLAGCHECK(isTroll, flag & CF_TROLL)
MONFLAGCHECK(ignoresSmellType, flag & CF_IGNORE_SMELL)
MONFLAGCHECK(isRatling, flag & CF_RATLING)
MONFLAGCHECK(isGhostMover, flag & CF_GHOSTMOVER)
MONFLAGCHECK(isPowerMonster, flag & CF_POWER)
MONFLAGCHECK(hasFacing, flag & CF_FACING)
ITEMFLAGCHECK(isElementalShard, flag & IF_SHARD)
ITEMFLAGCHECK(itemBurns, !(flag & IF_FIREPROOF))
ITEMFLAGCHECK(isProtectionOrb, flag & IF_PROTECTION)
ITEMFLAGCHECK(isEmpathyOrb, flag & IF_EMPATHY)
ITEMFLAGCHECK(isRangedOrb, flag & IF_RANGED)
ITEMFLAGCHECK(isRevivalOrb, flag & IF_REVIVAL)
#endif
eMonster movegroup(eMonster m);
// watery
bool isWatery(cell *c) {
return c->wall == waCamelotMoat || c->wall == waSea || c->wall == waLake;
}
bool isBoat(cell *c) {
return among(c->wall, waBoat, waStrandedBoat);
}
bool isChasmy(cell *c) {
return c->wall == waChasm || c->wall == waSulphur || c->wall == waSulphurC || c->wall == waBubble ||
c->wall == waMercury;
}
bool isWateryOrBoat(cell *c) {
return isWatery(c) || c->wall == waBoat;
}
bool isNoFlight(cell *c) {
return
c->wall == waBoat || c->wall == waVineHalfA || c->wall == waVineHalfB ||
c->wall == waStrandedBoat || c->wall == waTrunk ||
c->wall == waBigBush || c->wall == waSmallBush;
}
bool boatStrandable(cell *c) {
EX bool boatStrandable(cell *c) {
return c->wall == waNone && (c->land == laLivefjord || c->land == laOcean);
}
// monster/wall types
bool isFire(cell *w) {
return w->wall == waFire || w->wall == waPartialFire || w->wall == waEternalFire || w->wall == waBurningDock;
}
bool isFireOrMagma(cell *w) {
EX bool isFireOrMagma(cell *w) {
return isFire(w) || w->wall == waMagma;
}
bool isThumper(eWall w) {
return w == waThumperOff || w == waThumperOn;
}
bool isThumper(cell *c) {
return isThumper(c->wall);
}
bool isActivable(cell *c) {
return c->wall == waThumperOff || c->wall == waBonfireOff;
}
bool hasTimeout(cell *c) {
return c->wall == waThumperOn || c->wall == waFire || c->wall == waPartialFire ||
c->wall == waTempWall || c->wall == waTempFloor || c->wall == waTempBridge ||
c->wall == waTempBridgeBlocked || c->wall == waBurningDock;
}
bool isMimic(eMonster m) {
return m == moMimic;
}
int mirrorcolor(bool mirrored) {
EX int mirrorcolor(bool mirrored) {
return winf[mirrored ? waMirror : waCloud].color;
}
bool isMimic(cell *c) {
return isMimic(c->monst);
}
bool isPrincess(eMonster m) {
return
m == moPrincess || m == moPrincessMoved ||
m == moPrincessArmed || m == moPrincessArmedMoved;
}
bool isGolemOrKnight(eMonster m) {
return
m == moGolem || m == moGolemMoved ||
m == moKnight || m == moKnightMoved ||
m == moTameBomberbird || m == moTameBomberbirdMoved ||
m == moMouse || m == moMouseMoved ||
m == moFriendlyGhost ||
isPrincess(m);
}
bool isGolemOrKnight(cell *c) { return isGolemOrKnight(c->monst); }
bool isNonliving(eMonster m) {
return
m == moMimic || m == moGolem || m == moGolemMoved ||
m == moZombie || m == moGhost || m == moShadow || m == moSkeleton ||
m == moEvilGolem || m == moIllusion || m == moEarthElemental ||
m == moWaterElemental || m == moDraugr || m == moTerraWarrior ||
m == moIceGolem || m == moVoidBeast || m == moJiangshi;
}
bool isMetalBeast(eMonster m) {
return m == moMetalBeast || m == moMetalBeast2;
}
bool isStunnable(eMonster m) {
return m == moPalace || m == moFatGuard || m == moSkeleton || isPrincess(m) ||
isMetalBeast(m) || m == moTortoise || isDragon(m) ||
m == moReptile || m == moTerraWarrior || m == moSalamander ||
m == moVizier;
}
bool hasHitpoints(eMonster m) {
return m == moPalace || m == moFatGuard || m == moVizier || isPrincess(m) || m == moTerraWarrior;
}
bool isMountable(eMonster m) {
return isWorm(m) && m != moTentacleGhost;
}
bool isFriendly(eMonster m) {
return isMimic(m) || isGolemOrKnight(m) || m == moIllusion || m == moFriendlyIvy;
}
bool isFriendlyOrPlayer(eMonster m) {
return isFriendly(m) || m == moPlayer;
}
bool isMounted(cell *c) {
EX bool isMounted(cell *c) {
if(c && c->monst && c->monst != moTentacleGhost && isMountable(c->monst)) {
for(int i=0; i<numplayers(); i++) {
for(int i: player_indices()) {
if(playerpos(i)->monst && sameMonster(c, playerpos(i)))
return true;
if(lastmountpos[i] && lastmountpos[i]->monst && sameMonster(c, lastmountpos[i]))
@ -161,111 +151,39 @@ bool isMounted(cell *c) {
return false;
}
bool isFriendly(cell *c) {
EX int itemclass(eItem it) { return iinf[it].itemclass; }
EX bool isFriendly(eMonster m) { return isFriendlyType(m); }
EX bool isFriendly(cell *c) {
return isMounted(c) || isFriendly(c->monst);
}
bool isBug(eMonster m) {
return m >= moBug0 && m < moBug0+BUGCOLORS;
EX eThreatLevel get_threat_level(cell *c) {
if(!c->monst) return tlNoThreat;
if(isFriendly(c)) return tlNoThreat;
if(classflag(c->monst) & CF_HIGH_THREAT) return tlHighThreat;
if(classflag(c->monst) & CF_SPAM) return tlSpam;
return tlNormal;
}
bool isBug(cell *c) {
return isBug(c->monst);
}
bool isFriendlyOrBug(cell *c) { // or killable discord!
EX bool isFriendlyOrBug(cell *c) { // or killable discord!
// do not attack the stunned Princess
if(isPrincess(c->monst) && c->stuntime) return false;
return isFriendly(c) || isBug(c) || (c->monst && markOrb(itOrbDiscord) && !c->stuntime);
}
bool isIvy(eMonster m) {
return m == moIvyRoot || m == moIvyHead || m == moIvyBranch || m == moIvyWait ||
m == moIvyNext || m == moIvyDead;
}
bool isIvy(cell *c) {
return isIvy(c->monst);
}
bool isMonsterPart(eMonster m) {
return m == moMutant || (isIvy(m) && m != moIvyRoot) ||
m == moDragonTail || m == moKrakenT;
}
bool isMutantIvy(eMonster m) {
return m == moMutant;
}
bool isAnyIvy(eMonster m) {
return isIvy(m) || isMutantIvy(m) || m == moFriendlyIvy;
}
bool isBulletType(eMonster m) {
return
m == moBullet || m == moFlailBullet || m == moFireball ||
m == moTongue || m == moAirball || m == moArrowTrap;
}
bool isMutantIvy(cell *c) { return isMutantIvy(c->monst); }
bool isDemon(eMonster m) {
return m == moLesser || m == moLesserM || m == moGreater || m == moGreaterM;
}
bool isDemon(cell *c) {
return isDemon(c->monst);
}
bool isWorm(eMonster m) {
return m == moWorm || m == moWormtail || m == moWormwait ||
m == moTentacle || m == moTentacletail || m == moTentaclewait ||
m == moTentacleEscaping || m == moTentacleGhost ||
m == moHexSnake || m == moHexSnakeTail ||
m == moDragonHead || m == moDragonTail;
}
bool isWorm(cell *c) {
return isWorm(c->monst);
}
bool isWitch(eMonster m) {
// evil golems don't count
return m >= moWitch && m < moWitch+NUMWITCH-1;
}
bool isOnCIsland(cell *c) {
return (c->wall == waCIsland || c->wall == waCTree || c->wall == waCIsland2);
}
bool isGhostable(eMonster m) {
return m && !isFriendly(m) && !isIvy(m) && !isMultitile(m) && !isMutantIvy(m);
}
bool cellUnstable(cell *c) {
EX bool cellUnstable(cell *c) {
return (c->land == laMotion && c->wall == waNone) || c->wall == waTrapdoor;
}
bool cellUnstableOrChasm(cell *c) {
EX bool cellUnstableOrChasm(cell *c) {
return
(c->land == laMotion && c->wall == waNone) ||
c->wall == waChasm || c->wall == waTrapdoor;
}
bool cellHalfvine(cell *c) {
return c->wall == waVineHalfA || c->wall == waVineHalfB;
}
bool isWarped(eLand l) {
return l == laWarpCoast || l == laWarpSea;
}
bool isElementalShard(eItem i) {
return
i == itFireShard || i == itAirShard || i == itEarthShard || i == itWaterShard;
}
eMonster elementalOf(eLand l) {
EX eMonster elementalOf(eLand l) {
if(l == laEFire) return moFireElemental;
if(l == laEWater) return moWaterElemental;
if(l == laEAir) return moAirElemental;
@ -273,252 +191,48 @@ eMonster elementalOf(eLand l) {
return moNone;
}
eItem localshardof(eLand l) {
EX eItem localshardof(eLand l) {
return eItem(itFireShard + (l - laEFire));
}
int itemclass(eItem i) {
if(i == 0) return -1;
if(i < itKey || i == itFernFlower ||
i == itWine || i == itSilver || i == itEmerald || i == itRoyalJelly || i == itPower ||
i == itGrimoire || i == itPirate || i == itRedGem || i == itBombEgg ||
i == itCoast || i == itWhirlpool || i == itPalace || i == itFjord ||
i == itElemental || i == itZebra || i == itIvory ||
i == itBounty || i == itFulgurite || i == itMutant || i == itLotus || i == itMutant2 ||
i == itWindstone || i == itCoral || i == itRose ||
i == itBabyTortoise || i == itDragon || i == itApple ||
i == itKraken || i == itBarrow || i == itTrollEgg || i == itTreat ||
i == itSlime || i == itAmethyst || i == itDodeca ||
i == itGreenGrass || i == itBull ||
i == itLavaLily || i == itHunting ||
i == itBlizzard || i == itTerra || i == itGlowCrystal || i == itSnake ||
i == itDock || i == itRuins || i == itSwitch || i == itMagnet
)
return IC_TREASURE;
if(i == itSavedPrincess || i == itStrongWind || i == itWarning || i == itBuggy || i == itBuggy2)
return IC_NAI;
if(i == itKey || i == itOrbYendor || i == itGreenStone || i == itHolyGrail || i == itCompass ||
isElementalShard(i) || i == itRevolver || i == itInventory)
return IC_OTHER;
return IC_ORB;
}
bool isAlch(eWall w) {
return w == waFloorA || w == waFloorB;
}
/* bool isAlch2(eWall w, bool bubbletoo) {
return w == waSlime1 || w == waSlime2 || (bubbletoo && w == waBubble);
} */
/* bool isAlch2(cell *c, bool bubbletoo) {
return isAlch2(c->wall, bubbletoo);
} */
bool isAlch(cell *c) { return isAlch(c->wall); }
bool isAlchAny(eWall w) {
return w == waFloorA || w == waFloorB;
}
bool isAlchAny(cell *c) { return isAlchAny(c->wall); }
bool realred(eWall w) {
return w == waRed1 || w == waRed2 || w == waRed3;
}
int snakelevel(eWall w) {
if(w == waRed1 || w == waDeadfloor2 || w == waRubble || w == waGargoyleFloor ||
w == waGargoyleBridge || w == waTempFloor || w == waTempBridge || w == waRoundTable ||
w == waPetrifiedBridge || w == waMagma)
return 1;
if(w == waRed2) return 2;
if(w == waRed3) return 3;
if(w == waTower) return 3;
return 0;
}
int snakelevel(cell *c) { return snakelevel(c->wall); }
bool isWall(cell *w) {
if(w->wall == waNone || isAlchAny(w) ||
w->wall == waCavefloor || w->wall == waFrozenLake || w->wall == waVineHalfA ||
w->wall == waVineHalfB || w->wall == waDeadfloor || w->wall == waDeadfloor2 ||
w->wall == waRubble || w->wall == waGargoyleFloor || w->wall == waGargoyleBridge ||
w->wall == waTempFloor || w->wall == waTempBridge || w->wall == waPetrifiedBridge ||
w->wall == waBoat || w->wall == waCIsland || w->wall == waCIsland2 ||
w->wall == waRed1 || w->wall == waRed2 || w->wall == waRed3 ||
w->wall == waMineUnknown || w->wall == waMineMine || w->wall == waMineOpen ||
w->wall == waStrandedBoat || w->wall == waOpenGate || w->wall == waClosePlate ||
w->wall == waOpenPlate || w->wall == waTrapdoor || w->wall == waGiantRug ||
w->wall == waLadder || w->wall == waTrunk || w->wall == waSolidBranch ||
w->wall == waWeakBranch || w->wall == waCanopy || w->wall == waTower ||
w->wall == waSmallBush || w->wall == waBigBush ||
w->wall == waReptile || w->wall == waReptileBridge || w->wall == waInvisibleFloor ||
w->wall == waSlime1 || w->wall == waSlime2 || w->wall == waArrowTrap || w->wall == waMagma ||
w->wall == waDock)
return false;
if(isWatery(w) || isChasmy(w) || isFire(w)) return false;
return true;
}
bool isAngryBird(eMonster m) {
return m == moEagle || m == moAlbatross || m == moBomberbird || m == moGargoyle ||
m == moWindCrow || m == moSparrowhawk ||
m == moVampire || m == moBat || m == moButterfly || m == moGadfly;
}
bool isBird(eMonster m) {
return isAngryBird(m) || m == moTameBomberbird || m == moTameBomberbirdMoved;
}
bool slowMover(eMonster m) {
return
m == moLesser || m == moGreater || isMetalBeast(m) ||
m == moTortoise || m == moDraugr;
}
bool isMagneticPole(eMonster m) {
return m == moNorthPole || m == moSouthPole;
}
bool normalMover(eMonster m) {
return
m == moYeti || m == moRanger || m == moGoblin || m == moTroll || m == moDesertman ||
m == moMonkey || m == moZombie || m == moNecromancer || m == moCultist ||
m == moRunDog || m == moPyroCultist ||
m == moFireFairy || m == moCrystalSage || m == moHedge ||
m == moVineBeast || m == moLancer || m == moFlailer ||
m == moMiner || m == moDarkTroll ||
(playerInPower() && (
(isWitch(m) && m != moWitchGhost && m != moWitchWinter) || m == moEvilGolem
)) ||
m == moRedTroll ||
m == moPalace || m == moFatGuard || m == moSkeleton || m == moVizier ||
m == moFjordTroll || m == moStormTroll || m == moForestTroll ||
m == moFamiliar ||
m == moFireElemental || m == moOrangeDog ||
m == moOutlaw || m == moRedFox || m == moFalsePrincess || m == moRoseLady ||
m == moRoseBeauty || m == moWolf ||
m == moResearcher || m == moRagingBull ||
m == moNarciss || m == moMirrorSpirit ||
m == moHunterDog || m == moTerraWarrior || m == moJiangshi ||
m == moLavaWolf || m == moSalamander ||
m == moHunterGuard || m == moHunterChanging ||
m == moIceGolem ||
m == moSwitch1 || m == moSwitch2 || m == moCrusher || m == moPair ||
isMagneticPole(m) ||
slowMover(m);
}
bool isSwitch(eMonster m) {
return m == moSwitch1 || m == moSwitch2;
EX int snakelevel(cell *c) {
#if CAP_COMPLEX2
if(c->land == laBrownian && among(c->wall, waNone, waMineMine, waFire)) return min(c->landparam / brownian::level, 3);
#endif
return winf[c->wall].snakelevel;
}
// from-to
bool isGhost(eMonster m) {
return m == moGhost || m == moTentacleGhost || m == moFriendlyGhost;
EX eSlimegroup slimegroup(cell *c) {
return winf[c->wall].sg;
}
bool isGhostMover(eMonster m) {
return m == moGhost || m == moGreaterShark || m == moTentacleGhost ||
(playerInPower() && (m == moWitchGhost || m == moWitchWinter));
EX bool isFlying(eMonster m) {
return isFlyingType(m) || checkOrb(m, itOrbAether);
}
bool isShark(eMonster m) {
return m == moShark || m == moCShark || m == moGreaterShark;
}
bool isSlimeMover(eMonster m) {
return
m == moSlime || m == moSeep || m == moVineSpirit || m == moParrot;
}
bool isDragon(eMonster m) { return m == moDragonHead || m == moDragonTail; }
bool isKraken(eMonster m) { return m == moKrakenH || m == moKrakenT; }
bool isBlowableMonster(eMonster m) {
return m && !(
isWorm(m) || isIvy(m) || isMutantIvy(m) || isSlimeMover(m) ||
m == moGhost || m == moGreaterShark ||
m == moWaterElemental || m == moWitchGhost || isMimic(m) ||
isKraken(m)
);
}
bool isMultitile(eMonster m) {
return isWorm(m) || isIvy(m) || isMutantIvy(m) || isKraken(m);
}
bool isSlimeMover(cell *c) {
return isSlimeMover(c->monst);
}
int slimegroup(cell *c) {
if(c->wall == waCavewall || c->wall == waDeadwall)
return 1;
if(isWatery(c))
return 2;
if(c->wall == waFloorA)
return 3;
if(c->wall == waFloorB)
return 4;
if(c->wall == waVinePlant || cellHalfvine(c))
return 5;
if(c->wall == waCTree)
return 6;
return 0;
}
bool isLeader(eMonster m) {
return m == moPirate || m == moCultistLeader || m == moViking || m == moRatling || m == moRatlingAvenger;
}
bool isFlying(eMonster m) {
return isBird(m) || isGhost(m) || m == moAirElemental || isDragon(m) || checkOrb(m, itOrbAether);
}
bool survivesChasm(eMonster m) {
EX bool survivesChasm(eMonster m) {
return isFlying(m);
}
bool ignoresPlates(eMonster m) {
return m == moMouse || isFlying(m) || m == moIllusion;
EX bool ignoresPlates(eMonster m) {
return ignoresPlatesType(m) || isFlying(m);
}
bool itemBurns(eItem it) {
return it && it != itOrbDragon && it != itOrbFire && it != itDragon && it != itOrbWinter && it != itOrbLava && it != itTreat && it != itLavaLily;
}
bool attackThruVine(eMonster m) {
return m == moGhost || m == moVineSpirit || m == moFriendlyGhost || m == moTentacleGhost;
}
bool attackNonAdjacent(eMonster m) {
return m == moGhost || m == moFriendlyGhost || m == moTentacleGhost;
}
bool noHighlight(eMonster m) {
return
(m == moIvyWait || m == moIvyNext || m == moIvyDead);
}
bool isInactiveEnemy(cell *w, eMonster forwho) {
if(w->monst == moWormtail || w->monst == moWormwait || w->monst == moTentacletail || w->monst == moTentaclewait || w->monst == moHexSnakeTail)
return true;
if(w->monst == moLesserM || w->monst == moGreaterM)
return true;
if(w->monst == moIvyRoot || w->monst == moIvyWait || w->monst == moIvyNext || w->monst == moIvyDead)
return true;
EX bool isInactiveEnemy(cell *w, eMonster forwho) {
if(forwho != moPlayer) {
if(w->monst == moGreaterM || w->monst == moLesserM) return false;
if(w->monst == moGreater || w->monst == moLesser) return true;
}
if(isInactiveEnemyType(w->monst)) return true;
if(w->monst && ((forwho == moPlayer) ? realstuntime(w) : realstuntime(w) > 1) && !isFriendly(w))
return true;
return false;
}
// forpc = true (for PC), false (for golems)
bool isActiveEnemy(cell *w, eMonster forwho) {
EX bool isActiveEnemy(cell *w, eMonster forwho) {
if(((forwho == moPlayer) ? realstuntime(w) : realstuntime(w) > 1))
return false;
if(w->monst == passive_switch) return false;
@ -528,36 +242,16 @@ bool isActiveEnemy(cell *w, eMonster forwho) {
return true;
}
bool isUnarmed(eMonster m) {
return
m == moMouse || m == moMouseMoved || m == moPrincess || m == moPrincessMoved ||
m == moCrystalSage || m == moVampire || m == moBat;
}
bool isArmedEnemy(cell *w, eMonster forwho) {
EX bool isArmedEnemy(cell *w, eMonster forwho) {
return w->monst != moCrystalSage && w->monst != moCrusher && isActiveEnemy(w, forwho);
}
bool isHive(eLand l) {
return l == laHive;
}
bool isIcyWall(cell *c) {
return c->wall == waNone || c->wall == waIcewall || c->wall == waFrozenLake || c->wall == waLake;
}
bool eternalFire(cell *c) {
EX bool eternalFire(cell *c) {
return c->land == laDryForest || (c->land == laPower && !smallbounded) || c->land == laMinefield ||
c->land == laEFire || c->land == laElementalWall;
}
bool isCyclic(eLand l) {
return
l == laWhirlpool || l == laTemple || l == laCamelot || l == laClearing ||
l == laMountain;
}
bool haveRangedOrb() {
EX bool haveRangedOrb() {
return
items[itOrbPsi] || items[itOrbDragon] || items[itOrbTeleport] ||
items[itOrbIllusion] || items[itOrbSpace] || items[itOrbAir] ||
@ -567,200 +261,136 @@ bool haveRangedOrb() {
items[itOrbMorph] || items[itOrbPhasing];
}
bool isOffensiveOrb(eItem it) {
return it == itOrbLightning || it == itOrbFlash || it == itOrbThorns ||
it == itOrbDragon || it == itOrbStunning ||
it == itOrbFreedom || it == itOrbPsi ||
it == itOrbSide1 || it == itOrbSide2 || it == itOrbSide3 ||
it == itOrbSlaying;
}
bool isRangedOrb(eItem i) {
return i == itOrbPsi || i == itOrbDragon || i == itOrbTeleport || i == itOrbIllusion ||
i == itOrbSpace || i == itOrbAir || i == itOrbFrog ||
i == itOrbSummon || i == itOrbMatter || i == itRevolver || i == itOrbStunning ||
i == itOrbDomination || i == itOrbNature || i == itOrbDash || i == itOrbMorph;
}
bool isProtectionOrb(eItem i) {
return i == itOrbWinter || i == itOrbShield || i == itOrbInvis || i == itOrbShell;
}
bool isEmpathyOrb(eItem i) {
return
i == itOrbFire || i == itOrbDigging || i == itOrbWinter ||
i == itOrbUndeath || i == itOrbSpeed || i == itOrbShield ||
i == itOrbAether || i == itOrbInvis || i == itOrbThorns ||
i == itOrbWater || i == itOrbStone ||
i == itOrbSide1 || i == itOrbSide2 || i == itOrbSide3 ||
i == itOrbSlaying || i == itOrbFish;
}
bool isUtilityOrb(eItem i) {
return i == itOrbSpeed || i == itOrbDigging ||
i == itOrbSafety || i == itOrbTeleport || i == itOrbAether ||
i == itOrbTime || i == itOrbSpace ||
i == itOrbSummon || i == itOrbLuck || i == itOrbEnergy ||
i == itOrbLava;
}
bool isDirectionalOrb(eItem i) {
return i == itOrbHorns || i == itOrbBull || i == itOrbSword || i == itOrbSword2;
}
bool isRevivalOrb(eItem i) {
return i == itOrbLife || i == itOrbFriend || i == itOrbUndeath;
}
bool isFriendOrb(eItem i) {
return i == itOrbLife || i == itOrbFriend || i == itOrbDiscord || i == itOrbLove ||
i == itOrbEmpathy || i == itOrbUndeath;
}
bool isFriendlyGhost(eMonster m) {
EX bool isFriendlyGhost(eMonster m) {
return m == moFriendlyGhost || (markEmpathy(itOrbAether) && isFriendly(m));
}
bool survivesWater(eMonster m) {
EX bool isGhostAether(eMonster m) {
return isGhost(m) || checkOrb(m, itOrbAether);
}
EX bool survivesWater(eMonster m) {
return
m == moShark || m == moGreaterShark || m == moCShark ||
isGhost(m) || m == moWitchGhost || m == moShadow ||
isGhostAether(m) || m == moWitchGhost || m == moShadow ||
isBird(m) || m == moWaterElemental || m == moAirElemental ||
isWorm(m) || isIvy(m) || isDragon(m) || isKraken(m) ||
m == moMutant || m == moFriendlyIvy ||
(isFriendly(m) && markOrb(itOrbFish)) ||
checkOrb(m, itOrbFish) ||
among(m, moPike, moRusalka) ||
m == moTortoise; // Tortoises and Ivies survive, but don't go through water
}
// survives Mercury or Sulphur or Lava
bool survivesPoison(eMonster m, eWall p) {
EX bool survivesPoison(eMonster m, eWall p) {
return
isGhost(m) || m == moWitchGhost || m == moShadow ||
isGhostAether(m) || m == moWitchGhost || m == moShadow ||
isBird(m) || m == moAirElemental || isDragon(m) || isWorm(m);
}
// flying even if stunned
bool isPermanentFlying(eMonster m) {
return m == moAirElemental || isGhost(m);
EX bool isPermanentFlying(eMonster m) {
return m == moAirElemental || isGhostAether(m);
}
bool survivesFire(eMonster m) {
EX bool isLuckyLand(eLand l) {
return among(l, laIce, laDesert, laDeadCaves, laOvergrown, laDice);
}
EX bool survivesFire(eMonster m) {
return
isGhost(m) || m == moWitchWinter || m == moWitchGhost ||
isGhostAether(m) || m == moWitchWinter || m == moWitchGhost ||
m == moBomberbird || m == moTameBomberbird || m == moTameBomberbirdMoved ||
(isFriendly(m) && markOrb(itOrbWinter)) || m == moFireElemental ||
checkOrb(m, itOrbWinter) || m == moFireElemental ||
isDragon(m) || m == moShadow;
}
bool survivesWall(eMonster m) {
return isGhost(m);
EX bool survivesWall(eMonster m) {
return isGhostAether(m);
}
bool survivesThorns(eMonster m) {
return isGhost(m) || m == moSkeleton || m == moDraugr;
EX bool survivesThorns(eMonster m) {
return isGhostAether(m) || m == moSkeleton || m == moDraugr;
}
bool survivesFall(eMonster m) {
return isBird(m) || m == moAirElemental || m == moSkeleton || isDragon(m) || m == moShadow || isGhost(m);
EX bool survivesFall(eMonster m) {
return isBird(m) || m == moAirElemental || m == moSkeleton || isDragon(m) || m == moShadow || isGhostAether(m);
}
bool isThorny(eWall w) { return w == waRose; }
bool checkOrb(eMonster m1, eItem orb) {
EX bool checkOrb(eMonster m1, eItem orb) {
if(m1 == moPlayer) return markOrb(orb);
if(isFriendly(m1)) return markEmpathy(orb);
return false;
}
bool checkOrb2(eMonster m1, eItem orb) {
EX bool checkOrb2(eMonster m1, eItem orb) {
if(m1 == moPlayer) return markOrb2(orb);
if(isFriendly(m1)) return markEmpathy2(orb);
return false;
}
bool ignoresSmell(eMonster m) {
return
m == moHexSnake || isIvy(m) || isMutantIvy(m) || isGhostMover(m) || isSlimeMover(m) ||
m == moRoseLady || checkOrb(m, itOrbBeauty) || checkOrb(m, itOrbAether) || checkOrb(m, itOrbShield);
EX bool ignoresSmell(eMonster m) {
return ignoresSmellType(m) || checkOrb(m, itOrbBeauty) || checkOrb(m, itOrbAether) || checkOrb(m, itOrbShield);
}
bool isTroll(eMonster m) {
return
m == moTroll || m == moRedTroll || m == moDarkTroll ||
m == moForestTroll || m == moStormTroll || m == moFjordTroll;
}
bool isGrave(eWall w) {
return w == waFreshGrave || w == waAncientGrave;
}
bool isStandardTree(cell *c) {
return c->wall == waBigTree || c->wall == waSmallTree;
}
bool highwall(cell *c) {
EX bool highwall(cell *c) {
if(c->wall == waGlass) return false;
if(wmescher && wmspatial && c->wall == waBarrier && c->land == laOceanWall)
return false;
// if(wmspatial && isTree(c)) return false;
if(isGrave(c->wall)) return true;
if(c->wall == waMirrorWall) return false;
if(c->wall == waEditStatue) return false;
return winf[c->wall].glyph == '#' || c->wall == waClosedGate;
}
int chasmgraph(cell *c) {
EX int chasmgraph(cell *c) {
if(c->wall == waChasm || c->wall == waInvisibleFloor) return 2;
if(isChasmy(c)) return 1;
if(isWateryOrBoat(c)) return 1;
if(c->wall == waShallow) return 1;
if(wmescher && c->wall == waBarrier && c->land == laOceanWall) return 1;
if(c->wall == waReptileBridge) return 1;
return 0;
}
bool conegraph(cell *c) {
return wmescher && wmspatial && (c->wall == waDune || c->wall == waBigTree || c->wall == waSmallTree || c->wall == waCTree || (c->wall == waBarrier && c->land == laOceanWall));
EX bool conegraph(cell *c) {
return ((wmescher && wmspatial) || wmascii3) && (conegraphtype(c) || (c->wall == waBarrier && c->land == laOceanWall));
}
bool isReptile(eWall w) {
return w == waReptile || w == waReptileBridge;
/** Determine the power of a frog monster. Also used to determine whether monster is a frog. */
EX eItem frog_power(eMonster m) {
if(m == moFrog) return itOrbFrog;
if(m == moPhaser) return itOrbPhasing;
if(m == moVaulter) return itOrbDash;
return itNone;
}
bool isBull(eMonster m) {
return m == moRagingBull || m == moHerdBull || m == moSleepBull;
}
bool hornStuns(cell *c) {
EX bool hornStuns(cell *c) {
eMonster m = c->monst;
return
m == moRagingBull || m == moSleepBull || m == moHerdBull ||
m == moButterfly || m == moGreater || m == moGreaterM || m == moDraugr ||
m == moHedge || m == moFlailer || m == moVizier || m == moReptile || m == moSalamander ||
m == moPair || m == moAltDemon || m == moHexDemon || m == moMonk || m == moCrusher ||
attackJustStuns(c, AF_NORMAL);
attackJustStuns(c, AF_NORMAL, moNone);
}
// generate all the world first in the quotient geometry
bool generateAll(eLand l) {
return
l == laIce || l == laDryForest || l == laCocytus || l == laLivefjord ||
l == laCaves || l == laCA;
/** changing this wall for whatever reason may cause the game to crash */
EX bool do_not_touch_this_wall(cell *c) {
return among(c->wall, waMirrorWall, waBarrier, waRoundTable, waWarpGate);
}
bool isRaider(eMonster m) {
return m == moPair || m == moMonk || m == moCrusher || m == moAltDemon || m == moHexDemon;
EX bool is_paired(eMonster m) {
return among(m, moPair, moNorthPole, moSouthPole);
}
bool isTechnicalLand(eLand l) {
return l == laNone || l == laOceanWall || l == laBarrier || l == laCanvas ||
l == laHauntedWall || l == laHauntedBorder || l == laCA ||
l == laMirrorWall || l == laMirrored || l == laMirrored2 ||
l == laMirrorWall2 || l == laMercuryRiver || l == laMemory;
EX bool isDie(eMonster m) {
return among(m, moAnimatedDie, moAngryDie);
}
bool is_mirrorland(cell *c) {
return among(c->land, laMirror, laMirrorOld);
EX bool isDie(eWall w) {
return among(w, waRichDie, waHappyDie);
}
bool isPushable(eWall w) { return w == waThumperOn; }
}

File diff suppressed because it is too large Load Diff

8131
game.cpp

File diff suppressed because it is too large Load Diff

View File

@ -444,5 +444,17 @@ void buildAutomatonRule(cell *c) {
}
}
/*
to drawcell:
if(c->type == 6 && c->tmp > 0) {
int i = c->tmp;
zebra(cellwalker(c, i&15), 1, i>>4, "", 0);
}
c->item = eItem(c->heat / 4);
buildAutomatonRule(c);
#endif
*/
// #define BUILDZEBRA
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

963
glhr.cpp Normal file
View File

@ -0,0 +1,963 @@
// Hyperbolic Rogue -- low-level OpenGL routines
// Copyright (C) 2011-2019 Zeno Rogue, see 'hyper.cpp' for details
/** \file glhr.cpp
* \brief low-level OpenGL routines
*
* If CAP_SHADER is 0, OpenGL 1.0 is used.
* If CAP_SHADER is 1, we are using GLSL shaders.
*/
#include "hyper.h"
namespace hr {
EX bool detailed_shader = false;
EX namespace glhr {
EX glvertex pointtogl(const hyperpoint& t) {
glvertex h;
h[0] = t[0]; h[1] = t[1]; h[2] = t[2];
if(SHDIM == 4) h[3] = (MDIM == 4) ? t[3] : 1;
return h;
}
EX hyperpoint gltopoint(const glvertex& t) {
hyperpoint h;
h[0] = t[0]; h[1] = t[1]; h[2] = t[2];
if(SHDIM == 4 && MAXMDIM == 4) h[3] = t[3];
return h;
}
#if CAP_SHADER
EX bool noshaders = false;
#endif
#if !CAP_SHADER
EX bool noshaders = true;
#endif
#if HDR
inline glvertex makevertex(GLfloat x, GLfloat y, GLfloat z) {
#if SHDIM == 3
return make_array(x, y, z);
#else
return make_array<GLfloat>(x, y, z, 1);
#endif
}
#endif
EX }
#if CAP_GL
#ifndef DEBUG_GL
#define DEBUG_GL 0
#endif
// Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details
EX void glError(const char* GLcall, const char* file, const int line) {
GLenum errCode = glGetError();
if(errCode!=GL_NO_ERROR) {
println(hlog, hr::format("OPENGL ERROR #%i: in file %s on line %i :: %s",errCode,file, line, GLcall));
}
}
#if HDR
struct glwrap {
const char* msg;
int line;
void act(const char *when);
glwrap(const char *m, int l) : msg(m), line(l) { act("before"); }
~glwrap() { act("after"); }
};
#define GLWRAP glwrap w##__line(__FILE__, __LINE__)
#endif
void glwrap::act(const char *when) {
GLenum errCode = glGetError();
if(errCode!=GL_NO_ERROR) {
println(hlog, hr::format("GL error %i %s: %s:%i", errCode, when, msg, line));
}
}
#if HDR
#if CAP_SHADER && CAP_NOSHADER
#define WITHSHADER(x, y) if(glhr::noshaders) y else x
#else
#if CAP_NOSHADER
#define WITHSHADER(x, y) if(1) y
#else
#define WITHSHADER(x, y) if(1) x
#endif
#endif
#endif
EX namespace glhr {
EX string to_glsl(ld x) {
char buf[64];
snprintf(buf, 64, "float(%.10e)", x);
return buf;
}
#if HDR
struct glmatrix {
GLfloat a[4][4];
GLfloat* operator[] (int i) { return a[i]; }
const GLfloat* operator[] (int i) const { return a[i]; }
GLfloat* as_array() { return a[0]; }
const GLfloat* as_array() const { return a[0]; }
array<float, 16>& as_stdarray() { return *(array<float, 16>*)this; }
const array<float, 16>& as_stdarray() const { return *(array<float, 16>*)this; }
};
struct colored_vertex {
glvertex coords;
glvec4 color;
colored_vertex() {}
colored_vertex(GLfloat x, GLfloat y, GLfloat r, GLfloat g, GLfloat b) {
coords[0] = x;
coords[1] = y;
coords[2] = 0;
coords[3] = 1;
color[0] = r;
color[1] = g;
color[2] = b;
color[3] = 1;
}
void set_color(color_t col) {
for(int i=0; i<4; i++)
color[i] = part(col, 3-i) / 255.0;
}
colored_vertex(hyperpoint h, color_t col) {
coords = pointtogl(h);
set_color(col);
}
};
struct textured_vertex {
glvertex coords;
/* texture uses the 'z' for shading with POLY_SHADE_TEXTURE */
glvec3 texture;
};
struct ct_vertex {
glvertex coords;
glvec4 color;
glvec2 texture;
ct_vertex() {}
ct_vertex(const hyperpoint& h, ld x1, ld y1, ld col) {
coords = pointtogl(h);
texture[0] = x1;
texture[1] = y1;
color[0] = color[1] = color[2] = col;
color[3] = 1;
}
};
#endif
EX bool glew = false;
bool current_depthtest, current_depthwrite;
ld fogbase;
#if HDR
typedef const void *constvoidptr;
#endif
EX constvoidptr current_vertices, buffered_vertices;
EX ld current_linewidth;
GLuint buf_current, buf_buffered;
void display(const glmatrix& m) {
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++)
printf("%10.5f", m[i][j]);
printf("\n");
}
printf("\n");
}
EX glmatrix operator * (glmatrix m1, glmatrix m2) {
glmatrix res;
for(int i=0; i<4; i++)
for(int j=0; j<4; j++) {
res[i][j] = 0;
for(int k=0; k<4; k++)
res[i][j] += m1[i][k] * m2[k][j];
}
return res;
}
EX glmatrix id = {{{1,0,0,0}, {0,1,0,0}, {0,0,1,0}, {0,0,0,1}}};
EX glmatrix scale(ld x, ld y, ld z) {
glmatrix tmp;
for(int i=0; i<4; i++)
for(int j=0; j<4; j++)
tmp[i][j] = (i==j);
tmp[0][0] = x;
tmp[1][1] = y;
tmp[2][2] = z;
return tmp;
}
EX glmatrix tmtogl(const transmatrix& T) {
glmatrix tmp;
for(int i=0; i<4; i++)
for(int j=0; j<4; j++)
tmp[i][j] = T[i][j];
return tmp;
}
EX transmatrix gltotm(const glmatrix& T) {
transmatrix tmp;
for(int i=0; i<4; i++)
for(int j=0; j<4; j++)
tmp[i][j] = T[i][j];
return tmp;
}
EX glmatrix tmtogl_transpose(const transmatrix& T) {
glmatrix tmp;
for(int i=0; i<4; i++)
for(int j=0; j<4; j++)
tmp[i][j] = T[j][i];
return tmp;
}
EX glmatrix tmtogl_transpose3(const transmatrix& T) {
glmatrix tmp;
for(int i=0; i<4; i++)
for(int j=0; j<4; j++)
tmp[i][j] = T[j][i];
if(MDIM == 3)
for(int i=0; i<4; i++)
for(int j=0; j<4; j++)
if(i == 3 || j == 3) tmp[j][i] = 0;
return tmp;
}
EX glmatrix ortho(ld x, ld y, ld z) {
return scale(1/x, 1/y, 1/z);
}
EX glmatrix& as_glmatrix(GLfloat o[16]) {
glmatrix& tmp = (glmatrix&) (o[0]);
return tmp;
}
EX ld vnear_default = 1e-3;
EX ld vfar_default = 1e9;
EX glmatrix frustum(ld x, ld y, ld vnear IS(vnear_default), ld vfar IS(vfar_default)) {
GLfloat frustum[16] = {
GLfloat(1 / x), 0, 0, 0,
0, GLfloat(1 / y), 0, 0,
0, 0, GLfloat(-(vnear+vfar)/(vfar-vnear)), -1,
0, 0, GLfloat(-2*vnear*vfar/(vfar-vnear)), 0};
return as_glmatrix(frustum);
}
EX glmatrix translate(ld x, ld y, ld z) {
glmatrix tmp;
for(int i=0; i<4; i++)
for(int j=0; j<4; j++)
tmp[i][j] = (i==j);
tmp[3][0] = x;
tmp[3][1] = y;
tmp[3][2] = z;
return tmp;
}
// ** legacy **
// /* shaders */
EX glmatrix projection;
EX void new_projection() {
WITHSHADER({
projection = id;
}, {
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
return;
})
}
EX void projection_multiply(const glmatrix& m) {
WITHSHADER({
projection = m * projection;
}, {
glMatrixMode(GL_PROJECTION);
glMultMatrixf(m.as_array());
})
}
EX void init();
#if HDR
struct GLprogram {
GLuint _program;
GLuint vertShader, fragShader;
GLint uFog, uFogColor, uColor, tTexture, tInvExpTable, tAirMap, uMV, uProjection, uAlpha, uFogBase, uPP;
GLint uPRECX, uPRECY, uPRECZ, uIndexSL, uIterations, uLevelLines, uSV, uRadarTransform;
GLint uRotSin, uRotCos, uRotNil;
GLint uDepthScaling, uCamera, uDepth;
flagtype shader_flags;
string _vsh, _fsh;
GLprogram(string vsh, string fsh);
~GLprogram();
};
#endif
EX shared_ptr<GLprogram> current_glprogram = nullptr;
EX bool debug_gl;
EX int compileShader(int type, const string& s) {
GLint status;
if(debug_gl) {
println(hlog, "=== ", full_geometry_name(), " @ ", models::get_model_name(pmodel));
int lineno = 1;
string cline = "";
for(char c: s+"\n") {
if(c == '\n') println(hlog, hr::format("%4d : ", lineno), cline), lineno++, cline = "";
else cline += c;
}
println(hlog, "===");
}
GLint shader = glCreateShader(type);
const char *ss = s.c_str();
glShaderSource(shader, 1, &ss, NULL);
glCompileShader(shader);
GLint logLength;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength);
if (logLength > 0) {
std::vector<char> log(logLength);
glGetShaderInfoLog(shader, logLength, &logLength, log.data());
string s = log.data();
if(logLength > 0)
println(hlog, "compiler log (", logLength, "): \n", s);
if(debug_gl) {
println(hlog, "failed to compile shader -- exit called");
exit(1);
}
}
glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
if (status == 0) {
glDeleteShader(shader);
printf("failed to compile shader\n");
println(hlog, s);
shader = 0;
}
return shader;
}
GLprogram::GLprogram(string vsh, string fsh) {
if(noshaders || !vid.usingGL) {
uFog = -1;
uProjection = -1;
uPP = -1;
uMV = -1;
uPRECX = -1;
uIterations = -1;
uAlpha = -1;
uLevelLines = -1;
uFogColor = -1;
uDepthScaling = uCamera = uDepth = -1;
uColor = tTexture = tInvExpTable = tAirMap = -1;
uFogBase = -1;
uPRECX = uPRECY = uPRECZ = uIndexSL = -1;
uSV = uRadarTransform = -1;
uRotCos = -1;
uRotSin = -1;
uRotNil = -1;
return;
}
_vsh = vsh; _fsh = fsh;
_program = glCreateProgram();
add_fixed_functions(vsh);
add_fixed_functions(fsh);
// printf("creating program %d\n", _program);
vertShader = compileShader(GL_VERTEX_SHADER, vsh.c_str());
fragShader = compileShader(GL_FRAGMENT_SHADER, fsh.c_str());
// Attach vertex shader to program.
glAttachShader(_program, vertShader);
// Attach fragment shader to program.
glAttachShader(_program, fragShader);
glBindAttribLocation(_program, aPosition, "aPosition");
glBindAttribLocation(_program, aTexture, "aTexture");
glBindAttribLocation(_program, aColor, "aColor");
GLint status;
glLinkProgram(_program);
GLint logLength;
glGetProgramiv(_program, GL_INFO_LOG_LENGTH, &logLength);
if (logLength > 0) {
std::vector<char> log(logLength);
glGetProgramInfoLog(_program, logLength, &logLength, log.data());
if(logLength > 0)
printf("linking log (%d): %s\n", logLength, log.data());
}
glGetProgramiv(_program, GL_LINK_STATUS, &status);
if (status == 0) {
printf("failed to link shader\n");
exit(1);
}
uMV = glGetUniformLocation(_program, "uMV");
uProjection = glGetUniformLocation(_program, "uP");
uPP = glGetUniformLocation(_program, "uPP");
uFog = glGetUniformLocation(_program, "uFog");
uFogColor = glGetUniformLocation(_program, "uFogColor");
uFogBase = glGetUniformLocation(_program, "uFogBase");
uAlpha = glGetUniformLocation(_program, "uAlpha");
uColor = glGetUniformLocation(_program, "uColor");
tTexture = glGetUniformLocation(_program, "tTexture");
tInvExpTable = glGetUniformLocation(_program, "tInvExpTable");
tAirMap = glGetUniformLocation(_program, "tAirMap");
uDepth = glGetUniformLocation(_program, "uDepth");
uDepthScaling = glGetUniformLocation(_program, "uDepthScaling");
uCamera = glGetUniformLocation(_program, "uCamera");
uPRECX = glGetUniformLocation(_program, "PRECX");
uPRECY = glGetUniformLocation(_program, "PRECY");
uPRECZ = glGetUniformLocation(_program, "PRECZ");
uIndexSL = glGetUniformLocation(_program, "uIndexSL");
uSV = glGetUniformLocation(_program, "uSV");
uIterations = glGetUniformLocation(_program, "uIterations");
uLevelLines = glGetUniformLocation(_program, "uLevelLines");
uRadarTransform = glGetUniformLocation(_program, "uRadarTransform");
uRotCos = glGetUniformLocation(_program, "uRotCos");
uRotSin = glGetUniformLocation(_program, "uRotSin");
uRotNil = glGetUniformLocation(_program, "uRotNil");
}
GLprogram::~GLprogram() {
glDeleteProgram(_program);
if(vertShader) glDeleteShader(vertShader), vertShader = 0;
if(fragShader) glDeleteShader(fragShader), fragShader = 0;
}
EX void set_index_sl(ld x) {
glUniform1f(glhr::current_glprogram->uIndexSL, x);
}
EX void set_sv(ld x) {
glUniform1f(glhr::current_glprogram->uSV, x);
}
EX void set_sl_iterations(int steps) {
glUniform1i(glhr::current_glprogram->uIterations, steps);
}
EX void set_solv_prec(int x, int y, int z) {
glUniform1i(glhr::current_glprogram->tInvExpTable, INVERSE_EXP_BINDING);
glUniform1f(glhr::current_glprogram->uPRECX, x);
glUniform1f(glhr::current_glprogram->uPRECY, y);
glUniform1f(glhr::current_glprogram->uPRECZ, z);
}
EX glmatrix current_matrix, current_modelview, current_projection;
bool operator == (const glmatrix& m1, const glmatrix& m2) {
for(int i=0; i<4; i++)
for(int j=0; j<4; j++)
if(m1[i][j] != m2[i][j]) return false;
return true;
}
bool operator != (const glmatrix& m1, const glmatrix& m2) {
return !(m1 == m2);
}
EX glmatrix eyeshift;
EX bool using_eyeshift;
EX void set_modelview(const glmatrix& modelview) {
#if CAP_NOSHADER
if(noshaders) {
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(modelview.as_array());
return;
}
#endif
auto& cur = current_glprogram;
if(!cur) return;
if(detailed_shader) println(hlog, "\n*** ENABLING MODELVIEW:\n", modelview.as_stdarray());
if(detailed_shader) println(hlog, "\n*** ENABLING PROJECTION:\n", projection.as_stdarray());
if(using_eyeshift) {
glmatrix mvp = modelview * eyeshift;
#if MINIMIZE_GL_CALLS
if(mvp == current_matrix) return;
current_matrix = mvp;
#endif
glUniformMatrix4fv(cur->uMV, 1, 0, mvp.as_array());
}
else if(modelview != current_modelview) {
current_modelview = modelview;
glUniformMatrix4fv(cur->uMV, 1, 0, modelview.as_array());
}
if(projection != current_projection) {
current_projection = projection;
glUniformMatrix4fv(cur->uProjection, 1, 0, projection.as_array());
}
}
EX void id_modelview() {
#if CAP_NOSHADER
if(noshaders) {
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
return;
}
#endif
set_modelview(id);
}
EX array<GLfloat, 4> acolor(color_t color, ld scale IS(1)) {
array<GLfloat, 4> cols;
for(int i=0; i<4; i++)
cols[i] = part(color, 3-i) / 255.0 * scale;
return cols;
}
EX void color2(color_t color, ld scale IS(1)) {
auto cols = acolor(color, scale);
WITHSHADER({
if(!current_glprogram) return;
glUniform4f(current_glprogram->uColor, cols[0], cols[1], cols[2], cols[3]);
}, {
glColor4f(cols[0], cols[1], cols[2], cols[3]);
}
)
}
EX void colorClear(color_t color) {
glClearColor(part(color, 3) / 255.0, part(color, 2) / 255.0, part(color, 1) / 255.0, part(color, 0) / 255.0);
}
EX void full_enable(shared_ptr<GLprogram> p) {
auto& cur = current_glprogram;
flagtype oldflags = cur ? cur->shader_flags : 0;
if(p == cur) return;
if(!vid.usingGL) return;
cur = p;
GLERR("pre_switch_mode");
WITHSHADER({
if(detailed_shader) println(hlog, "\n*** ENABLING VERTEX SHADER:\n", cur->_vsh, "\n\nENABLING FRAGMENT SHADER:\n", cur->_fsh, "\n");
glUseProgram(cur->_program);
GLERR("after_enable");
}, {
});
reset_projection();
flagtype newflags = cur->shader_flags;
tie(oldflags, newflags) = make_pair(oldflags & ~newflags, newflags & ~oldflags);
if(newflags & GF_TEXTURE) {
GLERR("xsm");
WITHSHADER({
glEnableVertexAttribArray(aTexture);
GLERR("xsm");
}, {
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
GLERR("xsm");
})
}
if(oldflags & GF_TEXTURE) {
GLERR("xsm");
WITHSHADER({
glDisableVertexAttribArray(aTexture);
GLERR("xsm");
}, {
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
GLERR("xsm");
})
}
if(newflags & GF_VARCOLOR) {
WITHSHADER({
GLERR("xsm");
glEnableVertexAttribArray(aColor);
}, {
GLERR("xsm");
glEnableClientState(GL_COLOR_ARRAY);
GLERR("xsm");
})
}
if(oldflags & GF_VARCOLOR) {
WITHSHADER({
glDisableVertexAttribArray(aColor);
GLERR("xsm");
}, {
glDisableClientState(GL_COLOR_ARRAY);
GLERR("xsm");
})
}
if(newflags & GF_LIGHTFOG) {
#ifdef GLES_ONLY
#define glFogi glFogx
#endif
WITHSHADER({}, {
/*GLfloat light_ambient[] = { 3.5, 3.5, 3.5, 1.0 };
GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_position[] = { 0.0, 0.0, 0.0, 1.0 };
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
GLERR("lighting");
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0); */
glEnable(GL_FOG);
glFogi(GL_FOG_MODE, GL_LINEAR);
glFogf(GL_FOG_START, 0);
})
}
if(oldflags & GF_LIGHTFOG) {
WITHSHADER({}, {glDisable(GL_FOG);})
}
WITHSHADER({
glUniform1f(cur->uFogBase, 1); fogbase = 1;
}, {})
GLERR("after_switch_mode");
current_vertices = NULL;
WITHSHADER({
current_matrix[0][0] = -1e8; // invalid
current_modelview[0][0] = -1e8;
current_projection[0][0] = -1e8;
}, {})
id_modelview();
#if MINIMIZE_GL_CALLS
#else
current_linewidth = -1;
#endif
/* if(current_depthwrite) glDepthMask(GL_TRUE);
else glDepthMask(GL_FALSE);
if(current_depthtest) glEnable(GL_DEPTH_TEST);
else glDisable(GL_DEPTH_TEST); */
}
EX void fog_max(ld fogmax, color_t fogcolor) {
WITHSHADER({
if(current_glprogram->uFog != -1)
glUniform1f(current_glprogram->uFog, 1 / fogmax);
if(current_glprogram->uFogColor != -1) {
GLfloat cols[4];
for(int i=0; i<4; i++) cols[i] = part(fogcolor, 3-i) / 255.0;
glUniform4f(current_glprogram->uFogColor, cols[0], cols[1], cols[2], cols[3]);
}
}, {
glFogf(GL_FOG_END, fogmax);
})
}
EX void set_fogbase(ld _fogbase) {
WITHSHADER({
if(fogbase != _fogbase) {
fogbase = _fogbase;
glUniform1f(current_glprogram->uFogBase, fogbase);
}
}, {})
}
EX void set_ualpha(ld alpha) {
WITHSHADER({
glUniform1f(current_glprogram->uAlpha, alpha);
}, {})
}
void init() {
#if CAP_GLEW
if(!glew) {
glew = true;
glewExperimental = GL_TRUE;
printf("Initializing GLEW\n");
GLenum err = glewInit();
if (GLEW_OK != err) {
addMessage("Failed to initialize GLEW");
printf("Failed to initialize GLEW\n");
return;
}
printf("CreateProgram = %p\n", reinterpret_cast<void*>(__glewCreateProgram));
if(!__glewCreateProgram) noshaders = true;
}
#endif
projection = id;
WITHSHADER(glEnableVertexAttribArray(aPosition);, glEnableClientState(GL_VERTEX_ARRAY);)
GLERR("aPosition");
// #endif
glDisableVertexAttribArray(aTexture);
glDisableVertexAttribArray(aColor);
#if CAP_VERTEXBUFFER
glGenBuffers(1, &buf_current);
glGenBuffers(1, &buf_buffered);
current_vertices = NULL;
buffered_vertices = (void*) &buffered_vertices; // point to nothing
glBindBuffer(GL_ARRAY_BUFFER, buf_current);
#endif
}
#if CAP_VERTEXBUFFER
template<class T> void bindbuffer(T& v) {
if(current_vertices == buffered_vertices || current_vertices == nullptr) {
glBindBuffer(GL_ARRAY_BUFFER, buf_current);
}
current_vertices = &v[0];
glBufferData(GL_ARRAY_BUFFER, isize(v) * sizeof(v[0]), &v[0], GL_DYNAMIC_DRAW);
}
#define PTR(attrib, q, field) \
glVertexAttribPointer(attrib, q, GL_FLOAT, GL_FALSE, sizeof(v[0]), (void*) ((char*) &v[0].field - (char*) &v[0]));
EX void bindbuffer_vertex(vector<glvertex>& v) {
bindbuffer(v);
}
#endif
EX void vertices(const vector<glvertex>& v, int vshift IS(0)) {
#if CAP_VERTEXBUFFER
if(&v[0] == buffered_vertices) {
if(&v[0] == current_vertices) return;
current_vertices = buffered_vertices;
glBindBuffer(GL_ARRAY_BUFFER, buf_buffered);
glVertexAttribPointer(aPosition, SHDIM, GL_FLOAT, GL_FALSE, sizeof(glvertex), 0);
return;
}
bindbuffer(v);
glVertexAttribPointer(aPosition, SHDIM, GL_FLOAT, GL_FALSE, sizeof(glvertex), 0);
#else
if(current_vertices == &v[vshift]) return;
current_vertices = &v[vshift];
WITHSHADER(
glVertexAttribPointer(aPosition, SHDIM, GL_FLOAT, GL_FALSE, sizeof(glvertex), &v[vshift]);,
glVertexPointer(SHDIM, GL_FLOAT, sizeof(glvertex), &v[0]);
)
#endif
}
EX void vertices_texture(const vector<glvertex>& v, const vector<glvertex>& t, int vshift IS(0), int tshift IS(0)) {
#if CAP_VERTEXBUFFER
int q = min(isize(v)-vshift, isize(t)-tshift);
vector<textured_vertex> tv(q);
for(int i=0; i<q; i++)
tv[i].coords = v[vshift+i],
tv[i].texture[0] = t[tshift+i][0],
tv[i].texture[1] = t[tshift+i][1],
tv[i].texture[2] = t[tshift+i][2];
prepare(tv);
#else
vertices(v, vshift);
WITHSHADER(
glVertexAttribPointer(aTexture, SHDIM, GL_FLOAT, GL_FALSE, sizeof(glvertex), &t[tshift]);,
glTexCoordPointer(SHDIM, GL_FLOAT, 0, &t[tshift]);
)
#endif
}
EX void vertices_texture_color(const vector<glvertex>& v, const vector<glvertex>& t, const vector<glvertex>& c, int vshift IS(0), int tshift IS(0)) {
#if CAP_VERTEXBUFFER
int q = min(isize(v)-vshift, isize(t)-tshift);
vector<ct_vertex> tv(q);
for(int i=0; i<q; i++) {
tv[i].coords = v[vshift+i],
tv[i].texture[0] = t[tshift+i][0],
tv[i].texture[1] = t[tshift+i][1];
for(int i=0; i<SHDIM; i++)
tv[i].color[i] = c[tshift+i][i];
if(SHDIM == 3) tv[i].color[3] = 1;
}
prepare(tv);
#else
vertices(v, vshift);
WITHSHADER({
glVertexAttribPointer(aTexture, SHDIM, GL_FLOAT, GL_FALSE, sizeof(glvertex), &t[tshift]);
glVertexAttribPointer(aColor, 4, GL_FLOAT, GL_FALSE, sizeof(glvertex), &c[tshift]);
}, {
glTexCoordPointer(SHDIM, GL_FLOAT, 0, &t[tshift]);
glColorPointer(4, GL_FLOAT, sizeof(colored_vertex), &c[0]);
}
)
#endif
}
EX void prepare(vector<colored_vertex>& v) {
#if CAP_VERTEXBUFFER
bindbuffer(v);
PTR(aPosition, SHDIM, coords);
PTR(aColor, 4, color);
#else
if(current_vertices == &v[0]) return;
current_vertices = &v[0];
WITHSHADER({
glVertexAttribPointer(aPosition, SHDIM, GL_FLOAT, GL_FALSE, sizeof(colored_vertex), &v[0].coords);
glVertexAttribPointer(aColor, 4, GL_FLOAT, GL_FALSE, sizeof(colored_vertex), &v[0].color);
}, {
glVertexPointer(SHDIM, GL_FLOAT, sizeof(colored_vertex), &v[0].coords);
glColorPointer(4, GL_FLOAT, sizeof(colored_vertex), &v[0].color);
})
#endif
}
EX void prepare(vector<textured_vertex>& v) {
#if CAP_VERTEXBUFFER
bindbuffer(v);
PTR(aPosition, SHDIM, coords);
PTR(aTexture, 3, texture);
#else
if(current_vertices == &v[0]) return;
current_vertices = &v[0];
WITHSHADER({
glVertexAttribPointer(aPosition, SHDIM, GL_FLOAT, GL_FALSE, sizeof(textured_vertex), &v[0].coords);
glVertexAttribPointer(aTexture, SHDIM, GL_FLOAT, GL_FALSE, sizeof(textured_vertex), &v[0].texture);
}, {
glVertexPointer(SHDIM, GL_FLOAT, sizeof(textured_vertex), &v[0].coords);
glTexCoordPointer(3, GL_FLOAT, sizeof(textured_vertex), &v[0].texture);
})
#endif
// color2(col);
}
EX void prepare(vector<ct_vertex>& v) {
#if CAP_VERTEXBUFFER
bindbuffer(v);
PTR(aPosition, SHDIM, coords);
PTR(aColor, 4, color);
PTR(aTexture, 2, texture);
#else
if(current_vertices == &v[0]) return;
current_vertices = &v[0];
WITHSHADER({
glVertexAttribPointer(aPosition, SHDIM, GL_FLOAT, GL_FALSE, sizeof(ct_vertex), &v[0].coords);
glVertexAttribPointer(aColor, 4, GL_FLOAT, GL_FALSE, sizeof(ct_vertex), &v[0].color);
glVertexAttribPointer(aTexture, 2, GL_FLOAT, GL_FALSE, sizeof(ct_vertex), &v[0].texture);
}, {
glVertexPointer(SHDIM, GL_FLOAT, sizeof(ct_vertex), &v[0].coords);
glTexCoordPointer(2, GL_FLOAT, sizeof(ct_vertex), &v[0].texture);
glColorPointer(4, GL_FLOAT, sizeof(ct_vertex), &v[0].color);
})
#endif
}
EX void store_in_buffer(vector<glvertex>& v) {
#if CAP_VERTEXBUFFER
if(!buf_buffered) {
printf("no buffer yet\n");
return;
}
printf("storing %d in buffer: %p\n", isize(v), &v[0]);
current_vertices = buffered_vertices = &v[0];
glBindBuffer(GL_ARRAY_BUFFER, buf_buffered);
glVertexAttribPointer(aPosition, SHDIM, GL_FLOAT, GL_FALSE, sizeof(glvertex), 0);
glBufferData(GL_ARRAY_BUFFER, isize(v) * sizeof(glvertex), &v[0], GL_STATIC_DRAW);
printf("Stored.\n");
#endif
}
EX void set_depthtest(bool b) {
if(b != current_depthtest) {
current_depthtest = b;
if(b) glEnable(GL_DEPTH_TEST);
else glDisable(GL_DEPTH_TEST);
}
}
EX void set_depthwrite(bool b) {
if(b != current_depthwrite) { // <- this does not work ask intended for some reason...
current_depthwrite = b;
if(b) glDepthMask(GL_TRUE);
else glDepthMask(GL_FALSE);
}
}
EX void set_linewidth(ld lw) {
if(lw != current_linewidth) {
current_linewidth = lw;
glLineWidth(lw);
}
}
EX void switch_to_text(const vector<glvertex>& v, const vector<glvertex>& t) {
current_display->next_shader_flags = GF_TEXTURE;
dynamicval<eModel> pm(pmodel, mdPixel);
if(!svg::in) current_display->set_all(0, 0);
vertices_texture(v, t, 0, 0);
}
EX void be_nontextured() { current_display->next_shader_flags = 0; }
EX void be_textured() { current_display->next_shader_flags = GF_TEXTURE; }
EX void be_color_textured() { current_display->next_shader_flags = GF_TEXTURE | GF_VARCOLOR; }
EX }
EX vector<glhr::textured_vertex> text_vertices;
EX void texture_vertices(GLfloat *f, int qty, int stride IS(2)) {
WITHSHADER(
glVertexAttribPointer(aTexture, stride, GL_FLOAT, GL_FALSE, stride * sizeof(GLfloat), f);,
glTexCoordPointer(stride, GL_FLOAT, 0, f);
)
}
EX void oldvertices(GLfloat *f, int qty) {
WITHSHADER(
glVertexAttribPointer(aPosition, SHDIM, GL_FLOAT, GL_FALSE, SHDIM * sizeof(GLfloat), f);,
glVertexPointer(SHDIM, GL_FLOAT, 0, f);
)
}
#endif
}
#define glMatrixMode DISABLED
#define glLoadIdentity DISABLED
#define glMultMatrixf DISABLED
#define glScalef DISABLED
#define glTranslatef DISABLED
#define glPushMatrix DISABLED
#define glPopMatrix DISABLED

File diff suppressed because it is too large Load Diff

8384
graph.cpp

File diff suppressed because it is too large Load Diff

711
help.cpp

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,13 @@
// Hyperbolic Rogue
// Hyperbolic Rogue -- Heptagon
// Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details
// heptagon here refers to underlying heptagonal tesselation
// (which you can see by changing the conditions in graph.cpp)
/** \file heptagon.cpp
* \brief implementation of Heptagons
*
* Start with locations.cpp
*/
#include "hyper.h"
namespace hr {
#define MIRR(x) x.mirrored
@ -13,15 +17,15 @@ int heptacount = 0;
struct cell;
cell *newCell(int type, heptagon *master);
// spintable functions
/** the automaton is used to generate each heptagon in an unique way.
* See http://roguetemple.com/z/dev.php for more help.
* From the origin we can go further in any direction, and from other heptagons
* we can go in directions 3 and 4 (0 is back to origin, so 3 and 4 go forward),
* and sometimes in direction 5
*/
// the automaton is used to generate each heptagon in an unique way
// (you can see the tree obtained by changing the conditions in graph.cpp)
// from the origin we can go further in any direction, and from other heptagons
// we can go in directions 3 and 4 (0 is back to origin, so 3 and 4 go forward),
// and sometimes in direction 5
hstate transition(hstate s, int dir) {
EX hstate transition(hstate s, int dir) {
if(embedded_plane) return IPF(transition(s, dir));
if(sphere) {
if(S7 == 4) {
if(s == hsOrigin) return dir == 0 ? hsB0 : hsB1;
@ -49,6 +53,10 @@ hstate transition(hstate s, int dir) {
if(s == hsB && (dir >= 2 && dir < S7-2)) return hsA;
if(s == hsB && (dir == S7-2)) return hsB;
}
else if(S3 >= OINF) {
if(s == hsOrigin) return hsA;
if(s == hsA && dir) return hsA;
}
else {
if(s == hsOrigin) return hsA;
if(s == hsA && dir >= 3 && dir <= S7-3) return hsA;
@ -62,27 +70,46 @@ hstate transition(hstate s, int dir) {
#define COMPUTE -1000000
// create a new heptagon
heptagon *buildHeptagon1(heptagon *h, heptagon *parent, int d, hstate s, int pard = 0, int fixdistance = COMPUTE) {
EX heptagon *buildHeptagon1(heptagon *h, heptagon *parent, int d, hstate s, int pard IS(0)) {
h->alt = NULL;
h->s = s;
h->c.connect(pard, parent, d, false);
h->cdata = NULL;
return h;
}
EX heptagon *init_heptagon(int type) {
heptagon *h = tailored_alloc<heptagon> (type);
h->emeraldval = 0;
h->zebraval = 0;
h->fiftyval = 0;
h->fieldval = 0;
h->rval0 = h->rval1 = 0;
h->cdata = NULL;
h->alt = NULL;
h->c7 = NULL;
h->distance = 0;
h->dm4 = 0;
return h;
}
heptagon *buildHeptagon(heptagon *parent, int d, hstate s, int pard = 0, int fixdistance = COMPUTE) {
heptagon *h = buildHeptagon1(tailored_alloc<heptagon> (S7), parent, d, s, pard, fixdistance);
if(binarytiling || archimedean) return h;
heptagon *h = buildHeptagon1(tailored_alloc<heptagon> (S7), parent, d, s, pard);
if(bt::in() || arcm::in()) return h;
if(parent->c7) {
#if CAP_IRR
if(IRREGULAR)
irr::link_next(parent, d);
else
#endif
h->c7 = newCell(S7, h);
h->rval0 = h->rval1 = 0;
h->emeraldval = emerald_heptagon(parent->emeraldval, d);
h->zebraval = zebra_heptagon(parent->zebraval, d);
#if CAP_FIELD
if(&currfp != &fieldpattern::fp_invalid)
h->fieldval = currfp.connections[fieldpattern::btspin(parent->fieldval, d)];
#endif
if(a38)
h->fiftyval = fifty_38(parent->fiftyval, d);
else if(parent->s == hsOrigin)
@ -108,9 +135,16 @@ heptagon *buildHeptagon(heptagon *parent, int d, hstate s, int pard = 0, int fix
if(h->c.spin(0) == 2 && h->move(0)) {
int d = h->c.spin(0);
int d1 = (d+S7-1)%S7;
heptagon* h1 = createStep(h->move(0), d1);
if(h1->distance <= h->move(0)->distance)
h->distance = h->move(0)->distance+1;
bool missing0 = !h->move(0)->move(d1);
if(missing0) {
if(s == 1 && h->move(0)->s != hsOrigin)
h->distance = h->move(0)->distance + 1;
}
else {
heptagon* h1 = createStep(h->move(0), d1);
if(h1->distance <= h->move(0)->distance)
h->distance = h->move(0)->distance+1;
}
}
if((h->s == hsB && h->move(0)->s == hsB) || h->move(0)->s == hsA) {
int d = h->c.spin(0);
@ -118,13 +152,26 @@ heptagon *buildHeptagon(heptagon *parent, int d, hstate s, int pard = 0, int fix
if(h1->distance <= h->move(0)->distance)
h->distance = h->move(0)->distance+1;
}
if(h->c.spin(0) == S7-1 && h->move(0)->distance != 0)
h->distance = min(
h->move(0)->move(0)->distance + 2,
createStep(h, S7-1)->distance + 1
);
if(h->c.spin(0) == S7-1 && (h->move(0)->s != hsOrigin) && BITRUNCATED) {
bool missing = !h->move(S7-1);
if(missing) {
h->distance = parent->distance;
if(
parent->distance - h->move(0)->move(0)->distance == 1 &&
h->c.spin(0) == S7 - 1 &&
h->move(0)->c.spin(0) == 2)
h->distance++;
}
else {
h->distance = min(
h->move(0)->move(0)->distance + 2,
createStep(h, S7-1)->distance + 1
);
}
}
}
else if(parent->s == hsOrigin) h->distance = parent->distance + gp::dist_2();
#if CAP_GP
else if(S3 == 4 && GOLDBERG && h->c.spin(0) == S7-2 && h->move(0)->c.spin(0) >= S7-2 && h->move(0)->move(0)->s != hsOrigin) {
heptspin hs(h, 0);
hs += wstep;
@ -133,7 +180,7 @@ heptagon *buildHeptagon(heptagon *parent, int d, hstate s, int pard = 0, int fix
int dm = hs.at->distance;
hs += -1; hs += wstep;
int d0 = hs.at->distance;
h->distance = gp::solve_triangle(dm, d0, d1, gp::operator* (gp::param, gp::loc(-1,1)));
h->distance = gp::solve_triangle(dm, d0, d1, gp::param * gp::loc(-1,1));
}
else if(S3 == 4 && GOLDBERG && h->c.spin(0) == S7-1 && among(h->move(0)->c.spin(0), S7-2, S7-3) && h->move(0)->move(0)->s != hsOrigin) {
heptspin hs(h, 0);
@ -143,31 +190,33 @@ heptagon *buildHeptagon(heptagon *parent, int d, hstate s, int pard = 0, int fix
int dm = hs.at->distance;
hs += 1; hs += wstep;
int d1 = hs.at->distance;
h->distance = gp::solve_triangle(dm, d0, d1, gp::operator* (gp::param, gp::loc(1,1)));
h->distance = gp::solve_triangle(dm, d0, d1, gp::param * gp::loc(1,1));
}
else if(S3 == 4 && GOLDBERG && h->c.spin(0) >= 2 && h->c.spin(0) <= S7-2) {
h->distance = parent->distance + gp::dist_2();
}
#endif
else if(h->c.spin(0) == S7-2) {
if(!GOLDBERG)
h->distance = parent->distance + gp::dist_1();
else {
#if CAP_GP
if(GOLDBERG) {
int d0 = parent->distance;
int d1 = createStep(parent, S7-1)->distance;
int dm = createStep(parent, 0)->distance;
h->distance = gp::solve_triangle(dm, d0, d1, gp::operator* (gp::param, gp::loc(1,1)));
}
h->distance = gp::solve_triangle(dm, d0, d1, gp::param * gp::loc(1,1));
} else
#endif
h->distance = parent->distance + gp::dist_1();
}
else if(h->c.spin(0) == S7-3 && h->move(0)->s == hsB) {
if(!GOLDBERG) {
h->distance = createStep(h->move(0), (h->c.spin(0)+2)%S7)->distance + gp::dist_3();
}
else {
#if CAP_GP
if(GOLDBERG) {
int d0 = parent->distance;
int d1 = createStep(parent, S7-2)->distance;
int dm = createStep(parent, S7-1)->distance;
h->distance = gp::solve_triangle(dm, d0, d1, gp::operator* (gp::param, gp::loc(1,1)));
}
h->distance = gp::solve_triangle(dm, d0, d1, gp::param * gp::loc(1,1));
} else
#endif
h->distance = createStep(h->move(0), (h->c.spin(0)+2)%S7)->distance + gp::dist_3();
}
else if(h->c.spin(0) == S7-1 && S3 == 4 && GOLDBERG) {
h->distance = parent->distance + gp::dist_1();
@ -176,6 +225,9 @@ heptagon *buildHeptagon(heptagon *parent, int d, hstate s, int pard = 0, int fix
}
else {
h->distance = parent->distance - gp::dist_2();
if(S3 == 4 && S7 > 5 && BITRUNCATED) {
h->distance = parent->distance - 2;
}
if(S3 == 4 && S7 == 5) {
if(h->s == hsOrigin) {
printf("had to cheat!\n");
@ -203,24 +255,18 @@ void addSpin(heptagon *h, int d, heptagon *from, int rot, int spin) {
extern int hrand(int);
// a structure used to walk on the heptagonal tesselation
// (remembers not only the heptagon, but also direction)
hookset<void(heptagon*, int)> *hooks_createStep;
EX hookset<void(heptagon*, int)> hooks_createStep;
// create h->move(d) if not created yet
heptagon *createStep(heptagon *h, int d) {
d = h->c.fix(d);
if(!h->move(d))
callhooks(hooks_createStep, h, d);
if(!h->move(d) && geometry == gCrystal)
crystal::create_step(h, d);
if(!h->move(d) && binarytiling)
return binary::createStep(h, d);
if(!h->move(d) && archimedean) {
arcm::create_adjacent(h, d);
return h->move(d);
}
if(!h->move(0) && h->s != hsOrigin && !binarytiling && (geometry != gCrystal)) {
if(h->move(d)) return h->move(d);
callhooks(hooks_createStep, h, d);
return currentmap->create_step(h, d);
}
heptagon *hrmap_standard::create_step(heptagon *h, int d) {
if(!h->move(0) && h->s != hsOrigin && !bt::in() && !cryst) {
// cheating:
int pard=0;
if(S3 == 3)
@ -229,7 +275,7 @@ heptagon *createStep(heptagon *h, int d) {
pard = 3; // to do: randomize
else if(S3 == 4)
pard = 3;
buildHeptagon(h, 0, h->distance < -10000 ? hsOrigin : hsA, pard);
buildHeptagon(h, 0, h->distance < -global_distance_limit - 200 ? hsOrigin : hsA, pard);
}
if(h->move(d)) return h->move(d);
if(h->s == hsOrigin) {
@ -249,6 +295,12 @@ heptagon *createStep(heptagon *h, int d) {
else
buildHeptagon(h, d, transition(h->s, d));
}
else if(S3 > 4 && quotient) {
/* this branch may be used for some >4-valent quotient spaces outside of standard HyperRogue */
/* this is wrong, but we don't care in quotient */
h->move(d) = h;
// buildHeptagon(h, d, transition(h->s, d));
}
else if(d == 1) {
addSpin(h, d, h->move(0), h->c.spin(0)-1, -1);
}
@ -279,7 +331,4 @@ void hsshow(const heptspin& t) {
printf("ORIGIN"); backtrace(t.at); printf(" (spin %d)\n", t.spin);
}
// create h->move(d) if not created yet
heptagon *createStep(heptagon *h, int d);
}

777
history.cpp Normal file
View File

@ -0,0 +1,777 @@
// Hyperbolic Rogue -- the history mode
// Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details
/** \file history.cpp
* \brief Implementation of the history mode, including the long band and long spiral.
*/
#include "hyper.h"
namespace hr {
#if CAP_SDL
namespace spiral {
typedef long double ld;
typedef complex<long double> cxld;
int shiftx, shifty, velx, vely;
vector<pair<short, short> > quickmap;
int CX, CY, SX, SY, Yshift;
vector<SDL_Surface*> band;
SDL_Surface *out;
bool displayhelp = true;
color_t& bandpixel(int x, int y) {
int i = 0;
while(i < isize(band) && x >= band[i]->w)
x -= band[i]->w, i++;
return qpixel(band[i], x, y);
}
void precompute() {
CX = 0;
for(int i=0; i<isize(band); i++) CX += band[i]->w;
if(CX == 0) { printf("ERROR: no CX\n"); return; }
CY = band[0]->h;
SX = out->w;
SY = out->h;
ld prec = 2*M_PI*M_PI;
ld k = -prec / log(2.6180339);
cxld factor = cxld(0, -CY/prec) * cxld(k, M_PI);
Yshift = CY * k / M_PI;
quickmap.clear();
double xc = ((SX | 1) - 2) / 2.;
double yc = ((SY | 1) - 2) / 2.;
for(int y=0; y<SY; y++)
for(int x=0; x<SX; x++) {
cxld z(x-xc, y-yc);
cxld z1 = log(z);
z1 = z1 * factor;
quickmap.push_back(make_pair(int(real(z1)) % CX, int(imag(z1))));
}
}
void draw() {
int c = 0;
for(int y=0; y<SY; y++) for(int x=0; x<SX; x++) {
pair<short,short> p = quickmap[c++];
int cx = p.first + shiftx;
int cy = p.second + + shifty;
int d = cy / CY;
cy -= d * CY; cx -= d * Yshift;
if(cy<0) cy += CY, cx += Yshift;
cx %= CX; if(cx<0) cx += CX;
qpixel(out, x, y) = bandpixel(cx, cy);
}
}
void loop(vector<SDL_Surface*> _band) {
renderbuffer rb(vid.xres, vid.yres, false);
if(vid.usingGL) {
rb.make_surface();
out = rb.srf;
}
else
out = s;
band = _band;
precompute();
if(CX == 0) return;
shiftx = shifty = 0;
velx=1; vely=1;
bool dosave = false;
while(true) {
time_t timer;
timer = time(NULL);
char buf[128];
strftime(buf, 128, "spiral-%y%m%d-%H%M%S" IMAGEEXT, localtime(&timer));
SDL_LockSurface(out);
draw();
if(vid.usingGL) {
calcparam();
setGLProjection();
current_display->next_shader_flags = GF_TEXTURE;
dynamicval<eModel> m(pmodel, mdPixel);
glhr::color2(0xFFFFFFFF);
glhr::set_depthtest(false);
glhr::current_vertices = NULL;
current_display->set_all(0,0);
vector<glhr::textured_vertex> rtver(4);
for(int i=0; i<4; i++) {
int cx[4] = {0, 1, 1, 0};
int cy[4] = {0, 0, 1, 1};
rtver[i].texture[0] = cx[i] * rb.x * 1. / rb.tx;
rtver[i].texture[1] = 1 - cy[i] * rb.y * 1. / rb.ty;
rtver[i].coords[0] = vid.xres * cx[i] - current_display->xcenter;
rtver[i].coords[1] = vid.yres * cy[i] - current_display->ycenter;
rtver[i].coords[2] = 0;
rtver[i].coords[3] = 1;
}
glhr::prepare(rtver);
rb.use_as_texture();
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
}
if(dosave) { dosave = false; IMAGESAVE(out, buf); }
SDL_UnlockSurface(out);
if(displayhelp) {
displaystr(SX/2, vid.fsize*2, 0, vid.fsize, "arrows = navigate, ESC = return, h = hide help", forecolor, 8);
displaystr(SX/2, SY - vid.fsize*2, 0, vid.fsize, XLAT("s = save to " IMAGEEXT, buf), forecolor, 8);
glflush();
}
present_screen();
shiftx += velx; shifty += vely;
SDL_Event event;
while(SDL_PollEvent(&event)) switch (event.type) {
#if !CAP_SDL2
case SDL_VIDEORESIZE: {
resize_screen_to(event.resize.w, event.resize.h);
precompute();
break;
}
#endif
#if CAP_SDL2
case SDL_WINDOWEVENT: {
if(event.window.event == SDL_WINDOWEVENT_RESIZED)
resize_screen_to(event.window.data1, event.window.data2);
precompute();
break;
}
#endif
case SDL_QUIT: case SDL_MOUSEBUTTONDOWN:
goto breakloop;
case SDL_KEYDOWN: {
int sym = event.key.keysym.sym;
int uni = 0;
numlock_on = event.key.keysym.mod & KMOD_NUM;
if(DKEY == SDLK_RIGHT) velx++;
if(DKEY == SDLK_LEFT) velx--;
if(DKEY == SDLK_UP) vely++;
if(DKEY == SDLK_DOWN) vely--;
if(sym == SDLK_ESCAPE) goto breakloop;
if(sym == 'h') displayhelp = !displayhelp;
if(sym == 's') dosave = true;
}
}
}
breakloop:
quickmap.clear();
}
}
#endif
EX namespace history {
void handleKeyC(int sym, int uni);
int lastprogress;
EX void progress_screen() {
gamescreen();
mouseovers = "";
}
EX int progress_each = 250;
EX void progress(string str) {
#if CAP_SDL
int tick = SDL_GetTicks();
if(tick > lastprogress + progress_each) {
lastprogress = tick;
msgs.clear();
addMessage(str);
drawscreen();
}
#endif
}
EX bool on;
EX vector<shmup::monster*> v;
int llv;
EX double phase;
EX vector<pair<cell*, eMonster> > killhistory;
EX vector<pair<cell*, eItem> > findhistory;
EX vector<cell*> movehistory;
EX bool includeHistory;
EX ld lvspeed = 1;
EX int bandhalf = 200;
EX int bandsegment = 16000;
EX int saved_ends;
EX cell* first_center_at;
EX transmatrix first_center_view;
EX void save_end() {
if(!allowIncreasedSight()) {
addMessage("Enable cheat mode or GAME OVER to use this");
return;
}
if(cheater) cheater++;
switch(saved_ends) {
case 0:
first_center_at = centerover;
first_center_view = View;
saved_ends = 1;
return;
case 1: {
shmup::monster *m = new shmup::monster;
m->at = inverse(first_center_view);
m->base = first_center_at;
v.push_back(m);
create(first_center_at, centerover, inverse(unshift(ggmatrix(centerover))));
if(on) saved_ends = 2;
return;
}
case 2:
on = false;
saved_ends = 0;
return;
}
}
EX bool autoband = false;
EX bool autobandhistory = false;
EX bool dospiral = true;
EX ld extra_line_steps = 0;
EX vector<cell*> path_for_lineanimation;
EX void clear() {
on = false;
int N = isize(v);
for(int i=0; i<N; i++) delete v[i];
v.resize(0);
}
EX void smoothen_line() {
int Q = isize(v)-1;
// virtualRebase(v[0], false);
// virtualRebase(v[Q], false);
for(int i=0; i<1000; i++) {
progress(XLAT("Preparing the line (%1/1000)...", its(i+1)));
for(int j=1; j<Q; j++) if((j^i)&1) {
// virtualRebase(v[j], false);
hyperpoint prev = calc_relative_matrix(v[j-1]->base, v[j]->base, C0) *
v[j-1]->at * C0;
hyperpoint next = calc_relative_matrix(v[j+1]->base, v[j]->base, C0) *
v[j+1]->at * C0;
hyperpoint hmid = mid(prev, next);
transmatrix at = rgpushxto0(hmid);
v[j]->at = at * rspintox(inverse(at) * next);
fixmatrix(v[j]->at);
}
}
hyperpoint next0 = calc_relative_matrix(v[1]->base, v[0]->base, C0) * v[1]->at * C0;
v[0]->at = v[0]->at * rspintox(inverse(v[0]->at) * next0);
}
EX void create(cell *start, cell *target, transmatrix last) {
if(target == start && !(quotient && isize(path_for_lineanimation) > 1)) {
addMessage("Must go a distance from the starting point");
return;
}
on = true;
if(!quotient && !arb::in()) try {
auto p = build_shortest_path(start, target);
path_for_lineanimation = p;
}
catch(const hr_shortest_path_exception&) {
addMessage("Could not build a path");
return;
}
for(cell *c: path_for_lineanimation) {
shmup::monster *m = new shmup::monster;
m->at = Id;
m->base = c;
v.push_back(m);
}
v.back()->at = last;
smoothen_line();
llv = ticks;
phase = 0;
}
EX void create_playerpath() {
create(currentmap->gamestart(), cwt.at, Id);
}
EX void create_recenter_to_view(bool precise) {
cell *c = centerover ? centerover : cwt.at;
create(path_for_lineanimation[0], c, precise ? inverse(unshift(ggmatrix(c))) : Id);
}
EX void movetophase() {
int ph = int(phase);
int siz = isize(v);
if(ph<0) ph = 0;
if(ph >= siz-1) ph = siz-2;
cell *old = centerover;
centerover = v[ph]->base;
ld angle = 0;
if(WDIM == 3) {
hyperpoint h = inverse(models::rotmatrix()) * View * hpxy3(1,2,3);
angle = atan2(h[1], h[2]);
}
View = inverse(v[ph]->at);
if(arb::in() && v[ph]->base->master->emeraldval) View = Mirror * View;
hyperpoint now = v[ph]->at * C0;
hyperpoint next = calc_relative_matrix(v[ph+1]->base, v[ph]->base, C0) *
v[ph+1]->at * C0;
View = xpush(-(phase-ph) * hdist(now, next)) * View;
if(WDIM == 2 || mproduct) {
View = models::rotmatrix() * View;
}
else {
if(celldistance(v[ph]->base, old) <= 2) {
hyperpoint h1 = View * currentmap->relative_matrix(old, centerover, C0) * hpxy3(1,2,3);
ld angle1 = atan2(h1[1], h1[2]);
View = cspin(2, 1, angle1 - angle) * View;
}
View = models::rotmatrix() * View;
}
playermoved = false;
centerover = v[ph]->base;
compute_graphical_distance();
}
EX void apply() {
int t = ticks;
phase += (t-llv) * lvspeed / 400.;
llv = t;
int siz = isize(v);
while(phase > siz-1 + extra_line_steps) phase -= (siz + 2 * extra_line_steps-1);
while(phase < - extra_line_steps) phase += (siz + 2 * extra_line_steps-1);
movetophase();
}
ld measureLength() {
ld r = bandhalf * pconf.scale;
ld tpixels = 0;
int siz = isize(v);
for(int j=0; j<siz-1; j++) {
hyperpoint next =
inverse(v[j]->at) *
calc_relative_matrix(v[j+1]->base, v[j]->base, C0) *
v[j+1]->at * C0;
hyperpoint nextscr;
applymodel(shiftless(next), nextscr);
tpixels += nextscr[0] * r;
if(j == 0 || j == siz-2)
tpixels += nextscr[0] * r * extra_line_steps;
}
return tpixels;
}
void restore();
void restoreBack();
#if CAP_SHOT && CAP_SDL
string band_format_now = "bandmodel-$DATE-$ID" IMAGEEXT;
string band_format_auto = "bandmodel-$DATE-$ID" IMAGEEXT;
#endif
#if CAP_SDL
EX void createImage(const string& name_format, bool dospiral) {
int segid = 1;
if(includeHistory) restore();
int bandfull = 2*bandhalf;
ld len = measureLength();
time_t timer;
timer = time(NULL);
char timebuf[128];
strftime(timebuf, 128, "%y%m%d-%H%M%S", localtime(&timer));
vector<SDL_Surface*> bands;
resetbuffer rbuf;
if(1) {
// block for RAII
dynamicval<videopar> dv(vid, vid);
dynamicval<trans23> dr(models::rotation, Id);
dynamicval<bool> di(inHighQual, true);
renderbuffer glbuf(bandfull, bandfull, vid.usingGL);
glbuf.make_surface(); if(!glbuf.srf) {
addMessage(XLAT("Could not create an image of that size."));
return;
}
vid.xres = vid.yres = bandfull;
glbuf.enable(); current_display->radius = bandhalf;
calcparam();
ld xpos = 0;
int seglen = min(int(len), bandsegment);
SDL_Surface *band = SDL_CreateRGBSurface(SDL_SWSURFACE, seglen, bandfull,32,0,0,0,0);
auto save_band_segment = [&] {
string fname = name_format;
replace_str(fname, "$DATE", timebuf);
replace_str(fname, "$ID", hr::format("%03d", segid++));
IMAGESAVE(band, fname.c_str());
if(dospiral)
bands.push_back(band);
else
SDL_FreeSurface(band);
};
if(!band) {
addMessage(XLAT("Could not create an image of that size."));
return;
}
else {
int siz = isize(v);
int bonus = ceil(extra_line_steps);
cell *last_base = NULL;
hyperpoint last_relative;
for(int j=-bonus; j<siz+bonus; j++) {
/*
SDL_Surface *buffer = s;
s = sav;
pushScreen(progress_screen);
progress(s0 + hr::format("#%03d (%d/%d)", segid, j+bonus, siz+bonus+bonus-1)); */
// calcparam(); current_display->radius = bandhalf;
phase = j; movetophase();
glbuf.clear(backcolor);
drawfullmap();
if(last_base) {
shiftpoint last = ggmatrix(last_base) * last_relative;
hyperpoint hscr;
applymodel(last, hscr);
ld bwidth = -current_display->radius * hscr[0];
println(hlog, "bwidth = ", bwidth, "/", len, " : ", xpos, "..", xpos+bwidth);
drawsegment:
SDL_Surface *gr = glbuf.render();
for(int cy=0; cy<bandfull; cy++) for(int cx=0; cx<=bwidth+3; cx++)
qpixel(band, int(xpos+cx), cy) = qpixel(gr, int(bandhalf+cx-bwidth), cy);
if(j == 1-bonus)
xpos = bwidth * (extra_line_steps - bonus);
if(xpos+bwidth > bandsegment) {
save_band_segment();
len -= bandsegment; xpos -= bandsegment;
seglen = min(int(len), bandsegment);
band = SDL_CreateRGBSurface(SDL_SWSURFACE, seglen, bandfull,32,0,0,0,0);
if(!band) {
addMessage(XLAT("Could not create an image of that size."));
return;
}
goto drawsegment;
}
xpos += bwidth;
}
last_base = centerover;
last_relative = tC0(v[j]->at);
}
}
save_band_segment();
}
rbuf.reset();
if(includeHistory) restoreBack();
if(dospiral) {
spiral::loop(bands);
for(int i=0; i<isize(bands); i++) SDL_FreeSurface(bands[i]);
}
}
EX void open_filedialog_to_create_image(bool ds) {
#if CAP_SHOT && CAP_SDL
dialog::openFileDialog(band_format_now, XLAT("rendered band ($ID=segment, $DATE=date)"), ".png", [ds] () {
createImage(band_format_now, ds);
return true;
});
#endif
}
#endif
EX bool band_renderable_now() {
return on && (pmodel == mdBand || pmodel == mdBandEquidistant || pmodel == mdBandEquiarea) && !euclid && !sphere;
}
EX void history_menu() {
cmode = sm::SIDE | sm::MAYDARK;
gamescreen();
dialog::init(XLAT("history mode"));
dialog::addBoolItem(XLAT("include history"), (includeHistory), 'i');
// bool notconformal0 = (pmodel >= 5 && pmodel <= 6) && !euclid;
// bool notconformal = notconformal0 || abs(pconf.alpha-1) > 1e-3;
dialog::addSelItem(XLAT("projection"), current_proj_name(), 'm');
dialog::addBoolItem(XLAT("animate from start to current player position"), (on), 'e');
dialog::addBoolItem(XLAT("animate from last recenter to current view"), (on), 'E');
dialog::addBoolItem(XLAT("animate from last recenter to precise current view"), (on), 'E'-64);
if(saved_ends == 0)
dialog::addItem(XLAT("save the animation starting point"), '1');
else if(saved_ends == 1)
dialog::addItem(XLAT("animate from the starting point"), '1');
else
dialog::addItem(XLAT("reset animation"), '1');
dialog::add_action(save_end);
if(on) dialog::addSelItem(XLAT("animation speed"), fts(lvspeed), 'a');
else dialog::addBreak(100);
dialog::addSelItem(XLAT("extend the ends"), fts(extra_line_steps), 'p');
#if CAP_SDL
dialog::addBoolItem(XLAT("render bands automatically"), (autoband), 'o');
if(autoband)
dialog::addBoolItem(XLAT("include history when auto-rendering"), (autobandhistory), 'j');
if(band_renderable_now() || autoband) {
dialog::addSelItem(XLAT("band width"), "2*"+its(bandhalf), 'd');
dialog::addSelItem(XLAT("length of a segment"), its(bandsegment), 's');
dialog::addBoolItem(XLAT("spiral on rendering"), (dospiral), 'g');
if(band_renderable_now())
dialog::addItem(XLAT("render now (length: %1)", fts(measureLength())), 'f');
}
else if(!on) ;
else if(!hyperbolic)
dialog::addInfo(XLAT("more options in hyperbolic geometry"));
else if(!among(pmodel, mdBand, mdBandEquiarea, mdBandEquidistant))
dialog::addInfo(XLAT("more options in band projections"));
#endif
dialog::addBack();
dialog::display();
mouseovers = XLAT("see http://www.roguetemple.com/z/hyper/models.php");
keyhandler = handleKeyC;
}
void handleKeyC(int sym, int uni) {
dialog::handleNavigation(sym, uni);
if(uni == 'e' || uni == 'E' || uni == 'E'-64) {
if(on) clear();
else {
if(!allowIncreasedSight()) {
addMessage("Enable cheat mode or GAME OVER to use this");
return;
}
if(cheater) cheater++;
if(uni == 'E') create_recenter_to_view(false);
else if(uni == 'E'-64) create_recenter_to_view(true);
else create_playerpath();
}
}
else if(uni == 'o') {
autoband = !autoband;
#if CAP_SHOT && CAP_SDL
if(autoband)
dialog::openFileDialog(band_format_auto, XLAT("filename format to use ($ID=segment, $DATE=date)"), ".png", [] () { return true; });
#endif
}
else if(uni == 'm')
pushScreen(models::model_menu);
else if(uni == 'a')
dialog::editNumber(lvspeed, -5, 5, .1, 1, XLAT("animation speed"), "");
else if(uni == 'd') {
dialog::editNumber(bandhalf, 5, 1000, 5, 200, XLAT("band width"), "");
dialog::bound_low(5);
}
else if(uni == 's') {
dialog::editNumber(bandsegment, 500, 32000, 500, 16000, XLAT("band segment"), "");
dialog::bound_low(500);
}
else if(uni == 'p')
dialog::editNumber(extra_line_steps, 0, 5, 1, 1, XLAT("extend the ends"),
"0 = start at the game start, endat the end position; "
"larger numbers give extra space at the ends."
);
else if(uni == 'g') { dospiral = !dospiral; }
else if(uni == 'i') {
if(!allowIncreasedSight()) {
addMessage("Enable cheat mode or GAME OVER to use this");
return;
}
if(cheater) cheater++;
includeHistory = !includeHistory;
}
#if CAP_SDL
else if(uni == 'f' && band_renderable_now())
open_filedialog_to_create_image(dospiral);
else if(uni == 'j')
autobandhistory = !autobandhistory;
#endif
else if(doexiton(sym, uni)) popScreen();
}
EX set<cell*> inmovehistory, inkillhistory, infindhistory;
EX void restore() {
inmovehistory.clear();
inkillhistory.clear();
infindhistory.clear();
for(int i=0; i<isize(movehistory); i++)
inmovehistory.insert(movehistory[i]);
int sk = isize(killhistory);
for(int i=0; i<sk; i++) {
eMonster m = killhistory[i].second;
killhistory[i].second = killhistory[i].first->monst;
killhistory[i].first->monst = m;
inkillhistory.insert(killhistory[i].first);
}
int si = isize(findhistory);
for(int i=0; i<si; i++) {
eItem m = findhistory[i].second;
findhistory[i].second = findhistory[i].first->item;
findhistory[i].first->item = m;
infindhistory.insert(findhistory[i].first);
}
}
EX void restoreBack() {
int sk = isize(killhistory);
for(int i=sk-1; i>=0; i--) {
eMonster m = killhistory[i].second;
killhistory[i].second = killhistory[i].first->monst;
killhistory[i].first->monst = m;
}
int si = isize(findhistory);
for(int i=si-1; i>=0; i--) {
eItem m = findhistory[i].second;
findhistory[i].second = findhistory[i].first->item;
findhistory[i].first->item = m;
}
}
EX void renderAutoband() {
#if CAP_SDL && CAP_SHOT
if(!cwt.at || celldist(cwt.at) <= 7) return;
if(!autoband) return;
eModel spm = pmodel;
bool ih = includeHistory;
includeHistory = autobandhistory;
pmodel = mdBand;
create_playerpath();
createImage(band_format_auto, dospiral);
clear();
pmodel = spm;
includeHistory = ih;
#endif
}
auto hookArg = arg::add3("-playerpath", history::create_playerpath);
auto hooks = addHook(hooks_clearmemory, 0, [] () {
history::renderAutoband();
history::on = false;
history::killhistory.clear();
history::findhistory.clear();
history::movehistory.clear();
history::path_for_lineanimation.clear();
history::saved_ends = 0;
history::includeHistory = false;
}) + addHook(hooks_configfile, 0, [] {
param_b(autobandhistory, "include history"); // check!
param_f(lvspeed, parameter_names("lvspeed", "lineview speed"));
param_f(extra_line_steps, "lineview extension");
param_i(bandhalf, "band width");
param_i(bandsegment, "band segment");
param_b(autoband, "automatic band");
param_b(autobandhistory, "automatic band history");
param_b(dospiral, "do spiral");
#if CAP_SHOT && CAP_SDL
param_str(band_format_auto, "band_format_auto");
param_str(band_format_now, "band_format_now");
#endif
});
}
}

BIN
honeycombs/336h-c0.dat Normal file

Binary file not shown.

BIN
honeycombs/336h-c7.dat Normal file

Binary file not shown.

BIN
honeycombs/336h.dat Normal file

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More