You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AM2R-Multitroid/objects/oClient.object.gmx

5377 lines
238 KiB

<!--This Document is generated by GameMaker, if you edit it by hand then you do so at your own risk!-->
<object>
<spriteName>&lt;undefined&gt;</spriteName>
<solid>0</solid>
<visible>-1</visible>
<depth>-11</depth>
<persistent>-1</persistent>
<parentName>&lt;undefined&gt;</parentName>
<maskName>&lt;undefined&gt;</maskName>
<events>
<event eventtype="0" enumb="0">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>network_set_config(network_config_connect_timeout, 5000);
strict_init(working_directory + "\multitroid\dictionary.json");
queenHealthResetQueued = false;
canSend = false;
metroidCountChanged = false;
itemChanged = false;
metdeadChanged = false;
eventChanged = false;
mapChanged = false;
itemstakenChanged = false;
maxmissilesChanged = false;
maxsmissilesChanged = false;
maxpbombsChanged = false;
maxhealthChanged = false;
etanksChanged = false;
mtanksChanged = false;
stanksChanged = false;
ptanksChanged = false;
healthChanged = false;
missilesChanged = false;
smissilesChanged = false;
pbombsChanged = false;
connected = false;
queenHealthWait = false;
queenDead = false;
sameRoom = false;
queenHealth = global.mod_queenHstart + (global.mtanks * 10);
phase = 0;
maxpbombsTimer = 10;
maxhealthTimer = 10;
etanksTimer = 10;
mtanksTimer = 10;
stanksTimer = 10;
ptanksTimer = 10;
healthTimer = 10;
missilesTimer = 10;
smissilesTimer = 10;
pbombsTimer = 10;
teleportTimer = 180;
disconnectTimer = 900;
pingTimer = 90;
currentItemsTimer = 120;
resetTimer = -1;
teleport = false;
noName = false;
syncedDifficulty = 1;
elm = 0;
state = undefined;
seed = undefined;
syncedDifficulty = global.difficulty;
elm = oControl.mod_monstersextremecheck;
ini_open(working_directory + "\multitroid\mod_settings.ini");
ipaddress = ini_read_string("ModSettings", "ipaddress", "127.0.0.1");
name = ini_read_string("ModSettings", "displayname", "name");
port = ini_read_real("ModSettings", "port", 64198);
reactorsequence = string_lower(ini_read_string("ModSettings", "reactorsequence", "synced"));
preferredcolor = string_lower(ini_read_string("ModSettings", "preferredcolor", "random"));
showName = string_lower(ini_read_string("ModSettings", "showname", "enabled"));
// NAT traversal settings
var nat_enabled_str = ini_read_string("ModSettings", "use_nat_traversal", "disabled");
use_nat_traversal = (nat_enabled_str == "enabled");
mediation_server_ip = ini_read_string("ModSettings", "mediation_server_ip", "127.0.0.1");
mediation_server_port = ini_read_real("ModSettings", "mediation_server_port", 6510);
ini_close();
// Initialize NAT constants
nat_constants();
var nameLength = string_length(name);
if(nameLength &gt; 15){
name = string_copy(name, 1, 15);
ini_open(working_directory + "\multitroid\mod_settings.ini");
ini_write_string("ModSettings", "displayname", name);
ini_close();
}
if(string_length(name) == 0){
noName = true;
popup_text_ext("Set a name before connecting", 180);
instance_destroy();
}
// Use UDP socket instead of TCP - proxy handles TCP connection
// Use a specific local port so we can report it to the mediation server
var local_udp_port = irandom_range(49152, 65535);
socket = network_create_socket_ext(network_socket_udp, local_udp_port);
server_ip = ipaddress;
server_port = port;
// Initialize NAT traversal if enabled
if (use_nat_traversal) {
nat_init_client();
nat_local_port = local_udp_port; // Store our actual local port for NAT detection
nat_connect_mediation();
isConnected = -1; // Will be set to 1 when NAT connection completes
nat_keepalive_timer = 0;
NAT_KEEPALIVE_INTERVAL = 150; // Send keepalive every 5 seconds (150 steps at 30fps)
} else {
// UDP doesn't have a "connect" - we just start sending
isConnected = 1; // Assume connected, will be confirmed by server response
}
// Fragment reassembly data structures
fragment_buffers = ds_map_create(); // fragment_id -&gt; ds_map of fragments
fragment_timestamps = ds_map_create(); // fragment_id -&gt; creation time
FRAGMENT_TIMEOUT = 5000; // 5 seconds - discard incomplete fragments after this
UDP_MAX_FRAGMENT_SIZE = 1400;
// Reliable UDP with ACK
received_sequences = ds_map_create(); // Track received sequence numbers to detect duplicates
SEQUENCE_CACHE_SIZE = 1000; // How many sequence numbers to remember
next_sequence_number = 0; // For client-side reliable sends
pending_acks = ds_map_create(); // Track our sent reliable packets waiting for ACK
// Adaptive RTT tracking for retransmit timeout
smoothed_rtt = 100; // Initial estimate: 100ms
rtt_variance = 50; // Initial variance
BASE_RETRANSMIT_TIMEOUT = 200; // Minimum timeout
MAX_RETRANSMIT_TIMEOUT = 3000; // Maximum timeout (3 seconds)
MAX_RETRANSMITS = 5;
show_debug_message("Client: Using UDP to connect to proxy at " + server_ip + ":" + string(server_port));
switch(preferredcolor){
case "green":
preferredcolor = 1;
break;
case "red":
preferredcolor = 2;
break;
case "blue":
preferredcolor = 3;
break;
case "yellow":
preferredcolor = 4;
break;
case "orange":
preferredcolor = 5;
break;
case "purple":
preferredcolor = 6;
break;
case "pink":
preferredcolor = 7;
break;
case "white":
preferredcolor = 8;
break;
case "canary":
preferredcolor = 9;
break;
case "red orange":
preferredcolor = 10;
break;
case "sky blue":
preferredcolor = 11;
break;
case "gold":
preferredcolor = 12;
break;
case "porsche":
preferredcolor = 13;
break;
case "light purple":
preferredcolor = 14;
break;
case "hot pink":
preferredcolor = 15;
break;
case "retro green":
preferredcolor = 16;
break;
case "random":
preferredcolor = 17;
break;
}
/*
switch(showName){
case "disabled":
showName = false;
break;
case "enabled":
showName = true;
break;
}
*/
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
global.queenhealthPrev = global.mod_queenHstart + (global.mtanks * 10);;
global.queenphasePrev = 0;
global.prevX = 0;
global.prevY = 0;
global.prevSprite = 0;
global.prevIndex = 0;
global.prevInvincible = 0;
global.roomPrev = room;
global.ping = 0;
global.clientID = 0;
global.packetID = 0;
global.receivedPacketID = 0;
global.onlineList = ds_grid_create(3, 20);
global.onlineSend = ds_grid_create(3, 20);
global.onlineItem = ds_list_create();
global.onlineMetdead = ds_list_create();
global.onlineEvent = ds_list_create();
global.onlineReceived = ds_grid_create(3, 20);
roomList = ds_list_create();
roomListData = ds_list_create();
global.idList = ds_list_create();
posData = ds_list_create();
global.hatchlingList = ds_list_create();
global.speedList = ds_list_create();
global.screwList = ds_list_create();
global.hitboxList = ds_list_create();
global.otherPlayerItems = ds_list_create();
ds_grid_clear(global.onlineSend, -1);
ds_grid_clear(global.onlineReceived, -1);
for(var i=0; i&lt;ds_grid_height(global.onlineList); i++){
ds_grid_set(global.onlineList, 2, i, i);
}
update_variables("initprev");
update_variables("onlinevars");
if(os_type != os_android){
alpha = 1;
} else {
alpha = 0.8;
}
posX = 3;
posY = 3;
time = 60;
trail = 0;
//global.icemissiles = 1;
kicked = false;
banned = false;
SJSTART = 29;
SUPERJUMP = 30;
SJEND = 31;
HURT = 32;
sizeX = 1;
sizeY = 1;
global.receiving = false;
beginReceiveTimer = 300;
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="1" enumb="0">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>if(connected){
if(disconnectTimer &gt; 0){
popup_text("Disconnected");
} else {
popup_text("Lost connection to server");
}
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 254);
buffer_write(buffer, buffer_u8, global.clientID);
buffer_write(buffer, buffer_u8, global.sax);
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);
buffer_write(buffer, buffer_u8, global.sax);
var result = network_send_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
} else {
popup_text("Failed to connect");
}
if(!noName){
network_destroy(socket);
buffer_delete(buffer);
ds_grid_destroy(global.onlineList);
ds_grid_destroy(global.onlineSend);
ds_grid_destroy(global.onlineReceived);
ds_list_destroy(global.onlineItem);
ds_list_destroy(global.onlineMetdead);
ds_list_destroy(global.onlineEvent);
ds_list_destroy(roomList);
ds_list_destroy(roomListData);
ds_list_destroy(global.idList);
ds_list_destroy(posData);
ds_list_destroy(global.hatchlingList);
ds_list_destroy(global.speedList);
ds_list_destroy(global.screwList);
ds_list_destroy(global.hitboxList);
ds_list_destroy(global.otherPlayerItems);
}
global.canConnect = false;
oControl.alarm[10] = 90;
if(banned) popup_text("Banned from server");
if(kicked) popup_text("Kicked from server");
// Clean up NAT traversal resources
if (use_nat_traversal) {
nat_cleanup();
}
// Clean up fragment reassembly buffers
var frag_id = ds_map_find_first(fragment_buffers);
while (!is_undefined(frag_id)) {
var frag_map = ds_map_find_value(fragment_buffers, frag_id);
var frag_idx = ds_map_find_first(frag_map);
while (!is_undefined(frag_idx)) {
var frag_buffer = ds_map_find_value(frag_map, frag_idx);
if (is_real(frag_buffer) &amp;&amp; buffer_exists(frag_buffer)) {
buffer_delete(frag_buffer);
}
frag_idx = ds_map_find_next(frag_map, frag_idx);
}
ds_map_destroy(frag_map);
frag_id = ds_map_find_next(fragment_buffers, frag_id);
}
ds_map_destroy(fragment_buffers);
ds_map_destroy(fragment_timestamps);
ds_map_destroy(received_sequences);
// Clean up pending ACKs
if (!is_undefined(pending_acks)) {
var seq_num = ds_map_find_first(pending_acks);
while (!is_undefined(seq_num)) {
var ack_data = ds_map_find_value(pending_acks, seq_num);
var pkt_buffer = ds_map_find_value(ack_data, "buffer");
buffer_delete(pkt_buffer);
ds_map_destroy(ack_data);
seq_num = ds_map_find_next(pending_acks, seq_num);
}
ds_map_destroy(pending_acks);
}
if(global.sax &amp;&amp; global.saxmode){
global.sax = 0;
load_character_vars();
}
global.spectator = false;
global.spectatorIndex = -1;
global.saxmode = 0;
global.sax = 0;
global.moderator = false;
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="2" enumb="11">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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);
buffer_write(buffer, buffer_u8, global.sax);
buffer_write(buffer, buffer_u8, global.spectator);
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);
buffer_write(buffer, buffer_u8, global.sax);
buffer_write(buffer, buffer_u8, global.spectator);
var result = network_send_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
alarm[11] = 20;
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="2" enumb="10">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>var mosaicEffect = false;
if(sameRoom){
if(instance_exists(oCharacter)){
if(oCharacter.x != global.prevX || oCharacter.y != global.prevY || global.roomPrev != room || global.prevSprite != oCharacter.sprite_index || global.prevIndex != oCharacter.image_index || global.prevInvincible != oCharacter.invincible || global.mosaic){
if(global.prevX != oCharacter.x){
global.prevX = oCharacter.x;
}
if(global.prevY != oCharacter.y){
global.prevY = oCharacter.y;
}
if(global.prevSprite != oCharacter.sprite_index){
global.prevSprite = oCharacter.sprite_index;
}
if(global.prevIndex != oCharacter.image_index){
global.prevIndex = oCharacter.image_index;
}
if(global.prevInvincible != oCharacter.invincible){
global.prevInvincible = oCharacter.invincible;
}
if(global.mosaic || global.reform){
mosaicEffect = true;
} else mosaicEffect = false;
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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);
buffer_write(buffer, buffer_s8, oCharacter.state);
buffer_write(buffer, buffer_s8, global.sax);
buffer_write(buffer, buffer_s8, oCharacter.speedboost);
buffer_write(buffer, buffer_s8, oCharacter.sjball);
buffer_write(buffer, buffer_s8, oCharacter.sjdir);
buffer_write(buffer, buffer_u8, oCharacter.charge);
buffer_write(buffer, buffer_s16, global.playerhealth);
buffer_write(buffer, buffer_u8, global.spectator);
buffer_write(buffer, buffer_u8, oCharacter.invincible);
buffer_write(buffer, buffer_u8, global.mosaic);
buffer_write(buffer, buffer_u8, global.reform);
buffer_write(buffer, buffer_u8, oCharacter.visible);
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);
buffer_write(buffer, buffer_s8, oCharacter.state);
buffer_write(buffer, buffer_s8, global.sax);
buffer_write(buffer, buffer_s8, oCharacter.speedboost);
buffer_write(buffer, buffer_s8, oCharacter.sjball);
buffer_write(buffer, buffer_s8, oCharacter.sjdir);
buffer_write(buffer, buffer_u8, oCharacter.charge);
buffer_write(buffer, buffer_s16, global.playerhealth);
buffer_write(buffer, buffer_u8, global.spectator);
buffer_write(buffer, buffer_u8, oCharacter.invincible);
buffer_write(buffer, buffer_u8, global.mosaic);
buffer_write(buffer, buffer_u8, global.reform);
buffer_write(buffer, buffer_u8, oCharacter.visible);
var result = network_send_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
if(global.roomPrev != room){
global.roomPrev = room;
}
}
}
}
if(mosaicEffect){
alarm[10] = 1;
} else alarm[10] = 2;
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="2" enumb="9">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>if(global.maxsmissilesPrev != global.maxsmissiles){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
maxsmissilesChanged = true;
}
if(!maxsmissilesChanged){
alarm[9] = 10;
}
if(maxsmissilesChanged){
maxsmissilesChanged = false;
alarm[9]= 75;
}
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="2" enumb="8">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>if(global.maxmissilesPrev != global.maxmissiles){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
maxmissilesChanged = true;
}
if(!maxmissilesChanged){
alarm[8] = 10;
}
if(maxmissilesChanged){
maxmissilesChanged = false;
alarm[8]= 75;
}
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="2" enumb="7">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>if(global.itemstakenPrev != global.itemstaken){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
itemstakenChanged = true;
}
if(!itemstakenChanged){
alarm[7] = 10;
}
if(itemstakenChanged){
itemstakenChanged = false;
alarm[7] = 75;
}
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="2" enumb="6">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>var v = 0;
if(global.ingame){
for(var i=0; i&lt;array_height_2d(global.dmap); i++){
for(var f=0; f&lt;array_length_2d(global.dmap, i); f++){
if(global.dmapPrev[i, f] != global.dmap[i, f]){
mapChanged = true;
break;
}
}
}
}
if(mapChanged){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 9);
var tileCount = 0;
for(var i=0; i&lt;array_height_2d(global.dmap); i++){
for(var f=0; f&lt;array_length_2d(global.dmap, i); f++){
if(global.dmapPrev[i, f] != global.dmap[i, f]){
buffer_write(buffer, buffer_u8, i);
buffer_write(buffer, buffer_u8, f);
buffer_write(buffer, buffer_u8, global.dmap[i, f]);
tileCount++;
}
}
}
buffer_write(buffer, buffer_u16, tileCount);
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_u16, tileCount);
for(var i=0; i&lt;array_height_2d(global.dmap); i++){
for(var f=0; f&lt;array_length_2d(global.dmap, i); f++){
if(global.dmapPrev[i, f] != global.dmap[i, f]){
buffer_write(buffer, buffer_u8, i);
buffer_write(buffer, buffer_u8, f);
buffer_write(buffer, buffer_u8, global.dmap[i, f]);
}
}
}
buffer_write(buffer, buffer_u8, global.clientID);
var result = network_send_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
}
if(!mapChanged){
alarm[6] = 10;
}
if(mapChanged){
mapChanged = false;
alarm[6] = 75;
}
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="2" enumb="5">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>var v = 0;
for(var f=0; f&lt;array_length_1d(global.event); f++){
if(f &gt; 350){
break;
}
if(f == 102){
global.eventPrev[f] = global.event[f];
}
if(global.eventPrev[f] != global.event[f]){
global.eventChanges[v, 0] = global.event[f];
global.eventChanges[v, 1] = f;
global.onlineEvent[| 0] = global.eventChanges;
eventChanged = true;
v++;
}
}
if(eventChanged){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
}
if(!eventChanged){
alarm[5] = 10;
}
if(eventChanged){
eventChanged = false;
alarm[5] = 75;
}
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="2" enumb="4">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>var v = 0;
for(var f=0; f&lt;array_length_1d(global.metdead); f++){
if(global.metdeadPrev[f] != global.metdead[f]){
global.metdeadChanges[v, 0] = global.metdead[f];
global.metdeadChanges[v, 1] = f;
global.onlineMetdead[| 0] = global.metdeadChanges;
metdeadChanged = true;
v++;
}
}
if(metdeadChanged){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
}
if(!metdeadChanged){
alarm[4] = 10;
}
if(metdeadChanged){
metdeadChanged = false;
alarm[4] = 75;
}
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="2" enumb="3">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>var v = 0;
for(var f=0; f&lt;array_length_1d(global.item); f++){
if(global.itemPrev[f] != global.item[f]){
global.itemChanges[v, 0] = global.item[f];
global.itemChanges[v, 1] = f;
global.onlineItem[| 0] = global.itemChanges;
itemChanged = true;
v++;
}
}
if(itemChanged){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
}
if(!itemChanged){
alarm[3] = 10;
}
if(itemChanged){
itemChanged = false;
alarm[3] = 75;
}
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="2" enumb="2">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>if(global.monstersleftPrev != global.monstersleft){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
metroidCountChanged = true;
}
if(global.monstersareaPrev != global.monstersarea){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
metroidCountChanged = true;
}
if(!metroidCountChanged){
alarm[2] = 10;
}
if(metroidCountChanged){
metroidCountChanged = false;
alarm[2] = 75;
}
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="2" enumb="1">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>if(queenHealthResetQueued){
if(instance_exists(oQueen) &amp;&amp; instance_exists(oQueenHead) &amp;&amp; !is_undefined(oQueenHead.myhealth) &amp;&amp; !is_undefined(oQueen.phase)){
if(global.queenhealthPrev != queenHealth){
if(queenHealth == 999999){
queenHealth = 0;
oQueenHead.myhealth = queenHealth;
if(queenHealth &lt;= 0){
with(oQueenHead){
if (myhealth &lt;= 0 &amp;&amp; state != 100 &amp;&amp; state != 50) {
if (oQueen.phase &lt; 3) head_damage = 1;
if (oQueen.phase == 3) head_damage = 2;
if (oQueen.phase &lt; 5) {
state = 50;
statetime = 0;
myhealth = 999999;
with (oQueen) {
state = 6;
statetime = 0;
}
}
if (oQueen.phase == 5) {
with (oQueen) {
state = 100;
statetime = 0;
}
state = 100;
}
}
}
queenHealth = 999999;
}
}
}
oQueenHead.myhealth = queenHealth;
oQueen.phase = phase;
queenHealthResetQueued = false;
if(phase &gt;= 1 &amp;&amp; instance_exists(inst_146524)){
event_perform_object(oQueenFireball, ev_other, ev_user1);
oQueen.state = 7;
oQueen.statetime = 0;
with(oQueen){
head_target_snap = 1;
head_target_x = x + neck_x + 10;
head_target_y = y + neck_y;
}
}
if(phase &gt;= 2 &amp;&amp; instance_exists(inst_146525) &amp;&amp; instance_exists(inst_146520)){
event_perform_object(oQueenFireball, ev_other, ev_user2);
oQueen.state = 7;
oQueen.statetime = 0;
with(oQueen){
head_target_snap = 1;
head_target_x = x + neck_x + 10;
head_target_y = y + neck_y;
}
}
if(phase &gt;= 3 &amp;&amp; instance_exists(inst_146526) &amp;&amp; instance_exists(inst_146514)){
event_perform_object(oQueenFireball, ev_other, ev_user3);
oQueen.state = 7;
oQueen.statetime = 0;
with(oQueen){
head_target_snap = 1;
head_target_x = x + neck_x + 10;
head_target_y = y + neck_y;
}
}
if(phase &gt;= 4 &amp;&amp; instance_exists(inst_146527)){
event_perform_object(oQueenFireball, ev_other, ev_user4);
oQueen.state = 7;
oQueen.statetime = 0;
with(oQueen){
head_target_snap = 1;
head_target_x = x + neck_x + 10;
head_target_y = y + neck_y;
}
}
}
alarm[1] = 5;
}
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="2" enumb="0">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>
update_variables("onlinevars");
for(var i=0; i&lt;ds_grid_height(global.onlineList); i++){
if(global.onlineList[# 0, i] != global.onlineList[# 1, i] &amp;&amp; (i != 0 || i != 15 || i != 16 || i != 17)){
global.onlineSend[# 0, i] = global.onlineList[# 0, i];
global.onlineSend[# 1, i] = global.onlineList[# 1, i];
global.onlineSend[# 2, i] = global.onlineList[# 2, i];
//Update prev to current
update_variables("disablesame");
update_variables("replaceglobalvars");
update_variables("updateprev");
//show_debug_message(string(global.onlineList[# 0, i]) + " " + string(global.onlineList[# 1, i]) + " " + string(global.onlineList[# 2, i]));
canSend = true;
alarm[0] = 600;
}
}
if(canSend){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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 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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
show_debug_message("packetID = " + string(global.packetID));
global.packetID++;
ds_grid_clear(global.onlineSend, -1);
}
if(!canSend){
alarm[0] = 10;
}
if(canSend){
canSend = false;
alarm[0] = 75;
}
if(instance_exists(oCharacter)){
check_areaclear();
if(global.playerhealth &lt;= 0){
if(oCharacter.state != oCharacter.DEFEATED &amp;&amp; oCharacter.canbehit){
oCharacter.alarm[0] = 6;
oCharacter.state = oCharacter.DEFEATED;
mus_current_fadeout();
sfx_stop_all();
}
}
}
if(instance_exists(oQueen) &amp;&amp; instance_exists(oQueenHead) &amp;&amp; !is_undefined(oQueenHead.myhealth) &amp;&amp; !is_undefined(oQueen.phase)){
if(global.queenhealthPrev != oQueenHead.myhealth || oQueen.phase != phase){
show_debug_message("queen health sent " + string(oQueenHead.myhealth));
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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 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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
}
}
var itemCount = 0;
for(var h=0; h&lt;array_length_1d(global.item); h++){
var val = global.item[h];
if(val == 1 &amp;&amp; h != 1){
itemCount++;
}
}
if(itemCount != global.itemstaken){
global.itemstaken = itemCount;
}
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="3" enumb="0">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>// Handle NAT traversal hole punching and keepalive
if (use_nat_traversal) {
nat_step_hole_punching();
// Send keepalive to mediation server to prevent timeout
nat_keepalive_timer++;
if (nat_keepalive_timer &gt;= NAT_KEEPALIVE_INTERVAL) {
nat_keepalive_timer = 0;
if (mediation_connected &amp;&amp; mediation_socket != -1) {
var params = ds_map_create();
nat_send_tcp_message(mediation_socket, MSG_KEEP_ALIVE, params);
ds_map_destroy(params);
}
}
}
// Handle retransmissions for client-side reliable sends
var current = current_time;
// Calculate adaptive retransmit timeout: RTO = smoothed_rtt + (4 * rtt_variance)
var retransmit_timeout = clamp(smoothed_rtt + (4 * rtt_variance), BASE_RETRANSMIT_TIMEOUT, MAX_RETRANSMIT_TIMEOUT);
if (!is_undefined(pending_acks)) {
var seq_num = ds_map_find_first(pending_acks);
while (!is_undefined(seq_num)) {
var next_seq = ds_map_find_next(pending_acks, seq_num);
var ack_data = ds_map_find_value(pending_acks, seq_num);
var send_time = ds_map_find_value(ack_data, "send_time");
var retransmits = ds_map_find_value(ack_data, "retransmits");
if (current - send_time &gt; retransmit_timeout) {
if (retransmits &lt; MAX_RETRANSMITS) {
var pkt_buffer = ds_map_find_value(ack_data, "buffer");
var pkt_size = ds_map_find_value(ack_data, "size");
var pkt_ip = ds_map_find_value(ack_data, "ip");
var pkt_port = ds_map_find_value(ack_data, "port");
network_send_udp(socket, pkt_ip, pkt_port, pkt_buffer, pkt_size);
ds_map_replace(ack_data, "send_time", current);
ds_map_replace(ack_data, "retransmits", retransmits + 1);
} else {
var pkt_buffer = ds_map_find_value(ack_data, "buffer");
buffer_delete(pkt_buffer);
ds_map_destroy(ack_data);
ds_map_delete(pending_acks, seq_num);
}
}
seq_num = next_seq;
}
}
// Clean up old incomplete fragments to prevent memory leaks
var frag_id = ds_map_find_first(fragment_timestamps);
while (!is_undefined(frag_id)) {
var next_id = ds_map_find_next(fragment_timestamps, frag_id);
var timestamp = ds_map_find_value(fragment_timestamps, frag_id);
// If fragment is older than timeout, clean it up
if (current - timestamp &gt; FRAGMENT_TIMEOUT) {
show_debug_message("Client: Fragment timeout for ID " + string(frag_id) + " - cleaning up incomplete fragments");
// Clean up the fragment buffers
if (ds_map_exists(fragment_buffers, frag_id)) {
var frag_map = ds_map_find_value(fragment_buffers, frag_id);
var total = ds_map_find_value(frag_map, "total");
// Delete any stored fragment buffers
for (var i = 0; i &lt; total; i++) {
if (ds_map_exists(frag_map, i)) {
var frag_buf = ds_map_find_value(frag_map, i);
buffer_delete(frag_buf);
}
}
ds_map_destroy(frag_map);
ds_map_delete(fragment_buffers, frag_id);
}
ds_map_delete(fragment_timestamps, frag_id);
}
frag_id = next_id;
}
if(!connected){
if(isConnected &gt;= 0){
connected = true;
popup_text("Connected");
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 1);
buffer_write(buffer, buffer_string, name + "," + global.multitroid_version);
buffer_write(buffer, buffer_u8, global.sax);
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 + "," + global.multitroid_version);
buffer_write(buffer, buffer_u8, global.sax);
var result = network_send_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
instance_create(x, y, oNametag);
} else if (!use_nat_traversal) {
// Only fail immediately if not using NAT traversal
// With NAT, isConnected starts at -1 and will be set to 1 when connection completes
instance_destroy();
popup_text("Failed to connect");
}
}
//Ensure Arachnus event syncs properly
if(global.event[103] &gt; 0){
global.event[103] = floor(global.event[103]);
}
//Reset Queen phase when dead
if(global.event[303] &gt; 0){
phase = 0;
}
//Changes drill event to already be done
if(global.event[172] != 3){
global.event[172] = 3;
}
//Fix lavastate in NG+ and RG+
if(global.gamemode &gt; 1 || global.saxmode){
if(global.gamemode == 1) global.gamemode = 2;
if(global.lavastate &lt; 7) global.lavastate = 7;
}
if(room == rm_death){
phase = 0;
queenHealth = global.mod_queenHstart + (global.mtanks * 10);;
}
if((room == rm_a4b02 || room == rm_a4b03 || room == rm_a4b04 || room == rm_a4b05 || room == rm_a4b06 || room == rm_a4b07 || room == rm_a4b08 || room == rm_a4b09 || room == rm_a4b10 || room == rm_a4b11 || room == rm_a4b12 || room == rm_a4b13 || room == rm_a4b14 || room == rm_a4b15 || room == rm_a4b16 || room == rm_a4b17 || room == rm_a4b18 || room == rm_a4b19) &amp;&amp; global.event[203] &gt; 0 &amp;&amp; global.event[203] &lt; 9 &amp;&amp; !instance_exists(oA4EscapeControl)){
instance_create(x, y, oA4EscapeControl);
}
if(room == rm_a4b01 &amp;&amp; global.event[203] == 9 &amp;&amp; instance_exists(oA4EscapeControl)){
with(oA4EscapeControl){
event_user(0);
}
}
if(global.event[203] == 9 &amp;&amp; sfx_isplaying(sndA4AlarmLoop)){
sfx_stop(sndA4AlarmLoop);
}
if(!instance_exists(oQueen) &amp;&amp; global.event[303] == 0){
if(!queenHealthResetQueued){
queenHealthResetQueued = true;
alarm[1] = 5;
}
}
if(instance_exists(oQueen) &amp;&amp; !is_undefined(oQueen.phase)){
if(global.event[303] &gt; 0 &amp;&amp; !queenDead){
with(oQueen){
state = 100;
statetime = 0;
mus_fadeout(musQueen);
mus_fadeout(musQueen2);
mus_fadeout(musQueen3);
mus_fadeout(musQueenBreak);
mus_fadeout(musQueenIntro);
}
queenDead = true;
}
if(instance_exists(oQueenHead)){
with(oQueenHead){
if(oQueen.phase &gt; 3 &amp;&amp; instance_exists(inst_146527)){
oQueen.phase = 3;
if(head_damage == 2){
head_damage = 1;
}
}
}
}
}
if(keyboard_check_pressed(vk_f2)){
instance_destroy();
}
if(keyboard_check_pressed(vk_f3)){
popup_text_ext(string(oControl.seed), 300);
}
if(keyboard_check_pressed(vk_f4)){
if(oControl.showname == "disabled"){
oControl.showname = "enabled";
}
if(oControl.showname == "enabled"){
oControl.showname = "disabled";
}
}
if(instance_exists(oCharacter)){
posX = global.mapposx;
posY = global.mapposy;
} else {
posX = posX;
posY = posY;
}
if((room == rm_a4b02 || room == rm_a4b03 || room == rm_a4b04 || room == rm_a4b05 || room == rm_a4b06 || room == rm_a4b07 || room == rm_a4b08 || room == rm_a4b09 || room == rm_a4b10 || room == rm_a4b11 || room == rm_a4b12 || room == rm_a4b13 || room == rm_a4b14 || room == rm_a4b15 || room == rm_a4b16 || room == rm_a4b17 || room == rm_a4b18 || room == rm_a4b19) &amp;&amp; global.event[203] == 9 &amp;&amp; !teleport){
teleport = true;
global.targetx = 624;
global.targety = 144;
room_change(rm_a4b01, 1);
}
if(instance_exists(oCharacter) &amp;&amp; (oCharacter.state == oCharacter.SAVINGFX || oCharacter.state == oCharacter.SAVINGSHIPFX || oCharacter.state == oCharacter.SAVINGSHIP)){
refill_heath_ammo();
}
//Ensure that reloading a save doesn't disable Extreme Lab Metroids
if(oControl.mod_monstersextremecheck == 1 &amp;&amp; oControl.mod_monstersextreme == 0 &amp;&amp; global.event[302] &gt; 0){
oControl.mod_monstersextreme = 1;
} else if(oControl.mod_monstersextremecheck == 0 &amp;&amp; oControl.mod_monstersextreme == 1){
oControl.mod_monstersextreme = 0;
}
//Sends event 309 to make sure all players can fight guardian
if(global.log[21] &gt; 0 &amp;&amp; global.event[309] == 0){
global.event[309] = 1;
}
if(global.event[309] == 1 &amp;&amp; global.log[21] &lt; 1){
global.log[21] = 1;
}
//End of guardian event check
if(time == 0 &amp;&amp; connected &amp;&amp; instance_exists(self)){ //why do i need an instance_exists(self) here to not crash???
if(ds_list_size(global.idList) &gt; 0){
checkListID = ds_list_create();
for(var i=0; i&lt;ds_list_size(global.idList); i++){
var arr = global.idList[| i];
ds_list_add(checkListID, arr[0, 0]);
}
for(var i=0; i&lt;ds_list_size(roomList); i++){
var ID = roomList[| i];
var findID = ds_list_find_index(checkListID, ID);
if(findID &lt; 0){
ds_list_delete(roomList, i);
}
}
for(var i=0; i&lt;ds_list_size(roomListData); i++){
var arr = roomListData[| i];
var findID = ds_list_find_index(checkListID, arr[0]);
if(findID &lt; 0){
ds_list_delete(roomListData, i);
}
}
for(var i=0; i&lt;ds_list_size(posData); i++){
var arr = posData[| i];
var findID = ds_list_find_index(checkListID, arr[0]);
if(findID &lt; 0){
ds_list_delete(posData, i);
}
}
for(var i=0; i&lt;ds_list_size(global.otherPlayerItems); i++){
var arr = global.otherPlayerItems[| i];
var findID = ds_list_find_index(checkListID, arr[0]);
if(findID &lt; 0){
ds_list_delete(global.otherPlayerItems, i);
}
}
ds_list_destroy(checkListID);
}
time = 60;
}
if(maxpbombsTimer == 0 &amp;&amp; connected){
if(global.maxpbombsPrev != global.maxpbombs){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
maxpbombsChanged = true;
}
if(!maxpbombsChanged){
maxpbombsTimer = 10;
}
if(maxpbombsChanged){
maxpbombsChanged = false;
maxpbombsTimer = 75;
}
}
if(maxhealthTimer == 0 &amp;&amp; connected){
if(global.maxhealthPrev != global.maxhealth){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
maxhealthChanged = true;
}
if(!maxhealthChanged){
maxhealthTimer = 10;
}
if(maxhealthChanged){
maxhealthChanged = false;
maxhealthTimer = 75;
}
}
if(etanksTimer == 0 &amp;&amp; connected){
if(global.etanksPrev != global.etanks){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
etanksChanged = true;
}
if(!etanksChanged){
etanksTimer = 10;
}
if(etanksChanged){
etanksChanged = false;
etanksTimer = 75;
}
}
if(mtanksTimer == 0 &amp;&amp; connected){
if(global.mtanksPrev != global.mtanks){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
mtanksChanged = true;
}
if(!mtanksChanged){
mtanksTimer = 10;
}
if(mtanksChanged){
mtanksChanged = false;
mtanksTimer = 75;
}
}
if(stanksTimer == 0 &amp;&amp; connected){
if(global.stanksPrev != global.stanks){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
stanksChanged = true;
}
if(!stanksChanged){
stanksTimer = 10;
}
if(stanksChanged){
stanksChanged = false;
stanksTimer = 75;
}
}
if(ptanksTimer == 0 &amp;&amp; connected){
if(global.ptanksPrev != global.ptanks){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
ptanksChanged = true;
}
if(!ptanksChanged){
ptanksTimer = 10;
}
if(ptanksChanged){
ptanksChanged = false;
ptanksTimer = 75;
}
}
if(healthTimer == 0 &amp;&amp; connected){
if(global.playerhealthPrev != global.playerhealth){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 25);
buffer_write(buffer, buffer_s16, global.playerhealth);
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, 25);
buffer_write(buffer, buffer_s16, global.playerhealth);
buffer_write(buffer, buffer_u8, global.clientID);
var result = network_send_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
healthTimer = true;
}
if(!healthChanged){
healthTimer = 10;
}
if(healthChanged){
healthChanged = false;
healthTimer = 75;
}
}
if(missilesTimer == 0 &amp;&amp; connected){
if(global.missilesPrev != global.missiles){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 26);
buffer_write(buffer, buffer_s16, global.missiles);
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, 26);
buffer_write(buffer, buffer_s16, global.missiles);
buffer_write(buffer, buffer_u8, global.clientID);
var result = network_send_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
missilesTimer = true;
}
if(!missilesChanged){
missilesTimer = 10;
}
if(missilesChanged){
missilesChanged = false;
missilesTimer = 75;
}
}
if(smissilesTimer == 0 &amp;&amp; connected){
if(global.smissilesPrev != global.smissiles){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 27);
buffer_write(buffer, buffer_s16, global.smissiles);
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, 27);
buffer_write(buffer, buffer_s16, global.smissiles);
buffer_write(buffer, buffer_u8, global.clientID);
var result = network_send_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
smissilesTimer = true;
}
if(!smissilesChanged){
smissilesTimer = 10;
}
if(smissilesChanged){
smissilesChanged = false;
smissilesTimer = 75;
}
}
if(pbombsTimer == 0 &amp;&amp; connected){
if(global.pbombsPrev != global.pbombs){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 28);
buffer_write(buffer, buffer_s16, 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, 28);
buffer_write(buffer, buffer_s16, global.pbombs);
buffer_write(buffer, buffer_u8, global.clientID);
var result = network_send_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
pbombsTimer = true;
}
if(!pbombsChanged){
pbombsTimer = 10;
}
if(pbombsChanged){
pbombsChanged = false;
pbombsTimer = 75;
}
}
if(teleport){
teleportTimer--;
if(teleportTimer &lt;= 0){
teleport = false;
teleportTimer = 60;
}
}
if(disconnectTimer &lt;= 0){
instance_destroy();
}
if(pingTimer &lt;= 0){
pingTimer = 5;
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 103);
buffer_write(buffer, buffer_u32, current_time);
buffer_write(buffer, buffer_u16, global.ping);
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);
buffer_write(buffer, buffer_u16, global.ping);
var result = network_send_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
}
if(resetTimer == 0){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 20);
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, 20);
buffer_write(buffer, buffer_u8, global.clientID);
var result = network_send_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
}
if(currentItemsTimer == 0 &amp;&amp; connected){
currentItemsTimer = 120;
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 104);
buffer_write(buffer, buffer_u8, global.clientID);
buffer_write(buffer, buffer_u8, global.spacejump);
buffer_write(buffer, buffer_u8, global.screwattack);
buffer_write(buffer, buffer_u8, global.spiderball);
buffer_write(buffer, buffer_u8, global.speedbooster);
buffer_write(buffer, buffer_u8, global.bomb);
buffer_write(buffer, buffer_u8, global.ibeam);
buffer_write(buffer, buffer_u8, global.wbeam);
buffer_write(buffer, buffer_u8, global.pbeam);
buffer_write(buffer, buffer_u8, global.sbeam);
buffer_write(buffer, buffer_u8, global.cbeam);
var bufferSize = buffer_tell(buffer);
buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_s32, bufferSize);
buffer_write(buffer, buffer_u8, 104);
buffer_write(buffer, buffer_u8, global.clientID);
buffer_write(buffer, buffer_u8, global.spacejump);
buffer_write(buffer, buffer_u8, global.screwattack);
buffer_write(buffer, buffer_u8, global.spiderball);
buffer_write(buffer, buffer_u8, global.speedbooster);
buffer_write(buffer, buffer_u8, global.bomb);
buffer_write(buffer, buffer_u8, global.ibeam);
buffer_write(buffer, buffer_u8, global.wbeam);
buffer_write(buffer, buffer_u8, global.pbeam);
buffer_write(buffer, buffer_u8, global.sbeam);
buffer_write(buffer, buffer_u8, global.cbeam);
var result = network_send_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
}
if(beginReceiveTimer == 0 &amp;&amp; connected){
show_debug_message("Starting all alarms - position sync will now begin");
alarm[0] = 5;
alarm[2] = 5;
alarm[3] = 5;
alarm[4] = 5;
alarm[5] = 5;
alarm[6] = 5;
alarm[7] = 5;
alarm[8] = 5;
alarm[9] = 5;
alarm[10] = 3;
alarm[11] = 20;
}
time--;
maxpbombsTimer--;
maxhealthTimer--;
etanksTimer--;
mtanksTimer--;
stanksTimer--;
ptanksTimer--;
healthTimer--;
missilesTimer--;
smissilesTimer--;
pbombsTimer--;
disconnectTimer--;
pingTimer--;
currentItemsTimer--;
if(global.receiving) beginReceiveTimer--;
if(resetTimer &gt; -1){
resetTimer--;
}
if(beginReceiveTimer &lt; -1) beginReceiveTimer = -1;
if(instance_exists(self)){
if(ds_list_size(roomListData) &gt; 0){
for(var h=0; h&lt;ds_list_size(roomListData); h++){
var arrList = roomListData[| h];
var arrID = arrList[0];
var arrX = arrList[1];
var arrY = arrList[2];
var arrName = arrList[15];
var findHatchlingID = ds_list_find_index(global.hatchlingList, arrID);
if(instance_exists(oHatchling)){
if(findHatchlingID == -1){
ds_list_add(global.hatchlingList, arrID);
var hatchling = instance_create(arrX, arrY, oHatchling);
with(hatchling){
targetx = arrX;
targety = arrY;
myid = arrID;
name = arrName;
}
}
} else {
if(findHatchlingID &gt;= 0){
ds_list_delete(global.hatchlingList, findHatchlingID);
}
}
}
} else {
if(ds_list_size(global.hatchlingList) &gt; 0){
ds_list_clear(global.hatchlingList);
}
}
}
switch(syncedDifficulty){
case 0:
//Easy
if(global.saxmode &amp;&amp; !global.sax){
if(global.difficulty != syncedDifficulty) global.difficulty = syncedDifficulty;
if(oControl.mod_fusion != 1) oControl.mod_fusion = 1;
if(oControl.mod_diffmult != 1) oControl.mod_diffmult = 1;
} else {
if(global.difficulty != syncedDifficulty) global.difficulty = syncedDifficulty;
if(oControl.mod_fusion != 0) oControl.mod_fusion = 0;
if(oControl.mod_diffmult != 1) oControl.mod_diffmult = 1;
}
break;
case 1:
//Normal
if(global.saxmode &amp;&amp; !global.sax){
if(global.difficulty != syncedDifficulty) global.difficulty = syncedDifficulty;
if(oControl.mod_fusion != 1) oControl.mod_fusion = 1;
if(oControl.mod_diffmult != 1) oControl.mod_diffmult = 1;
} else {
if(global.difficulty != syncedDifficulty) global.difficulty = syncedDifficulty;
if(oControl.mod_fusion != 0) oControl.mod_fusion = 0;
if(oControl.mod_diffmult != 1) oControl.mod_diffmult = 1;
}
break;
case 2:
//Hard
if(global.saxmode &amp;&amp; !global.sax){
if(global.difficulty != syncedDifficulty) global.difficulty = syncedDifficulty;
if(oControl.mod_fusion != 1) oControl.mod_fusion = 1;
if(oControl.mod_diffmult != 2) oControl.mod_diffmult = 2;
} else {
if(global.difficulty != syncedDifficulty) global.difficulty = syncedDifficulty;
if(oControl.mod_fusion != 0) oControl.mod_fusion = 0;
if(oControl.mod_diffmult != 2) oControl.mod_diffmult = 2;
}
break;
case 3:
//Fusion
if(global.saxmode &amp;&amp; !global.sax){
if(global.difficulty != 2) global.difficulty = 2;
if(oControl.mod_fusion != 1) oControl.mod_fusion = 1;
if(oControl.mod_diffmult != 4) oControl.mod_diffmult = 4;
} else if(global.saxmode &amp;&amp; global.sax){
if(global.difficulty != 2) global.difficulty = 2;
if(oControl.mod_fusion != 0) oControl.mod_fusion = 0;
if(oControl.mod_diffmult != 4) oControl.mod_diffmult = 4;
} else {
if(global.difficulty != 2) global.difficulty = 2;
if(oControl.mod_fusion != 1) oControl.mod_fusion = 1;
if(oControl.mod_diffmult != 4) oControl.mod_diffmult = 4;
}
break;
}
if(oControl.mod_monstersextremecheck != elm) oControl.mod_monstersextremecheck = elm;
if((!global.ingame || !global.opshowhud) &amp;&amp; global.saxmode){
var lowestPosX = 1000;
var lowestPosY = 1000;
var enemyCount = 0;
for(var i=0; i&lt;ds_list_size(oClient.posData); i++){
var arrData = oClient.posData[| i];
var ID = arrData[0];
var xDiff = oClient.posX - arrData[1];
var yDiff = oClient.posY - arrData[2];
var sax = arrData[3];
var spectator = arrData[5];
if((abs(xDiff) &lt; lowestPosX || abs(yDiff) &lt; lowestPosY) &amp;&amp; sax != global.sax &amp;&amp; ID != global.clientID){
if(spectator){
if(sax){
lowestPosX = abs(xDiff);
lowestPosY = abs(yDiff);
}
} else {
lowestPosX = abs(xDiff);
lowestPosY = abs(yDiff);
}
}
if(sax != global.sax) enemyCount++;
}
if(ds_list_size(oClient.posData) == 0 || enemyCount == 0){
global.scannerSprite = sScannerRange4;
global.enemyNearby = false;
global.inMusSAXRange = false;
}
if(enemyCount &gt; 0){
if((abs(lowestPosX) &gt; 5 || abs(lowestPosY) &gt; 5)){
global.inMusSAXRange = false;
}
if((abs(lowestPosX) &lt;= 5 &amp;&amp; abs(lowestPosY) &lt;= 5)){
global.inMusSAXRange = true;
}
if((abs(lowestPosX) &gt; 4 || abs(lowestPosY) &gt; 4)){
global.enemyNearby = false;
global.scannerSprite = sScannerRange4;
}
if((abs(lowestPosX) &lt;= 4 &amp;&amp; abs(lowestPosY) &lt;= 4)){
global.enemyNearby = false;
global.scannerSpeedMax = 5;
global.scannerSprite = sScannerRange3;
}
if((abs(lowestPosX) &lt;= 3 &amp;&amp; abs(lowestPosY) &lt;= 3)){
global.enemyNearby = true;
}
if((abs(lowestPosX) &lt;= 2 &amp;&amp; abs(lowestPosY) &lt;= 2)){
global.enemyNearby = true;
global.scannerSpeedMax = 4;
global.scannerSprite = sScannerRange2;
}
if((abs(lowestPosX) &lt;= 1 &amp;&amp; abs(lowestPosY) &lt;= 1)){
global.enemyNearby = true;
global.scannerSpeedMax = 3;
global.scannerSprite = sScannerRange1;
}
if((abs(lowestPosX) == 0 &amp;&amp; abs(lowestPosY) == 0)){
global.enemyNearby = true;
global.scannerSpeedMax = 2;
global.scannerSprite = sScannerRange1;
}
}
}
if(connected &amp;&amp; room == rm_a1h01 &amp;&amp; global.event[51] == 0 &amp;&amp; global.log[21] &gt; 0 &amp;&amp; global.sax &amp;&amp; global.saxmode){
var playerInBossRoom = false;
if(ds_list_size(oClient.posData) &gt; 0){
for(var i=0; i&lt;ds_list_size(oClient.posData); i++){
var arrMapIcon = oClient.posData[| i];
var sax = arrMapIcon[3];
var playerRoom = arrMapIcon[4];
if(sax != global.sax &amp;&amp; playerRoom == rm_a1h01){
playerInBossRoom = true;
}
}
}
if(playerInBossRoom){
global.targetx = 1200;
global.targety = 160;
room_change(rm_a0h08, 1);
}
}
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="7" enumb="68">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>disconnectTimer = 900;
if(!global.acceptPacket) exit;
var type_event = ds_map_find_value(async_load, "type");
var event_socket = ds_map_find_value(async_load, "id");
// Handle NAT mediation server TCP messages
if (use_nat_traversal &amp;&amp; event_socket == mediation_socket &amp;&amp; type_event == network_type_data) {
var _buffer = ds_map_find_value(async_load, "buffer");
buffer_seek(_buffer, buffer_seek_start, 0);
var data = buffer_read(_buffer, buffer_text);
// Append to TCP buffer (messages may be fragmented)
nat_tcp_buffer += data;
// Try to parse complete JSON messages
var brace_count = 0;
var start_index = 0;
var i = 1;
while (i &lt;= string_length(nat_tcp_buffer)) {
var ch = string_char_at(nat_tcp_buffer, i);
if (ch == "{") {
if (brace_count == 0) start_index = i;
brace_count++;
} else if (ch == "}") {
brace_count--;
if (brace_count == 0 &amp;&amp; start_index &gt; 0) {
var json_str = string_copy(nat_tcp_buffer, start_index, i - start_index + 1);
var msg = json_parse_nat_message(json_str);
if (msg != noone) {
nat_handle_tcp_message(msg);
ds_map_destroy(msg);
}
nat_tcp_buffer = string_delete(nat_tcp_buffer, 1, i);
i = 0;
}
}
i++;
}
exit;
}
// Handle NAT connection established event
if (use_nat_traversal &amp;&amp; event_socket == mediation_socket &amp;&amp; type_event == network_type_connect) {
show_debug_message("NAT: TCP connected to mediation server");
exit;
}
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 needs_cleanup = false;
// Debug: Log ALL incoming UDP packets
var recv_socket = ds_map_find_value(async_load, "id");
var recv_ip = ds_map_find_value(async_load, "ip");
var recv_port = ds_map_find_value(async_load, "port");
show_debug_message("Client: Received UDP on socket " + string(recv_socket) + " from " + recv_ip + ":" + string(recv_port) + ", size=" + string(bufferSize));
// Check for NAT hole punch packets during hole punching phase
if (use_nat_traversal) {
var sender_ip = ds_map_find_value(async_load, "ip");
var sender_port = ds_map_find_value(async_load, "port");
var receiving_socket = ds_map_find_value(async_load, "id");
// Debug: Log all incoming UDP when using NAT
if (nat_state == NAT_STATE_CONNECTED) {
show_debug_message("NAT: Received UDP after connection: from " + sender_ip + ":" + string(sender_port) + " on socket " + string(receiving_socket));
}
if (nat_state == NAT_STATE_PUNCHING) {
if (nat_handle_udp_message(_buffer, sender_ip, sender_port, receiving_socket)) {
exit; // Was a NAT message, don't process further
}
}
buffer_seek(_buffer, buffer_seek_start, 0); // Reset for normal processing
}
// Check if this is an ACK packet from server (starts with 255 marker)
if (bufferSize &gt;= 5) {
if (buffer_peek(_buffer, 0, buffer_u8) == 255) {
buffer_seek(_buffer, buffer_seek_start, 0);
buffer_read(_buffer, buffer_u8);
var acked_seq = buffer_read(_buffer, buffer_u32);
if (ds_map_exists(pending_acks, acked_seq)) {
var ack_data = ds_map_find_value(pending_acks, acked_seq);
// Measure RTT and update smoothed estimates (RFC 6298)
var send_time = ds_map_find_value(ack_data, "send_time");
var measured_rtt = current_time - send_time;
// First measurement
if (smoothed_rtt == 100) {
smoothed_rtt = measured_rtt;
rtt_variance = measured_rtt / 2;
} else {
// Update using exponential weighted moving average
var alpha = 0.125; // Weight for new sample
var beta = 0.25; // Weight for variance
rtt_variance = (1 - beta) * rtt_variance + beta * abs(smoothed_rtt - measured_rtt);
smoothed_rtt = (1 - alpha) * smoothed_rtt + alpha * measured_rtt;
}
var ack_buffer = ds_map_find_value(ack_data, "buffer");
buffer_delete(ack_buffer);
ds_map_destroy(ack_data);
ds_map_delete(pending_acks, acked_seq);
}
exit;
}
}
// Check if this is a reliable packet (starts with 254 marker)
if (bufferSize &gt;= 5 &amp;&amp; buffer_peek(_buffer, 0, buffer_u8) == 254) {
// Reliable packet format: [0xFE][seq_num (u32)][original_packet]
buffer_seek(_buffer, buffer_seek_start, 0);
buffer_read(_buffer, buffer_u8); // Skip marker
var seq_num = buffer_read(_buffer, buffer_u32);
// Send ACK back to server
var ack_buffer = buffer_create(5, buffer_fixed, 1);
buffer_write(ack_buffer, buffer_u8, 255); // ACK marker
buffer_write(ack_buffer, buffer_u32, seq_num);
network_send_udp(socket, server_ip, server_port, ack_buffer, 5);
buffer_delete(ack_buffer);
// Check if we've already processed this sequence number (duplicate)
if (ds_map_exists(received_sequences, seq_num)) {
exit; // Duplicate packet, ignore
}
// Mark as received and trim cache if needed
ds_map_add(received_sequences, seq_num, current_time);
if (ds_map_size(received_sequences) &gt; SEQUENCE_CACHE_SIZE) {
// Remove oldest entry
var oldest_seq = ds_map_find_first(received_sequences);
ds_map_delete(received_sequences, oldest_seq);
}
// Extract original packet (skip the 5-byte reliable header)
var original_size = bufferSize - 5;
var original_buffer = buffer_create(original_size, buffer_fixed, 1);
buffer_copy(_buffer, 5, original_size, original_buffer, 0);
_buffer = original_buffer;
bufferSize = original_size;
buffer_seek(_buffer, buffer_seek_start, 0);
needs_cleanup = true;
}
// Check if this is a fragmented packet (no size prefix, starts with fragment header)
var first_bytes = buffer_peek(_buffer, 0, buffer_u16);
var has_size_prefix = (bufferSize &gt; 4 &amp;&amp; buffer_peek(_buffer, 0, buffer_s32) + 4 == bufferSize);
var UDP_MAX_FRAGMENT_SIZE = 1200; // Must match server setting
if (!has_size_prefix &amp;&amp; bufferSize &gt;= 4) {
// This might be a fragment - check fragment header
var fragment_id = buffer_read(_buffer, buffer_u16);
var fragment_index = buffer_read(_buffer, buffer_u8);
var total_fragments = buffer_read(_buffer, buffer_u8);
// If total_fragments looks reasonable (1-255), treat as fragment
if (total_fragments &gt; 0 &amp;&amp; total_fragments &lt; 256 &amp;&amp; fragment_index &lt; total_fragments) {
// Get or create fragment map for this packet
var frag_map;
if (ds_map_exists(fragment_buffers, fragment_id)) {
frag_map = ds_map_find_value(fragment_buffers, fragment_id);
} else {
frag_map = ds_map_create();
ds_map_add(fragment_buffers, fragment_id, frag_map);
ds_map_add(frag_map, "total", total_fragments);
ds_map_add(frag_map, "received", 0);
ds_map_add(fragment_timestamps, fragment_id, current_time);
}
// Store this fragment
var fragment_data_size = bufferSize - 4;
var fragment_buffer = buffer_create(fragment_data_size, buffer_fixed, 1);
buffer_copy(_buffer, 4, fragment_data_size, fragment_buffer, 0);
ds_map_add(frag_map, fragment_index, fragment_buffer);
ds_map_replace(frag_map, "received", ds_map_find_value(frag_map, "received") + 1);
// Check if we have all fragments
if (ds_map_find_value(frag_map, "received") == total_fragments) {
// Reassemble the complete packet
var max_payload = UDP_MAX_FRAGMENT_SIZE - 4;
var total_size = 0;
for (var i = 0; i &lt; total_fragments; i++) {
var frag_buf = ds_map_find_value(frag_map, i);
total_size += buffer_get_size(frag_buf);
}
// Reassemble without adding size prefix - it's already in the fragment data
var reassembled = buffer_create(total_size, buffer_fixed, 1);
var write_pos = 0;
for (var i = 0; i &lt; total_fragments; i++) {
var frag_buf = ds_map_find_value(frag_map, i);
var frag_size = buffer_get_size(frag_buf);
buffer_copy(frag_buf, 0, frag_size, reassembled, write_pos);
write_pos += frag_size;
buffer_delete(frag_buf);
}
ds_map_destroy(frag_map);
ds_map_delete(fragment_buffers, fragment_id);
ds_map_delete(fragment_timestamps, fragment_id);
// Now process the reassembled packet as normal
_buffer = reassembled;
bufferSize = total_size;
buffer_seek(_buffer, buffer_seek_start, 0);
} else {
// Waiting for more fragments
exit;
}
}
}
// Normal packet processing (original code)
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);
switch(msgid){
case 254:
var clientID = buffer_read(_buffer, buffer_u8);
if(ds_list_size(roomList) &gt; 0){
var findsocket = ds_list_find_index(roomList, clientID);
if(findsocket &gt;= 0){
ds_list_delete(roomList, findsocket);
}
}
for(var i=0; i&lt;ds_list_size(roomListData); i++){
var arrList = roomListData[| i];
if(arrList[0] == clientID){
ds_list_delete(roomListData, i);
}
}
for(var f=0; f&lt;ds_list_size(global.idList); f++){
var arrList = global.idList[| f];
if(clientID == arrList[0, 0]){
ds_list_delete(global.idList, f);
}
}
for(var v=0; v&lt;ds_list_size(posData); v++){
var arrList = posData[| v];
if(clientID == arrList[0]){
ds_list_delete(posData, v);
}
}
if(instance_exists(oHatchling)){
with(oHatchling){
if(myid != 0){
instance_destroy();
}
}
}
break;
case 250:
var ban = buffer_read(_buffer, buffer_u8);
if(ban){
banned = true;
} else {
kicked = true;
}
instance_destroy();
break;
case 200:
global.clientID = preferredcolor;
break;
case 100:
var clientID = buffer_read(_buffer, buffer_u8);
var clientX = buffer_read(_buffer, buffer_s16);
var clientY = buffer_read(_buffer, buffer_s16);
var clientSprite = buffer_read(_buffer, buffer_s16);
var clientImage = buffer_read(_buffer, buffer_s16);
var clientA1 = buffer_read(_buffer, buffer_s16);
var clientA1X = buffer_read(_buffer, buffer_s16);
var clientA1Y = buffer_read(_buffer, buffer_s16);
var clientA2 = buffer_read(_buffer, buffer_s16);
var clientA2X = buffer_read(_buffer, buffer_s16);
var clientA2Y = buffer_read(_buffer, buffer_s16);
var clientA2A = buffer_read(_buffer, buffer_s16);
var clientMirror = buffer_read(_buffer, buffer_s16);
var clientArmmsl = buffer_read(_buffer, buffer_s16);
var clientRoom = buffer_read(_buffer, buffer_s16);
var clientName = buffer_read(_buffer, buffer_string);
var clientBlend = buffer_read(_buffer, buffer_s16);
var clientFXTimer = buffer_read(_buffer, buffer_s8);
var clientRoomPrev = buffer_read(_buffer, buffer_s16);
var clientState = buffer_read(_buffer, buffer_u8);
var clientSAX = buffer_read(_buffer, buffer_u8);
var clientSpeedboost = buffer_read(_buffer, buffer_u8);
var clientSJBall = buffer_read(_buffer, buffer_u8);
var clientSJDir = buffer_read(_buffer, buffer_u8);
var clientSpeedCharge = buffer_read(_buffer, buffer_u8);
var clientPlayerHealth = buffer_read(_buffer, buffer_s16);
var findsocket = ds_list_find_index(roomList, clientID);
var clientSpectator = buffer_read(_buffer, buffer_u8);
var clientInvincible = buffer_read(_buffer, buffer_u8);
var clientMosaic = buffer_read(_buffer, buffer_u8);
var clientReform = buffer_read(_buffer, buffer_u8);
var clientVisible = buffer_read(_buffer, buffer_u8);
if(global.clientID != clientID){
if(findsocket &lt; 0){
if(clientRoom == room || clientRoom == rm_options || clientRoom == itemroom || clientRoom == subscreenroom || clientRoom == maproom || clientRoom == rm_subscreen){
ds_list_add(roomList, clientID);
var arr;
arr[0] = clientID;
arr[1] = clientX;
arr[2] = clientY;
arr[3] = clientSprite;
arr[4] = clientImage;
arr[5] = clientA1;
arr[6] = clientA1X;
arr[7] = clientA1Y;
arr[8] = clientA2;
arr[9] = clientA2X;
arr[10] = clientA2Y;
arr[11] = clientA2A;
arr[12] = clientMirror;
arr[13] = clientArmmsl;
arr[14] = clientRoom;
arr[15] = clientName;
arr[16] = clientBlend;
arr[17] = clientFXTimer;
arr[18] = clientRoomPrev;
arr[19] = clientState;
arr[20] = clientSAX;
arr[21] = clientSpeedboost;
arr[22] = clientSJBall;
arr[23] = clientSJDir;
arr[24] = clientSpeedCharge;
arr[25] = clientPlayerHealth;
arr[26] = clientSpectator;
arr[27] = clientInvincible;
arr[28] = clientMosaic;
arr[29] = clientReform;
arr[30] = clientVisible;
ds_list_add(roomListData, arr);
}
} else {
var arr;
arr[0] = clientID;
arr[1] = clientX;
arr[2] = clientY;
arr[3] = clientSprite;
arr[4] = clientImage;
arr[5] = clientA1;
arr[6] = clientA1X;
arr[7] = clientA1Y;
arr[8] = clientA2;
arr[9] = clientA2X;
arr[10] = clientA2Y;
arr[11] = clientA2A;
arr[12] = clientMirror;
arr[13] = clientArmmsl;
arr[14] = clientRoom;
arr[15] = clientName;
arr[16] = clientBlend;
arr[17] = clientFXTimer;
arr[18] = clientRoomPrev;
arr[19] = clientState;
arr[20] = clientSAX;
arr[21] = clientSpeedboost;
arr[22] = clientSJBall;
arr[23] = clientSJDir;
arr[24] = clientSpeedCharge;
arr[25] = clientPlayerHealth;
arr[26] = clientSpectator;
arr[27] = clientInvincible;
arr[28] = clientMosaic;
arr[29] = clientReform;
arr[30] = clientVisible;
var indexValue = ds_list_find_value(roomList, findsocket);
for(var i=0; i&lt;ds_list_size(roomListData); i++){
var arrList = roomListData[| i];
if(arrList[0] == indexValue){
roomListData[| i] = arr;
}
}
if(clientRoom != room &amp;&amp; (clientRoom != rm_options &amp;&amp; clientRoom != itemroom &amp;&amp; clientRoom != subscreenroom &amp;&amp; clientRoom != maproom &amp;&amp; clientRoom != rm_subscreen)){
sameRoom = false;
var indexValue = ds_list_find_value(roomList, findsocket);
ds_list_delete(roomList, findsocket);
for(var i=0; i&lt;ds_list_size(roomListData); i++){
var arrList = roomListData[| i];
if(arrList[0] == indexValue){
ds_list_delete(roomListData, i);
}
}
}
}
}
break;
case 101:
var clientID = buffer_read(_buffer, buffer_u8);
var clientRoom = buffer_read(_buffer, buffer_s16);
var clientMapX = buffer_read(_buffer, buffer_s16);
var clientMapY = buffer_read(_buffer, buffer_s16);
var sax = buffer_read(_buffer, buffer_u8);
var spectator = buffer_read(_buffer, buffer_u8);
var findsocket = ds_list_find_index(roomList, clientID);
/*
if(instance_exists(oCharacter)){
if(clientRoom == rm_death){
if(oCharacter.state != oCharacter.DEFEATED){
oCharacter.alarm[0] = 6;
oCharacter.state = oCharacter.DEFEATED;
mus_current_fadeout();
sfx_stop_all();
}
}
}
*/
if(clientRoom == room &amp;&amp; global.clientID != clientID){
sameRoom = true;
} else if(clientRoom != room &amp;&amp; global.clientID != clientID &amp;&amp; (clientRoom != rm_options &amp;&amp; clientRoom != itemroom &amp;&amp; clientRoom != subscreenroom &amp;&amp; clientRoom != maproom &amp;&amp; clientRoom != rm_subscreen)){
if(ds_list_size(roomList) &gt; 0 &amp;&amp; findsocket &gt;= 0){
sameRoom = false;
var indexValue = ds_list_find_value(roomList, findsocket);
ds_list_delete(roomList, findsocket);
for(var i=0; i&lt;ds_list_size(roomListData); i++){
var arrList = roomListData[| i];
if(arrList[0] == clientID){
ds_list_delete(roomListData, i);
}
}
}
}
var findsocket = ds_list_find_index(roomList, clientID);
if(ds_list_size(roomList) &gt; 0 &amp;&amp; findsocket &gt;= 0){
for(var i=0; i&lt;ds_list_size(roomListData); i++){
var arrList = roomListData[| i];
if(arrList[0] == clientID){
arrList[14] = clientRoom;
roomListData[| i] = arrList;
}
}
}
checkList = ds_list_create();
if(ds_list_size(global.idList) &gt; 0){
for(var f=0; f&lt;ds_list_size(global.idList); f++){
if(ds_list_size(posData) &gt; 0 &amp;&amp; clientID != global.clientID){
var arrPosData;
arrPosData[0] = clientID;
arrPosData[1] = clientMapX;
arrPosData[2] = clientMapY;
arrPosData[3] = sax;
arrPosData[4] = clientRoom;
arrPosData[5] = spectator;
for(var v=0; v&lt;ds_list_size(posData); v++){
var arr = posData[| v];
ds_list_add(checkList, arr[0]);
if(arr[0] == clientID){
posData[| v] = arrPosData;
}
}
var find = ds_list_find_index(checkList, clientID);
if(find &lt; 0){
ds_list_add(posData, arrPosData);
}
} else if(ds_list_size(posData) == 0 &amp;&amp; clientID != global.clientID){
var arrPosData;
arrPosData[0] = clientID;
arrPosData[1] = clientMapX;
arrPosData[2] = clientMapY;
arrPosData[3] = sax;
arrPosData[4] = clientRoom;
arrPosData[5] = spectator;
ds_list_add(posData, arrPosData);
if(instance_exists(oMapCursor) &amp;&amp; surface_exists(oSS_Control.s_map)){
surface_free(oSS_Control.s_map);
}
}
}
}
ds_list_destroy(checkList);
if(clientRoom == rm_a4b01 &amp;&amp; room != rm_a4b01 &amp;&amp; global.event[203] &gt; 0 &amp;&amp; global.event[203] &lt; 9 &amp;&amp; !teleport){
if(room == rm_a4b02 || room == rm_a4b03 || room == rm_a4b04 || room == rm_a4b05 || room == rm_a4b06 || room == rm_a4b07 || room == rm_a4b08 || room == rm_a4b09 || room == rm_a4b10 || room == rm_a4b11 || room == rm_a4b12 || room == rm_a4b13 || room == rm_a4b14 || room == rm_a4b15 || room == rm_a4b16 || room == rm_a4b17 || room == rm_a4b18 || room == rm_a4b19){
teleport = true;
global.targetx = 624;
global.targety = 144;
room_change(rm_a4b01, 1);
}
}
break;
case 102:
ds_list_read(global.idList, strict_decompress(buffer_read(_buffer, buffer_string)));
break;
case 104:
var playerHealth = buffer_read(_buffer, buffer_s16);
var missiles = buffer_read(_buffer, buffer_s16);
var smissiles = buffer_read(_buffer, buffer_u8);
var pbombs = buffer_read(_buffer, buffer_u8);
var clientID = buffer_read(_buffer, buffer_u8);
global.playerhealth = playerHealth;
global.missiles = missiles;
global.smissiles = smissiles;
global.pbombs = pbombs;
break;
case 105:
var ping = buffer_read(_buffer, buffer_u32);
global.ping = current_time - ping;
break;
case 106:
load_character_vars();
reset_dmap();
global.itemPrev = array_clone(global.item);
global.metdeadPrev = array_clone(global.metdead);
global.eventPrev = array_clone(global.event);
global.dmapPrev = array_clone(global.dmap);
popup_text("Stats reset");
break;
case 107:
disconnectTimer = -10;
break;
case 108:
var clientID = buffer_read(_buffer, buffer_u8);
var team = buffer_read(_buffer, buffer_u8);
var spacejump = buffer_read(_buffer, buffer_u8);
var screwattack = buffer_read(_buffer, buffer_u8);
var spiderball = buffer_read(_buffer, buffer_u8);
var speedbooster = buffer_read(_buffer, buffer_u8);
var bomb = buffer_read(_buffer, buffer_u8);
var ibeam = buffer_read(_buffer, buffer_u8);
var wbeam = buffer_read(_buffer, buffer_u8);
var pbeam = buffer_read(_buffer, buffer_u8);
var sbeam = buffer_read(_buffer, buffer_u8);
var cbeam = buffer_read(_buffer, buffer_u8);
var otherItemArr;
otherItemArr[0] = clientID;
otherItemArr[1] = team;
otherItemArr[2] = spacejump;
otherItemArr[3] = screwattack;
otherItemArr[4] = spiderball;
otherItemArr[5] = speedbooster;
otherItemArr[6] = bomb;
otherItemArr[7] = ibeam;
otherItemArr[8] = wbeam;
otherItemArr[9] = pbeam;
otherItemArr[10] = sbeam;
otherItemArr[11] = cbeam;
if(ds_list_size(global.otherPlayerItems) == 0){
ds_list_add(global.otherPlayerItems, otherItemArr);
} else {
var IDCheck = 0;
for(var i=0; i&lt;ds_list_size(global.otherPlayerItems); i++){
var tempArr = global.otherPlayerItems[| i];
var ID = tempArr[0];
if(ID == clientID){
IDCheck = 1;
global.otherPlayerItems[| i] = otherItemArr;
}
}
if(!IDCheck){
ds_list_add(global.otherPlayerItems, otherItemArr);
}
}
break;
case 109:
global.showHealthIndicatorsTimer = 15 * 60;
break;
case 110:
var checkBeam = buffer_read(_buffer, buffer_u8);
var checkMissile = buffer_read(_buffer, buffer_u8);
var checkDamage = buffer_read(_buffer, buffer_u8);
var checkFreeze = buffer_read(_buffer, buffer_u8);
if(checkMissile &amp;&amp; global.playerFreeze &gt; 151) break;
if(instance_exists(oCharacter) &amp;&amp; oCharacter.invincible == 0){
with(oCharacter){
damageDir = -1;
knockbackY = -3;
global.multiDamageCollision = true;
if(checkBeam){
otherOBJ = oBeam;
global.ignoreKnockback = true;
}
if(checkMissile) otherOBJ = oMissile;
if(checkMissile &amp;&amp; global.playerFreeze &gt; 0 &amp;&amp; global.playerFreeze &lt;= 151 &amp;&amp; !global.frozenNormally) global.playerFreeze = 1;
if(global.frozenNormally) show_debug_message("normal freeze");
if(checkFreeze &amp;&amp; global.playerFreeze == 0 &amp;&amp; !global.frozenNormally){
if(checkBeam &amp;&amp; !(global.currentsuit == 2 &amp;&amp; global.item[5] == 1) &amp;&amp; global.playerFreeze == 0 &amp;&amp; invincible == 0 &amp;&amp; canbehit &amp;&amp; state != IDLE &amp;&amp; state != SAVING &amp;&amp; state != SAVINGFX &amp;&amp; state != SAVINGSHIPFX &amp;&amp; state != SAVINGSHIP &amp;&amp; state != ELEVATOR &amp;&amp; state != GFELEVATOR){
global.playerFreeze = 156; damageDir = 0; knockbackY = 0; global.frozenByRollback = true;
with(oControl){
kLeft = 0;
kRight = 0;
kUp = 0;
kDown = 0;
}
}
if(checkMissile &amp;&amp; (checkDamage == 10 || checkDamage == 20) &amp;&amp; !(global.currentsuit == 2 &amp;&amp; global.item[5] == 1) &amp;&amp; global.playerFreeze == 0 &amp;&amp; invincible == 0 &amp;&amp; canbehit &amp;&amp; state != IDLE &amp;&amp; state != SAVING &amp;&amp; state != SAVINGFX &amp;&amp; state != SAVINGSHIPFX &amp;&amp; state != SAVINGSHIP &amp;&amp; state != ELEVATOR &amp;&amp; state != GFELEVATOR){
global.playerFreeze = 156; damageDir = 0; knockbackY = 0; global.frozenByRollback = true;
with(oControl){
kLeft = 0;
kRight = 0;
kUp = 0;
kDown = 0;
}
}
}
if(checkDamage == 100) checkDamage = 50;
//if(global.item[5] &amp;&amp; checkBeam &amp;&amp; checkFreeze &amp;&amp; global.currentsuit == 2) checkDamage = checkDamage * 8;
if(!canbehit || state == IDLE || state == SAVING &amp;&amp; state == SAVINGFX || state == SAVINGSHIPFX || state == SAVINGSHIP || state == ELEVATOR || state == GFELEVATOR) checkDamage = 0;
if(!global.frozenNormally &amp;&amp; canbehit &amp;&amp; state != IDLE &amp;&amp; state != SAVING &amp;&amp; state != SAVINGFX &amp;&amp; state != SAVINGSHIPFX &amp;&amp; state != SAVINGSHIP &amp;&amp; state != ELEVATOR &amp;&amp; state != GFELEVATOR) damage_player(checkDamage, 5 * damageDir, knockbackY, 0, 0);
}
}
break;
case 111:
var newTeam = buffer_read(_buffer, buffer_u8);
if(newTeam == 1) global.sax = 0;
if(newTeam == 2) global.sax = 1;
break;
case 112:
var saxmode = buffer_read(_buffer, buffer_u8);
var newTeam = buffer_read(_buffer, buffer_u8);
global.saxmode = saxmode;
if(newTeam == 1) global.sax = 0;
if(newTeam == 2) global.sax = 1;
break;
case 113:
var saxmode = buffer_read(_buffer, buffer_u8);
var lobbyLocked = buffer_read(_buffer, buffer_u8);
var samCount = buffer_read(_buffer, buffer_u8);
var damageMultStr = buffer_read(_buffer, buffer_string);
var damageMult = real(damageMultStr);
var experimental = buffer_read(_buffer, buffer_u8);
global.damageMult = damageMult;
global.saxmode = saxmode;
global.experimental = experimental;
if(!lobbyLocked){
if(global.spectator){
global.spectator = false;
global.spectatorIndex = -1;
}
}
global.lobbyLocked = lobbyLocked;
global.samCount = samCount;
break;
case 114:
var lobbyLocked = buffer_read(_buffer, buffer_u8);
if(lobbyLocked){
global.spectator = true;
global.spectatorIndex = -1;
global.mosaic = false;
}
global.lobbyLocked = lobbyLocked;
break;
case 115:
var getGravity = buffer_read(_buffer, buffer_u8);
if(getGravity &amp;&amp; global.saxmode &amp;&amp; global.sax &amp;&amp; !global.item[9] &amp;&amp; instance_number(oCoreXGravity) == 0 &amp;&amp; string_count("rm_a", room_get_name(room))){
instance_create(irandom_range(0, room_width), -100, oCoreXGravity);
}
break;
case 116:
var receivedPasswordHash = buffer_read(_buffer, buffer_string);
if(sha1_string_unicode(oControl.password) == receivedPasswordHash){
global.moderator = true;
} else global.moderator = false;
break;
case 0:
global.clientID = buffer_read(_buffer, buffer_u8);
show_debug_message(string(msgid) + " " + string(global.clientID));
popup_text("Received ID " + string(global.clientID));
global.receiving = true;
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 200);
buffer_write(buffer, buffer_u8, global.clientID);
buffer_write(buffer, buffer_u8, preferredcolor);
buffer_write(buffer, buffer_u8, global.sax);
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);
buffer_write(buffer, buffer_u8, global.sax);
var result = network_send_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
break;
case 1:
ds_grid_read(global.onlineReceived, strict_decompress(buffer_read(_buffer, buffer_string)));
global.receivedClientID = buffer_read(_buffer, buffer_u8);
global.receivedPacketID++;
if(global.receivedClientID != global.clientID){
update_variables("disablesame");
update_variables("replaceglobalvars");
update_variables("updateprev");
alarm[0] = 10;
ds_grid_clear(global.onlineReceived, -1);
}
break;
case 2:
ds_grid_read(global.onlineReceived, strict_decompress(buffer_read(_buffer, buffer_string)));
global.receivedClientID = buffer_read(_buffer, buffer_u8);
update_variables("disablesame");
update_variables("updateprev");
//global.itemChanges = 0;
//global.metdeadChanges = 0;
//global.eventChanges = 0;
alarm[0] = 10;
ds_grid_clear(global.onlineReceived, -1);
break;
case 3:
queenHealth = buffer_read(_buffer, buffer_s32);
var clientID = buffer_read(_buffer, buffer_u8);
phase = buffer_read(_buffer, buffer_s8);
state = buffer_read(_buffer, buffer_s8);
if(clientID != global.clientID){
if(instance_exists(oQueen) &amp;&amp; instance_exists(oQueenHead) &amp;&amp; !is_undefined(oQueenHead.myhealth) &amp;&amp; !is_undefined(oQueen.phase)){
if(oQueen.phase == phase){
if(global.queenhealthPrev != queenHealth){
if(queenHealth == 999999){
queenHealth = 0;
oQueenHead.myhealth = queenHealth;
if(queenHealth &lt;= 0){
with(oQueenHead){
if (myhealth &lt;= 0 &amp;&amp; state != 100 &amp;&amp; state != 50) {
if (oQueen.phase &lt; 3) head_damage = 1;
if (oQueen.phase == 3) head_damage = 2;
if (oQueen.phase &lt; 5) {
state = 50;
statetime = 0;
myhealth = 999999;
with (oQueen) {
state = 6;
statetime = 0;
}
}
if (oQueen.phase == 5) {
with (oQueen) {
state = 100;
statetime = 0;
}
state = 100;
}
}
}
queenHealth = 999999;
}
}
global.queenhealthPrev = queenHealth;
oQueenHead.myhealth = queenHealth;
}
}
if(global.queenphasePrev != phase){
global.queenphasePrev = phase;
}
}
} else {
if(instance_exists(oQueen) &amp;&amp; instance_exists(oQueenHead) &amp;&amp; !is_undefined(oQueenHead.myhealth) &amp;&amp; !is_undefined(oQueen.phase)){
/*
if(oQueen.phase == phase){
if(global.queenhealthPrev != queenHealth){
global.queenhealthPrev = queenHealth;
oQueenHead.myhealth = queenHealth;
}
}
if(global.queenphasePrev != phase){
global.queenphasePrev = phase;
}
*/
global.queenhealthPrev = oQueenHead.myhealth;
global.queenphasePrev = oQueen.phase;
}
}
break;
case 4:
var _seed = buffer_read(_buffer, buffer_f64);
var clientID = buffer_read(_buffer, buffer_u8);
if(clientID != global.clientID){
if(seed != _seed){
seed = _seed;
show_debug_message("seed received");
popup_seed("Seed received");
}
}
//Power-ups
oControl.mod_bombs = buffer_read(_buffer, buffer_s16);
oControl.mod_spider = buffer_read(_buffer, buffer_s16);
oControl.mod_jumpball = buffer_read(_buffer, buffer_s16);
oControl.mod_hijump = buffer_read(_buffer, buffer_s16);
oControl.mod_varia = buffer_read(_buffer, buffer_s16);
oControl.mod_spacejump = buffer_read(_buffer, buffer_s16);
oControl.mod_speedbooster = buffer_read(_buffer, buffer_s16);
oControl.mod_screwattack = buffer_read(_buffer, buffer_s16);
oControl.mod_gravity = buffer_read(_buffer, buffer_s16);
oControl.mod_charge = buffer_read(_buffer, buffer_s16);
oControl.mod_ice = buffer_read(_buffer, buffer_s16);
oControl.mod_wave = buffer_read(_buffer, buffer_s16);
oControl.mod_spazer = buffer_read(_buffer, buffer_s16);
oControl.mod_plasma = buffer_read(_buffer, buffer_s16);
//Missiles
oControl.mod_52 = buffer_read(_buffer, buffer_s16);
oControl.mod_53 = buffer_read(_buffer, buffer_s16);
oControl.mod_54 = buffer_read(_buffer, buffer_s16);
oControl.mod_55 = buffer_read(_buffer, buffer_s16);
oControl.mod_56 = buffer_read(_buffer, buffer_s16);
oControl.mod_57 = buffer_read(_buffer, buffer_s16);
oControl.mod_60 = buffer_read(_buffer, buffer_s16);
oControl.mod_100 = buffer_read(_buffer, buffer_s16);
oControl.mod_101 = buffer_read(_buffer, buffer_s16);
oControl.mod_102 = buffer_read(_buffer, buffer_s16);
oControl.mod_104 = buffer_read(_buffer, buffer_s16);
oControl.mod_105 = buffer_read(_buffer, buffer_s16);
oControl.mod_106 = buffer_read(_buffer, buffer_s16);
oControl.mod_107 = buffer_read(_buffer, buffer_s16);
oControl.mod_109 = buffer_read(_buffer, buffer_s16);
oControl.mod_111 = buffer_read(_buffer, buffer_s16);
oControl.mod_150 = buffer_read(_buffer, buffer_s16);
oControl.mod_151 = buffer_read(_buffer, buffer_s16);
oControl.mod_152 = buffer_read(_buffer, buffer_s16);
oControl.mod_153 = buffer_read(_buffer, buffer_s16);
oControl.mod_154 = buffer_read(_buffer, buffer_s16);
oControl.mod_155 = buffer_read(_buffer, buffer_s16);
oControl.mod_156 = buffer_read(_buffer, buffer_s16);
oControl.mod_159 = buffer_read(_buffer, buffer_s16);
oControl.mod_161 = buffer_read(_buffer, buffer_s16);
oControl.mod_163 = buffer_read(_buffer, buffer_s16);
oControl.mod_202 = buffer_read(_buffer, buffer_s16);
oControl.mod_203 = buffer_read(_buffer, buffer_s16);
oControl.mod_204 = buffer_read(_buffer, buffer_s16);
oControl.mod_205 = buffer_read(_buffer, buffer_s16);
oControl.mod_208 = buffer_read(_buffer, buffer_s16);
oControl.mod_210 = buffer_read(_buffer, buffer_s16);
oControl.mod_211 = buffer_read(_buffer, buffer_s16);
oControl.mod_214 = buffer_read(_buffer, buffer_s16);
oControl.mod_250 = buffer_read(_buffer, buffer_s16);
oControl.mod_252 = buffer_read(_buffer, buffer_s16);
oControl.mod_255 = buffer_read(_buffer, buffer_s16);
oControl.mod_257 = buffer_read(_buffer, buffer_s16);
oControl.mod_259 = buffer_read(_buffer, buffer_s16);
oControl.mod_303 = buffer_read(_buffer, buffer_s16);
oControl.mod_304 = buffer_read(_buffer, buffer_s16);
oControl.mod_307 = buffer_read(_buffer, buffer_s16);
oControl.mod_308 = buffer_read(_buffer, buffer_s16);
oControl.mod_309 = buffer_read(_buffer, buffer_s16);
//Super Missiles
oControl.mod_51 = buffer_read(_buffer, buffer_s16);
oControl.mod_110 = buffer_read(_buffer, buffer_s16);;
oControl.mod_162 = buffer_read(_buffer, buffer_s16);
oControl.mod_206 = buffer_read(_buffer, buffer_s16); //SPECIAL
oControl.mod_207 = buffer_read(_buffer, buffer_s16);
oControl.mod_209 = buffer_read(_buffer, buffer_s16);
oControl.mod_215 = buffer_read(_buffer, buffer_s16);
oControl.mod_256 = buffer_read(_buffer, buffer_s16);
oControl.mod_300 = buffer_read(_buffer, buffer_s16);
oControl.mod_305 = buffer_read(_buffer, buffer_s16);
//Energy Tanks
oControl.mod_50 = buffer_read(_buffer, buffer_s16);
oControl.mod_103 = buffer_read(_buffer, buffer_s16);
oControl.mod_108 = buffer_read(_buffer, buffer_s16);
oControl.mod_157 = buffer_read(_buffer, buffer_s16);
oControl.mod_158 = buffer_read(_buffer, buffer_s16);
oControl.mod_200 = buffer_read(_buffer, buffer_s16);
oControl.mod_201 = buffer_read(_buffer, buffer_s16);
oControl.mod_251 = buffer_read(_buffer, buffer_s16);
oControl.mod_254 = buffer_read(_buffer, buffer_s16);
oControl.mod_306 = buffer_read(_buffer, buffer_s16);
//Power Bombs
oControl.mod_58 = buffer_read(_buffer, buffer_s16);
oControl.mod_59 = buffer_read(_buffer, buffer_s16);
oControl.mod_112 = buffer_read(_buffer, buffer_s16);
oControl.mod_160 = buffer_read(_buffer, buffer_s16);
oControl.mod_212 = buffer_read(_buffer, buffer_s16);
oControl.mod_213 = buffer_read(_buffer, buffer_s16);
oControl.mod_253 = buffer_read(_buffer, buffer_s16); //SPECIAL
oControl.mod_258 = buffer_read(_buffer, buffer_s16);
oControl.mod_301 = buffer_read(_buffer, buffer_s16);
oControl.mod_302 = buffer_read(_buffer, buffer_s16);
break;
case 5:
var monstersLeft = buffer_read(_buffer, buffer_s8);
var clientID = buffer_read(_buffer, buffer_u8);
if(global.clientID != clientID &amp;&amp; global.monstersleft != monstersLeft){
global.monstersleft = monstersLeft;
global.monstersleftPrev = global.monstersleft;
} else if(global.clientID == clientID){
global.monstersleftPrev = global.monstersleft;
}
alarm[2] = 10;
break;
case 6:
var monstersArea = buffer_read(_buffer, buffer_s8);
var clientID = buffer_read(_buffer, buffer_u8);
if(global.clientID != clientID &amp;&amp; global.monstersarea != monstersArea){
global.monstersarea = monstersArea;
global.monstersareaPrev = global.monstersarea;
} else if(global.clientID == clientID){
global.monstersareaPrev = global.monstersarea;
}
alarm[2] = 10;
break;
case 7:
var item = ds_list_create();
ds_list_read(item, strict_decompress(buffer_read(_buffer, buffer_string)));
var clientID = buffer_read(_buffer, buffer_u8);
var itemArr = item[| 0];
if(is_array(itemArr)){
for(var i=0; i&lt;array_length_1d(global.item); i++){
for(var f=0; f&lt;array_height_2d(itemArr); f++){
if(i == itemArr[f, 1]){
global.itemPrev[i] = itemArr[f, 0];
if(global.item[i] != itemArr[f, 0]){
global.item[i] = itemArr[f, 0];
if(i == 0){
global.bomb = 1;
global.bombPrev = global.bomb;
popup_text(get_text("Items", "Bombs") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 1){
global.powergrip = 1;
global.powergripPrev = global.powergrip;
popup_text(get_text("Items", "PowerGrip") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 2){
global.spiderball = 1;
global.spiderballPrev = global.spiderball;
popup_text(get_text("Items", "SpiderBall") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 3){
global.jumpball = 1;
global.jumpballPrev = global.jumpball;
popup_text(get_text("Items", "JumpBall") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 4){
global.hijump = 1;
global.hijumpPrev = global.hijump;
popup_text(get_text("Items", "HiJump") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 5){
if(global.currentsuit != 2){
global.currentsuit = 1;
global.currentsuitPrev = global.currentsuit;
}
popup_text(get_text("Items", "VariaSuit") + " " + get_text("GlobalOptions", "Enabled"));
if(sfx_isplaying(sndSpinJump)){
sfx_stop(sndSpinJump);
}
if(sfx_isplaying(sndSpaceJump)){
sfx_stop(sndSpaceJump);
}
if(sfx_isplaying(sndScrewAttack)){
sfx_stop(sndScrewAttack);
}
if(sfx_isplaying(sndSpaceScrewAttack)){
sfx_stop(sndSpaceScrewAttack);
}
}
if(i == 6){
global.spacejump = 1;
global.spacejumpPrev = global.spacejump;
popup_text(get_text("Items", "SpaceJump") + " " + get_text("GlobalOptions", "Enabled"));
if(sfx_isplaying(sndSpinJump)){
sfx_stop(sndSpinJump);
}
if(sfx_isplaying(sndSpaceJump)){
sfx_stop(sndSpaceJump);
}
if(sfx_isplaying(sndScrewAttack)){
sfx_stop(sndScrewAttack);
}
if(sfx_isplaying(sndSpaceScrewAttack)){
sfx_stop(sndSpaceScrewAttack);
}
}
if(i == 7){
global.speedbooster = 1;
global.speedboosterPrev = global.speedbooster;
popup_text(get_text("Items", "SpeedBooster") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 8){
global.screwattack = 1;
global.screwattackPrev = global.screwattack;
popup_text(get_text("Items", "ScrewAttack") + " " + get_text("GlobalOptions", "Enabled"));
if(sfx_isplaying(sndSpinJump)){
sfx_stop(sndSpinJump);
}
if(sfx_isplaying(sndSpaceJump)){
sfx_stop(sndSpaceJump);
}
if(sfx_isplaying(sndScrewAttack)){
sfx_stop(sndScrewAttack);
}
if(sfx_isplaying(sndSpaceScrewAttack)){
sfx_stop(sndSpaceScrewAttack);
}
}
if(i == 9){
global.currentsuit = 2;
global.currentsuitPrev = global.currentsuit;
popup_text(get_text("Items", "GravitySuit") + " " + get_text("GlobalOptions", "Enabled"));
if(sfx_isplaying(sndSpinJump)){
sfx_stop(sndSpinJump);
}
if(sfx_isplaying(sndSpaceJump)){
sfx_stop(sndSpaceJump);
}
if(sfx_isplaying(sndScrewAttack)){
sfx_stop(sndScrewAttack);
}
if(sfx_isplaying(sndSpaceScrewAttack)){
sfx_stop(sndSpaceScrewAttack);
}
}
if(i == 10){
global.cbeam = 1;
global.cbeamPrev = global.cbeam;
popup_text(get_text("Items", "ChargeBeam") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 11){
global.ibeam = 1;
global.ibeamPrev = global.ibeam;
popup_text(get_text("Items", "IceBeam") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 12){
global.wbeam = 1;
global.wbeamPrev = global.wbeam;
popup_text(get_text("Items", "WaveBeam") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 13){
global.sbeam = 1;
global.sbeamPrev = global.sbeam;
popup_text(get_text("Items", "SpazerBeam") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 14){
global.pbeam = 1;
global.pbeamPrev = global.pbeam;
popup_text(get_text("Items", "PlasmaBeam") + " " + get_text("GlobalOptions", "Enabled"));
}
}
}
}
}
}
alarm[3] = 10;
if(global.clientID == clientID){
ds_list_clear(global.onlineItem);
global.itemChanges = 0;
}
ds_list_destroy(item);
break;
case 8:
var metdead = ds_list_create();
ds_list_read(metdead, strict_decompress(buffer_read(_buffer, buffer_string)));
var clientID = buffer_read(_buffer, buffer_u8);
var metdeadArr = metdead[| 0];
if(is_array(metdeadArr)){
for(var i=0; i&lt;array_length_1d(global.metdead); i++){
for(var f=0; f&lt;array_height_2d(metdeadArr); f++){
if(i == metdeadArr[f, 1]){
global.metdeadPrev[i] = metdeadArr[f, 0];
if(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");
}
}
}
}
}
}
alarm[4] = 10;
if(global.clientID == clientID){
ds_list_clear(global.onlineMetdead);
global.metdeadChanges = 0;
}
ds_list_destroy(metdead);
break;
case 9:
var event = ds_list_create();
ds_list_read(event, strict_decompress(buffer_read(_buffer, buffer_string)));
var clientID = buffer_read(_buffer, buffer_u8);
var eventArr = event[| 0];
if(is_array(eventArr)){
for(var i=0; i&lt;array_length_1d(global.event); i++){
for(var f=0; f&lt;array_height_2d(eventArr); f++){
if(i == eventArr[f, 1] &amp;&amp; eventArr[f, 1] != 102){
global.eventPrev[i] = eventArr[f, 0];
if(global.event[i] != eventArr[f, 0]){
global.event[i] = eventArr[f, 0];
}
if(eventArr[f, 1] == 250) popup_text("EMP Activated");
if(eventArr[f, 1] == 308){
if(eventArr[f, 0] == 1 &amp;&amp; clientID != global.clientID){
if(instance_exists(oCharacter)){
with(oCharacter){
facing = 0;
if (global.currentsuit == 0) sprite_index = scr_suit_sprites(sFront,sFront_fusion);
if (global.currentsuit == 1) sprite_index = scr_suit_sprites(sVFront,sFront_fusion);
if (global.currentsuit == 2) sprite_index = scr_suit_sprites(sGFront,sFront_fusion);
canbehit = 0;
xVel = 0;
yVel = 0;
xAcc = 0;
yAcc = 0;
}
}
global.enablecontrol = 0;
oControl.displaygui = 0;
popup_text_ext("Ship reached", 120);
}
if(eventArr[f, 0] == 2 &amp;&amp; clientID != global.clientID){
oControl.displaygui = 0;
global.enablecontrol = 0;
if(instance_exists(oCharacter)){
with(oCharacter){
xVel = 0;
yVel = 0;
xAcc = 0;
yAcc = 0;
}
}
}
if(eventArr[f, 0] == 3 &amp;&amp; clientID != global.clientID){
instance_create(0, 0, oFinalFadeout);
mus_fadeout(musHatchling);
global.enablecontrol = 0;
if(instance_exists(oCharacter)){
with(oCharacter){
xVel = 0;
yVel = 0;
xAcc = 0;
yAcc = 0;
}
}
}
if(eventArr[f, 0] == 4 &amp;&amp; clientID != global.clientID){
if(instance_exists(oCharacter)){
with(oCharacter){
xVel = 0;
yVel = 0;
xAcc = 0;
yAcc = 0;
canbehit = 1;
}
}
remove_persistent_objects();
sfx_stop_all();
global.vibL = 0;
global.vibR = 0;
global.ingame = 0;
global.darkness = 0;
global.gotolog = -1;
global.enablecontrol = 1;
global.transitiontype = 0;
oControl.displaygui = 1;
room_goto(rm_credits);
mus_stop_all();
mus_play_once(musCredits);
}
}
}
}
}
}
alarm[5] = 10;
if(global.clientID == clientID){
ds_list_clear(global.onlineEvent);
global.eventChanges = 0;
}
ds_list_destroy(event);
break;
case 10:
var tileCount = buffer_read(_buffer, buffer_u16);
if(tileCount &gt; 0){
for(var i=0; i&lt;tileCount; i++){
var tileX = buffer_read(_buffer, buffer_u8);
var tileY = buffer_read(_buffer, buffer_u8);
var tileData = buffer_read(_buffer, buffer_u8);
global.dmapPrev[tileX, tileY] = tileData;
if(global.dmap[tileX, tileY] != tileData){
global.dmap[tileX, tileY] = tileData;
if(global.ingame){
with (oControl) event_user(2);
}
if(instance_exists(oMapCursor) &amp;&amp; surface_exists(oSS_Control.s_map)){
surface_free(oSS_Control.s_map);
}
}
}
var clientID = buffer_read(_buffer, buffer_u8);
}
alarm[6] = 10;
break;
case 11:
var itemstaken = buffer_read(_buffer, buffer_u8);
var clientID = buffer_read(_buffer, buffer_u8);
if(clientID != global.clientID &amp;&amp; itemstaken != global.itemstaken){
global.itemstakenPrev = itemstaken;
global.itemstaken = itemstaken;
} else if(clientID == global.clientID){
global.itemstakenPrev = global.itemstaken;
}
alarm[7] = 1;
break;
case 12:
var maxmissiles = buffer_read(_buffer, buffer_u16);
var clientID = buffer_read(_buffer, buffer_u8);
if(clientID != global.clientID &amp;&amp; maxmissiles != global.maxmissiles){
global.maxmissilesPrev = maxmissiles;
global.maxmissiles = maxmissiles;
} else if(clientID == global.clientID){
global.maxmissilesPrev = global.maxmissiles;
}
global.missilesPrev = maxmissiles;
global.missiles = maxmissiles;
alarm[8] = 1;
break;
case 13:
var maxsmissiles = buffer_read(_buffer, buffer_u8);
var clientID = buffer_read(_buffer, buffer_u8);
if(clientID != global.clientID &amp;&amp; maxsmissiles != global.maxsmissiles){
global.maxsmissilesPrev = maxsmissiles;
global.maxsmissiles = maxsmissiles;
} else if(clientID == global.clientID){
global.maxsmissilesPrev = global.maxsmissiles;
}
global.smissilesPrev = maxsmissiles;
global.smissiles = maxsmissiles;
alarm[9] = 1;
break;
case 14:
var maxpbombs = buffer_read(_buffer, buffer_u8);
var clientID = buffer_read(_buffer, buffer_u8);
if(clientID != global.clientID &amp;&amp; maxpbombs != global.maxpbombs){
global.maxpbombsPrev = maxpbombs;
global.maxpbombs = maxpbombs;
} else if(clientID == global.clientID){
global.maxpbombsPrev = global.maxpbombs;
}
global.pbombsPrev = maxpbombs;
global.pbombs = maxpbombs;
maxpbombsTimer = 1;
break;
case 15:
var maxhealth = buffer_read(_buffer, buffer_u16);
var clientID = buffer_read(_buffer, buffer_u8);
if(clientID != global.clientID &amp;&amp; maxhealth != global.maxhealth){
global.maxhealthPrev = maxhealth;
global.maxhealth = maxhealth;
} else if(clientID == global.clientID){
global.maxhealthPrev = global.maxhealth;
}
global.playerhealthPrev = maxhealth;
global.playerhealth = maxhealth;
maxhealthTimer = 1;
break;
case 16:
var etanks = buffer_read(_buffer, buffer_u8);
var clientID = buffer_read(_buffer, buffer_u8);
if(clientID != global.clientID &amp;&amp; etanks != global.etanks){
global.etanksPrev = etanks;
global.etanks = etanks;
} else if(clientID == global.clientID){
global.etanksPrev = global.etanks;
}
etanksTimer = 1;
break;
case 17:
var mtanks = buffer_read(_buffer, buffer_u8);
var clientID = buffer_read(_buffer, buffer_u8);
if(clientID != global.clientID &amp;&amp; mtanks != global.mtanks){
global.mtanksPrev = mtanks;
global.mtanks = mtanks;
} else if(clientID == global.clientID){
global.mtanksPrev = global.mtanks;
}
mtanksTimer = 1;
break;
case 18:
var stanks = buffer_read(_buffer, buffer_u8);
var clientID = buffer_read(_buffer, buffer_u8);
if(clientID != global.clientID &amp;&amp; stanks != global.stanks){
global.stanksPrev = stanks;
global.stanks = stanks;
} else if(clientID == global.clientID){
global.stanksPrev = global.stanks;
}
stanksTimer = 1;
break;
case 19:
var ptanks = buffer_read(_buffer, buffer_u8);
var clientID = buffer_read(_buffer, buffer_u8);
if(clientID != global.clientID &amp;&amp; ptanks != global.ptanks){
global.ptanksPrev = ptanks;
global.ptanks = ptanks;
} else if(clientID == global.clientID){
global.ptanksPrev = global.ptanks;
}
ptanksTimer = 1;
break;
case 20:
var time = buffer_read(_buffer, buffer_s32);
global.gametime = time;
break;
case 21:
var clientID = buffer_read(_buffer, buffer_u8);
var dir = buffer_read(_buffer, buffer_s16);
var sprX = buffer_read(_buffer, buffer_s16);
var sprY = buffer_read(_buffer, buffer_s16);
var charge = buffer_read(_buffer, buffer_u8);
var sax = buffer_read(_buffer, buffer_u8);
if(ds_list_size(roomListData) &gt; 0 &amp;&amp; clientID != global.clientID){
for(var i=0; i&lt;ds_list_size(roomListData); i++){
var arrDraw = roomListData[| i];
var arrID = arrDraw[0];
if(clientID == arrID){
if(instance_exists(oCharacter)){
with(oCharacter){
shoot_beam_receive(sprX, sprY, dir, charge, sax, clientID);
}
}
}
}
}
break;
case 22:
var clientID = buffer_read(_buffer, buffer_u8);
var bombX = buffer_read(_buffer, buffer_s16);
var bombY = buffer_read(_buffer, buffer_s16);
var sax = buffer_read(_buffer, buffer_u8);
if(ds_list_size(roomListData) &gt; 0 &amp;&amp; clientID != global.clientID){
for(var i=0; i&lt;ds_list_size(roomListData); i++){
var arrDraw = roomListData[| i];
var arrID = arrDraw[0];
if(clientID == arrID){
if(instance_exists(oCharacter)){
bomb = instance_create(bombX, bombY, oBombMulti);
bomb.sax = sax;
bomb.myid = clientID;
sfx_play(sndBombSet);
}
}
}
}
break;
case 23:
var clientID = buffer_read(_buffer, buffer_u8);
var currentWeapon = buffer_read(_buffer, buffer_u8);
var dir = buffer_read(_buffer, buffer_s16);
var missileX = buffer_read(_buffer, buffer_s16);
var missileY = buffer_read(_buffer, buffer_s16);
var sax = buffer_read(_buffer, buffer_u8);
var velX = buffer_read(_buffer, buffer_s8);
var velY = buffer_read(_buffer, buffer_s8);
var icemissiles = buffer_read(_buffer, buffer_u8);
if(ds_list_size(roomListData) &gt; 0 &amp;&amp; clientID != global.clientID){
for(var i=0; i&lt;ds_list_size(roomListData); i++){
var arrDraw = roomListData[| i];
var arrID = arrDraw[0];
if(clientID == arrID){
if(instance_exists(oCharacter)){
with(oCharacter){
shoot_missile_receive(dir, currentWeapon, missileX, missileY, sax, clientID, velX, velY, icemissiles);
}
}
}
}
}
break;
case 24:
var clientID = buffer_read(_buffer, buffer_u8);
var pbombX = buffer_read(_buffer, buffer_s16);
var pbombY = buffer_read(_buffer, buffer_s16);
var sax = buffer_read(_buffer, buffer_u8);
if(ds_list_size(roomListData) &gt; 0 &amp;&amp; clientID != global.clientID){
for(var i=0; i&lt;ds_list_size(roomListData); i++){
var arrDraw = roomListData[| i];
var arrID = arrDraw[0];
if(clientID == arrID){
if(instance_exists(oCharacter)){
pbomb = instance_create(pbombX, pbombY, oPBombMulti);
pbomb.sax = sax;
pbomb.myid = clientID;
sfx_play(sndPBombSet);
}
}
}
}
break;
case 25:
var playerhealth = buffer_read(_buffer, buffer_s16);
var clientID = buffer_read(_buffer, buffer_u8);
if(clientID != global.clientID &amp;&amp; playerhealth != global.playerhealth){
if(instance_exists(oCharacter)){
if(oCharacter.state != oCharacter.SAVINGFX &amp;&amp; oCharacter.state != oCharacter.SAVINGSHIPFX &amp;&amp; oCharacter.state != oCharacter.SAVINGSHIP &amp;&amp; oCharacter.state != oCharacter.SAVING){
global.playerhealthPrev = playerhealth;
global.playerhealth = playerhealth;
} else if(oCharacter.state == oCharacter.SAVINGFX || oCharacter.state == oCharacter.SAVINGSHIPFX || oCharacter.state == oCharacter.SAVINGSHIP || oCharacter.state == oCharacter.SAVING || (oCharacter.state == oCharacter.IDLE &amp;&amp; oCharacter.juststarted &gt; 0)){
if(global.playerhealth != global.maxhealth){
refill_heath_ammo();
}
if(global.missiles != global.maxmissiles){
refill_heath_ammo();
}
if(global.smissiles != global.maxsmissiles){
refill_heath_ammo();
}
if(global.pbombs != global.maxpbombs){
refill_heath_ammo();
}
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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 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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
}
} else {
global.playerhealthPrev = playerhealth;
global.playerhealth = playerhealth;
}
} else if(clientID == global.clientID){
global.playerhealthPrev = global.playerhealth;
}
healthTimer = 1;
break;
case 26:
var missiles = buffer_read(_buffer, buffer_s16);
var clientID = buffer_read(_buffer, buffer_u8);
if(clientID != global.clientID &amp;&amp; missiles != global.missiles){
if(instance_exists(oCharacter)){
if(oCharacter.state != oCharacter.SAVINGFX &amp;&amp; oCharacter.state != oCharacter.SAVINGSHIPFX &amp;&amp; oCharacter.state != oCharacter.SAVINGSHIP &amp;&amp; oCharacter.state != oCharacter.SAVING){
global.missilesPrev = missiles;
global.missiles = missiles;
} else if(oCharacter.state == oCharacter.SAVINGFX || oCharacter.state == oCharacter.SAVINGSHIPFX || oCharacter.state == oCharacter.SAVINGSHIP || oCharacter.state == oCharacter.SAVING || (oCharacter.state == oCharacter.IDLE &amp;&amp; oCharacter.juststarted &gt; 0)){
if(global.playerhealth != global.maxhealth){
refill_heath_ammo();
}
if(global.missiles != global.maxmissiles){
refill_heath_ammo();
}
if(global.smissiles != global.maxsmissiles){
refill_heath_ammo();
}
if(global.pbombs != global.maxpbombs){
refill_heath_ammo();
}
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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 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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
}
} else {
global.missilesPrev = missiles;
global.missiles = missiles;
}
} else if(clientID == global.clientID){
global.missilesPrev = global.missiles;
}
missilesTimer = 1;
break;
case 27:
var smissiles = buffer_read(_buffer, buffer_s16);
var clientID = buffer_read(_buffer, buffer_u8);
if(clientID != global.clientID &amp;&amp; smissiles != global.smissiles){
if(instance_exists(oCharacter)){
if(oCharacter.state != oCharacter.SAVINGFX &amp;&amp; oCharacter.state != oCharacter.SAVINGSHIPFX &amp;&amp; oCharacter.state != oCharacter.SAVINGSHIP &amp;&amp; oCharacter.state != oCharacter.SAVING){
global.smissilesPrev = smissiles;
global.smissiles = smissiles;
} else if(oCharacter.state == oCharacter.SAVINGFX || oCharacter.state == oCharacter.SAVINGSHIPFX || oCharacter.state == oCharacter.SAVINGSHIP || oCharacter.state == oCharacter.SAVING || (oCharacter.state == oCharacter.IDLE &amp;&amp; oCharacter.juststarted &gt; 0)){
if(global.playerhealth != global.maxhealth){
refill_heath_ammo();
}
if(global.missiles != global.maxmissiles){
refill_heath_ammo();
}
if(global.smissiles != global.maxsmissiles){
refill_heath_ammo();
}
if(global.pbombs != global.maxpbombs){
refill_heath_ammo();
}
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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 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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
}
} else {
global.smissilesPrev = smissiles;
global.smissiles = smissiles;
}
} else if(clientID == global.clientID){
global.smissilesPrev = global.smissiles;
}
smissilesTimer = 1;
break;
case 28:
var pbombs = buffer_read(_buffer, buffer_s16);
var clientID = buffer_read(_buffer, buffer_u8);
if(clientID != global.clientID &amp;&amp; pbombs != global.pbombs){
if(instance_exists(oCharacter)){
if(oCharacter.state != oCharacter.SAVINGFX &amp;&amp; oCharacter.state != oCharacter.SAVINGSHIPFX &amp;&amp; oCharacter.state != oCharacter.SAVINGSHIP &amp;&amp; oCharacter.state != oCharacter.SAVING){
global.pbombsPrev = pbombs;
global.pbombs = pbombs;
} else if(oCharacter.state == oCharacter.SAVINGFX || oCharacter.state == oCharacter.SAVINGSHIPFX || oCharacter.state == oCharacter.SAVINGSHIP || oCharacter.state == oCharacter.SAVING || (oCharacter.state == oCharacter.IDLE &amp;&amp; oCharacter.juststarted &gt; 0)){
if(global.playerhealth != global.maxhealth){
refill_heath_ammo();
}
if(global.missiles != global.maxmissiles){
refill_heath_ammo();
}
if(global.smissiles != global.maxsmissiles){
refill_heath_ammo();
}
if(global.pbombs != global.maxpbombs){
refill_heath_ammo();
}
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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 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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
}
} else {
global.pbombsPrev = pbombs;
global.pbombs = pbombs;
}
} else if(clientID == global.clientID){
global.pbombsPrev = global.pbombs;
}
pbombsTimer = 1;
break;
case 29:
var syncDiff = buffer_read(_buffer, buffer_u8);
if(syncDiff != syncedDifficulty){
syncedDifficulty = syncDiff;
var str;
switch(syncedDifficulty){
case 0:
str = "Easy";
break;
case 1:
str = "Normal";
break;
case 2:
str = "Hard";
break;
case 3:
str = "Fusion";
break;
}
popup_text(str);
}
if(instance_exists(oOptionsMod) &amp;&amp; oOptionsMod.menuDifficulty != syncedDifficulty) oOptionsMod.menuDifficulty = syncedDifficulty;
break;
case 30:
var syncELM = buffer_read(_buffer, buffer_u8);
if(syncELM != elm){
elm = syncELM;
var str;
switch(elm){
case 0:
str = "ELM Disabled";
break;
case 1:
str = "ELM Enabled";
break;
}
popup_text(str);
}
if(instance_exists(oOptionsMod) &amp;&amp; oOptionsMod.elm != elm) oOptionsMod.elm = elm;
break;
case 31:
var otherAbsorbRelativeX = buffer_read(_buffer, buffer_s16);
var otherAbsorbRelativeY = buffer_read(_buffer, buffer_s16);
var otherAbsorbSpriteHeight = buffer_read(_buffer, buffer_u8);
global.absorbRelativeX = otherAbsorbRelativeX;
global.absorbRelativeY = otherAbsorbRelativeY;
global.absorbSpriteHeight = otherAbsorbSpriteHeight;
global.beingAbsorbed = true;
break;
case 32:
var mapposx = buffer_read(_buffer, buffer_s16);
var mapposy = buffer_read(_buffer, buffer_s16);
global.mapmarker = 1;
global.mapmarkerx = mapposx;
global.mapmarkery = mapposy;
global.playerMapPosTimer = 600;
break;
case 33:
var mirror = buffer_read(_buffer, buffer_s8);
var sentRoom = buffer_read(_buffer, buffer_s16);
var playerX = buffer_read(_buffer, buffer_s16);
var playerY = buffer_read(_buffer, buffer_s16);
var sax = buffer_read(_buffer, buffer_s8);
if(room == sentRoom &amp;&amp; !sax){
seq = instance_create(playerX, playerY, oDeathSequenceMulti);
seq.facing = mirror;
}
break;
case 50:
var resend = false;
for(var i=0; i&lt;array_length_1d(global.item); i++){
var receivedItem = buffer_read(_buffer, buffer_u8);
if(receivedItem == 1 &amp;&amp; global.item[i] == 0){
global.item[i] = receivedItem;
global.itemPrev[i] = global.item[i];
if(i == 0){
global.bomb = 1;
global.bombPrev = global.bomb;
popup_text(get_text("Items", "Bombs") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 1){
global.powergrip = 1;
global.powergripPrev = global.powergrip;
popup_text(get_text("Items", "PowerGrip") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 2){
global.spiderball = 1;
global.spiderballPrev = global.spiderball;
popup_text(get_text("Items", "SpiderBall") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 3){
global.jumpball = 1;
global.jumpballPrev = global.jumpball;
popup_text(get_text("Items", "JumpBall") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 4){
global.hijump = 1;
global.hijumpPrev = global.hijump;
popup_text(get_text("Items", "HiJump") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 5){
global.currentsuit = 1;
global.currentsuitPrev = global.currentsuit;
popup_text(get_text("Items", "VariaSuit") + " " + get_text("GlobalOptions", "Enabled"));
if(sfx_isplaying(sndSpinJump)){
sfx_stop(sndSpinJump);
}
if(sfx_isplaying(sndSpaceJump)){
sfx_stop(sndSpaceJump);
}
if(sfx_isplaying(sndScrewAttack)){
sfx_stop(sndScrewAttack);
}
if(sfx_isplaying(sndSpaceScrewAttack)){
sfx_stop(sndSpaceScrewAttack);
}
}
if(i == 6){
global.spacejump = 1;
global.spacejumpPrev = global.spacejump;
popup_text(get_text("Items", "SpaceJump") + " " + get_text("GlobalOptions", "Enabled"));
if(sfx_isplaying(sndSpinJump)){
sfx_stop(sndSpinJump);
}
if(sfx_isplaying(sndSpaceJump)){
sfx_stop(sndSpaceJump);
}
if(sfx_isplaying(sndScrewAttack)){
sfx_stop(sndScrewAttack);
}
if(sfx_isplaying(sndSpaceScrewAttack)){
sfx_stop(sndSpaceScrewAttack);
}
}
if(i == 7){
global.speedbooster = 1;
global.speedboosterPrev = global.speedbooster;
popup_text(get_text("Items", "SpeedBooster") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 8){
global.screwattack = 1;
global.screwattackPrev = global.screwattack;
popup_text(get_text("Items", "ScrewAttack") + " " + get_text("GlobalOptions", "Enabled"));
if(sfx_isplaying(sndSpinJump)){
sfx_stop(sndSpinJump);
}
if(sfx_isplaying(sndSpaceJump)){
sfx_stop(sndSpaceJump);
}
if(sfx_isplaying(sndScrewAttack)){
sfx_stop(sndScrewAttack);
}
if(sfx_isplaying(sndSpaceScrewAttack)){
sfx_stop(sndSpaceScrewAttack);
}
}
if(i == 9){
global.currentsuit = 2;
global.currentsuitPrev = global.currentsuit;
popup_text(get_text("Items", "GravitySuit") + " " + get_text("GlobalOptions", "Enabled"));
if(sfx_isplaying(sndSpinJump)){
sfx_stop(sndSpinJump);
}
if(sfx_isplaying(sndSpaceJump)){
sfx_stop(sndSpaceJump);
}
if(sfx_isplaying(sndScrewAttack)){
sfx_stop(sndScrewAttack);
}
if(sfx_isplaying(sndSpaceScrewAttack)){
sfx_stop(sndSpaceScrewAttack);
}
}
if(i == 10){
global.cbeam = 1;
global.cbeamPrev = global.cbeam;
popup_text(get_text("Items", "ChargeBeam") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 11){
global.ibeam = 1;
global.ibeamPrev = global.ibeam;
popup_text(get_text("Items", "IceBeam") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 12){
global.wbeam = 1;
global.wbeamPrev = global.wbeam;
popup_text(get_text("Items", "WaveBeam") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 13){
global.sbeam = 1;
global.sbeamPrev = global.sbeam;
popup_text(get_text("Items", "SpazerBeam") + " " + get_text("GlobalOptions", "Enabled"));
}
if(i == 14){
global.pbeam = 1;
global.pbeamPrev = global.pbeam;
popup_text(get_text("Items", "PlasmaBeam") + " " + get_text("GlobalOptions", "Enabled"));
}
} else if(receivedItem == 0 &amp;&amp; global.item[i] == 1){
resend = true;
}
}
var etankCount = 0;
for(var i=0; i&lt;array_length_1d(global.item); i++){
if(i == 50 || i == 103 || i == 108 || i == 157 || i == 158 || i == 200 || i == 201 || i == 251 || i == 254 || i == 306){
if(global.item[i] == 1){
etankCount++;
}
}
}
if(etankCount != global.etanks){
global.etanks = etankCount;
global.maxhealth = ((99 + (100 * global.etanks)) * oControl.mod_etankhealthmult);
global.playerhealth = global.maxhealth;
}
var stankCount = 0;
for(var i=0; i&lt;array_length_1d(global.item); i++){
if(i == 51 || i == 110 || i == 162 || i == 206 || i == 207 || i == 209 || i == 215 || i == 256 || i == 300 || i == 305){
if(global.item[i] == 1){
stankCount++;
}
}
}
if(stankCount != global.stanks){
global.stanks = stankCount;
if (global.difficulty &lt; 2) global.maxsmissiles = 2 * global.stanks;
if (global.difficulty == 2) global.maxsmissiles = 1 * global.stanks;
global.smissiles = global.maxsmissiles;
}
var ptankCount = 0;
for(var i=0; i&lt;array_length_1d(global.item); i++){
if(i == 58 || i == 59 || i == 112 || i == 160 || i == 212 || i == 213 || i == 253 || i == 258 || i == 301 || i == 302){
if(global.item[i] == 1){
ptankCount++;
}
}
}
if(ptankCount != global.ptanks){
global.ptanks = ptankCount;
if (global.difficulty &lt; 2) global.maxpbombs = 2 * global.ptanks;
if (global.difficulty == 2) global.maxpbombs = 1 * global.ptanks;
global.pbombs = global.maxpbombs;
}
var mtankCount = 0;
for(var i=0; i&lt;array_length_1d(global.item); i++){
if(i == 52 || i == 53 || i == 54 || i == 55 || i == 56 || i == 57 || i == 60 || i == 100 || i == 101 || i == 102 || i == 104 || i == 105 || i == 106 || i == 107 || i == 109 || i == 111 || i == 150 || i == 151 || i == 152 || i == 153 || i == 154 || i == 155 || i == 156 || i == 159 || i == 161 || i == 163 || i == 202 || i == 203 || i == 204 || i == 205 || i == 208 || i == 210 || i == 211 || i == 214 || i == 250 || i == 252 || i == 255 || i == 257 || i == 259 || i == 303 || i == 304 || i == 307 || i == 308 || i == 309){
if(global.item[i] == 1){
mtankCount++;
}
}
}
if(mtankCount != global.mtanks){
global.mtanks = mtankCount;
if (global.difficulty &lt; 2) global.maxmissiles = oControl.mod_Mstartingcount + (5 * global.mtanks);
if (global.difficulty == 2) global.maxmissiles = oControl.mod_Mstartingcount + (2 * global.mtanks);
global.missiles = global.maxmissiles;
}
if(resend){
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
itemBuffer = buffer_create(size, type, alignment);
buffer_seek(itemBuffer, buffer_seek_start, 0);
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]);
}
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_udp(socket, server_ip, server_port, itemBuffer, buffer_tell(itemBuffer));
buffer_delete(itemBuffer);
}
break;
case 51:
var resend = false;
for(var i=0; i&lt;array_length_1d(global.event); i++){
if(i &lt; 350){
var receivedEvent = buffer_read(_buffer, buffer_u8);
if(floor(receivedEvent) &gt; floor(global.event[i]) &amp;&amp; i != 102){
global.event[i] = receivedEvent;
global.eventPrev[i] = global.event[i];
if(i == 308){
if(receivedEvent == 1){
if(instance_exists(oCharacter)){
with(oCharacter){
facing = 0;
if (global.currentsuit == 0) sprite_index = scr_suit_sprites(sFront,sFront_fusion);
if (global.currentsuit == 1) sprite_index = scr_suit_sprites(sVFront,sFront_fusion);
if (global.currentsuit == 2) sprite_index = scr_suit_sprites(sGFront,sFront_fusion);
global.enablecontrol = 0;
canbehit = 0;
oControl.displaygui = 0;
xVel = 0;
yVel = 0;
xAcc = 0;
yAcc = 0;
}
}
popup_text_ext("Ship reached", 120);
}
if(receivedEvent == 2){
oControl.displaygui = 0;
global.enablecontrol = 0;
if(instance_exists(oCharacter)){
with(oCharacter){
xVel = 0;
yVel = 0;
xAcc = 0;
yAcc = 0;
}
}
}
if(receivedEvent == 3){
instance_create(0, 0, oFinalFadeout);
mus_fadeout(musHatchling);
global.enablecontrol = 0;
if(instance_exists(oCharacter)){
with(oCharacter){
xVel = 0;
yVel = 0;
xAcc = 0;
yAcc = 0;
}
}
}
if(receivedEvent == 4){
if(instance_exists(oCharacter)){
with(oCharacter){
xVel = 0;
yVel = 0;
xAcc = 0;
yAcc = 0;
canbehit = 1;
}
}
remove_persistent_objects();
sfx_stop_all();
global.vibL = 0;
global.vibR = 0;
global.ingame = 0;
global.darkness = 0;
global.gotolog = -1;
global.enablecontrol = 1;
global.transitiontype = 0;
oControl.displaygui = 1;
room_goto(rm_credits);
mus_stop_all();
mus_play_once(musCredits);
}
}
} else if(floor(receivedEvent) &lt; floor(global.event[i]) &amp;&amp; i != 102){
resend = true;
}
}
}
if(resend){
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
eventBuffer = buffer_create(size, type, alignment);
buffer_seek(eventBuffer, buffer_seek_start, 0);
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]);
}
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_udp(socket, server_ip, server_port, eventBuffer, buffer_tell(eventBuffer));
buffer_delete(eventBuffer);
}
break;
case 52:
var resend = false;
for(var i=0; i&lt;array_length_1d(global.metdead); i++){
var receivedMetdead = buffer_read(_buffer, buffer_u8);
if(receivedMetdead == 1 &amp;&amp; global.metdead[i] == 0){
global.metdead[i] = receivedMetdead;
global.metdeadPrev[i] = global.metdead[i];
} else if(receivedMetdead == 0 &amp;&amp; global.metdead[i] == 1){
resend = true;
}
}
if(global.gamemode == 1){
var countArea = 0;
var countLeft = 0;
for(var i=0; i&lt;array_length_1d(global.metdead); i++){
if(i &lt;= 45){
if(global.metdead[i] == 0){
countLeft++;
}
if(global.lavastate &gt;= 0 &amp;&amp; global.metdead[i] == 0 &amp;&amp; i == 0){
countArea++;
}
if(global.lavastate &gt;= 1 &amp;&amp; global.metdead[i] == 0 &amp;&amp; (i == 1 || i == 2 || i == 3 || i == 4)){
countArea++;
}
if(global.lavastate &gt;= 2 &amp;&amp; global.metdead[i] == 0 &amp;&amp; (i == 5 || i == 6 || i == 7 || i == 8 || i == 9 || i == 10 || i == 11 || i == 12)){
countArea++;
}
if(global.lavastate &gt;= 3 &amp;&amp; global.metdead[i] == 0 &amp;&amp; (i == 13 || i == 14 || i == 15 || i == 16 || i == 17 || i == 18 || i == 19 || i == 20 || i == 21 || i == 22)){
countArea++;
}
if(global.lavastate &gt;= 4 &amp;&amp; global.metdead[i] == 0 &amp;&amp; (i == 23 || i == 24)){
countArea++;
}
if(global.lavastate &gt;= 5 &amp;&amp; global.metdead[i] == 0 &amp;&amp; (i == 25 || i == 26)){
countArea++;
}
if(global.lavastate &gt;= 6 &amp;&amp; global.metdead[i] == 0 &amp;&amp; (i == 27 || i == 28 || i == 29 || i == 30 || i == 31 || i == 32)){
countArea++;
}
if(global.lavastate &gt;= 7 &amp;&amp; global.metdead[i] == 0 &amp;&amp; (i == 33 || i == 34 || i == 35 || i == 36 || i == 37 || i == 38 || i == 39 || i == 40)){
countArea++;
}
if(global.lavastate &gt;= 8 &amp;&amp; global.metdead[i] == 0 &amp;&amp; i == 41){
countArea++;
}
if(global.lavastate &gt;= 9 &amp;&amp; global.metdead[i] == 0 &amp;&amp; i == 42){
countArea++;
}
if(global.lavastate &gt;= 10 &amp;&amp; global.metdead[i] == 0 &amp;&amp; (i == 43 || i == 44 || i == 45)){
countArea++;
}
}
}
if(global.lavastate &lt; 11){
if(global.event[303] == 0){
countLeft++;
}
if(global.monstersleft != countLeft){
global.monstersleft = countLeft;
}
if(global.monstersarea != countArea){
global.monstersarea = countArea;
}
}
} else if(global.gamemode &gt; 1){
var countArea = 0;
var countLeft = 0;
for(var i=0; i&lt;array_length_1d(global.metdead); i++){
if(i &lt;= 45){
if(global.metdead[i] == 0){
countLeft++;
}
if(global.metdead[i] == 0 &amp;&amp; i != 11 &amp;&amp; i != 23 &amp;&amp; i != 24 &amp;&amp; i != 41 &amp;&amp; i != 42 &amp;&amp; i != 43 &amp;&amp; i != 44 &amp;&amp; i != 45){
countArea++;
}
if(global.metdead[i] == 0 &amp;&amp; global.event[109] == 1 &amp;&amp; i == 11){
countArea++;
}
if(global.metdead[i] == 0 &amp;&amp; global.event[171] == 1 &amp;&amp; (i == 23 || i == 24)){
countArea++;
}
if(global.lavastate &gt;= 8 &amp;&amp; global.metdead[i] == 0 &amp;&amp; i == 41){
countArea++;
}
if(global.lavastate &gt;= 9 &amp;&amp; global.metdead[i] == 0 &amp;&amp; i == 42){
countArea++;
}
if(global.lavastate &gt;= 10 &amp;&amp; global.metdead[i] == 0 &amp;&amp; (i == 43 || i == 44 || i == 45)){
countArea++;
}
}
}
if(global.lavastate &lt; 11){
if(global.event[303] == 0){
countLeft++;
}
if(global.monstersleft != countLeft){
global.monstersleft = countLeft;
}
if(global.monstersarea != countArea){
global.monstersarea = countArea;
}
}
}
if(resend){
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
metdeadBuffer = buffer_create(size, type, alignment);
buffer_seek(metdeadBuffer, buffer_seek_start, 0);
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]);
}
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_udp(socket, server_ip, server_port, metdeadBuffer, buffer_tell(metdeadBuffer));
buffer_delete(metdeadBuffer);
}
break;
case 53:
var part = buffer_read(_buffer, buffer_u8);
var resend = false;
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++){
if((part == 1 &amp;&amp; i &lt; 20) || (part == 2 &amp;&amp; i &gt;= 20 &amp;&amp; i &lt; 40) || (part == 3 &amp;&amp; i &gt;= 40 &amp;&amp; i &lt; 60) || (part == 4 &amp;&amp; i &gt;= 60 &amp;&amp; i &lt; 80)){
var receiveddmap = buffer_read(_buffer, buffer_u8);
if(receiveddmap &gt; global.dmap[i, j]){
global.dmap[i, j] = receiveddmap;
global.dmapPrev[i, j] = global.dmap[i, j];
} else if(receiveddmap &lt; global.dmap[i, j]){
resend = true;
}
}
}
}
if(resend){
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
dmapBuffer = buffer_create(size, type, alignment);
buffer_seek(dmapBuffer, buffer_seek_start, 0);
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]);
}
}
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_udp(socket, server_ip, server_port, dmapBuffer, buffer_tell(dmapBuffer));
buffer_delete(dmapBuffer);
}
if(global.ingame){
with (oControl) event_user(2);
}
if(instance_exists(oMapCursor) &amp;&amp; surface_exists(oSS_Control.s_map)){
surface_free(oSS_Control.s_map);
}
break;
}
}
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="7" enumb="19">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer11 = buffer_create(size, type, alignment);
buffer_seek(buffer11, buffer_seek_start, 0);
buffer_write(buffer11, buffer_u8, 36);
buffer_write(buffer11, buffer_s8, oCharacter.mirror);
buffer_write(buffer11, buffer_s16, room);
buffer_write(buffer11, buffer_s16, global.currX);
buffer_write(buffer11, buffer_s16, global.currY);
buffer_write(buffer11, buffer_s8, global.sax);
var bufferSize = buffer_tell(buffer11);
buffer_seek(buffer11, buffer_seek_start, 0);
buffer_write(buffer11, buffer_s32, bufferSize);
buffer_write(buffer11, buffer_u8, 36);
buffer_write(buffer11, buffer_s8, oCharacter.mirror);
buffer_write(buffer11, buffer_s16, room);
buffer_write(buffer11, buffer_s16, global.currX);
buffer_write(buffer11, buffer_s16, global.currY);
buffer_write(buffer11, buffer_s8, global.sax);
var result = network_send_udp(socket, server_ip, server_port, buffer11, buffer_tell(buffer11));
buffer_delete(buffer11);
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="7" enumb="18">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>if(!global.saxmode || global.spectator) exit;
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer10 = buffer_create(size, type, alignment);
buffer_seek(buffer10, buffer_seek_start, 0);
buffer_write(buffer10, buffer_u8, 35);
buffer_write(buffer10, buffer_s16, global.mapposx);
buffer_write(buffer10, buffer_s16, global.mapposy);
var bufferSize = buffer_tell(buffer10);
buffer_seek(buffer10, buffer_seek_start, 0);
buffer_write(buffer10, buffer_s32, bufferSize);
buffer_write(buffer10, buffer_u8, 35);
buffer_write(buffer10, buffer_s16, global.mapposx);
buffer_write(buffer10, buffer_s16, global.mapposy);
var result = network_send_udp(socket, server_ip, server_port, buffer10, buffer_tell(buffer10));
buffer_delete(buffer10);
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="7" enumb="17">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer9 = buffer_create(size, type, alignment);
buffer_seek(buffer9, buffer_seek_start, 0);
buffer_write(buffer9, buffer_u8, 34);
buffer_write(buffer9, buffer_u8, global.saxmode);
var bufferSize = buffer_tell(buffer9);
buffer_seek(buffer9, buffer_seek_start, 0);
buffer_write(buffer9, buffer_s32, bufferSize);
buffer_write(buffer9, buffer_u8, 34);
buffer_write(buffer9, buffer_u8, global.saxmode);
var result = network_send_udp(socket, server_ip, server_port, buffer9, buffer_tell(buffer9));
buffer_delete(buffer9);
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="7" enumb="16">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer8 = buffer_create(size, type, alignment);
buffer_seek(buffer8, buffer_seek_start, 0);
buffer_write(buffer8, buffer_u8, 33);
buffer_write(buffer8, buffer_u8, global.lobbyLocked);
var bufferSize = buffer_tell(buffer8);
buffer_seek(buffer8, buffer_seek_start, 0);
buffer_write(buffer8, buffer_s32, bufferSize);
buffer_write(buffer8, buffer_u8, 33);
buffer_write(buffer8, buffer_u8, global.lobbyLocked);
var result = network_send_udp(socket, server_ip, server_port, buffer8, buffer_tell(buffer8));
buffer_delete(buffer8);
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="7" enumb="15">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>//Reset server packet
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer7 = buffer_create(size, type, alignment);
buffer_seek(buffer7, buffer_seek_start, 0);
buffer_write(buffer7, buffer_u8, 32);
var bufferSize = buffer_tell(buffer7);
buffer_seek(buffer7, buffer_seek_start, 0);
buffer_write(buffer7, buffer_s32, bufferSize);
buffer_write(buffer7, buffer_u8, 32);
var result = network_send_udp(socket, server_ip, server_port, buffer7, buffer_tell(buffer7));
buffer_delete(buffer7);
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="7" enumb="14">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer6 = buffer_create(size, type, alignment);
buffer_seek(buffer6, buffer_seek_start, 0);
buffer_write(buffer6, buffer_u8, 31);
buffer_write(buffer6, buffer_u8, global.otherAbsorbID);
buffer_write(buffer6, buffer_s16, global.otherAbsorbRelativeX);
buffer_write(buffer6, buffer_s16, global.otherAbsorbRelativeY);
buffer_write(buffer6, buffer_u8, global.otherAbsorbSpriteHeight);
var bufferSize = buffer_tell(buffer6);
buffer_seek(buffer6, buffer_seek_start, 0);
buffer_write(buffer6, buffer_s32, bufferSize);
buffer_write(buffer6, buffer_u8, 31);
buffer_write(buffer6, buffer_u8, global.otherAbsorbID);
buffer_write(buffer6, buffer_s16, global.otherAbsorbRelativeX);
buffer_write(buffer6, buffer_s16, global.otherAbsorbRelativeY);
buffer_write(buffer6, buffer_u8, global.otherAbsorbSpriteHeight);
var result = network_send_udp(socket, server_ip, server_port, buffer6, buffer_tell(buffer6));
buffer_delete(buffer6);
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="7" enumb="13">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer5 = buffer_create(size, type, alignment);
buffer_seek(buffer5, buffer_seek_start, 0);
buffer_write(buffer5, buffer_u8, 106);
buffer_write(buffer5, buffer_u8, global.checkID);
buffer_write(buffer5, buffer_s16, global.checkX);
buffer_write(buffer5, buffer_s16, global.checkY);
buffer_write(buffer5, buffer_u8, global.checkBeam);
buffer_write(buffer5, buffer_u8, global.checkMissile);
buffer_write(buffer5, buffer_u8, global.checkDamage);
buffer_write(buffer5, buffer_u8, global.checkFreeze);
var bufferSize = buffer_tell(buffer5);
buffer_seek(buffer5, buffer_seek_start, 0);
buffer_write(buffer5, buffer_s32, bufferSize);
buffer_write(buffer5, buffer_u8, 106);
buffer_write(buffer5, buffer_u8, global.checkID);
buffer_write(buffer5, buffer_s16, global.checkX);
buffer_write(buffer5, buffer_s16, global.checkY);
buffer_write(buffer5, buffer_u8, global.checkBeam);
buffer_write(buffer5, buffer_u8, global.checkMissile);
buffer_write(buffer5, buffer_u8, global.checkDamage);
buffer_write(buffer5, buffer_u8, global.checkFreeze);
var result = network_send_udp(socket, server_ip, server_port, buffer5, buffer_tell(buffer5));
buffer_delete(buffer5);
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="7" enumb="12">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>if(global.spectator) exit;
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer4 = buffer_create(size, type, alignment);
buffer_seek(buffer4, buffer_seek_start, 0);
buffer_write(buffer4, buffer_u8, 105);
buffer_write(buffer4, buffer_u8, global.otherID);
var bufferSize = buffer_tell(buffer4);
buffer_seek(buffer4, buffer_seek_start, 0);
buffer_write(buffer4, buffer_s32, bufferSize);
buffer_write(buffer4, buffer_u8, 105);
buffer_write(buffer4, buffer_u8, global.otherID);
var result = network_send_udp(socket, server_ip, server_port, buffer4, buffer_tell(buffer4));
buffer_delete(buffer4);
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="7" enumb="11">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer3 = buffer_create(size, type, alignment);
buffer_seek(buffer3, buffer_seek_start, 0);
buffer_write(buffer3, buffer_u8, 30);
buffer_write(buffer3, buffer_u8, elm);
var bufferSize = buffer_tell(buffer3);
buffer_seek(buffer3, buffer_seek_start, 0);
buffer_write(buffer3, buffer_s32, bufferSize);
buffer_write(buffer3, buffer_u8, 30);
buffer_write(buffer3, buffer_u8, elm);
var result = network_send_udp(socket, server_ip, server_port, buffer3, buffer_tell(buffer3));
buffer_delete(buffer3);
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="7" enumb="10">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer2 = buffer_create(size, type, alignment);
buffer_seek(buffer2, buffer_seek_start, 0);
buffer_write(buffer2, buffer_u8, 29);
buffer_write(buffer2, buffer_u8, syncedDifficulty);
var bufferSize = buffer_tell(buffer2);
buffer_seek(buffer2, buffer_seek_start, 0);
buffer_write(buffer2, buffer_s32, bufferSize);
buffer_write(buffer2, buffer_u8, 29);
buffer_write(buffer2, buffer_u8, syncedDifficulty);
var result = network_send_udp(socket, server_ip, server_port, buffer2, buffer_tell(buffer2));
buffer_delete(buffer2);
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="7" enumb="4">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>if(room == rm_credits){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
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_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
}
if(room == rm_score){
resetTimer = 5;
}
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="7" enumb="3">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>if(connected){
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
buffer_seek(buffer, buffer_seek_start, 0);
buffer_write(buffer, buffer_u8, 254);
buffer_write(buffer, buffer_u8, global.clientID);
buffer_write(buffer, buffer_u8, global.sax);
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);
buffer_write(buffer, buffer_u8, global.sax);
var result = network_send_udp(socket, server_ip, server_port, buffer, buffer_tell(buffer));
}
if(!noName){
network_destroy(socket);
buffer_delete(buffer);
ds_grid_destroy(global.onlineList);
ds_grid_destroy(global.onlineSend);
ds_grid_destroy(global.onlineReceived);
ds_list_destroy(global.onlineItem);
ds_list_destroy(global.onlineMetdead);
ds_list_destroy(global.onlineEvent);
ds_list_destroy(roomList);
ds_list_destroy(roomListData);
ds_list_destroy(global.idList);
ds_list_destroy(posData);
ds_list_destroy(global.hatchlingList);
ds_list_destroy(global.speedList);
ds_list_destroy(global.screwList);
ds_list_destroy(global.hitboxList);
ds_list_destroy(global.otherPlayerItems);
}
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="8" enumb="0">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>if(ds_list_size(roomListData) &gt; 0){
for(var b=0; b&lt;ds_list_size(roomListData); b++){
var arrDraw = roomListData[| b];
var arrID = arrDraw[0];
var arrX = arrDraw[1];
var arrY = arrDraw[2];
var arrSprite = arrDraw[3];
var arrImage = arrDraw[4];
var arrA1 = arrDraw[5];
var arrA1X = arrDraw[6];
var arrA1Y = arrDraw[7];
var arrA2 = arrDraw[8];
var arrA2X = arrDraw[9];
var arrA2Y = arrDraw[10];
var arrA2A = arrDraw[11];
var arrMirror = arrDraw[12];
var arrArmmsl = arrDraw[13];
var arrRoom = arrDraw[14];
var arrName = arrDraw[15];
var arrBlend = arrDraw[16];
var arrFXTimer = arrDraw[17];
var arrRoomPrev = arrDraw[18];
var arrState = arrDraw[19];
var arrSAX = arrDraw[20];
var arrSpeedboost = arrDraw[21];
var arrSJBall = arrDraw[22];
var arrSJDir = arrDraw[23];
var arrSpeedCharge = arrDraw[24];
var arrSpectator = arrDraw[26];
var arrInvincible = arrDraw[27];
var arrMosaic = arrDraw[28];
var arrReform = arrDraw[29];
var arrVisible = arrDraw[30];
/*
2 = spacejump;
3 = screwattack;
4 = spiderball;
5 = speedbooster;
*/
var spacejump = global.spacejump;
var screwattack = global.screwattack;
var spiderball = global.spiderball;
var speedbooster = global.speedbooster;
global.otherSAX = arrSAX;
global.otherMosaic = arrMosaic;
global.otherReform = arrReform;
for(var i=0; i&lt;ds_list_size(global.otherPlayerItems); i++){
var tempArr = global.otherPlayerItems[| i];
var ID = tempArr[0];
if(ID == arrID){
spacejump = tempArr[2];
screwattack = tempArr[3];
spiderball = tempArr[4];
speedbooster = tempArr[5];
}
}
var canDraw = true;
if(!arrVisible &amp;&amp; !arrSAX){
canDraw = false;
}
if((arrRoom == room || arrRoom == rm_options || arrRoom == itemroom || arrRoom == subscreenroom || arrRoom == maproom || arrRoom == rm_subscreen) &amp;&amp; instance_exists(oCharacter) &amp;&amp; room != rm_transition &amp;&amp; canDraw){
if(arrSprite == sSpiderMorphBall || arrSprite == sGSpiderMorphBall || arrSprite == sVSpiderMorphBall || arrSprite == sSpiderMorphBall_fusion || arrSprite == sSpiderMorphBall_fusion_gravity || arrSprite == sSpiderMorphBall_fusion_varia){
draw_set_blend_mode(bm_add);
draw_set_alpha(arrFXTimer * 0.1);
if(global.shaders_compiled &amp;&amp; os_type != os_android){
pal_swap_set(oControl.SpiderballPalette, arrID, false);
draw_sprite_ext(sSpiderballFX, -1, arrX, arrY, 1, 1, 0, -1, 0.2 + arrFXTimer * 0.1);
} else if(global.shaders_compiled &amp;&amp; os_type == os_android){
switch(arrSprite){
case sSpiderMorphBall:
draw_sprite_ext(sSpiderballFX, -1, arrX, arrY, 1, 1, 0, -1, 0.2 + arrFXTimer * 0.1);
break;
case sVSpiderMorphBall:
draw_sprite_ext(sSpiderballFXVaria, -1, arrX, arrY, 1, 1, 0, -1, 0.2 + arrFXTimer * 0.1);
break;
case sGSpiderMorphBall:
draw_sprite_ext(sSpiderballFXGravity, -1, arrX, arrY, 1, 1, 0, -1, 0.2 + arrFXTimer * 0.1);
break;
case sSpiderMorphBall_fusion:
draw_sprite_ext(sSpiderballFX_fusion, -1, arrX, arrY, 1, 1, 0, -1, 0.2 + arrFXTimer * 0.1);
break;
case sSpiderballFXVaria_fusion:
draw_sprite_ext(sSpiderballFXVaria_fusion, -1, arrX, arrY, 1, 1, 0, -1, 0.2 + arrFXTimer * 0.1);
break;
case sSpiderballFXGravity_fusion:
draw_sprite_ext(sSpiderballFXGravity_fusion, -1, arrX, arrY, 1, 1, 0, -1, 0.2 + arrFXTimer * 0.1);
break;
case sSpiderMorphBall_fusion_omega:
draw_sprite_ext(sSpiderballFX_fusion, -1, arrX, arrY, 1, 1, 0, -1, 0.2 + arrFXTimer * 0.1);
break;
}
}
if(global.shaders_compiled){
pal_swap_reset();
shader_reset();
}
draw_set_alpha(1);
draw_set_blend_mode(bm_normal);
}
if(arrRoom != room){
if(arrRoomPrev == room){
draw_character_ext(arrSprite, arrX, arrY, arrA1, arrA1X, arrA1Y, arrA2, arrA2X, arrA2Y, arrA2A, arrMirror, arrBlend, alpha, arrArmmsl, arrImage, arrID);
if(arrSpeedboost == 1 || arrSpeedCharge &gt; 0 || arrState == SJSTART || arrState == SUPERJUMP || arrState == SJEND){
if (arrFXTimer == 0 || arrFXTimer == 1) {
draw_set_blend_mode(bm_add);
draw_character_ext(arrSprite, arrX, arrY, arrA1, arrA1X, arrA1Y, arrA2, arrA2X, arrA2Y, arrA2A, arrMirror, arrBlend, 1.1 + arrFXTimer * 0.2, arrArmmsl, arrImage, arrID);
draw_set_blend_mode(bm_normal);
}
if (arrFXTimer == 2 || arrFXTimer == 3) {
draw_set_blend_mode(bm_add);
draw_character_ext(arrSprite, arrX, arrY, arrA1, arrA1X, arrA1Y, arrA2, arrA2X, arrA2Y, arrA2A, arrMirror, c_yellow, alpha, arrArmmsl, arrImage, arrID);
draw_character_ext(arrSprite, arrX, arrY, arrA1, arrA1X, arrA1Y, arrA2, arrA2X, arrA2Y, arrA2A, arrMirror, c_white, alpha, arrArmmsl, arrImage, arrID);
draw_set_blend_mode(bm_normal);
}
if (arrFXTimer == 4 || arrFXTimer == 5) {
draw_set_blend_mode(bm_add);
draw_character_ext(arrSprite, arrX, arrY, arrA1, arrA1X, arrA1Y, arrA2, arrA2X, arrA2Y, arrA2A, arrMirror, c_red, alpha, arrArmmsl, arrImage, arrID);
draw_set_blend_mode(bm_normal);
}
}
if(arrInvincible &gt; 0){
draw_character_ext(arrSprite, arrX, arrY, arrA1, arrA1X, arrA1Y, arrA2, arrA2X, arrA2Y, arrA2A, arrMirror, c_blue, arrFXTimer * 0.2, arrArmmsl, arrImage, arrID);
draw_set_blend_mode(bm_add);
draw_character_ext(arrSprite, arrX, arrY, arrA1, arrA1X, arrA1Y, arrA2, arrA2X, arrA2Y, arrA2A, arrMirror, c_white, 0.8 - arrFXTimer * 0.2, arrArmmsl, arrImage, arrID);
draw_set_blend_mode(bm_normal);
}
var sprHeight = sprite_get_height(sIdleRight);
if(arrSprite != sTurn &amp;&amp; arrSprite != sVTurn &amp;&amp; arrSprite != sGTurn &amp;&amp; arrSprite != sTurn_fusion &amp;&amp; arrSprite != sTurn_fusion_varia &amp;&amp; arrSprite != sTurn_fusion_gravity) sprHeight = sprite_get_height(arrSprite);
if(string_count("AimUp", sprite_get_name(arrSprite)) &gt; 0) sprHeight = sprite_get_height(sIdleRight);
if(string_lower(arrName) == "meep" &amp;&amp; string_count("Crouch", sprite_get_name(arrSprite))) sprHeight += 10;
if(string_lower(arrName) == "omegadruid" &amp;&amp; string_count("JumpLeft", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("JumpRight", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("Ball", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("Walljump", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("Spacejump", sprite_get_name(arrSprite)) == 0) draw_sprite_ext(sMOmega_Head_Roar, 2, arrX, arrY - sprHeight, 0.5 * arrMirror, 0.5, direction, c_white, 1);
if(string_lower(arrName) == "meep" &amp;&amp; string_count("JumpLeft", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("JumpRight", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("Ball", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("Walljump", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("Spacejump", sprite_get_name(arrSprite)) == 0) draw_sprite_ext(sMiepee, 2, arrX, arrY - sprHeight, 1 * arrMirror, 1, direction, c_white, 1);
}
} else {
draw_character_ext(arrSprite, arrX, arrY, arrA1, arrA1X, arrA1Y, arrA2, arrA2X, arrA2Y, arrA2A, arrMirror, arrBlend, alpha, arrArmmsl, arrImage, arrID);
if(arrSpeedboost == 1 || arrSpeedCharge &gt; 0 || arrState == SJSTART || arrState == SUPERJUMP || arrState == SJEND){
if (arrFXTimer == 0 || arrFXTimer == 1) {
draw_set_blend_mode(bm_add);
draw_character_ext(arrSprite, arrX, arrY, arrA1, arrA1X, arrA1Y, arrA2, arrA2X, arrA2Y, arrA2A, arrMirror, arrBlend, 1.1 + arrFXTimer * 0.2, arrArmmsl, arrImage, arrID);
draw_set_blend_mode(bm_normal);
}
if (arrFXTimer == 2 || arrFXTimer == 3) {
draw_set_blend_mode(bm_add);
draw_character_ext(arrSprite, arrX, arrY, arrA1, arrA1X, arrA1Y, arrA2, arrA2X, arrA2Y, arrA2A, arrMirror, c_yellow, alpha, arrArmmsl, arrImage, arrID);
draw_character_ext(arrSprite, arrX, arrY, arrA1, arrA1X, arrA1Y, arrA2, arrA2X, arrA2Y, arrA2A, arrMirror, c_white, alpha, arrArmmsl, arrImage, arrID);
draw_set_blend_mode(bm_normal);
}
if (arrFXTimer == 4 || arrFXTimer == 5) {
draw_set_blend_mode(bm_add);
draw_character_ext(arrSprite, arrX, arrY, arrA1, arrA1X, arrA1Y, arrA2, arrA2X, arrA2Y, arrA2A, arrMirror, c_red, alpha, arrArmmsl, arrImage, arrID);
draw_set_blend_mode(bm_normal);
}
}
if(arrInvincible &gt; 0){
draw_character_ext(arrSprite, arrX, arrY, arrA1, arrA1X, arrA1Y, arrA2, arrA2X, arrA2Y, arrA2A, arrMirror, c_blue, arrFXTimer * 0.2, arrArmmsl, arrImage, arrID);
draw_set_blend_mode(bm_add);
draw_character_ext(arrSprite, arrX, arrY, arrA1, arrA1X, arrA1Y, arrA2, arrA2X, arrA2Y, arrA2A, arrMirror, c_white, 0.8 - arrFXTimer * 0.2, arrArmmsl, arrImage, arrID);
draw_set_blend_mode(bm_normal);
}
var sprHeight = sprite_get_height(sIdleRight);
if(arrSprite != sTurn &amp;&amp; arrSprite != sVTurn &amp;&amp; arrSprite != sGTurn &amp;&amp; arrSprite != sTurn_fusion &amp;&amp; arrSprite != sTurn_fusion_varia &amp;&amp; arrSprite != sTurn_fusion_gravity) sprHeight = sprite_get_height(arrSprite);
if(string_count("AimUp", sprite_get_name(arrSprite)) &gt; 0) sprHeight = sprite_get_height(sIdleRight);
if(string_lower(arrName) == "meep" &amp;&amp; string_count("Crouch", sprite_get_name(arrSprite))) sprHeight += 10;
if(string_lower(arrName) == "omegadruid" &amp;&amp; string_count("JumpLeft", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("JumpRight", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("Ball", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("Walljump", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("Spacejump", sprite_get_name(arrSprite)) == 0) draw_sprite_ext(sMOmega_Head_Roar, 2, arrX, arrY - sprHeight, 0.5 * arrMirror, 0.5, direction, c_white, 1);
if(string_lower(arrName) == "meep" &amp;&amp; string_count("JumpLeft", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("JumpRight", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("Ball", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("Walljump", sprite_get_name(arrSprite)) == 0 &amp;&amp; string_count("Spacejump", sprite_get_name(arrSprite)) == 0) draw_sprite_ext(sMiepee, 2, arrX, arrY - sprHeight, 1 * arrMirror, 1, direction, c_white, 1);
}
}
if(arrRoom == room &amp;&amp; room != rm_transition){
if((string_count("SJump", sprite_get_name(arrSprite)) &gt; 0 || arrSpeedboost &gt; 0 || arrSJBall &gt; 0) &amp;&amp; arrState != HURT){
var findID = ds_list_find_index(global.speedList, arrID);
if(findID &lt; 0){
ds_list_add(global.speedList, arrID);
speedbooster = instance_create(x, y, oSpeedBoost);
speedbooster.myid = arrID;
speedbooster.sax = arrSAX;
speedbooster.mirror = arrMirror;
speedbooster.sjball = arrSJBall;
}
} else {
var findID = ds_list_find_index(global.speedList, arrID);
if(findID &gt;= 0){
ds_list_delete(global.speedList, findID);
}
}
} else {
var findID = ds_list_find_index(global.speedList, arrID);
if(findID &gt;= 0){
ds_list_delete(global.speedList, findID);
}
}
if(arrRoom == room &amp;&amp; room != rm_transition){
if((string_count("JumpLeft", sprite_get_name(arrSprite)) &gt; 0 || string_count("JumpRight", sprite_get_name(arrSprite)) &gt; 0 || string_count("Spacejump", sprite_get_name(arrSprite)) &gt; 0) &amp;&amp; screwattack){
var findID = ds_list_find_index(global.screwList, arrID);
if(findID &lt; 0){
ds_list_add(global.screwList, arrID);
screwattack = instance_create(x, y, oScrewAttack);
screwattack.myid = arrID;
screwattack.sax = arrSAX;
screwattack.mirror = arrMirror;
}
} else {
var findID = ds_list_find_index(global.screwList, arrID);
if(findID &gt;= 0){
ds_list_delete(global.screwList, findID);
}
}
} else {
var findID = ds_list_find_index(global.screwList, arrID);
if(findID &gt;= 0){
ds_list_delete(global.screwList, findID);
}
}
if(arrRoom == room &amp;&amp; room != rm_transition){
var findID = ds_list_find_index(global.hitboxList, arrID);
if(findID &lt; 0){
ds_list_add(global.hitboxList, arrID);
hitbox = instance_create(x, y, oMultiHitbox);
hitbox.myid = arrID;
hitbox.sax = arrSAX;
}
} else {
var findID = ds_list_find_index(global.hitboxList, arrID);
if(findID &gt;= 0){
ds_list_delete(global.hitboxList, findID);
}
}
}
} else {
if(ds_list_size(global.speedList) &gt; 0) ds_list_clear(global.speedList);
if(ds_list_size(global.screwList) &gt; 0) ds_list_clear(global.screwList);
if(ds_list_size(global.hitboxList) &gt; 0) ds_list_clear(global.hitboxList);
}
if(instance_exists(oMapCursor)){
if(ds_list_size(posData) &gt; 0){
for(var i=0; i&lt;ds_list_size(posData); i++){
var arrMapIcon = posData[| i];
var arrID = arrMapIcon[0];
var arrX = arrMapIcon[1];
var arrY = arrMapIcon[2];
var sax = arrMapIcon[3];
var spectator = arrMapIcon[5];
if(global.spectator){
if(!sax){
if(spectator){
if(arrX != 3 &amp;&amp; arrY != 3) draw_sprite_ext(sSpectatorIcon, 0, (arrX * 8), ((arrY * 8) + 32), 1, 1, direction, c_white, oMapCursor.image_alpha);
} else {
if(arrX != 3 &amp;&amp; arrY != 3) draw_sprite_ext(sFusionIcon, 0, (arrX * 8), ((arrY * 8) + 32), 1, 1, direction, c_white, oMapCursor.image_alpha);
}
} else {
if(arrX != 3 &amp;&amp; arrY != 3) draw_sprite_ext(sMultitroidMapIconMiepee, 0, (arrX * 8), ((arrY * 8) + 32), 1, 1, direction, c_white, oMapCursor.image_alpha);
}
} else {
if(arrX != 3 &amp;&amp; arrY != 3 &amp;&amp; sax == global.sax &amp;&amp; !spectator){
draw_sprite_ext(oControl.MultitroidMapIcon, (arrID - 1), (arrX * 8), ((arrY * 8) + 32), 1, 1, direction, c_white, oMapCursor.image_alpha);
}
}
}
}
var rectoffset;
rectoffset = 0;
if(instance_exists(oMapScrBG2)) rectoffset = oMapScrBG2.rectoffset;
draw_sprite_ext(sMultitroidMapPlayerCountBox, 1, view_xview[0] - oControl.widescreen_space/2, (view_yview[0] + 44) - rectoffset, 1, 1, direction, c_white, 1);
if(ds_list_size(global.idList) &gt; 1){
for(var f=0; f&lt;ds_list_size(global.idList); f++){
var arrList = global.idList[| f];
var ID = arrList[0, 0];
var _x = 10 * floor(f / 2),
var _y = 10 * (f % 2);
if(ID == global.clientID){
draw_sprite_ext(oControl.MultitroidIcon, (ID - 1), ((view_xview[0] - oControl.widescreen_space/2) + 2 + _x), (view_yview[0] + 44) + 13 + _y, 1, 1, direction, c_white, 1);
} else {
draw_sprite_ext(oControl.MultitroidIconDark, (ID - 1), ((view_xview[0] - oControl.widescreen_space/2) + 2 + _x), (view_yview[0] + 44) + 13 + _y, 1, 1, direction, c_white, 1);
}
}
} else if(ds_list_size(global.idList) == 1 || ds_list_size(global.idList) == 0){
draw_sprite_ext(oControl.MultitroidIcon, clamp(global.clientID - 1, 0, 16), ((view_xview[0] - oControl.widescreen_space/2) + 2), (view_yview[0] + 44) + 13, 1, 1, direction, c_white, 1);
}
}
</string>
</argument>
</arguments>
</action>
</event>
</events>
<PhysicsObject>0</PhysicsObject>
<PhysicsObjectSensor>0</PhysicsObjectSensor>
<PhysicsObjectShape>0</PhysicsObjectShape>
<PhysicsObjectDensity>0.5</PhysicsObjectDensity>
<PhysicsObjectRestitution>0.100000001490116</PhysicsObjectRestitution>
<PhysicsObjectGroup>0</PhysicsObjectGroup>
<PhysicsObjectLinearDamping>0.100000001490116</PhysicsObjectLinearDamping>
<PhysicsObjectAngularDamping>0.100000001490116</PhysicsObjectAngularDamping>
<PhysicsObjectFriction>0.200000002980232</PhysicsObjectFriction>
<PhysicsObjectAwake>-1</PhysicsObjectAwake>
<PhysicsObjectKinematic>0</PhysicsObjectKinematic>
<PhysicsShapePoints/>
</object>