Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 01.06.2009, 14:22   #1 (permalink)
Newbie
 
Registriert seit: 01.06.2009
Beiträge: 10
Standard soundreplacement addon - hilfe benötigt

hallo,

kann mir jemand beim erstellen eines sound addons behilflich sein?
nichts wirklich aufregendes, ich möchte nur vanilla sounds durch bessere ersetzen, bin aber beim arma/ofp modden ein noob...

die letzten tage habe ich mir alles reingezogen was ich über arma addons finden konnte und somit sind pbo ent- und packen, .wss soundfiles konvertieren kein problem mehr.

vielmehr möchte ich gern wissen wie ich per config dem spiel beibringe meine, anstatt der original sounds zu verwenden.
wobei ich bisher auch nur die original configs für waffen und deren sounds gefunden habe (mit fahrzeugen will ich mich erst später beschäftigen), ich aber als allererstes die laufgeräusche ändern möchte, aber eine config mit den entsprechenden definitionen der footstep sounds beim besten willen nicht zu finden war...

bin für jede hilfe dankbar..

edit:
so, die trittgeräusche sind gefunden. in der characters.pbo gibt es eine config.bin mit den entsprechenden definitionen.

reicht es jetzt diese config.bin so abzuändern das die entsprechenden pfade zu den sounds im addon verweisen und diese dann mit ins addon zu packen? also 1:1 und nur die pfade geändert?
und apropos pfade, im original sehen die so aus:
\Ca\sounds\Characters\Concrete_ext\run_01
\sounds\ ist wohl die sounds.pbo. aber wofür steht \Ca\?
und kann ich dann meinen relativen pfad inetwa so angeben:
\@sofadsounds\sofadsounds\und dann der pfad innherhalb meiner .pbo ??

Geändert von sofad (01.06.2009 um 15:40 Uhr).
sofad ist offline   Mit Zitat antworten
Alt 01.06.2009, 19:50   #2 (permalink)
Newbie
 
Registriert seit: 02.12.2006
Beiträge: 22
NeoArmageddon eine Nachricht über ICQ schicken
Standard

/ca/ sind allgemein die Standartaddons im Addon Ordner. Ich kann dir aber gerade net sagen, ob man auch bei eigenen Addons das /ca/ setzten musste oder nicht. Kannste ja austesten indem du einmal als Pfad /ca/addonname/soundfile nimmst und einmal /addonname/soundfile. Eine variante sollte funktionieren.

Wenn du dein Soundaddon so machst, dass du in der config.cpp (die entpackte config.bin) einfach die pfade der Sounddatein abänderst, dann hast du gleich mehrere Probleme verursacht/Fehler begangen:

1. Dein Addon umfasst nicht nur deine neuen Soundfiles, wenn du es hochlädst, du musst auch die abgeänderte characters.pbo mit deiner geänderten config hochladen und bereit stellen. Dein Addon wäre viele MB groß, obwohl deine Sounds nur wenige kb wiegen.
2. Die alte Characters.pbo wäre somit überschrieben und verloren (wenn man kein Backup macht)
3. Da die Checksummen der charakters.pbo nicht mehr stimmen, würde dich Battleeye oder die Checkfiles auf einem Server beim connecten kicken (weil sie denken du cheatest).
4. Wenn ein ArmA2 Update kommt (was bald wieder soweit sein sollte) kann dieses die Charakters.pbo nicht mehr patchen, da die checksummen nicht stimmen. Das Patchen schlägt fehl und du wirst aufgefordert dein ArmA neu zu installieren.

Es gibt einen viel einfacheren Weg, dein Soundreplacement zu realisieren. Undzwar hats du in einem Addon die möglichkeit, definierte Klassen zu überschreiben.

Undzwar legst du in deinem Addon eine Config an und holst dir dann die Class die du überschreiben willst:

Code:
class Man;

