+ if self.pal_pos[str_num] != 0 {
+ for sdata in pkt.side_data.iter() {
+ if let NASideData::Palette(_, ref pal) = sdata {
+ let cur_pos = self.bw.tell();
+ self.bw.seek(SeekFrom::Start(u64::from(self.pal_pos[str_num])))?;
+ for quad in pal.chunks(4) {
+ self.bw.write_byte(quad[2])?;
+ self.bw.write_byte(quad[1])?;
+ self.bw.write_byte(quad[0])?;
+ self.bw.write_byte(0)?;
+ }
+ self.bw.seek(SeekFrom::Start(cur_pos))?;
+ self.pal_pos[str_num] = 0;
+ break;
+ }
+ }
+ } else {
+ for sdata in pkt.side_data.iter() {
+ if let NASideData::Palette(true, ref pal) = sdata {
+ //todo search for changed region
+ let start_clr = 0usize;
+ let end_clr = 256usize;
+ if start_clr < end_clr {
+ let chunk_len = ((end_clr - start_clr) as u32) * 4 + 4;
+ self.bw.write_byte(b'0' + ((str_num / 10) as u8))?;
+ self.bw.write_byte(b'0' + ((str_num % 10) as u8))?;
+ self.bw.write_buf(b"pc")?;
+ self.bw.write_u32le(chunk_len)?;
+ self.bw.write_byte(start_clr as u8)?;
+ self.bw.write_byte((end_clr - start_clr) as u8)?;
+ self.bw.write_u16le(0)?; //flags
+ self.bw.write_buf(&pal[start_clr * 4..end_clr * 4])?;
+ self.stream_info[str_num].pal_change = true;
+ }
+ }
+ }
+ }
+