+procedure g_Game_LoadChatSounds(Resource: string);
+var
+ WAD: TWADFile;
+ FileName, Snd: string;
+ p: Pointer;
+ len, cnt, tags, i, j: Integer;
+ cfg: TConfig;
+begin
+ FileName := g_ExtractWadName(Resource);
+
+ WAD := TWADFile.Create();
+ WAD.ReadFile(FileName);
+
+ if not WAD.GetResource(g_ExtractFilePathName(Resource), p, len) then
+ begin
+ gChatSounds := nil;
+ WAD.Free();
+ Exit;
+ end;
+
+ cfg := TConfig.CreateMem(p, len);
+ cnt := cfg.ReadInt('ChatSounds', 'Count', 0);
+
+ SetLength(gChatSounds, cnt);
+ for i := 0 to Length(gChatSounds) - 1 do
+ begin
+ gChatSounds[i].Sound := nil;
+ Snd := Trim(cfg.ReadStr(IntToStr(i), 'Sound', ''));
+ tags := cfg.ReadInt(IntToStr(i), 'Tags', 0);
+ if (Snd = '') or (Tags <= 0) then
+ continue;
+ g_Sound_CreateWADEx('SOUND_CHAT_MACRO' + IntToStr(i), GameWAD+':'+Snd);
+ gChatSounds[i].Sound := TPlayableSound.Create();
+ gChatSounds[i].Sound.SetByName('SOUND_CHAT_MACRO' + IntToStr(i));
+ SetLength(gChatSounds[i].Tags, tags);
+ for j := 0 to tags - 1 do
+ gChatSounds[i].Tags[j] := toLowerCase1251(cfg.ReadStr(IntToStr(i), 'Tag' + IntToStr(j), ''));
+ gChatSounds[i].FullWord := cfg.ReadBool(IntToStr(i), 'FullWord', False);
+ end;
+
+ cfg.Free();
+ WAD.Free();
+end;
+
+procedure g_Game_FreeChatSounds();
+var
+ i: Integer;
+begin
+ for i := 0 to Length(gChatSounds) - 1 do
+ begin
+ gChatSounds[i].Sound.Free();
+ g_Sound_Delete('SOUND_CHAT_MACRO' + IntToStr(i));
+ end;
+ SetLength(gChatSounds, 0);
+ gChatSounds := nil;
+end;
+