| version 1.1 | | version 1.2 |
|---|
| | |
| fix robot_last_message_time[MAX_ROBOTS_CONTROLLED]; | | fix robot_last_message_time[MAX_ROBOTS_CONTROLLED]; |
| int robot_send_pending[MAX_ROBOTS_CONTROLLED]; | | int robot_send_pending[MAX_ROBOTS_CONTROLLED]; |
| int robot_fired[MAX_ROBOTS_CONTROLLED]; | | int robot_fired[MAX_ROBOTS_CONTROLLED]; |
| byte robot_fire_buf[MAX_ROBOTS_CONTROLLED][18+3]; | | sbyte robot_fire_buf[MAX_ROBOTS_CONTROLLED][18+3]; |
| | | |
| #define MULTI_ROBOT_PRIORITY(objnum, pnum) (((objnum % 4) + pnum) % N_players) | | #define MULTI_ROBOT_PRIORITY(objnum, pnum) (((objnum % 4) + pnum) % N_players) |
| | | |
| | |
| | | |
| multibuf[0] = (char)MULTI_ROBOT_CLAIM; | | multibuf[0] = (char)MULTI_ROBOT_CLAIM; |
| multibuf[1] = Player_num; | | multibuf[1] = Player_num; |
| *(short *)(multibuf+2) = (short)objnum_local_to_remote(objnum, (byte *)&multibuf[4]); | | *(short *)(multibuf+2) = (short)objnum_local_to_remote(objnum, (sbyte *)&multibuf[4]); |
| | | |
| multi_send_data(multibuf, 5, 1); | | multi_send_data(multibuf, 5, 1); |
| } | | } |
| | |
| | | |
| multibuf[0] = (char)MULTI_ROBOT_RELEASE; | | multibuf[0] = (char)MULTI_ROBOT_RELEASE; |
| multibuf[1] = Player_num; | | multibuf[1] = Player_num; |
| *(short *)(multibuf+2) = (short)objnum_local_to_remote(objnum, (byte *)&multibuf[4]); | | *(short *)(multibuf+2) = (short)objnum_local_to_remote(objnum, (sbyte *)&multibuf[4]); |
| | | |
| multi_send_data(multibuf, 5, 1); | | multi_send_data(multibuf, 5, 1); |
| } | | } |
| | |
| | | |
| multibuf[loc] = MULTI_ROBOT_POSITION; loc += 1; | | multibuf[loc] = MULTI_ROBOT_POSITION; loc += 1; |
| multibuf[loc] = Player_num; loc += 1; | | multibuf[loc] = Player_num; loc += 1; |
| *(short *)(multibuf+loc) = (short)objnum_local_to_remote(objnum, (byte *)&multibuf[loc+2]); | | *(short *)(multibuf+loc) = (short)objnum_local_to_remote(objnum, (sbyte *)&multibuf[loc+2]); |
| loc += 3; | | loc += 3; |
| create_shortpos((shortpos *)(multibuf+loc), Objects+objnum); | | create_shortpos((shortpos *)(multibuf+loc), Objects+objnum); |
| loc += sizeof(shortpos); | | loc += sizeof(shortpos); |
| | |
| | | |
| multibuf[loc] = MULTI_ROBOT_FIRE; loc += 1; | | multibuf[loc] = MULTI_ROBOT_FIRE; loc += 1; |
| multibuf[loc] = Player_num; loc += 1; | | multibuf[loc] = Player_num; loc += 1; |
| *(short *)(multibuf+loc) = (short)objnum_local_to_remote(objnum, (byte *)&multibuf[loc+2]); | | *(short *)(multibuf+loc) = (short)objnum_local_to_remote(objnum, (sbyte *)&multibuf[loc+2]); |
| loc += 3; | | loc += 3; |
| multibuf[loc] = gun_num; loc += 1; | | multibuf[loc] = gun_num; loc += 1; |
| *(vms_vector *)(multibuf+loc) = *fire; loc += sizeof(vms_vector); // 12 | | *(vms_vector *)(multibuf+loc) = *fire; loc += sizeof(vms_vector); // 12 |
| | |
| | | |
| multibuf[loc] = MULTI_ROBOT_EXPLODE; loc += 1; | | multibuf[loc] = MULTI_ROBOT_EXPLODE; loc += 1; |
| multibuf[loc] = Player_num; loc += 1; | | multibuf[loc] = Player_num; loc += 1; |
| *(short *)(multibuf+loc) = (short)objnum_local_to_remote(killer, (byte *)&multibuf[loc+2]); | | *(short *)(multibuf+loc) = (short)objnum_local_to_remote(killer, (sbyte *)&multibuf[loc+2]); |
| loc += 3; | | loc += 3; |
| *(short *)(multibuf+loc) = (short)objnum_local_to_remote(objnum, (byte *)&multibuf[loc+2]); | | *(short *)(multibuf+loc) = (short)objnum_local_to_remote(objnum, (sbyte *)&multibuf[loc+2]); |
| loc += 3; | | loc += 3; |
| multi_send_data(multibuf, loc, 1); | | multi_send_data(multibuf, loc, 1); |
| | | |
| | |
| | | |
| multibuf[loc] = MULTI_CREATE_ROBOT; loc += 1; | | multibuf[loc] = MULTI_CREATE_ROBOT; loc += 1; |
| multibuf[loc] = Player_num; loc += 1; | | multibuf[loc] = Player_num; loc += 1; |
| multibuf[loc] = (byte)station; loc += 1; | | multibuf[loc] = (sbyte)station; loc += 1; |
| *(short *)(multibuf+loc) = (short)objnum; loc += 2; | | *(short *)(multibuf+loc) = (short)objnum; loc += 2; |
| multibuf[loc] = type; loc += 1; | | multibuf[loc] = type; loc += 1; |
| | | |
| | |
| multibuf[loc] = MULTI_BOSS_ACTIONS; loc += 1; | | multibuf[loc] = MULTI_BOSS_ACTIONS; loc += 1; |
| multibuf[loc] = Player_num; loc += 1; // Which player is controlling the boss | | multibuf[loc] = Player_num; loc += 1; // Which player is controlling the boss |
| *(short *)(multibuf+loc) = bossobjnum; loc += 2; // We won't network map this objnum since its the boss | | *(short *)(multibuf+loc) = bossobjnum; loc += 2; // We won't network map this objnum since its the boss |
| multibuf[loc] = (byte)action; loc += 1; // What is the boss doing? | | multibuf[loc] = (sbyte)action; loc += 1; // What is the boss doing? |
| multibuf[loc] = (byte)secondary; loc += 1; // More info for what he is doing | | multibuf[loc] = (sbyte)secondary; loc += 1; // More info for what he is doing |
| *(short *)(multibuf+loc) = objnum; loc += 2; // Objnum of object created by gate-in action | | *(short *)(multibuf+loc) = objnum; loc += 2; // Objnum of object created by gate-in action |
| if (action == 3) { | | if (action == 3) { |
| *(short *)(multibuf+loc) = Objects[objnum].segnum; loc += 2; // Segment number object created in (for gate only) | | *(short *)(multibuf+loc) = Objects[objnum].segnum; loc += 2; // Segment number object created in (for gate only) |
| | |
| pnum = buf[1]; | | pnum = buf[1]; |
| | | |
| remote_botnum = *(short *)(buf+2); | | remote_botnum = *(short *)(buf+2); |
| botnum = objnum_remote_to_local(remote_botnum, (byte)buf[4]); | | botnum = objnum_remote_to_local(remote_botnum, (sbyte)buf[4]); |
| | | |
| if ((botnum > Highest_object_index) || (botnum < 0)) { | | if ((botnum > Highest_object_index) || (botnum < 0)) { |
| mprintf((1, "Ignoring claim message for object I don't have.\n")); | | mprintf((1, "Ignoring claim message for object I don't have.\n")); |
| | |
| | | |
| pnum = buf[1]; | | pnum = buf[1]; |
| | | |
| botnum = (objnum_remote_to_local(*(short *)(buf+2), (byte)buf[4])); | | botnum = (objnum_remote_to_local(*(short *)(buf+2), (sbyte)buf[4])); |
| | | |
| if ((botnum < 0) || (botnum > Highest_object_index)) { | | if ((botnum < 0) || (botnum > Highest_object_index)) { |
| mprintf((1, "Ignoring release message for object I don't have.\n")); | | mprintf((1, "Ignoring release message for object I don't have.\n")); |
| | |
| | | |
| pnum = buf[loc]; loc += 1; | | pnum = buf[loc]; loc += 1; |
| | | |
| botnum = objnum_remote_to_local(*(short *)(buf+loc), (byte)buf[loc+2]); | | botnum = objnum_remote_to_local(*(short *)(buf+loc), (sbyte)buf[loc+2]); |
| loc += 3; | | loc += 3; |
| | | |
| if ((botnum < 0) || (botnum > Highest_object_index)) { | | if ((botnum < 0) || (botnum > Highest_object_index)) { |
| | |
| robot_info *robptr; | | robot_info *robptr; |
| | | |
| pnum = buf[loc]; loc += 1; | | pnum = buf[loc]; loc += 1; |
| botnum = objnum_remote_to_local(*(short *)(buf+loc), (byte)buf[loc+2]); | | botnum = objnum_remote_to_local(*(short *)(buf+loc), (sbyte)buf[loc+2]); |
| loc += 3; | | loc += 3; |
| gun_num = (byte)buf[loc]; loc += 1; | | gun_num = (sbyte)buf[loc]; loc += 1; |
| fire = *(vms_vector *)(buf+loc); | | fire = *(vms_vector *)(buf+loc); |
| | | |
| if ((botnum < 0) || (botnum > Highest_object_index) || (Objects[botnum].type != OBJ_ROBOT) || (Objects[botnum].flags & OF_EXPLODING)) | | if ((botnum < 0) || (botnum > Highest_object_index) || (Objects[botnum].type != OBJ_ROBOT) || (Objects[botnum].flags & OF_EXPLODING)) |
| | |
| int rval; | | int rval; |
| | | |
| pnum = buf[loc]; loc += 1; | | pnum = buf[loc]; loc += 1; |
| killer = objnum_remote_to_local(*(short *)(buf+loc), (byte)buf[loc+2]); | | killer = objnum_remote_to_local(*(short *)(buf+loc), (sbyte)buf[loc+2]); |
| loc += 3; | | loc += 3; |
| botnum = objnum_remote_to_local(*(short *)(buf+loc), (byte)buf[loc+2]); | | botnum = objnum_remote_to_local(*(short *)(buf+loc), (sbyte)buf[loc+2]); |
| loc += 3; | | loc += 3; |
| | | |
| // Assert((botnum > -1) && (botnum <= Highest_object_index)); | | // Assert((botnum > -1) && (botnum <= Highest_object_index)); |
| | |
| void multi_robot_request_change(object *robot, int player_num) | | void multi_robot_request_change(object *robot, int player_num) |
| { | | { |
| int slot, remote_objnum; | | int slot, remote_objnum; |
| byte dummy; | | sbyte dummy; |
| | | |
| if (!(Game_mode & GM_MULTI_ROBOTS)) | | if (!(Game_mode & GM_MULTI_ROBOTS)) |
| return; | | return; |