Added Queen health sync and much more

The Queen's health and death syncs between clients, player deaths sync, metroids disappear if they are in the same room as another player when the metroid dies, array syncing is vastly improved and should be 100% accurate, and half of the rooms leading up to the queen will unlock the doors if another player kills the last metroid while all players are in the same room.
pull/2/head
milesthenerd 6 years ago
parent a3b58f0604
commit ba24a742ae

@ -1 +1 @@
10.220.1.3
192.253.246.137

@ -29,7 +29,8 @@
strict_init("dictionary.json");
canSend = false;
connected = false;
alarm[1] = 300;
queenHealthWait = false;
queenDead = false;
var type;
type = network_socket_tcp;
var file = file_text_open_read(working_directory + "\ipaddress.txt");
@ -45,21 +46,19 @@ type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
global.itemlist[0] = 0;
for(i=0; i<350; i++){
global.itemlist[i] = i;
}
global.queenhealthPrev = 600;
global.queenphasePrev = 0;
global.clientID = 0;
global.packetID = 0;
global.receivedPacketID = 0;
global.onlineList = ds_grid_create(3, 34);
global.onlineSend = ds_grid_create(3, 34);
global.onlineResend = ds_grid_create(3, 34);
global.onlineList = ds_grid_create(3, 35);
global.onlineSend = ds_grid_create(3, 35);
global.onlineReceived = ds_grid_create(3, 35);
global.storedBuffers = ds_grid_create(2, 1);
global.receivedPacketIDs = ds_list_create();
ds_grid_clear(global.onlineSend, -1);
ds_grid_clear(global.onlineResend, -1);
ds_grid_clear(global.onlineReceived, -1);
for(var i=0; i<ds_grid_height(global.onlineList); i++){
ds_grid_set(global.onlineList, 2, i, i);
}
@ -67,8 +66,6 @@ for(var i=0; i<ds_grid_height(global.onlineList); i++){
update_variables("initprev");
update_variables("onlinevars");
alarm[0] = 5;
</string>
</argument>
</arguments>
@ -95,7 +92,7 @@ alarm[0] = 5;
buffer_delete(buffer);
ds_grid_destroy(global.onlineList);
ds_grid_destroy(global.onlineSend);
ds_grid_destroy(global.onlineResend);
ds_grid_destroy(global.onlineReceived);
ds_grid_destroy(global.storedBuffers);
ds_list_destroy(global.receivedPacketIDs);
if(connected){
@ -123,12 +120,18 @@ if(connected){
<arguments>
<argument>
<kind>1</kind>
<string>/*
if(isConnected &lt; 0){
isConnected = network_connect(socket, ipaddress, port);
<string>if(queenHealthResetQueued){
if(!is_undefined(oQueenHead.myhealth) &amp;&amp; !is_undefined(oQueen.phase)){
oQueenHead.myhealth = queenHealth;
oQueen.phase = phase;
if(state == 100){
oQueen.state = state;
oQueen.statetime = 0;
}
queenHealthResetQueued = false;
}
alarm[1] = 5;
}
alarm[1] = 300;
*/
</string>
</argument>
</arguments>
@ -159,14 +162,15 @@ for(var i=0; i&lt;ds_grid_height(global.onlineList); i++){
global.onlineSend[# 0, i] = global.onlineList[# 0, i];
global.onlineSend[# 1, i] = global.onlineList[# 1, i];
global.onlineSend[# 2, i] = global.onlineList[# 2, i];
show_debug_message(string(global.onlineSend[# 0, i]) + " " + string(global.onlineSend[# 1, i]) + " " + string(global.onlineSend[# 2, i]));
canSend = true;
alarm[0] = 600;
}
if(i == 0){
var v = 0;
var itemPrev = global.onlineList[# 0, 0]
var item = global.onlineList[# 1, 0]
var itemPrev = global.onlineList[# 0, 0];
var item = global.onlineList[# 1, 0];
for(var f=0; f&lt;array_length_1d(item); f++){
if(itemPrev[f] != item[f]){
global.itemChanges[v, 0] = global.item[f];
@ -184,8 +188,8 @@ for(var i=0; i&lt;ds_grid_height(global.onlineList); i++){
if(i == 1){
var v = 0;
var metdeadPrev = global.onlineList[# 0, 1]
var metdead = global.onlineList[# 1, 1]
var metdeadPrev = global.onlineList[# 0, 1];
var metdead = global.onlineList[# 1, 1];
for(var f=0; f&lt;array_length_1d(metdead); f++){
if(metdeadPrev[f] != metdead[f]){
global.metdeadChanges[v, 0] = global.metdead[f];
@ -203,9 +207,9 @@ for(var i=0; i&lt;ds_grid_height(global.onlineList); i++){
if(i == 3){
var v = 0;
var eventPrev = global.onlineList[# 0, 3]
var event = global.onlineList[# 1, 3]
for(var f=0; f&lt;array_length_1d(event); f++){
var eventPrev = global.onlineList[# 0, 3];
var event = global.onlineList[# 1, 3];
for(var f=0; f&lt;array_length_1d(eventPrev) - 1; f++){
if(eventPrev[f] != event[f]){
global.eventChanges[v, 0] = global.event[f];
global.eventChanges[v, 1] = f;
@ -219,12 +223,9 @@ for(var i=0; i&lt;ds_grid_height(global.onlineList); i++){
}
}
}
}
if(canSend){
show_debug_message("missiles");
show_debug_message(string(global.missilesPrev) + " " + string(global.missiles));
buffer_delete(buffer);
var size, type, alignment;
size = 1024;
@ -238,18 +239,49 @@ if(canSend){
buffer_write(buffer, buffer_u32, global.packetID);
global.storedBuffers[# 0, global.packetID] = global.onlineSend;
global.storedBuffers[# 1, global.packetID] = global.clientID;
show_debug_message("packetID = " + string(global.packetID));
var result = network_send_packet(socket, buffer, buffer_tell(buffer));
canSend = false;
show_debug_message("packetID = " + string(global.packetID));
global.packetID++;
ds_grid_resize(global.storedBuffers, 2, global.packetID + 1);
ds_grid_resize(global.storedBuffers, 2, global.packetID + 1);
ds_grid_clear(global.onlineSend, -1);
}
if(!canSend){
alarm[0] = 30;
}
if(canSend){
canSend = false;
alarm[0] = 75;
}
check_areaclear();
if(global.playerhealth &lt;= 0){
if(oCharacter.state != oCharacter.DEFEATED){
oCharacter.alarm[0] = 6;
oCharacter.state = oCharacter.DEFEATED;
}
}
if(!is_undefined(oQueenHead.myhealth) &amp;&amp; !is_undefined(oQueen.phase)){
if(global.queenhealthPrev != oQueenHead.myhealth){
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_s16, oQueenHead.myhealth);
buffer_write(buffer, buffer_u8, global.clientID);
buffer_write(buffer, buffer_s8, oQueen.phase);
buffer_write(buffer, buffer_s8, oQueen.state);
var result = network_send_packet(socket, buffer, buffer_tell(buffer));
}
}
</string>
</argument>
</arguments>
@ -276,12 +308,88 @@ check_areaclear();
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);
var result = network_send_packet(socket, buffer, buffer_tell(buffer));
alarm[0] = 5;
} else {
instance_destroy();
popup_text("Failed to connect");
}
}
if(!is_undefined(oQueen.phase)){
if(oQueen.phase &gt;= 1 &amp;&amp; instance_exists(inst_146524)){
event_perform_object(oQueenFireball, ev_other, ev_user1);
}
if(oQueen.phase &gt;= 2 &amp;&amp; instance_exists(inst_146525) &amp;&amp; instance_exists(inst_146520)){
event_perform_object(oQueenFireball, ev_other, ev_user2);
}
if(oQueen.phase &gt;= 3 &amp;&amp; instance_exists(inst_146526) &amp;&amp; instance_exists(inst_146514)){
event_perform_object(oQueenFireball, ev_other, ev_user3);
}
if((oQueen.phase &gt;= 4 || oQueen.phase == 5) &amp;&amp; instance_exists(inst_146527)){
event_perform_object(oQueenFireball, ev_other, ev_user4);
}
if(global.event[303] &gt; 0 &amp;&amp; !queenDead){
with(oQueen){
height_target_front = 10;
height_target_back = 10;
head_obj.push = 0;
head_obj.canhit = 0;
head_obj.state = 100;
head_obj.statetime = 0;
leg1f_obj.canhit = 0;
leg1b_obj.canhit = 0;
head_target_x = x + neck_x + 40;
head_target_y = y + neck_y + 5;
alarm[9] = 1;
alarm[10] = 300;
head_obj.alarm[9] = 1;
head_obj.alarm[10] = 280;
canhit = 0;
mus_fadeout(musQueen);
mus_fadeout(musQueen3);
oMusicV2.bossbgm = sndJump;
sfx_play(sndQueenDeath);
}
queenDead = true;
}
}
/*
if(room == rm_a7b11 &amp;&amp; !queenHealthSet){
queenHealthSet = true;
global.queenhealthPrev = oQueenHead.myhealth;
global.queenphasePrev = oQueen.phase;
show_debug_message("queen health initialized");
} else if(room == rm_a7c01){
queenHealthSet = false;
}
if(queenHealthSet){
if(room != rm_a7b11){
queenHealthWait = true;
global.queenphasePrev = oQueen.phase;
} else if(room == rm_a7b11 &amp;&amp; (room_last == rm_subscreen || room_last == maproom || room_last == subscreenroom)){
if(queenHealthWait){
queenHealthWait = false;
oQueen.phase = global.queenphasePrev;
global.queenhealthPrev = oQueenHead.myhealth;
}
}
if(room == rm_a7b11 &amp;&amp; phase == oQueen.phase){
oQueenHead.myhealth = global.queenhealthPrev;
}
}
*/
if(keyboard_check_pressed(vk_f2)){
instance_destroy();
}
@ -331,22 +439,67 @@ switch(type_event){
global.clientID = buffer_read(_buffer, buffer_u8);
break;
case 1:
ds_grid_read(global.onlineSend, strict_decompress(buffer_read(_buffer, buffer_string)));
ds_grid_read(global.onlineReceived, strict_decompress(buffer_read(_buffer, buffer_string)));
global.receivedClientID = buffer_read(_buffer, buffer_u8);
if(global.receivedClientID == global.clientID){
global.receivedPacketIDs[| ds_list_size(global.receivedPacketIDs)] = buffer_read(_buffer, buffer_u32);
global.receivedPacketIDs[| global.receivedPacketID] = buffer_read(_buffer, buffer_u32);
}
global.receivedPacketID++;
if(global.receivedClientID != global.clientID){
update_variables("disablesame");
update_variables("replaceglobalvars");
update_variables("updateprev");
alarm[0] = 30;
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("replaceglobalvars");
update_variables("updateprev");
update_variables("resendpacket");
global.itemChanges = 0;
global.metdeadChanges = 0;
global.eventChanges = 0;
alarm[0] = 30;
ds_grid_clear(global.onlineSend, -1);
show_debug_message(string(global.receivedClientID));
ds_grid_clear(global.onlineReceived, -1);
break;
case 3:
queenHealth = buffer_read(_buffer, buffer_s16);
var clientID = buffer_read(_buffer, buffer_u8);
phase = buffer_read(_buffer, buffer_s8);
state = buffer_read(_buffer, buffer_s8);
if(clientID != global.clientID){
if(!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;
}
} else if(is_undefined(oQueenHead.myhealth) &amp;&amp; is_undefined(oQueen.phase)){
queenHealthResetQueued = true;
alarm[1] = 5;
}
} else {
if(!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;
}
}
}
}
}
@ -377,7 +530,7 @@ switch(type_event){
buffer_delete(buffer);
ds_grid_destroy(global.onlineList);
ds_grid_destroy(global.onlineSend);
ds_grid_destroy(global.onlineResend);
ds_grid_destroy(global.onlineReceived);
ds_grid_destroy(global.storedBuffers);
ds_list_destroy(global.receivedPacketIDs);
</string>

@ -209,6 +209,75 @@ if (open == 0) {
if (hlalpha &gt; 1) hlalpha = 1;
}
}
if(room == rm_a7b05){
if(global.metdead[46] == 1){
if(lock == 4){
lock = 0;
open = 1;
}
}
if(oControl.mod_monstersextreme == 1 &amp;&amp; global.metdead[67] == 1 &amp;&amp; global.metdead[68] == 1 &amp;&amp; global.metdead[81] == 1 &amp;&amp; global.metdead[82] == 1){
if(lock == 4){
lock = 0;
open = 1;
}
}
if(oControl.mod_monstersextreme == 1 &amp;&amp; oControl.mod_fusion == 1 &amp;&amp; global.metdead[62] == 1){
if(lock == 4){
lock = 0;
open = 1;
}
}
}
if(room == rm_a7b06){
if(global.metdead[47] == 1){
if(lock == 4){
lock = 0;
open = 1;
}
}
if(oControl.mod_monstersextreme == 1 &amp;&amp; global.metdead[69] == 1 &amp;&amp; global.metdead[83] == 1 &amp;&amp; global.metdead[70] == 1){
if(lock == 4){
lock = 0;
open = 1;
}
}
if((oControl.difficulty &gt;= 2 || oControl.mod_fusion == 1 || oControl.mod_monstersextreme == 1) &amp;&amp; global.metdead[54] == 1){
if(lock == 4){
lock = 0;
open = 1;
}
}
}
if(room == rm_a7b07){
if(global.metdead[48] == 1 &amp;&amp; global.metdead[49] == 1){
if(lock == 4){
lock = 0;
open = 1;
}
}
}
if(room == rm_a7b08){
if(global.metdead[50] == 1 &amp;&amp; global.metdead[51] == 1){
if(lock == 4){
lock = 0;
open = 1;
}
}
}
if(room == rm_a7b08A){
if(global.metdead[52] == 1 &amp;&amp; global.metdead[53] == 1){
if(lock == 4){
lock = 0;
open = 1;
}
}
}
</string>
</argument>
</arguments>

@ -89,6 +89,31 @@ alarm[1] = 20;
<argument>
<kind>1</kind>
<string>active = 1;
</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>if(global.item[itemid] == 1){
instance_destroy();
}
</string>
</argument>
</arguments>

@ -271,7 +271,10 @@ if (state == 5 || dodging) alarm[2] = 3;
<arguments>
<argument>
<kind>1</kind>
<string>if (active == 1) {
<string>if(global.metdead[myid] == 1){
instance_destroy();
}
if (active == 1) {
if (state == 1) {
xVel = 0;
yVel = 0;

@ -331,7 +331,10 @@ if (state == 5 || dodging) alarm[2] = 3;
<arguments>
<argument>
<kind>1</kind>
<string>if (active == 1) {
<string>if(global.metdead[myid] == 1){
instance_destroy();
}
if (active == 1) {
if (state == 1) {
xVel = 0;
yVel = 0;

@ -379,7 +379,10 @@ if (instance_exists(grab_obj)) {
<arguments>
<argument>
<kind>1</kind>
<string>var slash_dist, msl, tl;
<string>if(global.metdead[myid] == 1){
instance_destroy();
}
var slash_dist, msl, tl;
slash_dist = 130;
// Target set
if (target_mode == 0) {

@ -412,7 +412,10 @@ if (instance_exists(mask_obj)) {
<arguments>
<argument>
<kind>1</kind>
<string>var msl, fr_speed;
<string>if(global.metdead[myid] == 1){
instance_destroy();
}
var msl, fr_speed;
if (target_mode == 0) {
targetx = oCharacter.x;
targety = oCharacter.y;

@ -223,7 +223,10 @@ if (instance_exists(spark3)) {
<arguments>
<argument>
<kind>1</kind>
<string>var tgty;
<string>if(global.metdead[myid] == 1){
instance_destroy();
}
var tgty;
if (state == 0) {
scale = 0.5;
image_blend = c_black;

@ -79,8 +79,8 @@ global.floormaterial = 3;</code>
<instance objName="oDoor" x="24" y="800" name="inst_145824" locked="0" code="&#xA;lock = 4;&#xA;" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>
<instance objName="oDoor" x="24" y="64" name="inst_145825" locked="0" code="&#xA;lock = 4;&#xA;" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>
<instance objName="oMonsterDoorControl" x="48" y="80" name="inst_145826" locked="0" code="" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>
<instance objName="oMonster" x="88" y="592" name="inst_145827" locked="0" code="// Original Monster&#xA;myid = 48;&#xA;if (global.metdead[myid] &gt; 0) instance_destroy();&#xA;" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>
<instance objName="oMonster" x="136" y="240" name="inst_145828" locked="0" code="// Original Monster&#xA;myid = 49;&#xA;if (global.metdead[myid] &gt; 0) instance_destroy();&#xA;" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>
<instance objName="oMonster" x="88" y="592" name="inst_145827" locked="0" code="// Original Monster&#xA;myid = 48;&#xA;if (global.metdead[myid] &gt; 0) instance_destroy();" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>
<instance objName="oMonster" x="136" y="240" name="inst_145828" locked="0" code="// Original Monster&#xA;myid = 49;&#xA;if (global.metdead[myid] &gt; 0) instance_destroy();" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>
<instance objName="oMMoverLeft" x="168" y="744" name="inst_145829" locked="0" code="" scaleX="7.46666669845581" scaleY="2" colour="4294967295" rotation="0"/>
<instance objName="oMMoverLeft" x="152" y="552" name="inst_145830" locked="0" code="" scaleX="4.5" scaleY="2" colour="4294967295" rotation="0"/>
<instance objName="oMMoverLeft" x="168" y="424" name="inst_145831" locked="0" code="" scaleX="3.5" scaleY="2" colour="4294967295" rotation="0"/>
@ -93,7 +93,7 @@ global.floormaterial = 3;</code>
<instance objName="oMonster" x="96" y="832" name="inst_0A9D6DA7" locked="0" code="//Insane&#xA;myid = 73;&#xA;if (global.metdead[myid] &gt; 0) instance_destroy();&#xA;if (oControl.mod_monstersextreme =! 1) instance_destroy();" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>
<instance objName="oMonster" x="96" y="64" name="inst_D42A689F" locked="0" code="//Insane&#xA;myid = 74;&#xA;if (global.metdead[myid] &gt; 0) instance_destroy();&#xA;if (oControl.mod_monstersextreme =! 1) instance_destroy();&#xA;" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>
<instance objName="oMonster" x="128" y="864" name="inst_6C373F66" locked="0" code="//Insane&#xA;myid = 87;&#xA;if (global.metdead[myid] &gt; 0) instance_destroy();&#xA;if (oControl.mod_monstersextreme =! 1) instance_destroy();" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>
<instance objName="oMonster" x="160" y="512" name="inst_338B6A45" locked="0" code="//Insane&#xA;myid = 88;&#xA;if (global.metdead[myid] &gt; 0) instance_destroy();&#xA;if (oControl.mod_monstersextreme =! 1) instance_destroy();&#xA;" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>
<instance objName="oMonster" x="160" y="512" name="inst_338B6A45" locked="0" code="//Insane&#xA;myid = 88;&#xA;if (global.metdead[myid] &gt; 0) instance_destroy();&#xA;if (oControl.mod_monstersextreme =! 1) instance_destroy();" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>
<instance objName="oMonster" x="160" y="64" name="inst_59AC8AE7" locked="0" code="//Insane&#xA;myid = 89;&#xA;if (global.metdead[myid] &gt; 0) instance_destroy();&#xA;if (oControl.mod_monstersextreme =! 1) instance_destroy();&#xA;" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>
<instance objName="oSolid4x1" x="-64" y="48" name="inst_015DC6FF" locked="0" code="" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>
<instance objName="oSolid4x1" x="-64" y="128" name="inst_9BE36229" locked="0" code="" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>

@ -5,4 +5,4 @@ size = 1024;
type = buffer_grow;
alignment = 1;
buffer = buffer_create(size, type, alignment);
return buffer;
return buffer;

@ -36,8 +36,8 @@ repeat (100) {
i -= 1;
global.metdead[i] = 0;
}
i = 350;
repeat (350) {
i = 400;
repeat (400) {
i -= 1;
global.event[i] = 0;
}

@ -37,34 +37,261 @@ switch(argument0){
global.lavastatePrev = global.lavastate;
break;
case "updateprev":
global.itemstakenPrev = global.itemstaken;
global.maxmissilesPrev = global.maxmissiles;
global.maxsmissilesPrev = global.maxsmissiles;
global.maxpbombsPrev = global.maxpbombs;
global.maxhealthPrev = global.maxhealth;
global.playerhealthPrev = global.playerhealth;
global.morphballPrev = global.morphball;
global.jumpballPrev = global.jumpball;
global.powergripPrev = global.powergrip;
global.spacejumpPrev = global.spacejump;
global.screwattackPrev = global.screwattack;
global.hijumpPrev = global.hijump;
global.spiderballPrev = global.spiderball;
global.speedboosterPrev = global.speedbooster;
global.bombPrev = global.bomb;
global.ibeamPrev = global.ibeam;
global.wbeamPrev = global.wbeam;
global.pbeamPrev = global.pbeam;
global.sbeamPrev = global.sbeam;
global.cbeamPrev = global.cbeam;
global.missilesPrev = global.missiles;
global.smissilesPrev = global.smissiles;
global.pbombsPrev = global.pbombs;
global.etanksPrev = global.etanks;
global.mtanksPrev = global.mtanks;
global.stanksPrev = global.stanks;
global.ptanksPrev = global.ptanks;
global.currentsuitPrev = global.currentsuit;
for(var i=0; i<ds_grid_height(global.onlineReceived); i++){
if(global.onlineReceived[# 2, i] != -1){
if(global.onlineReceived[# 2, i] == 24 && global.receivedClientID != global.clientID){
global.missiles = global.onlineReceived[# 1, i];
if(global.missilesPrev != global.missiles){
global.missilesPrev = global.missiles;
}
} else if(global.onlineReceived[# 2, i] == 24 && global.receivedClientID == global.clientID){
global.missilesPrev = global.missiles;
}
if(global.onlineReceived[# 2, i] == 25 && global.receivedClientID != global.clientID){
global.smissiles = global.onlineReceived[# 1, i];
if(global.smissilesPrev != global.smissiles){
global.smissilesPrev = global.smissiles;
}
} else if(global.onlineReceived[# 2, i] == 25 && global.receivedClientID == global.clientID){
global.smissilesPrev = global.smissiles;
}
if(global.onlineReceived[# 2, i] == 2 && global.receivedClientID != global.clientID){
global.itemstaken = global.onlineReceived[# 1, i];
if(global.itemstakenPrev != global.itemstaken){
global.itemstakenPrev = global.itemstaken;
}
} else if(global.onlineReceived[# 2, i] == 2 && global.receivedClientID == global.clientID){
global.itemstakenPrev = global.itemstaken;
}
if(global.onlineReceived[# 2, i] == 5 && global.receivedClientID != global.clientID){
global.maxmissiles = global.onlineReceived[# 1, i];
if(global.maxmissilesPrev != global.maxmissiles){
global.maxmissilesPrev = global.maxmissiles;
}
} else if(global.onlineReceived[# 2, i] == 5 && global.receivedClientID == global.clientID){
global.maxmissilesPrev = global.maxmissiles;
}
if(global.onlineReceived[# 2, i] == 6 && global.receivedClientID != global.clientID){
global.maxsmissiles = global.onlineReceived[# 1, i];
if(global.maxsmissilesPrev != global.maxsmissiles){
global.maxsmissilesPrev = global.maxsmissiles;
}
} else if(global.onlineReceived[# 2, i] == 6 && global.receivedClientID == global.clientID){
global.maxsmissilesPrev = global.maxsmissiles;
}
if(global.onlineReceived[# 2, i] == 7 && global.receivedClientID != global.clientID){
global.maxpbombs = global.onlineReceived[# 1, i];
if(global.maxpbombsPrev != global.maxpbombs){
global.maxpbombsPrev = global.maxpbombs;
}
} else if(global.onlineReceived[# 2, i] == 7 && global.receivedClientID == global.clientID){
global.maxpbombsPrev = global.maxpbombs;
}
if(global.onlineReceived[# 2, i] == 8 && global.receivedClientID != global.clientID){
global.maxhealth = global.onlineReceived[# 1, i];
if(global.maxhealthPrev != global.maxhealth){
global.maxhealthPrev = global.maxhealth;
}
} else if(global.onlineReceived[# 2, i] == 8 && global.receivedClientID == global.clientID){
global.maxhealthPrev = global.maxhealth;
}
if(global.onlineReceived[# 2, i] == 9 && global.receivedClientID != global.clientID){
global.playerhealth = global.onlineReceived[# 1, i];
if(global.playerhealthPrev != global.playerhealth){
global.playerhealthPrev = global.playerhealth;
}
} else if(global.onlineReceived[# 2, i] == 9 && global.receivedClientID == global.clientID){
global.playerhealthPrev = global.playerhealth;
}
if(global.onlineReceived[# 2, i] == 10 && global.receivedClientID != global.clientID){
global.morphball = global.onlineReceived[# 1, i];
if(global.morphballPrev != global.morphball){
global.morphballPrev = global.morphball;
}
} else if(global.onlineReceived[# 2, i] == 10 && global.receivedClientID == global.clientID){
global.morphballPrev = global.morphball;
}
if(global.onlineReceived[# 2, i] == 11 && global.receivedClientID != global.clientID){
global.jumpball = global.onlineReceived[# 1, i];
if(global.jumpballPrev != global.jumpball){
global.jumpballPrev = global.jumpball;
}
} else if(global.onlineReceived[# 2, i] == 11 && global.receivedClientID == global.clientID){
global.jumpballPrev = global.jumpball;
}
if(global.onlineReceived[# 2, i] == 12 && global.receivedClientID != global.clientID){
global.powergrip = global.onlineReceived[# 1, i];
if(global.powergripPrev != global.powergrip){
global.powergripPrev = global.powergrip;
}
} else if(global.onlineReceived[# 2, i] == 12 && global.receivedClientID == global.clientID){
global.powergripPrev = global.powergrip;
}
if(global.onlineReceived[# 2, i] == 13 && global.receivedClientID != global.clientID){
global.spacejump = global.onlineReceived[# 1, i];
if(global.spacejumpPrev != global.spacejump){
global.spacejumpPrev = global.spacejump;
}
} else if(global.onlineReceived[# 2, i] == 13 && global.receivedClientID == global.clientID){
global.spacejumpPrev = global.spacejump;
}
if(global.onlineReceived[# 2, i] == 14 && global.receivedClientID != global.clientID){
global.screwattack = global.onlineReceived[# 1, i];
if(global.screwattackPrev != global.screwattack){
global.screwattackPrev = global.screwattack;
}
} else if(global.onlineReceived[# 2, i] == 14 && global.receivedClientID == global.clientID){
global.screwattackPrev = global.screwattack;
}
if(global.onlineReceived[# 2, i] == 15 && global.receivedClientID != global.clientID){
global.hijump = global.onlineReceived[# 1, i];
if(global.hijumpPrev != global.hijump){
global.hijumpPrev = global.hijump;
}
} else if(global.onlineReceived[# 2, i] == 15 && global.receivedClientID == global.clientID){
global.hijumpPrev = global.hijump;
}
if(global.onlineReceived[# 2, i] == 16 && global.receivedClientID != global.clientID){
global.spiderball = global.onlineReceived[# 1, i];
if(global.spiderballPrev != global.spiderball){
global.spiderballPrev = global.spiderball;
}
} else if(global.onlineReceived[# 2, i] == 16 && global.receivedClientID == global.clientID){
global.spiderballPrev = global.spiderball;
}
if(global.onlineReceived[# 2, i] == 17 && global.receivedClientID != global.clientID){
global.speedbooster = global.onlineReceived[# 1, i];
if(global.speedboosterPrev != global.speedbooster){
global.speedboosterPrev = global.speedbooster;
}
} else if(global.onlineReceived[# 2, i] == 17 && global.receivedClientID == global.clientID){
global.speedboosterPrev = global.speedbooster;
}
if(global.onlineReceived[# 2, i] == 18 && global.receivedClientID != global.clientID){
global.bomb = global.onlineReceived[# 1, i];
if(global.bombPrev != global.bomb){
global.bombPrev = global.bomb;
}
} else if(global.onlineReceived[# 2, i] == 18 && global.receivedClientID == global.clientID){
global.bombPrev = global.bomb;
}
if(global.onlineReceived[# 2, i] == 19 && global.receivedClientID != global.clientID){
global.ibeam = global.onlineReceived[# 1, i];
if(global.ibeamPrev != global.ibeam){
global.ibeamPrev = global.ibeam;
}
} else if(global.onlineReceived[# 2, i] == 19 && global.receivedClientID == global.clientID){
global.ibeamPrev = global.ibeam;
}
if(global.onlineReceived[# 2, i] == 20 && global.receivedClientID != global.clientID){
global.wbeam = global.onlineReceived[# 1, i];
if(global.wbeamPrev != global.wbeam){
global.wbeamPrev = global.wbeam;
}
} else if(global.onlineReceived[# 2, i] == 20 && global.receivedClientID == global.clientID){
global.wbeamPrev = global.wbeam;
}
if(global.onlineReceived[# 2, i] == 21 && global.receivedClientID != global.clientID){
global.pbeam = global.onlineReceived[# 1, i];
if(global.pbeamPrev != global.pbeam){
global.pbeamPrev = global.pbeam;
}
} else if(global.onlineReceived[# 2, i] == 21 && global.receivedClientID == global.clientID){
global.pbeamPrev = global.pbeam;
}
if(global.onlineReceived[# 2, i] == 22 && global.receivedClientID != global.clientID){
global.sbeam = global.onlineReceived[# 1, i];
if(global.sbeamPrev != global.sbeam){
global.sbeamPrev = global.sbeam;
}
} else if(global.onlineReceived[# 2, i] == 22 && global.receivedClientID == global.clientID){
global.sbeamPrev = global.sbeam;
}
if(global.onlineReceived[# 2, i] == 23 && global.receivedClientID != global.clientID){
global.cbeam = global.onlineReceived[# 1, i];
if(global.cbeamPrev != global.cbeam){
global.cbeamPrev = global.cbeam;
}
} else if(global.onlineReceived[# 2, i] == 23 && global.receivedClientID == global.clientID){
global.cbeamPrev = global.cbeam;
}
if(global.onlineReceived[# 2, i] == 26 && global.receivedClientID != global.clientID){
global.pbombs = global.onlineReceived[# 1, i];
if(global.pbombsPrev != global.pbombs){
global.pbombsPrev = global.pbombs;
}
} else if(global.onlineReceived[# 2, i] == 26 && global.receivedClientID == global.clientID){
global.pbombsPrev = global.pbombs;
}
if(global.onlineReceived[# 2, i] == 27 && global.receivedClientID != global.clientID){
global.etanks = global.onlineReceived[# 1, i];
if(global.etanksPrev != global.etanks){
global.etanksPrev = global.etanks;
}
} else if(global.onlineReceived[# 2, i] == 27 && global.receivedClientID == global.clientID){
global.etanksPrev = global.etanks;
}
if(global.onlineReceived[# 2, i] == 28 && global.receivedClientID != global.clientID){
global.mtanks = global.onlineReceived[# 1, i];
if(global.mtanksPrev != global.mtanks){
global.mtanksPrev = global.mtanks;
}
} else if(global.onlineReceived[# 2, i] == 28 && global.receivedClientID == global.clientID){
global.mtanksPrev = global.mtanks;
}
if(global.onlineReceived[# 2, i] == 29 && global.receivedClientID != global.clientID){
global.stanks = global.onlineReceived[# 1, i];
if(global.stanksPrev != global.stanks){
global.stanksPrev = global.stanks;
}
} else if(global.onlineReceived[# 2, i] == 29 && global.receivedClientID == global.clientID){
global.stanksPrev = global.stanks;
}
if(global.onlineReceived[# 2, i] == 30 && global.receivedClientID != global.clientID){
global.ptanks = global.onlineReceived[# 1, i];
if(global.ptanksPrev != global.ptanks){
global.ptanksPrev = global.ptanks;
}
} else if(global.onlineReceived[# 2, i] == 30 && global.receivedClientID == global.clientID){
global.ptanksPrev = global.ptanks;
}
if(global.onlineReceived[# 2, i] == 31 && global.receivedClientID != global.clientID){
global.currentsuit = global.onlineReceived[# 1, i];
if(global.currentsuitPrev != global.currentsuit){
global.currentsuitPrev = global.currentsuit;
}
} else if(global.onlineReceived[# 2, i] == 31 && global.receivedClientID == global.clientID){
global.currentsuitPrev = global.currentsuit;
}
}
}
break;
case "onlinevars":
ds_grid_set(global.onlineList, 0, 0, global.itemPrev);
@ -173,81 +400,88 @@ switch(argument0){
global.lavastate = ds_grid_get(global.onlineList, 1, 33);
break;
case "disablesame":
for(var i=0; i<ds_grid_height(global.onlineSend); i++){
if(global.onlineSend[# 2, i] != -1 && i != 0 && i != 1 && i != 3){
global.onlineList[# 1, i] = global.onlineSend[# 1, i];
for(var i=0; i<ds_grid_height(global.onlineReceived); i++){
if(global.onlineReceived[# 2, i] != -1 && i != 0 && i != 1 && i != 3){
global.onlineList[# 1, i] = global.onlineReceived[# 1, i];
}
if((i == 0 || i == 1 || i == 3) && (is_array(global.onlineSend[# 1, i]))){
if((i == 0 || i == 1 || i == 3) && (is_array(global.onlineReceived[# 1, i]))){
var arrList = global.onlineList[# 1, i];
var arrSend = global.onlineSend[# 1, i];
var arrSend = global.onlineReceived[# 1, i];
show_debug_message(arrList);
show_debug_message(arrSend);
for(var f=0; f<array_length_1d(arrList); f++){
for(var v=0; v<array_height_2d(arrList); v++){
for(var v=0; v<array_height_2d(arrSend); v++){
if(f == arrSend[v, 1]){
arrList[f] = arrSend[v, 0];
if(i == 0){
global.itemPrev[f] = arrSend[v, 0];
if(global.item[f] != arrSend[v, 0]){
global.item[f] = arrSend[v, 0];
}
show_debug_message("item prev index " + string(f) + " changed");
}
if(i == 1){
global.metdeadPrev[f] = arrSend[v, 0];
if(global.metdead[f] != arrSend[v, 0]){
global.metdead[f] = arrSend[v, 0];
}
show_debug_message("metdead prev index " + string(f) + " changed");
}
if(i == 3){
global.eventPrev[f] = arrSend[v, 0];
if(global.event[f] != arrSend[v, 0]){
global.event[f] = arrSend[v, 0];
}
show_debug_message("event prev index " + string(f) + " changed");
}
}
}
}
global.onlineList[# 1, i] = arrList;
/*
switch(i){
case 0:
global.itemPrev = array_clone(global.item);
global.onlineList[# 0, 0] = global.itemPrev;
break;
case 1:
global.metdeadPrev = array_clone(global.metdead);
global.onlineList[# 0, 1] = global.metdeadPrev;
break;
case 3:
global.eventPrev = array_clone(global.event);
global.onlineList[# 0, 3] = global.eventPrev;
break;
}
*/
}
switch(i){
case 4:
if(i == 4){
if(global.onlineReceived[# 2, i] != -1 && global.receivedClientID != global.clientID){
global.monstersleft = global.onlineReceived[# 1, 4];
if(global.monstersleftPrev != global.monstersleft){
global.monstersleftPrev = global.monstersleft;
}
} else if(global.onlineReceived[# 2, i] != -1 && global.receivedClientID == global.clientID){
global.monstersleftPrev = global.monstersleft;
break;
case 32:
}
}
if(i == 32){
if(global.onlineReceived[# 2, i] != -1 && global.receivedClientID != global.clientID){
global.monstersarea = global.onlineReceived[# 1, 32];
if(global.monstersareaPrev != global.monstersarea){
global.monstersareaPrev = global.monstersarea;
}
} else if(global.onlineReceived[# 2, i] != -1 && global.receivedClientID == global.clientID){
global.monstersareaPrev = global.monstersarea;
break;
case 33:
global.lavastatePrev = global.lavastate;
break;
}
}
}
break;
case "resendpacket":
var _canSend = false;
var packetID = 0;
for(var i=(ds_grid_height(global.storedBuffers) - 20); i<ds_grid_height(global.storedBuffers); i++){
if(ds_list_find_index(global.receivedPacketIDs, global.storedBuffers[# 1, i]) == -1 && i >= 0){
show_debug_message("packet lost");
_canSend = true;
global.receivedPacketIDs[| ds_list_size(global.receivedPacketIDs)] = global.storedBuffers[# 1, i];
var _send = global.storedBuffers[# 0, i];
for(var f=0; f<ds_grid_height(_send); f++){
if((f == 0 || f == 1 || f == 3) && (is_array(_send[# 1, f]))){
global.onlineResend[# 1, f] = _send[# 1, f];
if(i == 33){
if(global.onlineReceived[# 2, i] != -1 && global.receivedClientID != global.clientID){
global.lavastate = global.onlineReceived[# 1, 33];
if(global.lavastatePrev != global.lavastate){
global.lavastatePrev = global.lavastate;
}
} else if(global.onlineReceived[# 2, i] != -1 && global.receivedClientID == global.clientID){
global.lavastatePrev = global.lavastate;
}
}
}
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.onlineResend)));
buffer_write(buffer, buffer_u8, global.clientID);
buffer_write(buffer, buffer_u32, packetID);
show_debug_message("packet resent");
var result = network_send_packet(socket, buffer, buffer_tell(buffer));
}
ds_grid_clear(global.onlineResend, -1);
break;
}

Loading…
Cancel
Save