1use getset::*;
26use serde_derive::{Serialize, Deserialize};
27
28use crate::binary::{ReadBytes, WriteBytes};
29use crate::error::{Result, RLibError};
30use crate::files::{DecodeableExtraData, Decodeable, EncodeableExtraData, Encodeable};
31use crate::games::supported_games::KEY_SHOGUN_2;
32use crate::utils::check_size_mismatch;
33
34pub const PATH: &str = "sounds_packed/sound_bank_database";
36
37mod games;
38
39#[cfg(test)] mod sound_bank_database_test;
40
41#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
53#[getset(get = "pub", get_mut = "pub", set = "pub")]
54pub struct SoundBankDatabase {
55 uk_1: Vec<f32>,
57
58 bank_event_uk_0: Vec<BankEventUk0>,
60 bank_event_projectile_fire: Vec<BankEventProjectileFire>,
62 bank_event_uk_2: Vec<BankEventUk2>,
64 bank_event_uk_3: Vec<BankEventUk3>,
66 bank_event_uk_4: Vec<BankEventUk4>,
68 bank_event_uk_5: Vec<BankEventUk5>,
70 bank_event_uk_6: Vec<BankEventUk6>,
72 bank_event_uk_7: Vec<BankEventUk7>,
74 bank_event_uk_8: Vec<BankEventUk8>,
76 bank_event_uk_9: Vec<BankEventUk9>,
78 bank_event_uk_10: Vec<BankEventUk10>,
80 bank_event_uk_11: Vec<BankEventUk11>,
82 bank_event_uk_12: Vec<BankEventUk12>,
84 bank_event_uk_13: Vec<BankEventUk13>,
86 bank_event_uk_14: Vec<BankEventUk14>,
88 bank_event_uk_15: Vec<BankEventUk15>,
90 bank_event_uk_16: Vec<BankEventUk16>,
92 bank_event_uk_17: Vec<BankEventUk17>,
94 bank_event_uk_18: Vec<BankEventUk18>,
96 bank_event_uk_19: Vec<BankEventUk19>,
98 bank_event_uk_20: Vec<BankEventUk20>,
100 bank_event_uk_21: Vec<BankEventUk21>,
102 bank_event_uk_22: Vec<BankEventUk22>,
104 bank_event_uk_23: Vec<BankEventUk23>,
106 bank_event_uk_24: Vec<BankEventUk24>,
108
109 uk_2: Vec<Uk1>,
111}
112
113#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
115#[getset(get = "pub", get_mut = "pub", set = "pub")]
116pub struct BankEventUk0 {
117 event_record_index: u32,
119 params_1: Vec<u32>,
121 params_2: Vec<u32>,
123 params_3: Vec<u32>,
125 params_4: Vec<u32>,
127}
128
129#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
134#[getset(get = "pub", get_mut = "pub", set = "pub")]
135pub struct BankEventProjectileFire {
136 event_record_index: u32,
138 gun_types: Vec<u32>,
140 shot_types: Vec<u32>,
142 projectile_sizes: Vec<u32>,
144 params_4: Vec<u32>,
146 unit_indexes: Vec<u32>,
148}
149
150#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
152#[getset(get = "pub", get_mut = "pub", set = "pub")]
153pub struct BankEventUk2 {
154 event_record_index: u32,
156 params_1: Vec<u32>,
158 params_2: Vec<u32>,
160 params_3: Vec<u32>,
162 params_4: Vec<u32>,
164}
165
166#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
168#[getset(get = "pub", get_mut = "pub", set = "pub")]
169pub struct BankEventUk3 {
170 event_record_index: u32,
172 params_1: Vec<u32>,
174 params_2: Vec<u32>,
176 params_3: Vec<u32>,
178}
179
180#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
182#[getset(get = "pub", get_mut = "pub", set = "pub")]
183pub struct BankEventUk4 {
184 event_record_index: u32,
186 params_1: Vec<u32>,
188 params_2: Vec<u32>,
190}
191
192#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
194#[getset(get = "pub", get_mut = "pub", set = "pub")]
195pub struct BankEventUk5 {
196 event_record_index: u32,
198 params_1: Vec<u32>,
200 params_2: Vec<u32>,
202 params_3: Vec<u32>,
204 params_4: Vec<u32>,
206}
207
208#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
210#[getset(get = "pub", get_mut = "pub", set = "pub")]
211pub struct BankEventUk6 {
212 event_record_index: u32,
214 params_1: Vec<u32>,
216 params_2: Vec<u32>,
218 params_3: Vec<u32>,
220 params_4: Vec<u32>,
222 params_5: Vec<u8>,
224 params_6: Vec<u8>,
226 params_7: Vec<u32>,
228}
229
230#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
232#[getset(get = "pub", get_mut = "pub", set = "pub")]
233pub struct BankEventUk7 {
234 event_record_index: u32,
236 params_1: Vec<u32>,
238 params_2: Vec<u32>,
240 params_3: Vec<u32>,
242 params_4: Vec<u32>,
244 params_5: Vec<u32>,
246}
247
248#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
250#[getset(get = "pub", get_mut = "pub", set = "pub")]
251pub struct BankEventUk8 {
252 event_record_index: u32,
254 params_1: Vec<u32>,
256 params_2: Vec<u32>,
258 params_3: Vec<u32>,
260 params_4: Vec<u32>,
262}
263
264#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
266#[getset(get = "pub", get_mut = "pub", set = "pub")]
267pub struct BankEventUk9 {
268 event_record_index: u32,
270 params_1: Vec<u32>,
272 params_2: Vec<u32>,
274}
275
276#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
278#[getset(get = "pub", get_mut = "pub", set = "pub")]
279pub struct BankEventUk10 {
280 event_record_index: u32,
282 params_1: Vec<u32>,
284 params_2: Vec<u32>,
286}
287
288#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
290#[getset(get = "pub", get_mut = "pub", set = "pub")]
291pub struct BankEventUk11 {
292 event_record_index: u32,
294 params_1: Vec<u32>,
296}
297
298#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
300#[getset(get = "pub", get_mut = "pub", set = "pub")]
301pub struct BankEventUk12 {
302 event_record_index: u32,
304 params_1: Vec<u32>,
306 params_2: Vec<u32>,
308 params_3: Vec<u32>,
310 params_4: Vec<u32>,
312 params_5: Vec<u32>,
314 params_6: Vec<u32>,
316}
317
318#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
320#[getset(get = "pub", get_mut = "pub", set = "pub")]
321pub struct BankEventUk13 {
322 event_record_index: u32,
324 params_1: Vec<u32>,
326 params_2: Vec<u32>,
328 params_3: Vec<u32>,
330 params_4: Vec<u32>,
332}
333
334#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
336#[getset(get = "pub", get_mut = "pub", set = "pub")]
337pub struct BankEventUk14 {
338 event_record_index: u32,
340 params_1: Vec<u32>,
342 params_2: Vec<u32>,
344 params_3: Vec<u32>,
346 params_4: Vec<u32>,
348}
349
350#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
352#[getset(get = "pub", get_mut = "pub", set = "pub")]
353pub struct BankEventUk15 {
354 event_record_index: u32,
356 params_1: Vec<u32>,
358 params_2: Vec<u32>,
360 params_3: Vec<u32>,
362 params_4: Vec<u32>,
364 params_5: Vec<u32>,
366 params_6: Vec<u32>,
368}
369
370#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
372#[getset(get = "pub", get_mut = "pub", set = "pub")]
373pub struct BankEventUk16 {
374 event_record_index: u32,
376 params_1: Vec<u32>,
378 params_2: Vec<u32>,
380}
381
382#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
384#[getset(get = "pub", get_mut = "pub", set = "pub")]
385pub struct BankEventUk17 {
386 event_record_index: u32,
388 params_1: Vec<u32>,
390 params_2: Vec<u32>,
392 params_3: Vec<u32>,
394}
395
396#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
398#[getset(get = "pub", get_mut = "pub", set = "pub")]
399pub struct BankEventUk18 {
400 event_record_index: u32,
402 params_1: Vec<u32>,
404 params_2: Vec<u32>,
406 params_3: Vec<u32>,
408}
409
410#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
412#[getset(get = "pub", get_mut = "pub", set = "pub")]
413pub struct BankEventUk19 {
414 event_record_index: u32,
416 params_1: Vec<u32>,
418 params_2: Vec<u32>,
420}
421
422#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
424#[getset(get = "pub", get_mut = "pub", set = "pub")]
425pub struct BankEventUk20 {
426 event_record_index: u32,
428 params_1: Vec<u32>,
430 params_2: Vec<u32>,
432}
433
434#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
436#[getset(get = "pub", get_mut = "pub", set = "pub")]
437pub struct BankEventUk21 {
438 event_record_index: u32,
440 params_1: Vec<u32>,
442 params_2: Vec<u32>,
444}
445
446#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
448#[getset(get = "pub", get_mut = "pub", set = "pub")]
449pub struct BankEventUk22 {
450 event_record_index: u32,
452 params_1: Vec<u32>,
454 params_2: Vec<u32>,
456}
457
458#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
460#[getset(get = "pub", get_mut = "pub", set = "pub")]
461pub struct BankEventUk23 {
462 event_record_index: u32,
464 params_1: Vec<u32>,
466 params_2: Vec<u32>,
468}
469
470#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
472#[getset(get = "pub", get_mut = "pub", set = "pub")]
473pub struct BankEventUk24 {
474 event_record_index: u32,
476 params_1: Vec<u32>,
478 params_2: Vec<u32>,
480}
481
482#[derive(Default, PartialEq, Clone, Debug, Getters, MutGetters, Setters, Serialize, Deserialize)]
484#[getset(get = "pub", get_mut = "pub", set = "pub")]
485pub struct Uk1 {
486 uk_1: Vec<u32>,
488}
489
490impl Decodeable for SoundBankDatabase {
495
496 fn decode<R: ReadBytes>(data: &mut R, extra_data: &Option<DecodeableExtraData>) -> Result<Self> {
497 let extra_data = extra_data.as_ref().ok_or(RLibError::DecodingMissingExtraData)?;
498 let game_info = extra_data.game_info.ok_or_else(|| RLibError::DecodingMissingExtraDataField("game_info".to_owned()))?;
499
500 let mut sound_bank = Self::default();
501
502 match game_info.key() {
503 KEY_SHOGUN_2 => sound_bank.read_sho2(data)?,
504 _ => return Err(RLibError::DecodingSoundPackedUnsupportedGame(game_info.key().to_string())),
507 }
508
509 check_size_mismatch(data.stream_position()? as usize, data.len()? as usize)?;
511
512 Ok(sound_bank)
513 }
514}
515
516impl Encodeable for SoundBankDatabase {
517
518 fn encode<W: WriteBytes>(&mut self, buffer: &mut W, extra_data: &Option<EncodeableExtraData>) -> Result<()> {
519 let extra_data = extra_data.as_ref().ok_or(RLibError::EncodingMissingExtraData)?;
520 let game_info = extra_data.game_info.ok_or_else(|| RLibError::DecodingMissingExtraDataField("game_info".to_owned()))?;
521
522 match game_info.key() {
523 KEY_SHOGUN_2 => self.write_sho2(buffer),
524 _ => Err(RLibError::EncodingSoundPackedUnsupportedGame(game_info.key().to_string())),
527 }
528 }
529}