class CAManBase : Man {
    class SoundEnvironExt {
        normalExt[] = {{"\Ca\meinaddon\sounds\Concrete_ext\run_01", db-34, 1, 27},..(hier stehen noch weitere sounds)...;
      };
};
Bin mir net ganz sicher ob man die CAManBase auch Extern holen muss, oder ob es dann den "already defined"-Fehler gibt. Einer der Configcracks hier kann sicher genaueres sagen.

Zumindest würdest du mit dem Eintrag oben in der CAManBase (Grundgerüst für alle Soldaten) den Sound für das Rennen über Beton überschreiben. Solange keine der Configs für Soldaten da erneut nen anderen Wert setzt, sind alle Schritte der Soldaten über Beton nun dein Sound.

Hoffe ich konnte dir etwas helfen. Wenn du das ganze lernen willst, nimm am besten ein anderes Addon asueinander und schau, wie es dort gemacht wurde (aber nicht abschreiben! nur anschauen und danach selbst machen).

P.S. Bei deinem Addon die CFGPatches net vergessen, hab die oben der Übersicht halber weggelassen.
NeoArmageddon ist offline   Mit Zitat antworten
Alt 01.06.2009, 21:43   #3 (permalink)
Newbie
 
Registriert seit: 01.06.2009
Beiträge: 10
Standard

klasse! danke schonmal für die hilfe.

ich hab hier mal die config von chammys soundmod:

Code:
//Last modified 9/23/8
//by Binkster

class CfgPatches
{

class CSM_Sounds
    {
        units[] = {};
        Weapons[] = {};
        requiredAddons[] = {"CAAIR", "CAA10"};
        requiredVersion = 0.100000;
    };
};

/*extern*/ class Mode_SemiAuto;
/*extern*/ class Mode_Burst;
/*extern*/ class Mode_FullAuto;

class CfgAmmo
{
#include "\CSM_cfg\CSM\Ammo.CSM"
};

class CfgWeapons
{    
#include "\CSM_cfg\CSM\WestWeapons.CSM"
#include "\CSM_cfg\CSM\eastWeapons.CSM"

};

    class CfgVehicles
{ 
    #include "\CSM_cfg\CSM\Vehicles.CSM"    
};

class CfgVoice {
    voices[] = {"dan", "brian", "mathew", "robert", "russell", "dusan", "robert", "howard", "ryan", "amy"};
    voicePlayer = "amy";
    micOuts[] = {"micOut1", "micOut2", "micOut3"};
    preview = "fuck06";
    
    class Words {
        micOut[] = {"Mic_Out1"};
        micOut1[] = {"static\over1"};
        micOut2[] = {"static\over2"};
        micOut3[] = {"static\over3"};
        loop[] = {"static\radionoise3"};
        beepBeep[] = {"beep"};
        pause[] = {""};
            xmit[] = {"beep"};
    };
};

class RscButton {
    soundPush[] = {"\CSM_Sounds\misc\menu_s.wss", db-15, 1};
    //soundEscape[] = {"\CSM_Sounds\Misc\none.wss", db-10, 1;
};

class CfgMusic {
    class ATrack6 {
        name = "GoodBye Cruel World";
        sound[] = {"\CSM_Sounds\music\death1.ogg", 1, 1.0};
    };
    
    class ATrack25 {
        name = "Ashes of the Wake";
        sound[] = {"\CSM_Sounds\music\track2.ogg", 1, 1.0};
    };
    
    class ATrack1 {
        name = "Goodbye Blue Sky";
        sound[] = {"\CSM_Sounds\music\death2.ogg", 1, 1.0};
    };
    
    class ATrack18 {
        name = "Its Over Now";
        sound[] = {"\CSM_Sounds\music\death3.ogg", 1, 1.0};
    };
    
    class ATrack3 {
        name = "Love Lost in a Hail of Gunfire";
        sound[] = {"\CSM_Sounds\music\track5.ogg", 1, 1.0};
    };
    
    class ATrack24 {
        name = "Progencies of the Great Apocolypse";
        sound[] = {"\CSM_Sounds\music\track6.ogg", 1, 1.0};
    };
    
