From 74eaa1b7f32cdc993836adbc228522336c0377b7 Mon Sep 17 00:00:00 2001 From: milesthenerd Date: Fri, 19 Feb 2021 23:45:05 -0600 Subject: [PATCH] Added buffer size checking to mitigate packet corruption crashes --- AM2R.project.gmx | 1 + objects/oBigQuake.object.gmx | 2 +- objects/oBigQuakeQueen.object.gmx | 2 +- objects/oClient.object.gmx | 223 ++++++++++++++++++++++++++++-- scripts/draw_map_surf.gml | 3 - scripts/reset_dmap.gml | 11 ++ scripts/send_seed.gml | 6 + scripts/update_variables.gml | 9 ++ 8 files changed, 244 insertions(+), 13 deletions(-) create mode 100644 scripts/reset_dmap.gml diff --git a/AM2R.project.gmx b/AM2R.project.gmx index bd886f3..2f0608a 100644 --- a/AM2R.project.gmx +++ b/AM2R.project.gmx @@ -5537,6 +5537,7 @@ + diff --git a/objects/oBigQuake.object.gmx b/objects/oBigQuake.object.gmx index a188374..0deb6ce 100644 --- a/objects/oBigQuake.object.gmx +++ b/objects/oBigQuake.object.gmx @@ -73,7 +73,7 @@ sid = 0; if (statetime == 1150) intensity = 1; if (statetime == 1190) intensity = 0; if (statetime == 1200) event_user(0); - if (statetime == 1000 && global.lavastate >= 10) sfx_play(sndQueenDistant); + if (statetime == 1000 && global.lavastate >= 10 && global.event[303] == 0) sfx_play(sndQueenDistant); if (global.quake) { if (global.classicmode == 0) { view_xport[0] = round(random(intensity)); diff --git a/objects/oBigQuakeQueen.object.gmx b/objects/oBigQuakeQueen.object.gmx index a9a8d20..103af70 100644 --- a/objects/oBigQuakeQueen.object.gmx +++ b/objects/oBigQuakeQueen.object.gmx @@ -66,7 +66,7 @@ sid = 0; if (statetime == 130) intensity = 5; if (statetime == 160) intensity = 7; if (statetime == 190) intensity = 9; - if (statetime == 340) sfx_play(sndQueenIntro); //240 + if (statetime == 340 && global.event[303] == 0) sfx_play(sndQueenIntro); //240 if (statetime == 250) { intensity = 11; audio_sound_gain(sid, 0, 1500); diff --git a/objects/oClient.object.gmx b/objects/oClient.object.gmx index d1f8c57..f38840a 100644 --- a/objects/oClient.object.gmx +++ b/objects/oClient.object.gmx @@ -222,6 +222,11 @@ trail = 0; buffer_seek(buffer, buffer_seek_start, 0); buffer_write(buffer, buffer_u8, 254); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 254); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); } @@ -278,6 +283,14 @@ buffer_write(buffer, buffer_u8, global.clientID); buffer_write(buffer, buffer_s16, room); buffer_write(buffer, buffer_s16, posX); buffer_write(buffer, buffer_s16, posY); +var bufferSize = buffer_tell(buffer); +buffer_seek(buffer, buffer_seek_start, 0); +buffer_write(buffer, buffer_s32, bufferSize); +buffer_write(buffer, buffer_u8, 101); +buffer_write(buffer, buffer_u8, global.clientID); +buffer_write(buffer, buffer_s16, room); +buffer_write(buffer, buffer_s16, posX); +buffer_write(buffer, buffer_s16, posY); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); if(ds_list_size(posData)){ @@ -349,6 +362,29 @@ alarm[11] = 20; buffer_write(buffer, buffer_s16, oCharacter.image_blend); buffer_write(buffer, buffer_s8, oCharacter.fxtimer); buffer_write(buffer, buffer_s16, global.roomPrev); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 100); + buffer_write(buffer, buffer_u8, global.clientID); + buffer_write(buffer, buffer_s16, oCharacter.x); + buffer_write(buffer, buffer_s16, oCharacter.y); + buffer_write(buffer, buffer_s16, oCharacter.sprite_index); + buffer_write(buffer, buffer_s16, oCharacter.image_index); + buffer_write(buffer, buffer_s16, oCharacter.aspr1); + buffer_write(buffer, buffer_s16, oCharacter.asprx); + buffer_write(buffer, buffer_s16, oCharacter.aspry); + buffer_write(buffer, buffer_s16, oCharacter.aspr2); + buffer_write(buffer, buffer_s16, oCharacter.aspr2x); + buffer_write(buffer, buffer_s16, oCharacter.aspr2y); + buffer_write(buffer, buffer_s16, oCharacter.aspr2a); + buffer_write(buffer, buffer_s16, oCharacter.mirror); + buffer_write(buffer, buffer_s16, oCharacter.armmsl); + buffer_write(buffer, buffer_s16, room); + buffer_write(buffer, buffer_string, name); + buffer_write(buffer, buffer_s16, oCharacter.image_blend); + buffer_write(buffer, buffer_s8, oCharacter.fxtimer); + buffer_write(buffer, buffer_s16, global.roomPrev); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); if(global.roomPrev != room){ global.roomPrev = room; @@ -390,6 +426,12 @@ alarm[10] = 3; buffer_write(buffer, buffer_u8, 12); buffer_write(buffer, buffer_u8, global.maxsmissiles); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 12); + buffer_write(buffer, buffer_u8, global.maxsmissiles); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); maxsmissilesChanged = true; } @@ -435,6 +477,12 @@ if(maxsmissilesChanged){ buffer_write(buffer, buffer_u8, 11); buffer_write(buffer, buffer_u16, global.maxmissiles); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 11); + buffer_write(buffer, buffer_u16, global.maxmissiles); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); maxmissilesChanged = true; } @@ -480,6 +528,12 @@ if(maxmissilesChanged){ buffer_write(buffer, buffer_u8, 10); buffer_write(buffer, buffer_u8, global.itemstaken); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 10); + buffer_write(buffer, buffer_u8, global.itemstaken); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); itemstakenChanged = true; } @@ -544,6 +598,12 @@ if(mapChanged){ buffer_write(buffer, buffer_u8, 9); buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineMap))); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 9); + buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineMap))); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); } @@ -602,6 +662,12 @@ if(eventChanged){ buffer_write(buffer, buffer_u8, 8); buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineEvent))); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 8); + buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineEvent))); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); } @@ -657,6 +723,12 @@ if(metdeadChanged){ buffer_write(buffer, buffer_u8, 7); buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineMetdead))); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 7); + buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineMetdead))); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); } @@ -712,6 +784,12 @@ if(itemChanged){ buffer_write(buffer, buffer_u8, 6); buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineItem))); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 6); + buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineItem))); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); } @@ -756,6 +834,12 @@ if(itemChanged){ buffer_write(buffer, buffer_u8, 4); buffer_write(buffer, buffer_s8, global.monstersleft); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 4); + buffer_write(buffer, buffer_s8, global.monstersleft); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); metroidCountChanged = true; } @@ -771,6 +855,12 @@ if(global.monstersareaPrev != global.monstersarea){ buffer_write(buffer, buffer_u8, 5); buffer_write(buffer, buffer_s8, global.monstersarea); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 5); + buffer_write(buffer, buffer_s8, global.monstersarea); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); metroidCountChanged = true; } @@ -932,6 +1022,13 @@ if(canSend){ buffer_write(buffer, buffer_string, strict_compress(ds_grid_write(global.onlineSend))); buffer_write(buffer, buffer_u8, global.clientID); buffer_write(buffer, buffer_u32, global.packetID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 0); + buffer_write(buffer, buffer_string, strict_compress(ds_grid_write(global.onlineSend))); + buffer_write(buffer, buffer_u8, global.clientID); + buffer_write(buffer, buffer_u32, global.packetID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); show_debug_message("packetID = " + string(global.packetID)); global.packetID++; @@ -973,6 +1070,14 @@ if(instance_exists(oQueen) && instance_exists(oQueenHead) && !is buffer_write(buffer, buffer_u8, global.clientID); buffer_write(buffer, buffer_s8, oQueen.phase); buffer_write(buffer, buffer_s8, oQueen.state); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 2); + buffer_write(buffer, buffer_s32, oQueenHead.myhealth); + buffer_write(buffer, buffer_u8, global.clientID); + buffer_write(buffer, buffer_s8, oQueen.phase); + buffer_write(buffer, buffer_s8, oQueen.state); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); } } @@ -1023,9 +1128,11 @@ if(itemCount != global.itemstaken){ buffer_seek(buffer, buffer_seek_start, 0); buffer_write(buffer, buffer_u8, 1); buffer_write(buffer, buffer_string, name); - var bufferSize = buffer_get_size(buffer); + var bufferSize = buffer_tell(buffer); buffer_seek(buffer, buffer_seek_start, 0); buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 1); + buffer_write(buffer, buffer_string, name); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); instance_create(x, y, oNametag); } else { @@ -1040,6 +1147,10 @@ if(instance_exists(oCharacter)){ } } +if(global.event[103] > 0){ + global.event[103] = floor(global.event[103]); +} + if(global.event[303] > 0){ phase = 0; } @@ -1097,10 +1208,6 @@ if(keyboard_check_pressed(vk_f2)){ if(keyboard_check_pressed(vk_f3)){ popup_text_ext(string(oControl.seed), 300); - global.event[303] = 1; - global.targetx = 864; - global.targety = 96; - room_change(rm_a7c01, 1); } if(keyboard_check_pressed(vk_f4)){ @@ -1186,6 +1293,12 @@ if(maxpbombsTimer == 0 && connected){ buffer_write(buffer, buffer_u8, 13); buffer_write(buffer, buffer_u8, global.maxpbombs); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 13); + buffer_write(buffer, buffer_u8, global.maxpbombs); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); maxpbombsChanged = true; } @@ -1212,6 +1325,12 @@ if(maxhealthTimer == 0 && connected){ buffer_write(buffer, buffer_u8, 14); buffer_write(buffer, buffer_u16, global.maxhealth); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 14); + buffer_write(buffer, buffer_u16, global.maxhealth); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); maxhealthChanged = true; } @@ -1238,6 +1357,12 @@ if(etanksTimer == 0 && connected){ buffer_write(buffer, buffer_u8, 15); buffer_write(buffer, buffer_u8, global.etanks); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 15); + buffer_write(buffer, buffer_u8, global.etanks); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); etanksChanged = true; } @@ -1264,6 +1389,12 @@ if(mtanksTimer == 0 && connected){ buffer_write(buffer, buffer_u8, 16); buffer_write(buffer, buffer_u8, global.mtanks); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 16); + buffer_write(buffer, buffer_u8, global.mtanks); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); mtanksChanged = true; } @@ -1290,6 +1421,12 @@ if(stanksTimer == 0 && connected){ buffer_write(buffer, buffer_u8, 17); buffer_write(buffer, buffer_u8, global.stanks); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 17); + buffer_write(buffer, buffer_u8, global.stanks); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); stanksChanged = true; } @@ -1316,6 +1453,12 @@ if(ptanksTimer == 0 && connected){ buffer_write(buffer, buffer_u8, 18); buffer_write(buffer, buffer_u8, global.ptanks); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 18); + buffer_write(buffer, buffer_u8, global.ptanks); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); ptanksChanged = true; } @@ -1353,6 +1496,11 @@ if(pingTimer <= 0){ buffer_seek(buffer, buffer_seek_start, 0); buffer_write(buffer, buffer_u8, 103); buffer_write(buffer, buffer_u32, current_time); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 103); + buffer_write(buffer, buffer_u32, current_time); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); } @@ -1426,9 +1574,14 @@ var type_event = ds_map_find_value(async_load, "type"); switch(type_event){ case network_type_data: var _buffer = ds_map_find_value(async_load, "buffer"); + var bufferSize = buffer_get_size(_buffer); buffer_seek(_buffer, buffer_seek_start, 0); + var bufferSizePacket = buffer_read(_buffer, buffer_s32); + show_debug_message(string(bufferSize) + " " + string(bufferSizePacket)); + if(!is_real(bufferSizePacket)) exit; + if(bufferSizePacket + 4 != bufferSize) exit; + show_debug_message("done"); msgid = buffer_read(_buffer, buffer_u8); - show_debug_message(string(buffer_get_size(_buffer))); switch(msgid){ case 254: var clientID = buffer_read(_buffer, buffer_u8); @@ -1672,6 +1825,10 @@ switch(type_event){ var ping = buffer_read(_buffer, buffer_u32); global.ping = current_time - ping; break; + case 106: + load_character_vars(); + reset_dmap(); + break; case 0: global.clientID = buffer_read(_buffer, buffer_u8); show_debug_message(string(msgid) + " " + string(global.clientID)); @@ -1696,6 +1853,12 @@ switch(type_event){ buffer_write(buffer, buffer_u8, 200); buffer_write(buffer, buffer_u8, global.clientID); buffer_write(buffer, buffer_u8, preferredcolor); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 200); + buffer_write(buffer, buffer_u8, global.clientID); + buffer_write(buffer, buffer_u8, preferredcolor); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); break; case 1: @@ -1856,6 +2019,9 @@ switch(type_event){ global.metdeadPrev[i] = metdeadArr[f, 0]; if(global.metdead[i] != metdeadArr[f, 0]){ global.metdead[i] = metdeadArr[f, 0]; + if(metdeadArr[f, 0] == 1 && global.clientID != clientID){ + popup_text("Metroid killed"); + } } } } @@ -2303,6 +2469,13 @@ switch(type_event){ for(var i=0; i<array_length_1d(global.item); i++){ buffer_write(itemBuffer, buffer_u8, global.item[i]); } + var bufferSize = buffer_tell(itemBuffer); + buffer_seek(itemBuffer, buffer_seek_start, 0); + buffer_write(itemBuffer, buffer_s32, bufferSize); + buffer_write(itemBuffer, buffer_u8, 50); + for(var i=0; i<array_length_1d(global.item); i++){ + buffer_write(itemBuffer, buffer_u8, global.item[i]); + } network_send_packet(socket, itemBuffer, buffer_tell(itemBuffer)); buffer_delete(itemBuffer); } @@ -2312,10 +2485,10 @@ switch(type_event){ for(var i=0; i<array_length_1d(global.event); i++){ if(i < 350){ var receivedEvent = buffer_read(_buffer, buffer_u8); - if(receivedEvent > global.event[i]){ + if(floor(receivedEvent) > floor(global.event[i])){ global.event[i] = receivedEvent; global.eventPrev[i] = global.event[i]; - } else if(receivedEvent < global.event[i]){ + } else if(floor(receivedEvent) < floor(global.event[i])){ resend = true; } } @@ -2332,6 +2505,13 @@ switch(type_event){ for(var i=0; i<array_length_1d(global.event); i++){ buffer_write(eventBuffer, buffer_u8, global.event[i]); } + var bufferSize = buffer_tell(eventBuffer); + buffer_seek(eventBuffer, buffer_seek_start, 0); + buffer_write(eventBuffer, buffer_s32, bufferSize); + buffer_write(eventBuffer, buffer_u8, 51); + for(var i=0; i<array_length_1d(global.event); i++){ + buffer_write(eventBuffer, buffer_u8, global.event[i]); + } network_send_packet(socket, eventBuffer, buffer_tell(eventBuffer)); buffer_delete(eventBuffer); } @@ -2477,6 +2657,13 @@ switch(type_event){ for(var i=0; i<array_length_1d(global.metdead); i++){ buffer_write(metdeadBuffer, buffer_u8, global.metdead[i]); } + var bufferSize = buffer_tell(metdeadBuffer); + buffer_seek(metdeadBuffer, buffer_seek_start, 0); + buffer_write(metdeadBuffer, buffer_s32, bufferSize); + buffer_write(metdeadBuffer, buffer_u8, 52); + for(var i=0; i<array_length_1d(global.metdead); i++){ + buffer_write(metdeadBuffer, buffer_u8, global.metdead[i]); + } network_send_packet(socket, metdeadBuffer, buffer_tell(metdeadBuffer)); buffer_delete(metdeadBuffer); } @@ -2511,6 +2698,15 @@ switch(type_event){ buffer_write(dmapBuffer, buffer_u8, global.dmap[i, j]); } } + var bufferSize = buffer_tell(dmapBuffer); + buffer_seek(dmapBuffer, buffer_seek_start, 0); + buffer_write(dmapBuffer, buffer_s32, bufferSize); + buffer_write(dmapBuffer, buffer_u8, 53); + for(var i=0; i<array_height_2d(global.dmap); i++){ + for(var j=0; j<array_length_2d(global.dmap, i); j++){ + buffer_write(dmapBuffer, buffer_u8, global.dmap[i, j]); + } + } network_send_packet(socket, dmapBuffer, buffer_tell(dmapBuffer)); buffer_delete(dmapBuffer); } @@ -2554,6 +2750,12 @@ switch(type_event){ buffer_write(buffer, buffer_u8, 19); buffer_write(buffer, buffer_s32, global.gametime); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 19); + buffer_write(buffer, buffer_s32, global.gametime); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); } @@ -2592,6 +2794,11 @@ if(room == titleroom){ buffer_seek(buffer, buffer_seek_start, 0); buffer_write(buffer, buffer_u8, 254); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 254); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); } diff --git a/scripts/draw_map_surf.gml b/scripts/draw_map_surf.gml index bc9f980..d087949 100644 --- a/scripts/draw_map_surf.gml +++ b/scripts/draw_map_surf.gml @@ -9,9 +9,6 @@ if (mystr != "0") { wallD = string_char_at(mystr, 3); wallL = string_char_at(mystr, 4); color = string_char_at(mystr, 5); - //This line seems to change the underlying map color when the 8-bit shader is active - //It causes the 8-bit shader to miscolor map blocks; commented out - //if (oControl.shader_on == true) color = "2"; special = string_char_at(mystr, 6); corner = string_char_at(mystr, 7); draw_mapblock(x, y, wallU, wallR, wallD, wallL, color, special, global.dmap[argument0, argument1], corner); diff --git a/scripts/reset_dmap.gml b/scripts/reset_dmap.gml new file mode 100644 index 0000000..287af0b --- /dev/null +++ b/scripts/reset_dmap.gml @@ -0,0 +1,11 @@ +/// reset_dmap +i = 0; +repeat (80) { + j = 0; + repeat (80) { + global.dmap[i, j] = 0; + global.dmapPrev[i, j] = 0; + j += 1; + } + i += 1; +} diff --git a/scripts/send_seed.gml b/scripts/send_seed.gml index 8f5f33f..d6dc902 100644 --- a/scripts/send_seed.gml +++ b/scripts/send_seed.gml @@ -8,5 +8,11 @@ buffer_seek(seedBuffer, buffer_seek_start, 0); buffer_write(seedBuffer, buffer_u8, 3); buffer_write(seedBuffer, buffer_f64, oControl.seed); buffer_write(seedBuffer, buffer_u8, global.clientID); +var bufferSize = buffer_tell(buffer); +buffer_seek(buffer, buffer_seek_start, 0); +buffer_write(buffer, buffer_s32, bufferSize); +buffer_write(seedBuffer, buffer_u8, 3); +buffer_write(seedBuffer, buffer_f64, oControl.seed); +buffer_write(seedBuffer, buffer_u8, global.clientID); var result = network_send_packet(oClient.socket, seedBuffer, buffer_tell(seedBuffer)); popup_text("Seed sent"); diff --git a/scripts/update_variables.gml b/scripts/update_variables.gml index 5ebdf62..59a82bf 100644 --- a/scripts/update_variables.gml +++ b/scripts/update_variables.gml @@ -594,6 +594,15 @@ switch(argument0){ buffer_write(buffer, buffer_u8, global.smissiles); buffer_write(buffer, buffer_u8, global.pbombs); buffer_write(buffer, buffer_u8, global.clientID); + var bufferSize = buffer_tell(buffer); + buffer_seek(buffer, buffer_seek_start, 0); + buffer_write(buffer, buffer_s32, bufferSize); + buffer_write(buffer, buffer_u8, 102); + buffer_write(buffer, buffer_s16, global.playerhealth); + buffer_write(buffer, buffer_s16, global.missiles); + buffer_write(buffer, buffer_u8, global.smissiles); + buffer_write(buffer, buffer_u8, global.pbombs); + buffer_write(buffer, buffer_u8, global.clientID); var result = network_send_packet(socket, buffer, buffer_tell(buffer)); } } else {