@@ -35,7 +35,9 @@ public WorldMapTriggersWindow(FF4Rom rom)
3535 _rom = rom ;
3636
3737 var triggers = _rom . LoadWorldMapTriggers ( out _pointers ) ;
38- var overworldTriggerCount = _pointers [ 1 ] / FF4Rom . WorldMapTriggerSize ;
38+
39+ // This is dumb, LoadWorldMapTriggers() should return separate lists.
40+ var overworldTriggerCount = _pointers [ 1 ] / FF4Rom . WorldMapTriggerSize ;
3941 var underworldTriggerCount = _pointers [ 2 ] / FF4Rom . WorldMapTriggerSize - overworldTriggerCount ;
4042 var moonTriggerCount = FF4Rom . WorldMapTriggerCount - overworldTriggerCount - underworldTriggerCount ;
4143 _overworldTriggers = new ObservableCollection < WorldMapTrigger > ( triggers . GetRange ( 0 , overworldTriggerCount ) ) ;
@@ -48,7 +50,11 @@ public WorldMapTriggersWindow(FF4Rom rom)
4850 }
4951
5052 private void Window_Closed ( object sender , EventArgs e )
51- {
53+ {
54+ // This is dumb, SaveWorldMapTriggers() should accept separate lists and figure out the pointers itself.
55+ _pointers [ 1 ] = ( ushort ) ( _overworldTriggers . Count * FF4Rom . WorldMapTriggerSize ) ;
56+ _pointers [ 2 ] = ( ushort ) ( _pointers [ 1 ] + _underworldTriggers . Count * FF4Rom . WorldMapTriggerSize ) ;
57+
5258 _rom . SaveWorldMapTriggers ( _overworldTriggers . Concat ( _underworldTriggers ) . Concat ( _moonTriggers ) . ToList ( ) , _pointers ) ;
5359 }
5460
@@ -69,21 +75,20 @@ private void MoveUpButton_Click(object sender, RoutedEventArgs e)
6975 if ( srcTriggers == _moonTriggers )
7076 {
7177 destTriggers = _underworldTriggers ;
72- destIndex = _underworldTriggers . Count - 1 ;
7378 }
7479 else if ( srcTriggers == _underworldTriggers )
7580 {
7681 destTriggers = _overworldTriggers ;
77- destIndex = _overworldTriggers . Count - 1 ;
7882 }
7983 else if ( srcTriggers == _overworldTriggers )
8084 {
8185 destTriggers = _moonTriggers ;
82- destIndex = _moonTriggers . Count - 1 ;
8386 }
87+
88+ destIndex = destTriggers . Count ;
8489 }
8590
86- SwapTriggers ( srcTriggers , destTriggers , srcIndex , destIndex ) ;
91+ MoveTrigger ( srcTriggers , destTriggers , srcIndex , destIndex ) ;
8792 }
8893
8994 private void MoveDownButton_Click ( object sender , RoutedEventArgs e )
@@ -116,19 +121,25 @@ private void MoveDownButton_Click(object sender, RoutedEventArgs e)
116121 destIndex = 0 ;
117122 }
118123
119- SwapTriggers ( srcTriggers , destTriggers , srcIndex , destIndex ) ;
124+ MoveTrigger ( srcTriggers , destTriggers , srcIndex , destIndex ) ;
120125 }
121126
122- private void SwapTriggers ( ObservableCollection < WorldMapTrigger > srcTriggers , ObservableCollection < WorldMapTrigger > destTriggers , int srcIndex , int destIndex )
127+ private void MoveTrigger ( ObservableCollection < WorldMapTrigger > srcTriggers , ObservableCollection < WorldMapTrigger > destTriggers , int srcIndex , int destIndex )
123128 {
124129 var source = srcTriggers [ srcIndex ] ;
125- var dest = destTriggers [ destIndex ] ;
130+ WorldMapTrigger dest = null ;
126131
127- destTriggers . RemoveAt ( destIndex ) ;
132+ // Order is important here. Don't try to combine these if blocks.
133+ if ( srcTriggers == destTriggers )
134+ {
135+ dest = destTriggers [ destIndex ] ;
136+ destTriggers . RemoveAt ( destIndex ) ;
137+ }
128138 destTriggers . Insert ( destIndex , source ) ;
129139
130140 srcTriggers . RemoveAt ( srcIndex ) ;
131- srcTriggers . Insert ( srcIndex , dest ) ;
141+ if ( srcTriggers == destTriggers )
142+ srcTriggers . Insert ( srcIndex , dest ) ;
132143 }
133144
134145 private void TriggerType_SelectionChanged ( object sender , SelectionChangedEventArgs e )
0 commit comments