    class ATrack4 {
        name = "Ramses Bringer of War";
        sound[] = {"\CSM_Sounds\music\track7.ogg", 1, 1.0};
    };
    
    class ATrack5 {
        name = "Eye For An Eye";
        sound[] = {"\CSM_Sounds\music\track8.ogg", 1, 1.0};
    };
    
    class ATrack27 {
        name = "Frontlines";
        sound[] = {"\CSM_Sounds\music\track9.ogg", 1, 1.0};
    };
    
    class ATrack7 {
        name = "Kill to Believe";
        sound[] = {"\CSM_Sounds\music\track10.ogg", 1, 1.0};
    };
    
    class ATrack23 {
        name = "Until the End"
        sound[] = {"\ca\Sounds\Music\death4.ogg", 1, 1.0};
    };
    
    class ATrack8 {
        name = "Beneath Eternal Oceans of Sand";
        sound[] = {"\CSM_Sounds\music\track11.ogg", 1, 1.0};
    };
    
    class ATrack2 {
        name = "Lashed to the Slave Stick";
        sound[] = {"\CSM_Sounds\music\track12.ogg", 1, 1.0};
    };
    
    class ATrack23b {
        name = "Black Label";
        sound[] = {"\CSM_Sounds\music\track13.ogg", 1, 1.0};
    };
    
    class ATrack9 {
        name = "Wicker"
        sound[] = {"\ca\Sounds\Music\track14.ogg", 1, 1.0};
    };
    
    class ATrack10 {
        name = "War Pigs"
        sound[] = {"\ca\Sounds\Music\track15.ogg", 1, 1.0};
    };
    
    class ATrack11 {
        name = "ZakkWyldeBallad"
        sound[] = {"\ca\Sounds\Music\death5.ogg", 1, 1.0};
    };
    
    class ATrack12 {
        sound[] = {"\ca\Sounds\Music\aa_death_02_south.ogg", db0, 1.0};
    };
    
    class ATrack13 {
        sound[] = {"\ca\Sounds\Music\aa_death_03_south.ogg", db0, 1.0};
    };
    
    class ATrack14 {
        sound[] = {"\ca\Sounds\Music\aa_death_04_rocktheme_vi.ogg", db0, 1.0};
    };
    
    class ATrack15 {
        sound[] = {"\ca\Sounds\Music\aa_death_05_rocktheme_iv.ogg", db0, 1.0};
    };
    
    class ATrack16 {
        sound[] = {"\ca\Sounds\Music\aa_death_06_rocktheme_iii.ogg", db0, 1.0};
    };
    
    class ATrack17 {
        sound[] = {"\ca\Sounds\Music\aa_death_07_rocktheme_iii.ogg", db0, 1.0};
    };
    
    class ATrack22 {
        sound[] = {"\ca\Sounds\Music\aa_death_12_rocktheme_vi.ogg", db0, 1.0};
    };
    
    class ATrack19 {
        sound[] = {"\ca\Sounds\Music\aa_death_09_north.ogg", db0, 1.0};
    };
    
    class ATrack20 {
        sound[] = {"\ca\Sounds\Music\aa_death_10_north.ogg", db0, 1.0};
    };
    
    class ATrack21 {
        sound[] = {"\ca\Sounds\Music\aa_death_11_north.ogg", db0, 1.0};
    };
    
    class ATrack26 {
        name = "Hand of Doom"
        sound[] = {"\ca\Sounds\Music\track16.ogg", 1, 1.0};
    };
};

class CfgSFX {
    
    class DestrHouse {
        sounds[] = {"DestrHouse1", "DestrHouse2"};
        name = "$STR_CFG_SFX_DestrHouse";
        DestrHouse1[] = {"\CSM_Sounds\west\weapons\xp_building.wss", db-10, 1, 0.5, 60, 120, 240};
        DestrHouse2[] = {"\CSM_Sounds\misc\xp_building.wss", db-10, 1, 0.5, 60, 120, 240};
        empty[] = {"", 0, 0, 0, 1, 5, 20};
    };

