Added buffer size checking to mitigate packet corruption crashes

pull/28/head v1.2-pre
milesthenerd 5 years ago
parent 7cf40c5a80
commit 74eaa1b7f3

@ -5537,6 +5537,7 @@
<script>scripts\send_seed.gml</script> <script>scripts\send_seed.gml</script>
<script>scripts\popup_text_ext.gml</script> <script>scripts\popup_text_ext.gml</script>
<script>scripts\draw_character_ext.gml</script> <script>scripts\draw_character_ext.gml</script>
<script>scripts\reset_dmap.gml</script>
</scripts> </scripts>
<scripts name="Misc"> <scripts name="Misc">
<script>scripts\pal_swap_get_color_count.gml</script> <script>scripts\pal_swap_get_color_count.gml</script>

@ -73,7 +73,7 @@ sid = 0;
if (statetime == 1150) intensity = 1; if (statetime == 1150) intensity = 1;
if (statetime == 1190) intensity = 0; if (statetime == 1190) intensity = 0;
if (statetime == 1200) event_user(0); if (statetime == 1200) event_user(0);
if (statetime == 1000 &amp;&amp; global.lavastate &gt;= 10) sfx_play(sndQueenDistant); if (statetime == 1000 &amp;&amp; global.lavastate &gt;= 10 &amp;&amp; global.event[303] == 0) sfx_play(sndQueenDistant);
if (global.quake) { if (global.quake) {
if (global.classicmode == 0) { if (global.classicmode == 0) {
view_xport[0] = round(random(intensity)); view_xport[0] = round(random(intensity));

@ -66,7 +66,7 @@ sid = 0;
if (statetime == 130) intensity = 5; if (statetime == 130) intensity = 5;
if (statetime == 160) intensity = 7; if (statetime == 160) intensity = 7;
if (statetime == 190) intensity = 9; if (statetime == 190) intensity = 9;
if (statetime == 340) sfx_play(sndQueenIntro); //240 if (statetime == 340 &amp;&amp; global.event[303] == 0) sfx_play(sndQueenIntro); //240
if (statetime == 250) { if (statetime == 250) {
intensity = 11; intensity = 11;
audio_sound_gain(sid, 0, 1500); audio_sound_gain(sid, 0, 1500);

@ -222,6 +222,11 @@ trail = 0;
buffer_seek(buffer, buffer_seek_start, 0); buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 254); buffer_write(buffer, buffer_u8, 254);
buffer_write(buffer, buffer_u8, global.clientID); 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)); 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, room);
buffer_write(buffer, buffer_s16, posX); buffer_write(buffer, buffer_s16, posX);
buffer_write(buffer, buffer_s16, posY); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
if(ds_list_size(posData)){ if(ds_list_size(posData)){
@ -349,6 +362,29 @@ alarm[11] = 20;
buffer_write(buffer, buffer_s16, oCharacter.image_blend); buffer_write(buffer, buffer_s16, oCharacter.image_blend);
buffer_write(buffer, buffer_s8, oCharacter.fxtimer); buffer_write(buffer, buffer_s8, oCharacter.fxtimer);
buffer_write(buffer, buffer_s16, global.roomPrev); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
if(global.roomPrev != room){ if(global.roomPrev != room){
global.roomPrev = room; global.roomPrev = room;
@ -390,6 +426,12 @@ alarm[10] = 3;
buffer_write(buffer, buffer_u8, 12); buffer_write(buffer, buffer_u8, 12);
buffer_write(buffer, buffer_u8, global.maxsmissiles); buffer_write(buffer, buffer_u8, global.maxsmissiles);
buffer_write(buffer, buffer_u8, global.clientID); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
maxsmissilesChanged = true; maxsmissilesChanged = true;
} }
@ -435,6 +477,12 @@ if(maxsmissilesChanged){
buffer_write(buffer, buffer_u8, 11); buffer_write(buffer, buffer_u8, 11);
buffer_write(buffer, buffer_u16, global.maxmissiles); buffer_write(buffer, buffer_u16, global.maxmissiles);
buffer_write(buffer, buffer_u8, global.clientID); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
maxmissilesChanged = true; maxmissilesChanged = true;
} }
@ -480,6 +528,12 @@ if(maxmissilesChanged){
buffer_write(buffer, buffer_u8, 10); buffer_write(buffer, buffer_u8, 10);
buffer_write(buffer, buffer_u8, global.itemstaken); buffer_write(buffer, buffer_u8, global.itemstaken);
buffer_write(buffer, buffer_u8, global.clientID); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
itemstakenChanged = true; itemstakenChanged = true;
} }
@ -544,6 +598,12 @@ if(mapChanged){
buffer_write(buffer, buffer_u8, 9); buffer_write(buffer, buffer_u8, 9);
buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineMap))); buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineMap)));
buffer_write(buffer, buffer_u8, global.clientID); 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)); 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_u8, 8);
buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineEvent))); buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineEvent)));
buffer_write(buffer, buffer_u8, global.clientID); 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)); 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_u8, 7);
buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineMetdead))); buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineMetdead)));
buffer_write(buffer, buffer_u8, global.clientID); 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)); 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_u8, 6);
buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineItem))); buffer_write(buffer, buffer_string, strict_compress(ds_list_write(global.onlineItem)));
buffer_write(buffer, buffer_u8, global.clientID); 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)); 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_u8, 4);
buffer_write(buffer, buffer_s8, global.monstersleft); buffer_write(buffer, buffer_s8, global.monstersleft);
buffer_write(buffer, buffer_u8, global.clientID); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
metroidCountChanged = true; metroidCountChanged = true;
} }
@ -771,6 +855,12 @@ if(global.monstersareaPrev != global.monstersarea){
buffer_write(buffer, buffer_u8, 5); buffer_write(buffer, buffer_u8, 5);
buffer_write(buffer, buffer_s8, global.monstersarea); buffer_write(buffer, buffer_s8, global.monstersarea);
buffer_write(buffer, buffer_u8, global.clientID); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
metroidCountChanged = true; metroidCountChanged = true;
} }
@ -932,6 +1022,13 @@ if(canSend){
buffer_write(buffer, buffer_string, strict_compress(ds_grid_write(global.onlineSend))); buffer_write(buffer, buffer_string, strict_compress(ds_grid_write(global.onlineSend)));
buffer_write(buffer, buffer_u8, global.clientID); buffer_write(buffer, buffer_u8, global.clientID);
buffer_write(buffer, buffer_u32, global.packetID); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
show_debug_message("packetID = " + string(global.packetID)); show_debug_message("packetID = " + string(global.packetID));
global.packetID++; global.packetID++;
@ -973,6 +1070,14 @@ if(instance_exists(oQueen) &amp;&amp; instance_exists(oQueenHead) &amp;&amp; !is
buffer_write(buffer, buffer_u8, global.clientID); buffer_write(buffer, buffer_u8, global.clientID);
buffer_write(buffer, buffer_s8, oQueen.phase); buffer_write(buffer, buffer_s8, oQueen.phase);
buffer_write(buffer, buffer_s8, oQueen.state); 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)); 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_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 1); buffer_write(buffer, buffer_u8, 1);
buffer_write(buffer, buffer_string, name); 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_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_s32, bufferSize); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
instance_create(x, y, oNametag); instance_create(x, y, oNametag);
} else { } else {
@ -1040,6 +1147,10 @@ if(instance_exists(oCharacter)){
} }
} }
if(global.event[103] &gt; 0){
global.event[103] = floor(global.event[103]);
}
if(global.event[303] &gt; 0){ if(global.event[303] &gt; 0){
phase = 0; phase = 0;
} }
@ -1097,10 +1208,6 @@ if(keyboard_check_pressed(vk_f2)){
if(keyboard_check_pressed(vk_f3)){ if(keyboard_check_pressed(vk_f3)){
popup_text_ext(string(oControl.seed), 300); 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)){ if(keyboard_check_pressed(vk_f4)){
@ -1186,6 +1293,12 @@ if(maxpbombsTimer == 0 &amp;&amp; connected){
buffer_write(buffer, buffer_u8, 13); buffer_write(buffer, buffer_u8, 13);
buffer_write(buffer, buffer_u8, global.maxpbombs); buffer_write(buffer, buffer_u8, global.maxpbombs);
buffer_write(buffer, buffer_u8, global.clientID); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
maxpbombsChanged = true; maxpbombsChanged = true;
} }
@ -1212,6 +1325,12 @@ if(maxhealthTimer == 0 &amp;&amp; connected){
buffer_write(buffer, buffer_u8, 14); buffer_write(buffer, buffer_u8, 14);
buffer_write(buffer, buffer_u16, global.maxhealth); buffer_write(buffer, buffer_u16, global.maxhealth);
buffer_write(buffer, buffer_u8, global.clientID); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
maxhealthChanged = true; maxhealthChanged = true;
} }
@ -1238,6 +1357,12 @@ if(etanksTimer == 0 &amp;&amp; connected){
buffer_write(buffer, buffer_u8, 15); buffer_write(buffer, buffer_u8, 15);
buffer_write(buffer, buffer_u8, global.etanks); buffer_write(buffer, buffer_u8, global.etanks);
buffer_write(buffer, buffer_u8, global.clientID); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
etanksChanged = true; etanksChanged = true;
} }
@ -1264,6 +1389,12 @@ if(mtanksTimer == 0 &amp;&amp; connected){
buffer_write(buffer, buffer_u8, 16); buffer_write(buffer, buffer_u8, 16);
buffer_write(buffer, buffer_u8, global.mtanks); buffer_write(buffer, buffer_u8, global.mtanks);
buffer_write(buffer, buffer_u8, global.clientID); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
mtanksChanged = true; mtanksChanged = true;
} }
@ -1290,6 +1421,12 @@ if(stanksTimer == 0 &amp;&amp; connected){
buffer_write(buffer, buffer_u8, 17); buffer_write(buffer, buffer_u8, 17);
buffer_write(buffer, buffer_u8, global.stanks); buffer_write(buffer, buffer_u8, global.stanks);
buffer_write(buffer, buffer_u8, global.clientID); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
stanksChanged = true; stanksChanged = true;
} }
@ -1316,6 +1453,12 @@ if(ptanksTimer == 0 &amp;&amp; connected){
buffer_write(buffer, buffer_u8, 18); buffer_write(buffer, buffer_u8, 18);
buffer_write(buffer, buffer_u8, global.ptanks); buffer_write(buffer, buffer_u8, global.ptanks);
buffer_write(buffer, buffer_u8, global.clientID); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
ptanksChanged = true; ptanksChanged = true;
} }
@ -1353,6 +1496,11 @@ if(pingTimer &lt;= 0){
buffer_seek(buffer, buffer_seek_start, 0); buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 103); buffer_write(buffer, buffer_u8, 103);
buffer_write(buffer, buffer_u32, current_time); 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)); 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){ switch(type_event){
case network_type_data: case network_type_data:
var _buffer = ds_map_find_value(async_load, "buffer"); var _buffer = ds_map_find_value(async_load, "buffer");
var bufferSize = buffer_get_size(_buffer);
buffer_seek(_buffer, buffer_seek_start, 0); 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); msgid = buffer_read(_buffer, buffer_u8);
show_debug_message(string(buffer_get_size(_buffer)));
switch(msgid){ switch(msgid){
case 254: case 254:
var clientID = buffer_read(_buffer, buffer_u8); var clientID = buffer_read(_buffer, buffer_u8);
@ -1672,6 +1825,10 @@ switch(type_event){
var ping = buffer_read(_buffer, buffer_u32); var ping = buffer_read(_buffer, buffer_u32);
global.ping = current_time - ping; global.ping = current_time - ping;
break; break;
case 106:
load_character_vars();
reset_dmap();
break;
case 0: case 0:
global.clientID = buffer_read(_buffer, buffer_u8); global.clientID = buffer_read(_buffer, buffer_u8);
show_debug_message(string(msgid) + " " + string(global.clientID)); 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, 200);
buffer_write(buffer, buffer_u8, global.clientID); buffer_write(buffer, buffer_u8, global.clientID);
buffer_write(buffer, buffer_u8, preferredcolor); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
break; break;
case 1: case 1:
@ -1856,6 +2019,9 @@ switch(type_event){
global.metdeadPrev[i] = metdeadArr[f, 0]; global.metdeadPrev[i] = metdeadArr[f, 0];
if(global.metdead[i] != metdeadArr[f, 0]){ if(global.metdead[i] != metdeadArr[f, 0]){
global.metdead[i] = metdeadArr[f, 0]; global.metdead[i] = metdeadArr[f, 0];
if(metdeadArr[f, 0] == 1 &amp;&amp; global.clientID != clientID){
popup_text("Metroid killed");
}
} }
} }
} }
@ -2303,6 +2469,13 @@ switch(type_event){
for(var i=0; i&lt;array_length_1d(global.item); i++){ for(var i=0; i&lt;array_length_1d(global.item); i++){
buffer_write(itemBuffer, buffer_u8, 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&lt;array_length_1d(global.item); i++){
buffer_write(itemBuffer, buffer_u8, global.item[i]);
}
network_send_packet(socket, itemBuffer, buffer_tell(itemBuffer)); network_send_packet(socket, itemBuffer, buffer_tell(itemBuffer));
buffer_delete(itemBuffer); buffer_delete(itemBuffer);
} }
@ -2312,10 +2485,10 @@ switch(type_event){
for(var i=0; i&lt;array_length_1d(global.event); i++){ for(var i=0; i&lt;array_length_1d(global.event); i++){
if(i &lt; 350){ if(i &lt; 350){
var receivedEvent = buffer_read(_buffer, buffer_u8); var receivedEvent = buffer_read(_buffer, buffer_u8);
if(receivedEvent &gt; global.event[i]){ if(floor(receivedEvent) &gt; floor(global.event[i])){
global.event[i] = receivedEvent; global.event[i] = receivedEvent;
global.eventPrev[i] = global.event[i]; global.eventPrev[i] = global.event[i];
} else if(receivedEvent &lt; global.event[i]){ } else if(floor(receivedEvent) &lt; floor(global.event[i])){
resend = true; resend = true;
} }
} }
@ -2332,6 +2505,13 @@ switch(type_event){
for(var i=0; i&lt;array_length_1d(global.event); i++){ for(var i=0; i&lt;array_length_1d(global.event); i++){
buffer_write(eventBuffer, buffer_u8, 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&lt;array_length_1d(global.event); i++){
buffer_write(eventBuffer, buffer_u8, global.event[i]);
}
network_send_packet(socket, eventBuffer, buffer_tell(eventBuffer)); network_send_packet(socket, eventBuffer, buffer_tell(eventBuffer));
buffer_delete(eventBuffer); buffer_delete(eventBuffer);
} }
@ -2477,6 +2657,13 @@ switch(type_event){
for(var i=0; i&lt;array_length_1d(global.metdead); i++){ for(var i=0; i&lt;array_length_1d(global.metdead); i++){
buffer_write(metdeadBuffer, buffer_u8, 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&lt;array_length_1d(global.metdead); i++){
buffer_write(metdeadBuffer, buffer_u8, global.metdead[i]);
}
network_send_packet(socket, metdeadBuffer, buffer_tell(metdeadBuffer)); network_send_packet(socket, metdeadBuffer, buffer_tell(metdeadBuffer));
buffer_delete(metdeadBuffer); buffer_delete(metdeadBuffer);
} }
@ -2511,6 +2698,15 @@ switch(type_event){
buffer_write(dmapBuffer, buffer_u8, global.dmap[i, j]); 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&lt;array_height_2d(global.dmap); i++){
for(var j=0; j&lt;array_length_2d(global.dmap, i); j++){
buffer_write(dmapBuffer, buffer_u8, global.dmap[i, j]);
}
}
network_send_packet(socket, dmapBuffer, buffer_tell(dmapBuffer)); network_send_packet(socket, dmapBuffer, buffer_tell(dmapBuffer));
buffer_delete(dmapBuffer); buffer_delete(dmapBuffer);
} }
@ -2554,6 +2750,12 @@ switch(type_event){
buffer_write(buffer, buffer_u8, 19); buffer_write(buffer, buffer_u8, 19);
buffer_write(buffer, buffer_s32, global.gametime); buffer_write(buffer, buffer_s32, global.gametime);
buffer_write(buffer, buffer_u8, global.clientID); 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)); 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_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 254); buffer_write(buffer, buffer_u8, 254);
buffer_write(buffer, buffer_u8, global.clientID); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
} }

