Report ID | 328 | Title | #98485 Freezes on level transition |
Product | Archived MegaZeux Bugs | Status | Fixed (Severity 3 - Medium) |
Version | GIT | Fixed in | 2.84 |
Introduced In Version | GIT | Operating System | Windows XP SP3 (x86) |
Report ID #328: #98485 Freezes on level transition
#1
Terryn
Posted 09 January 2011 - 04:26 AM
<Exophase> HES STEALING MAH AIRSHIP!!!!!!11111111
Replies (1 - 15)
#2
Old-Sckool
Posted 14 January 2011 - 05:58 AM
: "finish" send "all" to "finish"
<phthalocyanine> they make experiences.
<Nadir> demos, more like
<Nadir> a glimpse into what could have been if mzx wasn't such a bore to work with
<Nadir> actually, i'm being unfair
<Nadir> i would have made mzx games if it was capable of running on more than 20 computers worldwide in 1998
<Nadir> >:D
<%Alice> functor
<%nooodl> i hear C++ has a thing called functors and they're completely different from Haskell functors...
<rorirover> the result is the most horrid thing in C++, it's basically black magic and it transforms any code you're writing into some eldritch monstrosity
#3
Lachesis
Posted 14 January 2011 - 06:42 PM
xx̊y (OST) - HELLQUEST (OST) - Zeux I: Labyrinth of Zeux (OST) (DOS OST)
w/ Lancer-X and/or asgromo: Pandora's Gate - Thanatos Insignia - no True(n) - For Elise OST
MegaZeux: Online Help File - Keycode Guide - Joystick Guide - Official GIT Repository
#4
Terryn
Posted 14 January 2011 - 07:40 PM
<Exophase> HES STEALING MAH AIRSHIP!!!!!!11111111
#5
Lachesis
Posted 14 January 2011 - 09:03 PM
xx̊y (OST) - HELLQUEST (OST) - Zeux I: Labyrinth of Zeux (OST) (DOS OST)
w/ Lancer-X and/or asgromo: Pandora's Gate - Thanatos Insignia - no True(n) - For Elise OST
MegaZeux: Online Help File - Keycode Guide - Joystick Guide - Official GIT Repository
#6
Lachesis
Posted 03 August 2011 - 08:22 PM
xx̊y (OST) - HELLQUEST (OST) - Zeux I: Labyrinth of Zeux (OST) (DOS OST)
w/ Lancer-X and/or asgromo: Pandora's Gate - Thanatos Insignia - no True(n) - For Elise OST
MegaZeux: Online Help File - Keycode Guide - Joystick Guide - Official GIT Repository
#7
Lachesis
Posted 03 August 2011 - 11:14 PM
xx̊y (OST) - HELLQUEST (OST) - Zeux I: Labyrinth of Zeux (OST) (DOS OST)
w/ Lancer-X and/or asgromo: Pandora's Gate - Thanatos Insignia - no True(n) - For Elise OST
MegaZeux: Online Help File - Keycode Guide - Joystick Guide - Official GIT Repository
#8
Lachesis
Posted 08 August 2011 - 11:20 PM
src/run_robot.c line 2052
... send_robot(mzx_world, robot_name_buffer, label_buffer, 0); // Compatibility fix for self-inclusive send commands directly preceeded by the target label if (mzx_world->version <= 0x0253 && cur_robot->cur_prog_line + 2 + cur_robot->program_bytecode[cur_robot->cur_prog_line] == old_pos) cur_robot->cur_prog_line = old_pos; // Did the position get changed? (send to self) ...
What would be more likely is putting that in a function and calling it for every send command... this only deals with SEND "robot" "label"
xx̊y (OST) - HELLQUEST (OST) - Zeux I: Labyrinth of Zeux (OST) (DOS OST)
w/ Lancer-X and/or asgromo: Pandora's Gate - Thanatos Insignia - no True(n) - For Elise OST
MegaZeux: Online Help File - Keycode Guide - Joystick Guide - Official GIT Repository
#9
ajs
Posted 15 August 2011 - 05:01 PM
However, I'm not sure adding workaround code to another place is better than just turning off the original compatibility fix (re: label caching) if the world is 2.80 <= version < 2.84.
--ajs.
#10
Lachesis
Posted 15 August 2011 - 05:09 PM
xx̊y (OST) - HELLQUEST (OST) - Zeux I: Labyrinth of Zeux (OST) (DOS OST)
w/ Lancer-X and/or asgromo: Pandora's Gate - Thanatos Insignia - no True(n) - For Elise OST
MegaZeux: Online Help File - Keycode Guide - Joystick Guide - Official GIT Repository
#11
Lachesis
Posted 29 April 2012 - 06:26 PM
xx̊y (OST) - HELLQUEST (OST) - Zeux I: Labyrinth of Zeux (OST) (DOS OST)
w/ Lancer-X and/or asgromo: Pandora's Gate - Thanatos Insignia - no True(n) - For Elise OST
MegaZeux: Online Help File - Keycode Guide - Joystick Guide - Official GIT Repository
#12
Lachesis
Posted 18 May 2012 - 02:15 AM
Here's a dependency tree of the line numbers where every function is called that needs *mzx_world passed through it so this fix can be made in the label-caching code (counting the load robot functions too because I like consistency and those just have a "version" int) unless there is an easier way of getting the world version there for every case. + means that this function currently has access to *mzx_world
cache_robot_labels()
+src/counter.c:2564 +src/counter.c:2601 in int set_counter_special(struct world *mzx_world, etc) src/robot.c:277 src/robot.c:349 in void load_robot(struct robot *cur_robot, FILE *fp, int savegame, int version) src/robot.c:3145 in void prepare_robot_labels(struct robot *cur_robot)
- void load_robot(struct robot *cur_robot, FILE *fp, int savegame, int version)
src/robot.c:173 in struct robot *load_robot_allocate(FILE *fp, int savegame, int version) +src/world.c:1492 in static void load_world(struct world *mzx_world ...)
- struct robot *load_robot_allocate(FILE *fp, int savegame, int version)
src/board.c:291 in __editor_maybe_static void load_board_direct(struct board *cur_board, FILE *fp, int savegame, int version) +src/mzm.c:447 +src/mzm.c:464 in int load_mzm(struct world *mzx_world ...)
- __editor_maybe_static void load_board_direct(struct board *cur_board, FILE *fp, int savegame, int version)
src/board.c:386 in struct board *load_board_allocate(FILE *fp, int savegame, int version)
- struct board *load_board_allocate(FILE *fp, int savegame, int version
+src/world.c:1485 in static void load_world(struct world *mzx_world ...)
- struct board *load_board_allocate(FILE *fp, int savegame, int version
- __editor_maybe_static void load_board_direct(struct board *cur_board, FILE *fp, int savegame, int version)
- struct robot *load_robot_allocate(FILE *fp, int savegame, int version)
- void prepare_robot_labels(struct robot *cur_robot)
+src/counter.c:2465 +src/counter.c:2515 in int set_counter_special(struct world *mzx_world, etc) src/robot.c:251 in void load_robot(struct robot *cur_robot, FILE *fp, int savegame, int version) src/robot.c:447 in void save_robot(struct robot *cur_robot, FILE *fp, int savegame) src/robot.c:1270 in static int send_robot_direct(struct robot *cur_robot, const char *mesg) src/robot.c:2821 in static void duplicate_robot_direct(struct robot *cur_robot, struct_robot *copy_robot, int x, int y) +src/run_robot.c:921 +src/run_robot.c:1285 in void run_robot(struct world *mzx_world, etc)
- void save_robot(struct robot *cur_robot, FILE *fp, int savegame)
src/board.c:552 in int save_board(struct board *cur_board, FILE *fp, int savegame) +src/mzm.c:156 in void save_mzm(struct world *mzx_world ...) +src/world.c:719 in int save_world(struct world *mzx_world ...)
- int save_board(struct board *cur_board, FILE *fp, int savegame)
+src/world.c:707 in int save_world(struct world *mzx_world ...)
- int save_board(struct board *cur_board, FILE *fp, int savegame)
- static int send_robot_direct(struct robot *cur_robot, const char *mesg)
+src/robot.c:1383 +src/robot.c:1391 in void send_robot(struct world *mzx_world ...) +src/robot.c:1405 in int send_robot_id(struct world *mzx_world ...) +src/robot.c:1411 in int send_robot_self(struct world *mzx_world ...) +src/robot.c:1421 +src/robot.c:1426 in void send_robot_all(struct world *mzx_world ...)
- static void duplicate_robot_direct(struct robot *cur_robot, struct_robot *copy_robot, int x, int y)
src/robot.c:2884 in int duplicate_robot(struct board *src_board, struct robot *cur_robot) src/robot.c:2907 in void replace_robot(struct board *src_board, struct robot *src_robot, int dest_id)
- int duplicate_robot(struct board *src_board, struct robot *cur_robot)
+src/run_robot.c:501 in static void copy_xy_to_xy(struct world *mzx_world ...) +src/run_robot.c:559 in static void copy_board_to_board_buffer(struct world *mzx_world ...) +src/run_robot.c:2918 +src/run_robot.c:2955 +src/run_robot.c:4282 +src/run_robot.c:4330 in void run_robot(struct world *mzx_world ...)
- void replace_robot(struct board *src_board, struct robot *src_robot, int dest_id)
+src/run_robot.c:2826 +src/run_robot.c:2838 +src/run_robot.c:2861 +src/run_robot.c:2888 in void run_robot(struct world *mzx_world ...)
- int duplicate_robot(struct board *src_board, struct robot *cur_robot)
- void save_robot(struct robot *cur_robot, FILE *fp, int savegame)
xx̊y (OST) - HELLQUEST (OST) - Zeux I: Labyrinth of Zeux (OST) (DOS OST)
w/ Lancer-X and/or asgromo: Pandora's Gate - Thanatos Insignia - no True(n) - For Elise OST
MegaZeux: Online Help File - Keycode Guide - Joystick Guide - Official GIT Repository
#13
Lachesis
Posted 18 May 2012 - 02:17 AM
That's getting REALLY annoying.
xx̊y (OST) - HELLQUEST (OST) - Zeux I: Labyrinth of Zeux (OST) (DOS OST)
w/ Lancer-X and/or asgromo: Pandora's Gate - Thanatos Insignia - no True(n) - For Elise OST
MegaZeux: Online Help File - Keycode Guide - Joystick Guide - Official GIT Repository
#14
Lachesis
Posted 19 May 2012 - 05:04 AM
Fixed in GIT dd7798ac39. I added a copy of mzx_world->version to struct robot through load_robot() so I could add a compatibility fix to the label caching function. Please verify this fix.
xx̊y (OST) - HELLQUEST (OST) - Zeux I: Labyrinth of Zeux (OST) (DOS OST)
w/ Lancer-X and/or asgromo: Pandora's Gate - Thanatos Insignia - no True(n) - For Elise OST
MegaZeux: Online Help File - Keycode Guide - Joystick Guide - Official GIT Repository
#15
Lachesis
Posted 24 May 2012 - 01:08 AM
xx̊y (OST) - HELLQUEST (OST) - Zeux I: Labyrinth of Zeux (OST) (DOS OST)
w/ Lancer-X and/or asgromo: Pandora's Gate - Thanatos Insignia - no True(n) - For Elise OST
MegaZeux: Online Help File - Keycode Guide - Joystick Guide - Official GIT Repository