      class Preview {
        effect[] = {"\CSM_Sounds\west\weapons\m24.wss", db-10, 1};
        speech[] = {"ca\voice\amy\ff\fuck06.wss", db+10, 1};
      };    
};
ammo, weapons und vehicles werden wohl in eigenen configs definiert.
den anfang verstehe ich allerdings noch nicht ganz.
was hat es mit den cfgpatches und dem *extern* kram aufsich?
sofad ist offline   Mit Zitat antworten
Alt 01.06.2009, 21:54   #4 (permalink)
Newbie
 
Registriert seit: 02.12.2006
Beiträge: 22
NeoArmageddon eine Nachricht über ICQ schicken
Standard

die cfgpatches ist quasi der Header deines Addons, der es als Addon ausweißt. Da muss der Name deines Addons hin und die Abhängikeiten (wenn es welche gibt).

extern bedeutet, das dort eine Klasse geladen wird, die in einer anderen Config steht. Das Einbinden geht einfach darüber, das du:

class Klassenname;

schreibt. Dadurch lädst du in deine Config diese Klasse und bist in der Lage sie zu überschreiben, oder weiterzuverwenden.

In meinem Beispiel oben siehst du, dass ich die Klasse "Man" lade, damit ich die abgeleitete Klasse CAManBase, die von "Man" abgeleitet wird (CAManBase : Man) überschreiben kann.

Wenn du die Klasse nicht vorher "lädst" gibt es einen Fehler, weil ArmA denkt, du willst eine neue Klasse schreiben, obwohl es diese schon gibt.


P.S. Die richtige Chammy Datei ist die CSM_CFG.pbo... dort werden die ArmA Sounds überschrieben. Dort solltest du mal gucken. In dieser PBO wird das ganze nur gestartet und dort liegn die Sounds selbst.
NeoArmageddon ist offline   Mit Zitat antworten
Alt 01.06.2009, 22:19   #5 (permalink)
Newbie
 
Registriert seit: 01.06.2009
Beiträge: 10
Standard

na, diese config.cpp stammt aus der CSM_CFG.pbo. die eigentlichen sounds sind in der CSM_Sounds.pbo
aber egal, ich habe jetzt schonmal einen kleinen einblick bekommen und werd nun mal etwas experimentieren müssen, auch wenn ich den config kram immernoch nicht recht versteh..
sofad ist offline   Mit Zitat antworten
Alt 02.06.2009, 06:54   #6 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 12.06.2006
Beiträge: 1.252
Standard

Werde die kommenden Tage ein Template für Soundsmods releasen.
.kju ist offline   Mit Zitat antworten
Alt 02.06.2009, 12:45   #7 (permalink)
Newbie
 
Registriert seit: 01.06.2009
Beiträge: 10
Standard

das klingt vielversprechend .kju!
wie genau sieht denn dein konzept für dieses template aus, sprich was für arbeit wird einem damit dann abgenommen werden?
sofad ist offline   Mit Zitat antworten
Alt 02.06.2009, 18:35   #8 (permalink)
Newbie
 
Registriert seit: 23.12.2006
Beiträge: 13
Standard

Woot! Ich kann wieder schreiben!

Ich bin auch schon an einem Sound-Mod zugange, habe aber einiges an Erfahrung in der Zeit eingebüßt. Habe derzeit einen Fehler beim starten "CAWheeled requires CAweapons2". Ich komme zwar ins Spiel, aber ich habe keine neuen Sounds, kann sich jemand mal meine cfg anschauen, die ich aus der ArmA 2 config gebastelt habe, ich finde den Fehler nicht (mehr).

config auf anfrage per PM oder mail.

Danke im Voraus und offiziell einen Gruß an sofad! Schön dich hier zu haben!
ThePredator ist offline   Mit Zitat antworten
Alt 03.06.2009, 10:11   #9 (permalink)
50 Beiträge100 Beiträge
 
Benutzerbild von Cowboy28
 
Registriert seit: 02.06.2005
Beiträge: 110
Standard

Ein Soundmod wäre was feines, freue mich schon auf´s Ergebnis!

Die Waffen- und Fahrzeugssounds sind bei ArmA 2 vielfach zu "dünn", aber dem kann man ja abhelfen. Vielleicht könnt ihr euch ja an Realsounds orientieren.

Z.B. die Waffen klingen in echt auf freiem Feld völlig anders als im Spiel!

YouTube - AK-74 Bump Firing

YouTube - M-16 Slow fire with 556 "K" Comp?

http://www.youtube.com/watch?v=p4FZUjEd2NM

Alleine der Nachhall würde das Ganze sehr viel autentischer machen.

Geändert von Cowboy28 (03.06.2009 um 10:15 Uhr).
Cowboy28 ist offline   Mit Zitat antworten
Alt 03.06.2009, 12:03   #10 (permalink)
Newbie
 
Registriert seit: 01.06.2009
Beiträge: 10
Standard

youtube vids als referenz für waffensounds zu nutzen ist wie nen formel1 wagen mit fahrradbereifung nen top speed erreichen lassen zu wollen..
die einfachen vidcam mics sind mit dem immensen schalldruck den waffen beim feuern erreichen schlichtweg überfordert und die überkomprimierung fürs web tut dann ihr übriges..
hinzu kommt das die mikrofonierung von schusswaffen eine der größten herausvorderungen des soundrecordings sind.
wieauchimmer, ich komme von "project reality", bin also nicht wirklich an hollywoodsounds interessiert..
hier kannst du in mein soundpack für Left4Dead reinhören um die richtung zu erkennen in die es gehen wird.

allerdings arbeite ich momentan erst einmal an besseren schrittsounds, da mir die originalen footsteps beim spielen im moment am meisten stören. waffensounds kommen danach.
sofad ist offline   Mit Zitat antworten
Alt 03.06.2009, 16:44   #11 (permalink)
50 Beiträge
 
Registriert seit: 13.06.2005
Ort: leipzig
Alter: 43
Beiträge: 78
Standard

hey sofad sag mal wie konverierst du denn die wave in wss dateien und umgekehrt ??? gruß stephsen
stephsen ist offline   Mit Zitat antworten
Alt 03.06.2009, 18:21   #12 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 18.11.2006
Beiträge: 217
Standard

Zitat von sofad Beitrag anzeigen

youtube vids als referenz für waffensounds zu nutzen ist wie nen formel1 wagen mit fahrradbereifung nen top speed erreichen lassen zu wollen..
die einfachen vidcam mics sind mit dem immensen schalldruck den waffen beim feuern erreichen schlichtweg überfordert und die überkomprimierung fürs web tut dann ihr übriges..
hinzu kommt das die mikrofonierung von schusswaffen eine der größten herausvorderungen des soundrecordings sind.
wieauchimmer, ich komme von "project reality", bin also nicht wirklich an hollywoodsounds interessiert..
hier kannst du in mein soundpack für Left4Dead reinhören um die richtung zu erkennen in die es gehen wird.

allerdings arbeite ich momentan erst einmal an besseren schrittsounds, da mir die originalen footsteps beim spielen im moment am meisten stören. waffensounds kommen danach.


PR hat den besten sound ever...Und auch die beste EAX implementierung..Lautstärken unterscheiden sich deutlich nach reichweite und sounds sind anders je nach reichweiter...haben die echt super gemacht.
Garack ist offline   Mit Zitat antworten
Alt 03.06.2009, 19:00   #13 (permalink)
50 Beiträge
 
Registriert seit: 13.06.2005
Ort: leipzig
Alter: 43
Beiträge: 78
Standard

ok habe ein progamm gefunden danke @Wolan ...soweit funktioniert alles aber wenn er mit umwandeln fertig ist ...ist die wav.datei die vorher die wss datei war 0 byte groß und vorher als wss war sie 76kb groß was läuft denn da. jemand ne ahnung warum das nich richtig funktioniert
stephsen ist offline   Mit Zitat antworten
Alt 03.06.2009, 20:37   #14 (permalink)
Newbie
 
Registriert seit: 01.06.2009
Beiträge: 10
Standard

womit konvertierst du denn jetzt?
ich nutze das OFP soundlab 1.1 und hab damit keine probleme...
sofad ist offline   Mit Zitat antworten
Alt 03.06.2009, 21:16   #15 (permalink)
50 Beiträge
 
Registriert seit: 13.06.2005
Ort: leipzig
Alter: 43
Beiträge: 78
Standard

@Sofad ...genau das hab ich auch ...aber wenn ich anfange ne kleine waffen.wss datei zu konvertieren ...kommt ne wavesound raus die 0 byte groß is,versteh ich auch nich ...habe vista64bit ...vieleicht muss ich das programm bei programme(86x) ausführen,weil es probleme mit win vista 64bit hat ????
stephsen ist offline   Mit Zitat antworten
Alt 03.06.2009, 23:36   #16 (permalink)
Newbie
 
Registriert seit: 01.06.2009
Beiträge: 10
Standard

das wäre denkbar. immerhin ist das tool von 04..^^
sofad ist offline   Mit Zitat antworten
Alt 04.06.2009, 07:43   #17 (permalink)
50 Beiträge
 
Registriert seit: 17.09.2008
Ort: Heinsberg
Alter: 43
Beiträge: 79
Standard

Ich hätte hier zwei kleine Programme dafür.

Du mußt nichts weiter tun als die wss. auf wssdec zu ziehen

bzw. die wav. auf wsscod.Mach dir am besten nen Arbeitsordner

mit den zu konvertierenden Soundfiles und den zwei exen drin.Bei mir

klappt das Prima.

RapidShare Webhosting + Webspace

RapidShare Webhosting + Webspace

Grüße

Der Humvee
Humvee28 ist offline   Mit Zitat antworten
Alt 04.06.2009, 09:08   #18 (permalink)
50 Beiträge
 
Registriert seit: 13.06.2005
Ort: leipzig
Alter: 43
Beiträge: 78
Standard

jo dank dir Humvee28 ...es klappt alles prima leider spuckt er mir nach der konvertierung immer noch die wave als 0 byte datei aus...liegt bestimmt am vista ...jemand das gleiche problem mit vista oder so ????
stephsen ist offline   Mit Zitat antworten
Alt 04.06.2009, 09:13   #19 (permalink)
50 Beiträge
 
Registriert seit: 17.09.2008
Ort: Heinsberg
Alter: 43
Beiträge: 79
Standard

Find ich eigenartig da ich das Prog auch mit Vista64 nutze..einfach

eine WAV anklicken,mit der Maus auf WSSCOD ziehen bis das Plus-

zeichen erscheint und dann müßtest du es eigentlich haben...
Humvee28 ist offline   Mit Zitat antworten
Alt 04.06.2009, 09:45   #20 (permalink)
50 Beiträge
 
Registriert seit: 13.06.2005
Ort: leipzig
Alter: 43
Beiträge: 78
Standard

jo Humvee habe es gerade auf nen rechner mit xp probiert genau das gleiche problem ...muss ich noch irgendwas installieren oder nen treiber oder player installieren ich komm da nich mit warum das nich geht ...bei jeden wss konvertierer das gleiche ...funktioniert ganz normal spuckt aber wie gesagt ne 0 byte wavesound.datei aus ...mh bin ratlos
stephsen ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
G36 Visier Fix / Replacement - Hilfe benötigt burns Mods & Addons 63 30.10.2011 10:37
Hilfe benötigt! Arma_Joe Offizielle Missionen & Kampagnen 1 30.05.2009 12:03
Effect Addon funzt nicht mit Bilder Thread!! HILFE ArmA Typ Technische Fragen & Probleme 7 26.05.2009 20:22
Sahrani Life benötigt Deine Hilfe! JaKe.OnE Die Litfaßsäule 0 31.08.2008 16:43
brauche hilfe beim addon machen TALLA2xlc Mod und Addon Ecke 6 20.11.2004 16:37


Kontakt - HX3.de - Archiv - Nach oben

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias



SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119