@ -9,9 +9,6 @@ if (mystr != "0") {
wallD = string_char_at(mystr, 3); wallD = string_char_at(mystr, 3);
wallL = string_char_at(mystr, 4); wallL = string_char_at(mystr, 4);
color = string_char_at(mystr, 5); 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); special = string_char_at(mystr, 6);
corner = string_char_at(mystr, 7); corner = string_char_at(mystr, 7);
draw_mapblock(x, y, wallU, wallR, wallD, wallL, color, special, global.dmap[argument0, argument1], corner); draw_mapblock(x, y, wallU, wallR, wallD, wallL, color, special, global.dmap[argument0, argument1], corner);

@ -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;
}

@ -8,5 +8,11 @@ buffer_seek(seedBuffer, buffer_seek_start, 0);
buffer_write(seedBuffer, buffer_u8, 3); buffer_write(seedBuffer, buffer_u8, 3);
buffer_write(seedBuffer, buffer_f64, oControl.seed); buffer_write(seedBuffer, buffer_f64, oControl.seed);
buffer_write(seedBuffer, buffer_u8, global.clientID); 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)); var result = network_send_packet(oClient.socket, seedBuffer, buffer_tell(seedBuffer));
popup_text("Seed sent"); popup_text("Seed sent");

@ -594,6 +594,15 @@ switch(argument0){
buffer_write(buffer, buffer_u8, global.smissiles); buffer_write(buffer, buffer_u8, global.smissiles);
buffer_write(buffer, buffer_u8, global.pbombs); buffer_write(buffer, buffer_u8, global.pbombs);
buffer_write(buffer, buffer_u8, global.clientID); 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)); var result = network_send_packet(socket, buffer, buffer_tell(buffer));
} }
} else { } else {

Loading…
Cancel
Save