Browse Source

Merge pull request 'exp gain' (#162) from exp_gain into master

pbs
jake 5 years ago
parent
commit
1d8c729423
  1. 637
      data/battle_param/ep1_multi_hard.toml
  2. 637
      data/battle_param/ep1_multi_normal.toml
  3. 637
      data/battle_param/ep1_multi_ultimate.toml
  4. 637
      data/battle_param/ep1_multi_veryhard.toml
  5. 637
      data/battle_param/ep1_solo_hard.toml
  6. 637
      data/battle_param/ep1_solo_normal.toml
  7. 637
      data/battle_param/ep1_solo_ultimate.toml
  8. 637
      data/battle_param/ep1_solo_veryhard.toml
  9. 22
      src/common/leveltable.rs
  10. 2
      src/ship/character.rs
  11. 2
      src/ship/map.rs
  12. 46
      src/ship/monster.rs
  13. 23
      src/ship/packet/builder/message.rs
  14. 64
      src/ship/packet/handler/message.rs
  15. 4
      src/ship/room.rs
  16. 4
      src/ship/ship.rs
  17. 79
      tests/common.rs
  18. 184
      tests/test_exp_gain.rs
  19. 78
      tests/test_item_pickup.rs

637
data/battle_param/ep1_multi_hard.toml

@ -0,0 +1,637 @@
[Mothmant]
atp = 384
mst = 0
evp = 42
hp = 204
dfp = 118
ata = 135
lck = 40
esp = 15
exp = 36
[Monest]
atp = 337
mst = 0
evp = 20
hp = 843
dfp = 118
ata = 60
lck = 0
esp = 15
exp = 43
[SavageWolf]
atp = 445
mst = 0
evp = 170
hp = 501
dfp = 148
ata = 150
lck = 16
esp = 20
exp = 42
[BarbarousWolf]
atp = 457
mst = 0
evp = 197
hp = 525
dfp = 155
ata = 150
lck = 20
esp = 20
exp = 45
[PoisonLily]
atp = 438
mst = 0
evp = 210
hp = 511
dfp = 162
ata = 155
lck = 10
esp = 20
exp = 49
[NarLily]
atp = 628
mst = 0
evp = 210
hp = 592
dfp = 170
ata = 180
lck = 30
esp = 20
exp = 259
[SinowBeat]
atp = 603
mst = 0
evp = 246
hp = 781
dfp = 192
ata = 160
lck = 20
esp = 35
exp = 70
[Canadine]
atp = 539
mst = 0
evp = 222
hp = 498
dfp = 162
ata = 170
lck = 10
esp = 15
exp = 6
[Canane]
atp = 552
mst = 0
evp = 222
hp = 641
dfp = 162
ata = 180
lck = 10
esp = 20
exp = 60
[ChaosSorcerer]
atp = 666
mst = 222
evp = 206
hp = 844
dfp = 185
ata = 180
lck = 0
esp = 47
exp = 78
[BeeR]
atp = 552
mst = 0
evp = 108
hp = 635
dfp = 104
ata = 120
lck = 0
esp = 100
exp = 40
[BeeL]
atp = 552
mst = 0
evp = 108
hp = 636
dfp = 104
ata = 120
lck = 0
esp = 100
exp = 40
[ChaosBringer]
atp = 780
mst = 0
evp = 250
hp = 1343
dfp = 259
ata = 190
lck = 10
esp = 52
exp = 97
[DarkBelra]
atp = 805
mst = 0
evp = 166
hp = 1491
dfp = 384
ata = 160
lck = 16
esp = 47
exp = 84
[DeRolLe]
atp = 860
mst = 10
evp = 120
hp = 8000
dfp = 200
ata = 230
lck = 10
esp = 100
exp = 3200
[DeRolLeBody]
atp = 770
mst = 10
evp = 120
hp = 1550
dfp = 152
ata = 210
lck = 0
esp = 100
exp = 25
[DeRolLeMine]
atp = 500
mst = 10
evp = 26
hp = 502
dfp = 140
ata = 110
lck = 10
esp = 100
exp = 4
[Dragon]
atp = 550
mst = 0
evp = 120
hp = 5000
dfp = 100
ata = 260
lck = 16
esp = 100
exp = 2400
[SinowGold]
atp = 577
mst = 0
evp = 258
hp = 701
dfp = 266
ata = 180
lck = 0
esp = 40
exp = 75
[RagRappy]
atp = 419
mst = 0
evp = 190
hp = 379
dfp = 133
ata = 130
lck = 20
esp = 15
exp = 40
[EasterRappy]
atp = 527
mst = 0
evp = 90
hp = 573
dfp = 133
ata = 160
lck = 10
esp = 15
exp = 184
[NanoDragon]
atp = 520
mst = 0
evp = 137
hp = 654
dfp = 229
ata = 160
lck = 10
esp = 40
exp = 57
[Dubchic]
atp = 615
mst = 0
evp = 197
hp = 574
dfp = 192
ata = 160
lck = 10
esp = 20
exp = 11
[Gillchic]
atp = 622
mst = 0
evp = 197
hp = 541
dfp = 188
ata = 170
lck = 16
esp = 20
exp = 61
[Garanz]
atp = 691
mst = 0
evp = 157
hp = 1245
dfp = 273
ata = 160
lck = 20
esp = 40
exp = 67
[GalGryphon]
atp = 603
mst = 0
evp = 243
hp = 686
dfp = 236
ata = 210
lck = 10
esp = 22
exp = 64
[Bulclaw]
atp = 729
mst = 0
evp = 210
hp = 655
dfp = 207
ata = 170
lck = 12
esp = 27
exp = 77
[Claw]
atp = 615
mst = 0
evp = 183
hp = 575
dfp = 207
ata = 100
lck = 8
esp = 12
exp = 43
[VolOptPartA]
atp = 0
mst = 0
evp = 80
hp = 4800
dfp = 170
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptPillar]
atp = 100
mst = 0
evp = 70
hp = 850
dfp = 70
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptMonitor]
atp = 0
mst = 0
evp = 55
hp = 221
dfp = 100
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptAmp]
atp = 0
mst = 0
evp = 120
hp = 700
dfp = 100
ata = 0
lck = 0
esp = 100
exp = 0
[VolOpt]
atp = 0
mst = 0
evp = 140
hp = 14500
dfp = 200
ata = 0
lck = 5
esp = 100
exp = 3800
[VolOptTrap]
atp = 0
mst = 0
evp = 0
hp = 650
dfp = 165
ata = 0
lck = 0
esp = 100
exp = 0
[PofuillySlime]
atp = 489
mst = 0
evp = 190
hp = 492
dfp = 162
ata = 140
lck = 10
esp = 20
exp = 49
[PanArms]
atp = 539
mst = 0
evp = 183
hp = 1316
dfp = 858
ata = 180
lck = 10
esp = 20
exp = 26
[Hidoom]
atp = 527
mst = 0
evp = 210
hp = 642
dfp = 140
ata = 150
lck = 28
esp = 20
exp = 23
[Migium]
atp = 565
mst = 0
evp = 197
hp = 816
dfp = 140
ata = 150
lck = 0
esp = 20
exp = 23
[PouillySlime]
atp = 717
mst = 0
evp = 210
hp = 506
dfp = 148
ata = 210
lck = 16
esp = 20
exp = 259
[Darvant]
atp = 190
mst = 0
evp = 100
hp = 150
dfp = 80
ata = 160
lck = 0
esp = 100
exp = 5
[DarkFalz1]
atp = 1100
mst = 300
evp = 170
hp = 8500
dfp = 230
ata = 230
lck = 20
esp = 100
exp = 0
[DarkFalz2]
atp = 1300
mst = 300
evp = 170
hp = 9001
dfp = 230
ata = 230
lck = 20
esp = 100
exp = 0
[DarkFalz3]
atp = 1400
mst = 300
evp = 170
hp = 8001
dfp = 230
ata = 230
lck = 30
esp = 100
exp = 8000
[UltDarvant]
atp = 500
mst = 0
evp = 100
hp = 300
dfp = 100
ata = 100
lck = 20
esp = 100
exp = 5
[Dubwitch]
atp = 0
mst = 0
evp = 0
hp = 0
dfp = 0
ata = 0
lck = 0
esp = 0
exp = 0
[Hildebear]
atp = 514
mst = 0
evp = 117
hp = 735
dfp = 162
ata = 140
lck = 20
esp = 35
exp = 56
[Hildeblue]
atp = 590
mst = 0
evp = 237
hp = 842
dfp = 118
ata = 160
lck = 20
esp = 35
exp = 184
[Booma]
atp = 438
mst = 0
evp = 170
hp = 427
dfp = 118
ata = 120
lck = 16
esp = 5
exp = 42
[Gobooma]
atp = 444
mst = 0
evp = 177
hp = 468
dfp = 125
ata = 125
lck = 16
esp = 7
exp = 43
[Gigobooma]
atp = 451
mst = 0
evp = 183
hp = 508
dfp = 162
ata = 135
lck = 10
esp = 10
exp = 45
[GrassAssassin]
atp = 527
mst = 0
evp = 210
hp = 634
dfp = 177
ata = 150
lck = 20
esp = 40
exp = 64
[EvilShark]
atp = 489
mst = 0
evp = 197
hp = 469
dfp = 192
ata = 153
lck = 8
esp = 7
exp = 49
[PalShark]
atp = 502
mst = 0
evp = 203
hp = 493
dfp = 192
ata = 160
lck = 16
esp = 10
exp = 52
[GuilShark]
atp = 514
mst = 0
evp = 210
hp = 542
dfp = 192
ata = 170
lck = 16
esp = 10
exp = 55
[Delsaber]
atp = 779
mst = 0
evp = 343
hp = 1100
dfp = 236
ata = 195
lck = 20
esp = 27
exp = 81
[Dimenian]
atp = 653
mst = 0
evp = 225
hp = 782
dfp = 236
ata = 180
lck = 16
esp = 15
exp = 67
[LaDimenian]
atp = 672
mst = 0
evp = 235
hp = 830
dfp = 244
ata = 193
lck = 16
esp = 16
exp = 70
[SoDimenian]
atp = 691
mst = 0
evp = 246
hp = 878
dfp = 251
ata = 205
lck = 20
esp = 22
exp = 73

637
data/battle_param/ep1_multi_normal.toml

@ -0,0 +1,637 @@
[Mothmant]
atp = 53
mst = 0
evp = 30
hp = 8
dfp = 0
ata = 75
lck = 20
esp = 0
exp = 1
[Monest]
atp = 0
mst = 0
evp = 0
hp = 400
dfp = 0
ata = 0
lck = 0
esp = 0
exp = 6
[SavageWolf]
atp = 112
mst = 0
evp = 70
hp = 95
dfp = 20
ata = 90
lck = 8
esp = 5
exp = 5
[BarbarousWolf]
atp = 124
mst = 0
evp = 90
hp = 118
dfp = 25
ata = 90
lck = 10
esp = 5
exp = 7
[PoisonLily]
atp = 106
mst = 0
evp = 100
hp = 154
dfp = 30
ata = 95
lck = 5
esp = 5
exp = 10
[NarLily]
atp = 286
mst = 0
evp = 100
hp = 214
dfp = 35
ata = 120
lck = 20
esp = 5
exp = 150
[SinowBeat]
atp = 262
mst = 0
evp = 127
hp = 354
dfp = 50
ata = 100
lck = 10
esp = 20
exp = 25
[Canadine]
atp = 202
mst = 0
evp = 109
hp = 145
dfp = 30
ata = 110
lck = 5
esp = 0
exp = 3
[Canane]
atp = 214
mst = 0
evp = 109
hp = 250
dfp = 30
ata = 120
lck = 5
esp = 10
exp = 17
[ChaosSorcerer]
atp = 322
mst = 111
evp = 97
hp = 401
dfp = 45
ata = 120
lck = 0
esp = 35
exp = 29
[BeeR]
atp = 214
mst = 0
evp = 80
hp = 200
dfp = 20
ata = 60
lck = 0
esp = 100
exp = 4
[BeeL]
atp = 214
mst = 0
evp = 80
hp = 201
dfp = 20
ata = 60
lck = 0
esp = 100
exp = 4
[ChaosBringer]
atp = 555
mst = 0
evp = 130
hp = 770
dfp = 95
ata = 130
lck = 5
esp = 40
exp = 35
[DarkBelra]
atp = 581
mst = 0
evp = 67
hp = 880
dfp = 180
ata = 100
lck = 8
esp = 35
exp = 35
[DeRolLe]
atp = 320
mst = 10
evp = 100
hp = 6000
dfp = 80
ata = 160
lck = 5
esp = 100
exp = 890
[DeRolLeBody]
atp = 390
mst = 10
evp = 90
hp = 1000
dfp = 70
ata = 150
lck = 0
esp = 100
exp = 10
[DeRolLeMine]
atp = 300
mst = 10
evp = 5
hp = 330
dfp = 50
ata = 50
lck = 8
esp = 100
exp = 10
[Dragon]
atp = 250
mst = 0
evp = 0
hp = 2500
dfp = 0
ata = 200
lck = 8
esp = 100
exp = 400
[SinowGold]
atp = 238
mst = 0
evp = 136
hp = 295
dfp = 100
ata = 120
lck = 0
esp = 25
exp = 28
[RagRappy]
atp = 88
mst = 0
evp = 85
hp = 56
dfp = 10
ata = 70
lck = 10
esp = 0
exp = 4
[EasterRappy]
atp = 184
mst = 0
evp = 45
hp = 260
dfp = 75
ata = 100
lck = 5
esp = 0
exp = 100
[NanoDragon]
atp = 184
mst = 0
evp = 45
hp = 261
dfp = 75
ata = 100
lck = 5
esp = 25
exp = 15
[Dubchic]
atp = 274
mst = 0
evp = 90
hp = 202
dfp = 50
ata = 100
lck = 5
esp = 5
exp = 3
[Gillchic]
atp = 280
mst = 0
evp = 90
hp = 176
dfp = 47
ata = 110
lck = 8
esp = 5
exp = 18
[Garanz]
atp = 346
mst = 0
evp = 60
hp = 698
dfp = 105
ata = 115
lck = 10
esp = 25
exp = 22
[GalGryphon]
atp = 262
mst = 0
evp = 125
hp = 284
dfp = 80
ata = 150
lck = 5
esp = 10
exp = 20
[Bulclaw]
atp = 382
mst = 0
evp = 100
hp = 262
dfp = 60
ata = 110
lck = 6
esp = 15
exp = 27
[Claw]
atp = 274
mst = 0
evp = 80
hp = 203
dfp = 60
ata = 110
lck = 4
esp = 0
exp = 6
[VolOptPartA]
atp = 0
mst = 0
evp = 60
hp = 3000
dfp = 80
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptPillar]
atp = 100
mst = 0
evp = 40
hp = 500
dfp = 80
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptMonitor]
atp = 0
mst = 0
evp = 45
hp = 220
dfp = 70
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptAmp]
atp = 0
mst = 0
evp = 70
hp = 450
dfp = 40
ata = 0
lck = 0
esp = 100
exp = 0
[VolOpt]
atp = 0
mst = 0
evp = 115
hp = 9500
dfp = 120
ata = 0
lck = 5
esp = 100
exp = 1250
[VolOptTrap]
atp = 0
mst = 0
evp = 0
hp = 263
dfp = 50
ata = 0
lck = 0
esp = 100
exp = 0
[PofuillySlime]
atp = 154
mst = 0
evp = 85
hp = 140
dfp = 30
ata = 80
lck = 5
esp = 5
exp = 10
[PanArms]
atp = 202
mst = 0
evp = 80
hp = 750
dfp = 500
ata = 120
lck = 5
esp = 5
exp = 6
[Hidoom]
atp = 190
mst = 0
evp = 100
hp = 251
dfp = 15
ata = 90
lck = 14
esp = 5
exp = 4
[Migium]
atp = 226
mst = 0
evp = 90
hp = 380
dfp = 15
ata = 90
lck = 0
esp = 5
exp = 4
[PouillySlime]
atp = 370
mst = 0
evp = 100
hp = 15
dfp = 20
ata = 150
lck = 8
esp = 5
exp = 150
[Darvant]
atp = 80
mst = 0
evp = 50
hp = 125
dfp = 0
ata = 0
lck = 0
esp = 100
exp = 5
[DarkFalz1]
atp = 700
mst = 300
evp = 150
hp = 5900
dfp = 120
ata = 170
lck = 20
esp = 100
exp = 0
[DarkFalz2]
atp = 750
mst = 300
evp = 150
hp = 6500
dfp = 120
ata = 170
lck = 20
esp = 100
exp = 3000
[DarkFalz3]
atp = 800
mst = 0
evp = 100
hp = 9000
dfp = 120
ata = 170
lck = 20
esp = 100
exp = 0
[UltDarvant]
atp = 220
mst = 0
evp = 90
hp = 252
dfp = 10
ata = 100
lck = 20
esp = 100
exp = 5
[Dubwitch]
atp = 0
mst = 0
evp = 0
hp = 0
dfp = 0
ata = 0
lck = 0
esp = 0
exp = 0
[Hildebear]
atp = 210
mst = 0
evp = 30
hp = 320
dfp = 30
ata = 80
lck = 10
esp = 25
exp = 13
[Hildeblue]
atp = 270
mst = 0
evp = 120
hp = 399
dfp = 0
ata = 100
lck = 10
esp = 25
exp = 100
[Booma]
atp = 106
mst = 0
evp = 70
hp = 92
dfp = 0
ata = 60
lck = 8
esp = 0
exp = 5
[Gobooma]
atp = 112
mst = 0
evp = 75
hp = 122
dfp = 5
ata = 65
lck = 8
esp = 0
exp = 6
[Gigobooma]
atp = 118
mst = 0
evp = 80
hp = 152
dfp = 30
ata = 75
lck = 5
esp = 0
exp = 7
[GrassAssassin]
atp = 277
mst = 0
evp = 100
hp = 245
dfp = 40
ata = 90
lck = 10
esp = 25
exp = 20
[EvilShark]
atp = 154
mst = 0
evp = 90
hp = 123
dfp = 50
ata = 93
lck = 8
esp = 0
exp = 10
[PalShark]
atp = 166
mst = 0
evp = 95
hp = 141
dfp = 50
ata = 100
lck = 8
esp = 0
exp = 12
[GuilShark]
atp = 178
mst = 0
evp = 100
hp = 177
dfp = 50
ata = 110
lck = 8
esp = 0
exp = 14
[Delsaber]
atp = 448
mst = 0
evp = 200
hp = 590
dfp = 80
ata = 135
lck = 10
esp = 15
exp = 30
[Dimenian]
atp = 346
mst = 0
evp = 111
hp = 355
dfp = 80
ata = 115
lck = 8
esp = 10
exp = 22
[LaDimenian]
atp = 382
mst = 0
evp = 119
hp = 390
dfp = 85
ata = 125
lck = 8
esp = 10
exp = 24
[SoDimenian]
atp = 418
mst = 0
evp = 127
hp = 426
dfp = 90
ata = 140
lck = 10
esp = 10
exp = 26

637
data/battle_param/ep1_multi_ultimate.toml

@ -0,0 +1,637 @@
[Mothmant]
atp = 1000
mst = 0
evp = 477
hp = 1502
dfp = 600
ata = 233
lck = 35
esp = 35
exp = 145
[Monest]
atp = 0
mst = 0
evp = 390
hp = 2897
dfp = 600
ata = 210
lck = 0
esp = 35
exp = 270
[SavageWolf]
atp = 1100
mst = 0
evp = 593
hp = 2300
dfp = 650
ata = 208
lck = 40
esp = 40
exp = 275
[BarbarousWolf]
atp = 1350
mst = 0
evp = 651
hp = 2346
dfp = 663
ata = 211
lck = 50
esp = 40
exp = 280
[PoisonLily]
atp = 1750
mst = 0
evp = 680
hp = 2058
dfp = 676
ata = 258
lck = 30
esp = 40
exp = 295
[NarLily]
atp = 3500
mst = 1500
evp = 680
hp = 3858
dfp = 688
ata = 340
lck = 50
esp = 40
exp = 900
[SinowBeat]
atp = 2320
mst = 0
evp = 758
hp = 3338
dfp = 726
ata = 280
lck = 33
esp = 55
exp = 350
[Canadine]
atp = 1650
mst = 0
evp = 706
hp = 2523
dfp = 676
ata = 273
lck = 20
esp = 30
exp = 32
[Canane]
atp = 1700
mst = 0
evp = 706
hp = 2513
dfp = 676
ata = 280
lck = 20
esp = 35
exp = 325
[ChaosSorcerer]
atp = 1689
mst = 2100
evp = 671
hp = 2597
dfp = 713
ata = 370
lck = 0
esp = 65
exp = 363
[BeeR]
atp = 1527
mst = 0
evp = 622
hp = 1646
dfp = 650
ata = 340
lck = 0
esp = 200
exp = 100
[BeeL]
atp = 1527
mst = 0
evp = 622
hp = 1647
dfp = 650
ata = 340
lck = 0
esp = 200
exp = 100
[ChaosBringer]
atp = 3200
mst = 0
evp = 767
hp = 4550
dfp = 839
ata = 368
lck = 40
esp = 70
exp = 385
[DarkBelra]
atp = 3270
mst = 0
evp = 584
hp = 3900
dfp = 1054
ata = 315
lck = 50
esp = 65
exp = 372
[DeRolLe]
atp = 2500
mst = 10
evp = 680
hp = 21000
dfp = 802
ata = 375
lck = 25
esp = 1000
exp = 18800
[DeRolLeBody]
atp = 2500
mst = 10
evp = 651
hp = 7000
dfp = 776
ata = 340
lck = 0
esp = 1000
exp = 60
[DeRolLeMine]
atp = 2400
mst = 10
evp = 405
hp = 1200
dfp = 726
ata = 345
lck = 25
esp = 1000
exp = 16
[Dragon]
atp = 2000
mst = 0
evp = 390
hp = 16501
dfp = 500
ata = 286
lck = 25
esp = 1000
exp = 15900
[SinowGold]
atp = 2100
mst = 0
evp = 784
hp = 2850
dfp = 852
ata = 280
lck = 38
esp = 60
exp = 344
[RagRappy]
atp = 1250
mst = 0
evp = 637
hp = 1964
dfp = 625
ata = 200
lck = 30
esp = 35
exp = 256
[EasterRappy]
atp = 2100
mst = 0
evp = 419
hp = 2546
dfp = 625
ata = 240
lck = 50
esp = 35
exp = 700
[NanoDragon]
atp = 2100
mst = 0
evp = 521
hp = 2813
dfp = 789
ata = 250
lck = 30
esp = 60
exp = 320
[Dubchic]
atp = 1939
mst = 0
evp = 651
hp = 3111
dfp = 726
ata = 278
lck = 30
esp = 40
exp = 59
[Gillchic]
atp = 1989
mst = 0
evp = 651
hp = 2996
dfp = 718
ata = 268
lck = 35
esp = 40
exp = 321
[Garanz]
atp = 2500
mst = 0
evp = 564
hp = 3788
dfp = 865
ata = 258
lck = 40
esp = 60
exp = 355
[GalGryphon]
atp = 3000
mst = 0
evp = 753
hp = 2700
dfp = 802
ata = 340
lck = 30
esp = 45
exp = 334
[Bulclaw]
atp = 3000
mst = 0
evp = 753
hp = 2701
dfp = 802
ata = 365
lck = 50
esp = 55
exp = 334
[Claw]
atp = 2850
mst = 0
evp = 680
hp = 2246
dfp = 751
ata = 330
lck = 30
esp = 40
exp = 273
[VolOptPartA]
atp = 0
mst = 2000
evp = 506
hp = 18002
dfp = 802
ata = 0
lck = 0
esp = 1000
exp = 0
[VolOptPillar]
atp = 2275
mst = 2000
evp = 530
hp = 3901
dfp = 1000
ata = 0
lck = 0
esp = 1000
exp = 0
[VolOptMonitor]
atp = 0
mst = 2000
evp = 54
hp = 4000
dfp = 776
ata = 0
lck = 0
esp = 1000
exp = 0
[VolOptAmp]
atp = 0
mst = 2000
evp = 593
hp = 1525
dfp = 701
ata = 0
lck = 0
esp = 1000
exp = 0
[VolOpt]
atp = 0
mst = 1000
evp = 724
hp = 27000
dfp = 902
ata = 0
lck = 5
esp = 1000
exp = 23500
[VolOptTrap]
atp = 0
mst = 550
evp = 0
hp = 2501
dfp = 1000
ata = 0
lck = 0
esp = 1000
exp = 0
[PofuillySlime]
atp = 1374
mst = 0
evp = 637
hp = 929
dfp = 676
ata = 249
lck = 30
esp = 40
exp = 290
[PanArms]
atp = 1994
mst = 0
evp = 622
hp = 3600
dfp = 1860
ata = 219
lck = 30
esp = 40
exp = 195
[Hidoom]
atp = 1930
mst = 0
evp = 680
hp = 2625
dfp = 638
ata = 268
lck = 30
esp = 45
exp = 180
[Migium]
atp = 1930
mst = 0
evp = 651
hp = 2626
dfp = 638
ata = 268
lck = 30
esp = 40
exp = 180
[PouillySlime]
atp = 2219
mst = 0
evp = 680
hp = 2334
dfp = 650
ata = 280
lck = 30
esp = 40
exp = 880
[Darvant]
atp = 1390
mst = 0
evp = 535
hp = 301
dfp = 600
ata = 305
lck = 0
esp = 1000
exp = 25
[DarkFalz1]
atp = 2400
mst = 2400
evp = 825
hp = 20000
dfp = 902
ata = 470
lck = 20
esp = 1000
exp = 0
[DarkFalz2]
atp = 2980
mst = 2700
evp = 825
hp = 16502
dfp = 902
ata = 470
lck = 20
esp = 1000
exp = 0
[DarkFalz3]
atp = 2560
mst = 3000
evp = 750
hp = 21001
dfp = 960
ata = 470
lck = 20
esp = 1000
exp = 50000
[UltDarvant]
atp = 1550
mst = 0
evp = 651
hp = 600
dfp = 625
ata = 305
lck = 20
esp = 1000
exp = 20
[Dubwitch]
atp = 0
mst = 0
evp = 0
hp = 0
dfp = 0
ata = 0
lck = 0
esp = 0
exp = 0
[Hildebear]
atp = 1850
mst = 0
evp = 477
hp = 2851
dfp = 676
ata = 240
lck = 45
esp = 60
exp = 300
[Hildeblue]
atp = 3600
mst = 0
evp = 738
hp = 6750
dfp = 600
ata = 290
lck = 60
esp = 60
exp = 690
[Booma]
atp = 1250
mst = 0
evp = 593
hp = 2335
dfp = 600
ata = 205
lck = 25
esp = 17
exp = 271
[Gobooma]
atp = 1350
mst = 0
evp = 608
hp = 2550
dfp = 613
ata = 209
lck = 25
esp = 20
exp = 276
[Gigobooma]
atp = 1450
mst = 0
evp = 630
hp = 2301
dfp = 750
ata = 313
lck = 35
esp = 25
exp = 281
[GrassAssassin]
atp = 1800
mst = 0
evp = 680
hp = 2524
dfp = 701
ata = 260
lck = 40
esp = 60
exp = 333
[EvilShark]
atp = 1550
mst = 0
evp = 651
hp = 2394
dfp = 726
ata = 236
lck = 30
esp = 20
exp = 295
[PalShark]
atp = 1660
mst = 0
evp = 666
hp = 2499
dfp = 726
ata = 239
lck = 30
esp = 25
exp = 303
[GuilShark]
atp = 1770
mst = 0
evp = 680
hp = 2533
dfp = 726
ata = 345
lck = 40
esp = 25
exp = 318
[Delsaber]
atp = 3333
mst = 0
evp = 970
hp = 3450
dfp = 802
ata = 350
lck = 30
esp = 45
exp = 375
[Dimenian]
atp = 2700
mst = 0
evp = 712
hp = 3002
dfp = 802
ata = 285
lck = 35
esp = 25
exp = 339
[LaDimenian]
atp = 2800
mst = 0
evp = 735
hp = 3150
dfp = 814
ata = 300
lck = 35
esp = 30
exp = 345
[SoDimenian]
atp = 2900
mst = 0
evp = 758
hp = 3750
dfp = 827
ata = 415
lck = 45
esp = 35
exp = 356

637
data/battle_param/ep1_multi_veryhard.toml

@ -0,0 +1,637 @@
[Mothmant]
atp = 753
mst = 0
evp = 74
hp = 451
dfp = 190
ata = 210
lck = 40
esp = 30
exp = 82
[Monest]
atp = 697
mst = 0
evp = 50
hp = 1500
dfp = 190
ata = 135
lck = 0
esp = 30
exp = 92
[SavageWolf]
atp = 819
mst = 0
evp = 307
hp = 905
dfp = 288
ata = 225
lck = 28
esp = 35
exp = 90
[BarbarousWolf]
atp = 834
mst = 0
evp = 344
hp = 950
dfp = 297
ata = 225
lck = 30
esp = 35
exp = 94
[PoisonLily]
atp = 812
mst = 0
evp = 363
hp = 1020
dfp = 306
ata = 230
lck = 18
esp = 35
exp = 100
[NarLily]
atp = 1028
mst = 0
evp = 363
hp = 1137
dfp = 314
ata = 255
lck = 40
esp = 35
exp = 380
[SinowBeat]
atp = 999
mst = 0
evp = 414
hp = 1410
dfp = 341
ata = 235
lck = 35
esp = 50
exp = 137
[Canadine]
atp = 927
mst = 0
evp = 380
hp = 1002
dfp = 306
ata = 245
lck = 17
esp = 25
exp = 11
[Canane]
atp = 941
mst = 0
evp = 380
hp = 1208
dfp = 306
ata = 255
lck = 17
esp = 30
exp = 114
[ChaosSorcerer]
atp = 1071
mst = 256
evp = 357
hp = 1501
dfp = 332
ata = 255
lck = 0
esp = 60
exp = 148
[BeeR]
atp = 941
mst = 0
evp = 146
hp = 1107
dfp = 218
ata = 195
lck = 0
esp = 100
exp = 88
[BeeL]
atp = 941
mst = 0
evp = 146
hp = 1108
dfp = 218
ata = 195
lck = 0
esp = 100
exp = 88
[ChaosBringer]
atp = 1200
mst = 0
evp = 419
hp = 2222
dfp = 419
ata = 265
lck = 17
esp = 65
exp = 150
[DarkBelra]
atp = 1229
mst = 0
evp = 301
hp = 2436
dfp = 568
ata = 235
lck = 28
esp = 60
exp = 144
[DeRolLe]
atp = 1800
mst = 10
evp = 160
hp = 18000
dfp = 330
ata = 290
lck = 5
esp = 100
exp = 8700
[DeRolLeBody]
atp = 1160
mst = 10
evp = 151
hp = 3680
dfp = 270
ata = 270
lck = 0
esp = 100
exp = 30
[DeRolLeMine]
atp = 700
mst = 10
evp = 32
hp = 751
dfp = 255
ata = 170
lck = 5
esp = 100
exp = 8
[Dragon]
atp = 1000
mst = 0
evp = 145
hp = 9900
dfp = 210
ata = 335
lck = 8
esp = 100
exp = 7980
[SinowGold]
atp = 970
mst = 0
evp = 431
hp = 1295
dfp = 428
ata = 255
lck = 0
esp = 55
exp = 143
[RagRappy]
atp = 790
mst = 0
evp = 335
hp = 829
dfp = 271
ata = 205
lck = 35
esp = 30
exp = 88
[EasterRappy]
atp = 913
mst = 0
evp = 194
hp = 1110
dfp = 271
ata = 235
lck = 17
esp = 30
exp = 280
[NanoDragon]
atp = 905
mst = 0
evp = 260
hp = 1227
dfp = 384
ata = 235
lck = 17
esp = 55
exp = 120
[Dubchic]
atp = 1013
mst = 0
evp = 344
hp = 1111
dfp = 341
ata = 235
lck = 17
esp = 35
exp = 22
[Gillchic]
atp = 1020
mst = 0
evp = 344
hp = 1063
dfp = 335
ata = 245
lck = 28
esp = 35
exp = 116
[Garanz]
atp = 1100
mst = 0
evp = 288
hp = 2081
dfp = 437
ata = 235
lck = 30
esp = 55
exp = 124
[GalGryphon]
atp = 999
mst = 0
evp = 410
hp = 1274
dfp = 393
ata = 285
lck = 17
esp = 35
exp = 120
[Bulclaw]
atp = 1143
mst = 0
evp = 363
hp = 1228
dfp = 358
ata = 245
lck = 21
esp = 40
exp = 128
[Claw]
atp = 1013
mst = 0
evp = 325
hp = 1101
dfp = 358
ata = 150
lck = 14
esp = 25
exp = 92
[VolOptPartA]
atp = 0
mst = 0
evp = 100
hp = 10000
dfp = 300
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptPillar]
atp = 100
mst = 0
evp = 200
hp = 3001
dfp = 330
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptMonitor]
atp = 0
mst = 0
evp = 85
hp = 222
dfp = 250
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptAmp]
atp = 0
mst = 0
evp = 150
hp = 951
dfp = 150
ata = 0
lck = 0
esp = 100
exp = 0
[VolOpt]
atp = 0
mst = 0
evp = 170
hp = 25000
dfp = 360
ata = 0
lck = 5
esp = 100
exp = 11100
[VolOptTrap]
atp = 0
mst = 0
evp = 0
hp = 1003
dfp = 200
ata = 0
lck = 0
esp = 100
exp = 0
[PofuillySlime]
atp = 870
mst = 0
evp = 335
hp = 993
dfp = 306
ata = 215
lck = 17
esp = 35
exp = 100
[PanArms]
atp = 927
mst = 0
evp = 325
hp = 2183
dfp = 1128
ata = 255
lck = 17
esp = 35
exp = 52
[Hidoom]
atp = 913
mst = 0
evp = 363
hp = 1209
dfp = 279
ata = 225
lck = 30
esp = 40
exp = 48
[Migium]
atp = 956
mst = 0
evp = 344
hp = 1461
dfp = 279
ata = 225
lck = 30
esp = 35
exp = 48
[PouillySlime]
atp = 1128
mst = 0
evp = 363
hp = 1013
dfp = 288
ata = 285
lck = 30
esp = 35
exp = 380
[Darvant]
atp = 350
mst = 0
evp = 100
hp = 253
dfp = 100
ata = 200
lck = 0
esp = 100
exp = 9
[DarkFalz1]
atp = 1900
mst = 300
evp = 200
hp = 18001
dfp = 320
ata = 250
lck = 20
esp = 100
exp = 0
[DarkFalz2]
atp = 2000
mst = 300
evp = 200
hp = 10001
dfp = 320
ata = 250
lck = 20
esp = 100
exp = 0
[DarkFalz3]
atp = 2100
mst = 300
evp = 200
hp = 16500
dfp = 320
ata = 250
lck = 20
esp = 100
exp = 16000
[UltDarvant]
atp = 700
mst = 0
evp = 110
hp = 503
dfp = 100
ata = 100
lck = 20
esp = 100
exp = 9
[Dubwitch]
atp = 0
mst = 0
evp = 0
hp = 0
dfp = 0
ata = 0
lck = 0
esp = 0
exp = 0
[Hildebear]
atp = 898
mst = 0
evp = 231
hp = 1344
dfp = 306
ata = 215
lck = 35
esp = 55
exp = 111
[Hildeblue]
atp = 985
mst = 0
evp = 401
hp = 1498
dfp = 253
ata = 235
lck = 35
esp = 55
exp = 280
[Booma]
atp = 812
mst = 0
evp = 307
hp = 899
dfp = 253
ata = 195
lck = 28
esp = 12
exp = 90
[Gobooma]
atp = 812
mst = 0
evp = 307
hp = 900
dfp = 253
ata = 195
lck = 28
esp = 15
exp = 92
[Gigobooma]
atp = 826
mst = 0
evp = 325
hp = 1016
dfp = 306
ata = 210
lck = 17
esp = 20
exp = 94
[GrassAssassin]
atp = 913
mst = 0
evp = 363
hp = 1198
dfp = 323
ata = 225
lck = 35
esp = 55
exp = 125
[EvilShark]
atp = 870
mst = 0
evp = 344
hp = 958
dfp = 341
ata = 228
lck = 28
esp = 15
exp = 100
[PalShark]
atp = 884
mst = 0
evp = 354
hp = 994
dfp = 341
ata = 235
lck = 28
esp = 20
exp = 104
[GuilShark]
atp = 898
mst = 0
evp = 363
hp = 1064
dfp = 341
ata = 245
lck = 28
esp = 20
exp = 108
[Delsaber]
atp = 1221
mst = 0
evp = 551
hp = 1871
dfp = 393
ata = 270
lck = 30
esp = 40
exp = 150
[Dimenian]
atp = 1056
mst = 0
evp = 384
hp = 1411
dfp = 393
ata = 255
lck = 28
esp = 20
exp = 124
[LaDimenian]
atp = 1078
mst = 0
evp = 399
hp = 1481
dfp = 402
ata = 268
lck = 28
esp = 25
exp = 128
[SoDimenian]
atp = 1100
mst = 0
evp = 414
hp = 1551
dfp = 411
ata = 280
lck = 35
esp = 30
exp = 132

637
data/battle_param/ep1_solo_hard.toml

@ -0,0 +1,637 @@
[Mothmant]
atp = 311
mst = 0
evp = 45
hp = 203
dfp = 83
ata = 135
lck = 40
esp = 15
exp = 36
[Monest]
atp = 0
mst = 0
evp = 22
hp = 650
dfp = 83
ata = 60
lck = 0
esp = 15
exp = 43
[SavageWolf]
atp = 368
mst = 0
evp = 91
hp = 370
dfp = 111
ata = 150
lck = 16
esp = 20
exp = 42
[BarbarousWolf]
atp = 379
mst = 0
evp = 97
hp = 392
dfp = 118
ata = 150
lck = 20
esp = 20
exp = 45
[PoisonLily]
atp = 362
mst = 0
evp = 103
hp = 397
dfp = 124
ata = 155
lck = 10
esp = 20
exp = 49
[NarLily]
atp = 535
mst = 0
evp = 137
hp = 398
dfp = 131
ata = 180
lck = 30
esp = 20
exp = 259
[SinowBeat]
atp = 512
mst = 0
evp = 137
hp = 562
dfp = 152
ata = 160
lck = 20
esp = 30
exp = 64
[Canadine]
atp = 454
mst = 0
evp = 137
hp = 406
dfp = 124
ata = 170
lck = 10
esp = 15
exp = 6
[Canane]
atp = 465
mst = 0
evp = 137
hp = 540
dfp = 124
ata = 180
lck = 10
esp = 20
exp = 60
[ChaosSorcerer]
atp = 569
mst = 200
evp = 126
hp = 651
dfp = 118
ata = 180
lck = 0
esp = 32
exp = 70
[BeeR]
atp = 466
mst = 0
evp = 108
hp = 487
dfp = 104
ata = 120
lck = 0
esp = 100
exp = 40
[BeeL]
atp = 466
mst = 0
evp = 108
hp = 488
dfp = 104
ata = 120
lck = 0
esp = 100
exp = 40
[ChaosBringer]
atp = 673
mst = 0
evp = 143
hp = 815
dfp = 187
ata = 190
lck = 10
esp = 47
exp = 79
[DarkBelra]
atp = 675
mst = 0
evp = 94
hp = 870
dfp = 221
ata = 160
lck = 16
esp = 42
exp = 76
[DeRolLe]
atp = 805
mst = 10
evp = 120
hp = 4610
dfp = 180
ata = 210
lck = 10
esp = 100
exp = 2500
[DeRolLeBody]
atp = 700
mst = 10
evp = 120
hp = 1550
dfp = 152
ata = 210
lck = 0
esp = 100
exp = 25
[DeRolLeMine]
atp = 370
mst = 10
evp = 26
hp = 305
dfp = 140
ata = 110
lck = 10
esp = 100
exp = 4
[Dragon]
atp = 430
mst = 0
evp = 100
hp = 2200
dfp = 80
ata = 260
lck = 16
esp = 100
exp = 2000
[SinowGold]
atp = 488
mst = 0
evp = 150
hp = 518
dfp = 152
ata = 180
lck = 0
esp = 35
exp = 64
[RagRappy]
atp = 345
mst = 0
evp = 114
hp = 353
dfp = 97
ata = 130
lck = 20
esp = 15
exp = 40
[EasterRappy]
atp = 443
mst = 0
evp = 28
hp = 485
dfp = 97
ata = 160
lck = 10
esp = 15
exp = 184
[NanoDragon]
atp = 437
mst = 0
evp = 65
hp = 541
dfp = 152
ata = 160
lck = 10
esp = 35
exp = 57
[Dubchic]
atp = 523
mst = 0
evp = 126
hp = 486
dfp = 138
ata = 160
lck = 10
esp = 20
exp = 11
[Gillchic]
atp = 529
mst = 0
evp = 126
hp = 463
dfp = 134
ata = 170
lck = 16
esp = 20
exp = 61
[Garanz]
atp = 592
mst = 0
evp = 70
hp = 771
dfp = 200
ata = 160
lck = 20
esp = 35
exp = 67
[GalGryphon]
atp = 512
mst = 0
evp = 160
hp = 563
dfp = 193
ata = 210
lck = 10
esp = 22
exp = 64
[Bulclaw]
atp = 627
mst = 0
evp = 137
hp = 542
dfp = 152
ata = 170
lck = 12
esp = 27
exp = 70
[Claw]
atp = 523
mst = 0
evp = 114
hp = 489
dfp = 152
ata = 100
lck = 8
esp = 12
exp = 43
[VolOptPartA]
atp = 0
mst = 0
evp = 80
hp = 3200
dfp = 140
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptPillar]
atp = 100
mst = 0
evp = 70
hp = 502
dfp = 100
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptMonitor]
atp = 0
mst = 0
evp = 55
hp = 223
dfp = 100
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptAmp]
atp = 0
mst = 0
evp = 120
hp = 350
dfp = 100
ata = 0
lck = 0
esp = 100
exp = 0
[VolOpt]
atp = 0
mst = 0
evp = 140
hp = 6001
dfp = 200
ata = 0
lck = 5
esp = 100
exp = 3000
[VolOptTrap]
atp = 0
mst = 0
evp = 0
hp = 401
dfp = 60
ata = 0
lck = 0
esp = 100
exp = 0
[PofuillySlime]
atp = 408
mst = 0
evp = 120
hp = 430
dfp = 124
ata = 140
lck = 10
esp = 20
exp = 49
[PanArms]
atp = 454
mst = 0
evp = 103
hp = 980
dfp = 773
ata = 180
lck = 10
esp = 20
exp = 26
[Hidoom]
atp = 443
mst = 0
evp = 126
hp = 652
dfp = 104
ata = 150
lck = 28
esp = 20
exp = 23
[Migium]
atp = 477
mst = 0
evp = 126
hp = 653
dfp = 104
ata = 150
lck = 0
esp = 20
exp = 23
[PouillySlime]
atp = 615
mst = 0
evp = 137
hp = 490
dfp = 111
ata = 210
lck = 16
esp = 20
exp = 259
[Darvant]
atp = 170
mst = 0
evp = 90
hp = 120
dfp = 80
ata = 150
lck = 0
esp = 100
exp = 5
[DarkFalz1]
atp = 900
mst = 300
evp = 170
hp = 5000
dfp = 230
ata = 220
lck = 20
esp = 100
exp = 0
[DarkFalz2]
atp = 1000
mst = 300
evp = 170
hp = 6002
dfp = 230
ata = 230
lck = 20
esp = 100
exp = 0
[DarkFalz3]
atp = 1100
mst = 300
evp = 170
hp = 4001
dfp = 230
ata = 230
lck = 30
esp = 100
exp = 6000
[UltDarvant]
atp = 350
mst = 0
evp = 100
hp = 240
dfp = 100
ata = 100
lck = 20
esp = 20
exp = 5
[Dubwitch]
atp = 160
mst = 0
evp = 25
hp = 156
dfp = 30
ata = 120
lck = 10
esp = 0
exp = 5
[Hildebear]
atp = 431
mst = 0
evp = 47
hp = 519
dfp = 124
ata = 140
lck = 20
esp = 35
exp = 49
[Hildeblue]
atp = 500
mst = 0
evp = 154
hp = 595
dfp = 83
ata = 160
lck = 20
esp = 35
exp = 184
[Booma]
atp = 362
mst = 0
evp = 91
hp = 386
dfp = 83
ata = 120
lck = 16
esp = 5
exp = 42
[Gobooma]
atp = 368
mst = 0
evp = 100
hp = 414
dfp = 90
ata = 125
lck = 16
esp = 7
exp = 43
[Gigobooma]
atp = 374
mst = 0
evp = 108
hp = 441
dfp = 124
ata = 135
lck = 10
esp = 10
exp = 45
[GrassAssassin]
atp = 443
mst = 0
evp = 120
hp = 474
dfp = 138
ata = 150
lck = 20
esp = 35
exp = 60
[EvilShark]
atp = 408
mst = 0
evp = 120
hp = 415
dfp = 152
ata = 153
lck = 8
esp = 7
exp = 49
[PalShark]
atp = 420
mst = 0
evp = 126
hp = 431
dfp = 152
ata = 160
lck = 16
esp = 10
exp = 52
[GuilShark]
atp = 431
mst = 0
evp = 131
hp = 464
dfp = 152
ata = 170
lck = 16
esp = 10
exp = 55
[Delsaber]
atp = 627
mst = 0
evp = 166
hp = 760
dfp = 193
ata = 195
lck = 20
esp = 27
exp = 72
[Dimenian]
atp = 558
mst = 0
evp = 134
hp = 617
dfp = 180
ata = 180
lck = 16
esp = 15
exp = 67
[LaDimenian]
atp = 575
mst = 0
evp = 146
hp = 654
dfp = 187
ata = 193
lck = 16
esp = 16
exp = 70
[SoDimenian]
atp = 592
mst = 0
evp = 159
hp = 683
dfp = 193
ata = 205
lck = 20
esp = 22
exp = 73

637
data/battle_param/ep1_solo_normal.toml

@ -0,0 +1,637 @@
[Mothmant]
atp = 53
mst = 0
evp = 20
hp = 8
dfp = 0
ata = 75
lck = 20
esp = 0
exp = 1
[Monest]
atp = 0
mst = 0
evp = 0
hp = 300
dfp = 0
ata = 0
lck = 0
esp = 0
exp = 6
[SavageWolf]
atp = 85
mst = 0
evp = 60
hp = 45
dfp = 20
ata = 90
lck = 8
esp = 5
exp = 5
[BarbarousWolf]
atp = 95
mst = 0
evp = 65
hp = 65
dfp = 25
ata = 90
lck = 10
esp = 5
exp = 7
[PoisonLily]
atp = 80
mst = 0
evp = 70
hp = 70
dfp = 30
ata = 95
lck = 5
esp = 5
exp = 10
[NarLily]
atp = 230
mst = 0
evp = 100
hp = 71
dfp = 35
ata = 120
lck = 20
esp = 5
exp = 150
[SinowBeat]
atp = 210
mst = 0
evp = 100
hp = 220
dfp = 50
ata = 100
lck = 10
esp = 15
exp = 20
[Canadine]
atp = 160
mst = 0
evp = 100
hp = 78
dfp = 30
ata = 110
lck = 5
esp = 0
exp = 3
[Canane]
atp = 170
mst = 0
evp = 100
hp = 200
dfp = 30
ata = 120
lck = 5
esp = 10
exp = 17
[ChaosSorcerer]
atp = 260
mst = 100
evp = 90
hp = 301
dfp = 25
ata = 120
lck = 0
esp = 20
exp = 24
[BeeR]
atp = 170
mst = 0
evp = 80
hp = 150
dfp = 20
ata = 60
lck = 0
esp = 100
exp = 4
[BeeL]
atp = 170
mst = 0
evp = 80
hp = 151
dfp = 20
ata = 60
lck = 0
esp = 100
exp = 4
[ChaosBringer]
atp = 400
mst = 0
evp = 105
hp = 450
dfp = 75
ata = 130
lck = 5
esp = 35
exp = 30
[DarkBelra]
atp = 430
mst = 0
evp = 63
hp = 500
dfp = 100
ata = 100
lck = 8
esp = 30
exp = 28
[DeRolLe]
atp = 280
mst = 10
evp = 90
hp = 3900
dfp = 80
ata = 150
lck = 5
esp = 100
exp = 700
[DeRolLeBody]
atp = 265
mst = 10
evp = 90
hp = 1000
dfp = 60
ata = 150
lck = 0
esp = 100
exp = 10
[DeRolLeMine]
atp = 150
mst = 10
evp = 5
hp = 130
dfp = 50
ata = 50
lck = 5
esp = 100
exp = 3
[Dragon]
atp = 160
mst = 0
evp = 0
hp = 1300
dfp = 0
ata = 200
lck = 8
esp = 100
exp = 350
[SinowGold]
atp = 190
mst = 0
evp = 111
hp = 180
dfp = 50
ata = 120
lck = 0
esp = 20
exp = 20
[RagRappy]
atp = 65
mst = 0
evp = 80
hp = 30
dfp = 10
ata = 70
lck = 10
esp = 0
exp = 4
[EasterRappy]
atp = 150
mst = 0
evp = 5
hp = 152
dfp = 10
ata = 100
lck = 5
esp = 0
exp = 100
[NanoDragon]
atp = 145
mst = 0
evp = 37
hp = 201
dfp = 50
ata = 100
lck = 5
esp = 15
exp = 15
[Dubchic]
atp = 220
mst = 0
evp = 90
hp = 153
dfp = 40
ata = 100
lck = 5
esp = 5
exp = 3
[Gillchic]
atp = 225
mst = 0
evp = 90
hp = 131
dfp = 37
ata = 110
lck = 8
esp = 5
exp = 18
[Garanz]
atp = 280
mst = 0
evp = 42
hp = 410
dfp = 85
ata = 100
lck = 10
esp = 20
exp = 22
[GalGryphon]
atp = 210
mst = 0
evp = 120
hp = 221
dfp = 80
ata = 150
lck = 5
esp = 10
exp = 20
[Bulclaw]
atp = 310
mst = 0
evp = 100
hp = 202
dfp = 50
ata = 110
lck = 6
esp = 15
exp = 24
[Claw]
atp = 220
mst = 0
evp = 80
hp = 154
dfp = 50
ata = 110
lck = 4
esp = 0
exp = 6
[VolOptPartA]
atp = 0
mst = 0
evp = 50
hp = 2100
dfp = 70
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptPillar]
atp = 100
mst = 0
evp = 40
hp = 501
dfp = 70
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptMonitor]
atp = 0
mst = 0
evp = 45
hp = 222
dfp = 60
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptAmp]
atp = 0
mst = 0
evp = 70
hp = 181
dfp = 0
ata = 0
lck = 0
esp = 100
exp = 0
[VolOpt]
atp = 0
mst = 0
evp = 115
hp = 4000
dfp = 120
ata = 0
lck = 5
esp = 100
exp = 1100
[VolOptTrap]
atp = 0
mst = 0
evp = 0
hp = 250
dfp = 35
ata = 0
lck = 0
esp = 100
exp = 0
[PofuillySlime]
atp = 120
mst = 0
evp = 85
hp = 100
dfp = 30
ata = 80
lck = 5
esp = 5
exp = 10
[PanArms]
atp = 160
mst = 0
evp = 70
hp = 600
dfp = 500
ata = 120
lck = 5
esp = 5
exp = 6
[Hidoom]
atp = 150
mst = 0
evp = 90
hp = 302
dfp = 15
ata = 90
lck = 14
esp = 5
exp = 4
[Migium]
atp = 180
mst = 0
evp = 90
hp = 303
dfp = 15
ata = 90
lck = 0
esp = 5
exp = 4
[PouillySlime]
atp = 300
mst = 0
evp = 100
hp = 155
dfp = 20
ata = 150
lck = 8
esp = 5
exp = 150
[Darvant]
atp = 65
mst = 0
evp = 50
hp = 50
dfp = 0
ata = 0
lck = 0
esp = 100
exp = 5
[DarkFalz1]
atp = 600
mst = 300
evp = 150
hp = 2500
dfp = 120
ata = 170
lck = 20
esp = 100
exp = 0
[DarkFalz2]
atp = 650
mst = 300
evp = 150
hp = 3500
dfp = 120
ata = 170
lck = 20
esp = 100
exp = 2400
[DarkFalz3]
atp = 700
mst = 0
evp = 100
hp = 6000
dfp = 120
ata = 170
lck = 20
esp = 100
exp = 0
[UltDarvant]
atp = 180
mst = 0
evp = 90
hp = 101
dfp = 10
ata = 100
lck = 20
esp = 10
exp = 5
[Dubwitch]
atp = 0
mst = 0
evp = 0
hp = 0
dfp = 0
ata = 0
lck = 0
esp = 0
exp = 0
[Hildebear]
atp = 140
mst = 0
evp = 22
hp = 182
dfp = 30
ata = 80
lck = 10
esp = 20
exp = 10
[Hildeblue]
atp = 200
mst = 0
evp = 115
hp = 251
dfp = 0
ata = 100
lck = 10
esp = 20
exp = 100
[Booma]
atp = 80
mst = 0
evp = 60
hp = 60
dfp = 0
ata = 60
lck = 8
esp = 0
exp = 5
[Gobooma]
atp = 85
mst = 0
evp = 68
hp = 85
dfp = 5
ata = 65
lck = 8
esp = 0
exp = 6
[Gigobooma]
atp = 90
mst = 0
evp = 75
hp = 110
dfp = 30
ata = 75
lck = 5
esp = 0
exp = 7
[GrassAssassin]
atp = 150
mst = 0
evp = 85
hp = 140
dfp = 40
ata = 90
lck = 10
esp = 20
exp = 17
[EvilShark]
atp = 120
mst = 0
evp = 85
hp = 86
dfp = 50
ata = 93
lck = 8
esp = 0
exp = 10
[PalShark]
atp = 130
mst = 0
evp = 90
hp = 102
dfp = 50
ata = 100
lck = 8
esp = 0
exp = 12
[GuilShark]
atp = 140
mst = 0
evp = 95
hp = 132
dfp = 50
ata = 110
lck = 8
esp = 0
exp = 14
[Delsaber]
atp = 340
mst = 0
evp = 125
hp = 400
dfp = 80
ata = 135
lck = 10
esp = 15
exp = 25
[Dimenian]
atp = 280
mst = 0
evp = 97
hp = 270
dfp = 70
ata = 115
lck = 8
esp = 10
exp = 22
[LaDimenian]
atp = 310
mst = 0
evp = 108
hp = 304
dfp = 75
ata = 120
lck = 8
esp = 10
exp = 24
[SoDimenian]
atp = 340
mst = 0
evp = 119
hp = 330
dfp = 80
ata = 140
lck = 10
esp = 10
exp = 26

637
data/battle_param/ep1_solo_ultimate.toml

@ -0,0 +1,637 @@
[Mothmant]
atp = 800
mst = 0
evp = 316
hp = 950
dfp = 451
ata = 230
lck = 35
esp = 30
exp = 140
[Monest]
atp = 0
mst = 0
evp = 262
hp = 1931
dfp = 451
ata = 210
lck = 0
esp = 30
exp = 264
[SavageWolf]
atp = 990
mst = 0
evp = 424
hp = 1533
dfp = 500
ata = 205
lck = 40
esp = 30
exp = 260
[BarbarousWolf]
atp = 1280
mst = 0
evp = 424
hp = 1534
dfp = 500
ata = 208
lck = 50
esp = 35
exp = 268
[PoisonLily]
atp = 1250
mst = 0
evp = 451
hp = 1372
dfp = 525
ata = 253
lck = 30
esp = 35
exp = 280
[NarLily]
atp = 1950
mst = 1300
evp = 532
hp = 2572
dfp = 537
ata = 330
lck = 50
esp = 35
exp = 840
[SinowBeat]
atp = 2120
mst = 0
evp = 532
hp = 2225
dfp = 574
ata = 275
lck = 30
esp = 45
exp = 320
[Canadine]
atp = 1500
mst = 0
evp = 532
hp = 1682
dfp = 525
ata = 270
lck = 20
esp = 25
exp = 31
[Canane]
atp = 1600
mst = 0
evp = 532
hp = 1675
dfp = 525
ata = 270
lck = 20
esp = 30
exp = 308
[ChaosSorcerer]
atp = 1529
mst = 1600
evp = 505
hp = 1731
dfp = 512
ata = 365
lck = 0
esp = 45
exp = 336
[BeeR]
atp = 1427
mst = 0
evp = 478
hp = 1097
dfp = 500
ata = 335
lck = 0
esp = 100
exp = 100
[BeeL]
atp = 1427
mst = 0
evp = 478
hp = 1098
dfp = 500
ata = 335
lck = 0
esp = 100
exp = 100
[ChaosBringer]
atp = 2770
mst = 0
evp = 546
hp = 2700
dfp = 635
ata = 363
lck = 40
esp = 60
exp = 360
[DarkBelra]
atp = 2500
mst = 0
evp = 432
hp = 2800
dfp = 696
ata = 310
lck = 50
esp = 55
exp = 352
[DeRolLe]
atp = 2100
mst = 10
evp = 535
hp = 12000
dfp = 840
ata = 345
lck = 25
esp = 1000
exp = 14500
[DeRolLeBody]
atp = 2000
mst = 10
evp = 505
hp = 4500
dfp = 598
ata = 320
lck = 0
esp = 1000
exp = 60
[DeRolLeMine]
atp = 1800
mst = 10
evp = 276
hp = 505
dfp = 574
ata = 325
lck = 25
esp = 1000
exp = 16
[Dragon]
atp = 1500
mst = 0
evp = 262
hp = 9500
dfp = 451
ata = 266
lck = 25
esp = 1000
exp = 12100
[SinowGold]
atp = 2000
mst = 0
evp = 562
hp = 1900
dfp = 574
ata = 275
lck = 35
esp = 50
exp = 320
[RagRappy]
atp = 1000
mst = 0
evp = 478
hp = 1309
dfp = 476
ata = 197
lck = 30
esp = 30
exp = 256
[EasterRappy]
atp = 1800
mst = 0
evp = 276
hp = 1697
dfp = 476
ata = 240
lck = 50
esp = 30
exp = 640
[NanoDragon]
atp = 1500
mst = 0
evp = 362
hp = 1875
dfp = 574
ata = 245
lck = 30
esp = 50
exp = 300
[Dubchic]
atp = 1590
mst = 0
evp = 505
hp = 2074
dfp = 549
ata = 265
lck = 30
esp = 35
exp = 50
[Gillchic]
atp = 1640
mst = 0
evp = 505
hp = 1997
dfp = 542
ata = 265
lck = 35
esp = 35
exp = 312
[Garanz]
atp = 2250
mst = 0
evp = 375
hp = 2525
dfp = 659
ata = 255
lck = 40
esp = 50
exp = 328
[GalGryphon]
atp = 2670
mst = 0
evp = 586
hp = 1800
dfp = 647
ata = 335
lck = 30
esp = 35
exp = 320
[Bulclaw]
atp = 2500
mst = 0
evp = 532
hp = 2000
dfp = 574
ata = 355
lck = 50
esp = 40
exp = 336
[Claw]
atp = 2240
mst = 0
evp = 478
hp = 1497
dfp = 574
ata = 325
lck = 30
esp = 25
exp = 264
[VolOptPartA]
atp = 0
mst = 1000
evp = 370
hp = 12001
dfp = 623
ata = 0
lck = 0
esp = 1000
exp = 0
[VolOptPillar]
atp = 1800
mst = 1000
evp = 262
hp = 2701
dfp = 451
ata = 0
lck = 0
esp = 1000
exp = 0
[VolOptMonitor]
atp = 0
mst = 1300
evp = 384
hp = 2501
dfp = 598
ata = 0
lck = 0
esp = 1000
exp = 0
[VolOptAmp]
atp = 0
mst = 0
evp = 451
hp = 1002
dfp = 451
ata = 0
lck = 0
esp = 1000
exp = 0
[VolOpt]
atp = 0
mst = 0
evp = 573
hp = 16000
dfp = 745
ata = 0
lck = 5
esp = 1000
exp = 16300
[VolOptTrap]
atp = 0
mst = 0
evp = 0
hp = 1003
dfp = 500
ata = 0
lck = 0
esp = 1000
exp = 0
[PofuillySlime]
atp = 1216
mst = 0
evp = 492
hp = 619
dfp = 525
ata = 243
lck = 30
esp = 35
exp = 280
[PanArms]
atp = 1694
mst = 0
evp = 451
hp = 2400
dfp = 1676
ata = 216
lck = 30
esp = 35
exp = 184
[Hidoom]
atp = 1720
mst = 0
evp = 505
hp = 1750
dfp = 488
ata = 264
lck = 30
esp = 40
exp = 176
[Migium]
atp = 1720
mst = 0
evp = 505
hp = 1751
dfp = 488
ata = 264
lck = 30
esp = 35
exp = 176
[PouillySlime]
atp = 2111
mst = 0
evp = 532
hp = 1556
dfp = 500
ata = 280
lck = 30
esp = 35
exp = 840
[Darvant]
atp = 990
mst = 0
evp = 397
hp = 252
dfp = 451
ata = 300
lck = 0
esp = 1000
exp = 20
[DarkFalz1]
atp = 2100
mst = 2000
evp = 600
hp = 10000
dfp = 745
ata = 470
lck = 20
esp = 1000
exp = 0
[DarkFalz2]
atp = 2700
mst = 2250
evp = 600
hp = 8900
dfp = 745
ata = 470
lck = 20
esp = 1000
exp = 0
[DarkFalz3]
atp = 2230
mst = 2500
evp = 720
hp = 10001
dfp = 960
ata = 470
lck = 20
esp = 1000
exp = 39000
[UltDarvant]
atp = 770
mst = 0
evp = 505
hp = 506
dfp = 476
ata = 300
lck = 20
esp = 1000
exp = 20
[Dubwitch]
atp = 160
mst = 0
evp = 25
hp = 158
dfp = 30
ata = 120
lck = 10
esp = 0
exp = 5
[Hildebear]
atp = 1450
mst = 0
evp = 321
hp = 1901
dfp = 525
ata = 235
lck = 45
esp = 50
exp = 280
[Hildeblue]
atp = 2000
mst = 0
evp = 573
hp = 4501
dfp = 451
ata = 290
lck = 60
esp = 50
exp = 640
[Booma]
atp = 1050
mst = 0
evp = 424
hp = 1557
dfp = 451
ata = 202
lck = 25
esp = 12
exp = 260
[Gobooma]
atp = 1150
mst = 0
evp = 446
hp = 1700
dfp = 463
ata = 206
lck = 25
esp = 15
exp = 264
[Gigobooma]
atp = 1250
mst = 0
evp = 465
hp = 1535
dfp = 525
ata = 310
lck = 35
esp = 20
exp = 268
[GrassAssassin]
atp = 1555
mst = 0
evp = 492
hp = 1683
dfp = 549
ata = 255
lck = 40
esp = 50
exp = 308
[EvilShark]
atp = 1300
mst = 0
evp = 492
hp = 1596
dfp = 574
ata = 233
lck = 30
esp = 15
exp = 280
[PalShark]
atp = 1370
mst = 0
evp = 505
hp = 1619
dfp = 574
ata = 236
lck = 30
esp = 20
exp = 288
[GuilShark]
atp = 1420
mst = 0
evp = 519
hp = 1666
dfp = 574
ata = 342
lck = 40
esp = 20
exp = 296
[Delsaber]
atp = 2800
mst = 0
evp = 600
hp = 2300
dfp = 647
ata = 340
lck = 30
esp = 40
exp = 340
[Dimenian]
atp = 1800
mst = 0
evp = 524
hp = 2001
dfp = 623
ata = 275
lck = 35
esp = 20
exp = 328
[LaDimenian]
atp = 1890
mst = 0
evp = 554
hp = 2101
dfp = 635
ata = 290
lck = 35
esp = 25
exp = 336
[SoDimenian]
atp = 1960
mst = 0
evp = 583
hp = 2502
dfp = 647
ata = 405
lck = 45
esp = 30
exp = 344

637
data/battle_param/ep1_solo_veryhard.toml

@ -0,0 +1,637 @@
[Mothmant]
atp = 550
mst = 0
evp = 78
hp = 480
dfp = 193
ata = 210
lck = 40
esp = 30
exp = 82
[Monest]
atp = 0
mst = 0
evp = 47
hp = 1025
dfp = 193
ata = 135
lck = 0
esp = 30
exp = 92
[SavageWolf]
atp = 636
mst = 0
evp = 140
hp = 706
dfp = 228
ata = 225
lck = 28
esp = 30
exp = 90
[BarbarousWolf]
atp = 699
mst = 0
evp = 148
hp = 731
dfp = 237
ata = 225
lck = 30
esp = 35
exp = 94
[PoisonLily]
atp = 650
mst = 0
evp = 156
hp = 738
dfp = 246
ata = 230
lck = 18
esp = 35
exp = 100
[NarLily]
atp = 868
mst = 0
evp = 202
hp = 739
dfp = 254
ata = 255
lck = 40
esp = 35
exp = 380
[SinowBeat]
atp = 801
mst = 0
evp = 202
hp = 740
dfp = 254
ata = 255
lck = 35
esp = 45
exp = 120
[Canadine]
atp = 750
mst = 0
evp = 202
hp = 826
dfp = 246
ata = 245
lck = 17
esp = 25
exp = 11
[Canane]
atp = 763
mst = 0
evp = 202
hp = 900
dfp = 246
ata = 255
lck = 17
esp = 30
exp = 114
[ChaosSorcerer]
atp = 755
mst = 300
evp = 187
hp = 1026
dfp = 237
ata = 255
lck = 0
esp = 45
exp = 128
[BeeR]
atp = 793
mst = 0
evp = 146
hp = 838
dfp = 218
ata = 195
lck = 0
esp = 100
exp = 88
[BeeL]
atp = 793
mst = 0
evp = 146
hp = 839
dfp = 218
ata = 195
lck = 0
esp = 100
exp = 88
[ChaosBringer]
atp = 1000
mst = 0
evp = 210
hp = 1213
dfp = 324
ata = 265
lck = 17
esp = 60
exp = 140
[DarkBelra]
atp = 953
mst = 0
evp = 145
hp = 1275
dfp = 368
ata = 235
lck = 28
esp = 55
exp = 136
[DeRolLe]
atp = 1300
mst = 10
evp = 151
hp = 9000
dfp = 300
ata = 270
lck = 5
esp = 100
exp = 6300
[DeRolLeBody]
atp = 1055
mst = 10
evp = 151
hp = 3680
dfp = 270
ata = 270
lck = 0
esp = 100
exp = 60
[DeRolLeMine]
atp = 550
mst = 10
evp = 32
hp = 503
dfp = 255
ata = 170
lck = 5
esp = 100
exp = 60
[Dragon]
atp = 780
mst = 0
evp = 130
hp = 4200
dfp = 193
ata = 335
lck = 8
esp = 100
exp = 5000
[SinowGold]
atp = 787
mst = 0
evp = 219
hp = 1001
dfp = 281
ata = 255
lck = 0
esp = 50
exp = 120
[RagRappy]
atp = 590
mst = 0
evp = 171
hp = 688
dfp = 211
ata = 205
lck = 35
esp = 30
exp = 88
[EasterRappy]
atp = 707
mst = 0
evp = 55
hp = 840
dfp = 211
ata = 235
lck = 17
esp = 30
exp = 280
[NanoDragon]
atp = 721
mst = 0
evp = 104
hp = 901
dfp = 281
ata = 235
lck = 17
esp = 50
exp = 110
[Dubchic]
atp = 785
mst = 0
evp = 187
hp = 841
dfp = 263
ata = 235
lck = 17
esp = 35
exp = 22
[Gillchic]
atp = 812
mst = 0
evp = 187
hp = 813
dfp = 258
ata = 245
lck = 28
esp = 35
exp = 116
[Garanz]
atp = 950
mst = 0
evp = 112
hp = 1500
dfp = 342
ata = 235
lck = 30
esp = 50
exp = 124
[GalGryphon]
atp = 753
mst = 0
evp = 233
hp = 925
dfp = 333
ata = 285
lck = 17
esp = 35
exp = 120
[Bulclaw]
atp = 888
mst = 0
evp = 202
hp = 902
dfp = 281
ata = 245
lck = 21
esp = 40
exp = 128
[Claw]
atp = 775
mst = 0
evp = 171
hp = 842
dfp = 281
ata = 150
lck = 14
esp = 25
exp = 92
[VolOptPartA]
atp = 0
mst = 0
evp = 100
hp = 5500
dfp = 250
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptPillar]
atp = 100
mst = 0
evp = 100
hp = 700
dfp = 250
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptMonitor]
atp = 0
mst = 0
evp = 85
hp = 224
dfp = 150
ata = 0
lck = 0
esp = 100
exp = 0
[VolOptAmp]
atp = 0
mst = 0
evp = 150
hp = 504
dfp = 150
ata = 0
lck = 0
esp = 100
exp = 0
[VolOpt]
atp = 0
mst = 0
evp = 170
hp = 7700
dfp = 280
ata = 0
lck = 5
esp = 100
exp = 7700
[VolOptTrap]
atp = 0
mst = 0
evp = 0
hp = 655
dfp = 80
ata = 0
lck = 0
esp = 100
exp = 0
[PofuillySlime]
atp = 700
mst = 0
evp = 179
hp = 775
dfp = 246
ata = 215
lck = 17
esp = 35
exp = 100
[PanArms]
atp = 720
mst = 0
evp = 156
hp = 1400
dfp = 1068
ata = 255
lck = 17
esp = 35
exp = 52
[Hidoom]
atp = 718
mst = 0
evp = 187
hp = 1027
dfp = 219
ata = 225
lck = 30
esp = 40
exp = 48
[Migium]
atp = 805
mst = 0
evp = 187
hp = 1028
dfp = 219
ata = 225
lck = 30
esp = 35
exp = 48
[PouillySlime]
atp = 900
mst = 0
evp = 202
hp = 725
dfp = 228
ata = 285
lck = 30
esp = 35
exp = 380
[Darvant]
atp = 300
mst = 0
evp = 90
hp = 183
dfp = 80
ata = 200
lck = 0
esp = 100
exp = 9
[DarkFalz1]
atp = 1600
mst = 300
evp = 200
hp = 8800
dfp = 320
ata = 240
lck = 20
esp = 100
exp = 0
[DarkFalz2]
atp = 1700
mst = 300
evp = 200
hp = 7000
dfp = 320
ata = 250
lck = 20
esp = 100
exp = 0
[DarkFalz3]
atp = 1800
mst = 300
evp = 200
hp = 8300
dfp = 320
ata = 250
lck = 20
esp = 100
exp = 12000
[UltDarvant]
atp = 550
mst = 0
evp = 110
hp = 360
dfp = 100
ata = 100
lck = 20
esp = 30
exp = 9
[Dubwitch]
atp = 160
mst = 0
evp = 25
hp = 157
dfp = 30
ata = 120
lck = 10
esp = 0
exp = 5
[Hildebear]
atp = 725
mst = 0
evp = 81
hp = 875
dfp = 246
ata = 215
lck = 35
esp = 50
exp = 100
[Hildeblue]
atp = 800
mst = 0
evp = 225
hp = 962
dfp = 193
ata = 235
lck = 35
esp = 50
exp = 280
[Booma]
atp = 610
mst = 0
evp = 140
hp = 726
dfp = 193
ata = 195
lck = 28
esp = 12
exp = 90
[Gobooma]
atp = 663
mst = 0
evp = 163
hp = 788
dfp = 246
ata = 210
lck = 28
esp = 15
exp = 92
[Gigobooma]
atp = 663
mst = 0
evp = 163
hp = 789
dfp = 246
ata = 210
lck = 17
esp = 20
exp = 94
[GrassAssassin]
atp = 738
mst = 0
evp = 179
hp = 827
dfp = 263
ata = 225
lck = 35
esp = 50
exp = 114
[EvilShark]
atp = 690
mst = 0
evp = 179
hp = 757
dfp = 281
ata = 228
lck = 28
esp = 15
exp = 100
[PalShark]
atp = 713
mst = 0
evp = 187
hp = 776
dfp = 281
ata = 235
lck = 28
esp = 20
exp = 104
[GuilShark]
atp = 735
mst = 0
evp = 194
hp = 814
dfp = 281
ata = 245
lck = 28
esp = 20
exp = 108
[Delsaber]
atp = 918
mst = 0
evp = 241
hp = 1150
dfp = 333
ata = 270
lck = 30
esp = 40
exp = 130
[Dimenian]
atp = 823
mst = 0
evp = 197
hp = 988
dfp = 316
ata = 255
lck = 28
esp = 20
exp = 124
[LaDimenian]
atp = 851
mst = 0
evp = 214
hp = 1029
dfp = 324
ata = 268
lck = 28
esp = 25
exp = 128
[SoDimenian]
atp = 880
mst = 0
evp = 231
hp = 1063
dfp = 333
ata = 280
lck = 35
esp = 30
exp = 132

22
src/common/leveltable.rs

@ -76,6 +76,20 @@ impl CharacterLevelTable {
}
}
pub fn get_level_from_exp(&self, ch_class: CharacterClass, exp: u32) -> u32 {
if let Some(statlist) = self.table.get(&ch_class) {
statlist
.iter()
.filter(|stat| {
stat.exp <= exp
})
.count() as u32
}
else {
0
}
}
pub fn get_stats_from_exp(&self, ch_class: CharacterClass, exp: u32) -> (u32, CharacterStats) {
if let Some(statlist) = self.table.get(&ch_class) {
statlist
@ -110,4 +124,12 @@ mod test {
assert!(table.get_stats_from_exp(CharacterClass::FOmarl, 0) == (1, CharacterStats { hp: 20, atp: 13, mst: 53, evp: 35, dfp: 10, ata: 15, lck: 10 }));
assert!(table.get_stats_from_exp(CharacterClass::FOmarl, 1 << 17) == (36, CharacterStats { hp: 125, atp: 114, mst: 219, evp: 182, dfp: 42, ata: 213, lck: 10 }));
}
#[test]
fn test_levels() {
let table = CharacterLevelTable::new();
assert!(table.get_level_from_exp(CharacterClass::FOmarl, 0) == 1);
assert!(table.get_level_from_exp(CharacterClass::FOmarl, 3000) == 8);
assert!(table.get_level_from_exp(CharacterClass::FOmarl, 3200) == 9);
}
}

2
src/ship/character.rs

@ -3,7 +3,6 @@ use crate::common::leveltable::CharacterStats;
use crate::entity::character::CharacterEntity;
use crate::ship::items::CharacterInventory;
// TODO: exp
pub struct CharacterBytesBuilder<'a> {
character: Option<&'a CharacterEntity>,
stats: Option<&'a CharacterStats>,
@ -70,6 +69,7 @@ impl<'a> CharacterBytesBuilder<'a> {
config: character.config.as_bytes(),
techniques: character.techs.as_bytes(),
meseta: character.meseta,
exp: character.exp,
..character::Character::default()
}
}

2
src/ship/map.rs

@ -111,7 +111,7 @@ impl MapEnemy {
(RawMapEnemy {id: 130, ..}, _) => MonsterType::SinowGold,
(RawMapEnemy {id: 131, ..}, _) => MonsterType::Canadine,
(RawMapEnemy {id: 132, ..}, _) => MonsterType::Canane,
(RawMapEnemy {id: 133, ..}, _) => MonsterType::DubchicSwitch,
(RawMapEnemy {id: 133, ..}, _) => MonsterType::Dubwitch,
(RawMapEnemy {id: 160, ..}, _) => MonsterType::Delsaber,
(RawMapEnemy {id: 161, ..}, _) => MonsterType::ChaosSorcerer,
(RawMapEnemy {id: 162, ..}, _) => MonsterType::DarkGunner,

46
src/ship/monster.rs

@ -1,5 +1,10 @@
#![allow(dead_code)]
use std::collections::HashMap;
use std::fs::File;
use std::io::Read;
use std::path::PathBuf;
use serde::{Serialize, Deserialize};
use crate::ship::room::{Difficulty, Episode, RoomMode};
#[derive(Debug)]
@ -47,7 +52,7 @@ pub enum MonsterType {
Canadine,
RingCanadine,
Canane,
DubchicSwitch,
Dubwitch,
Delsaber,
ChaosSorcerer,
BeeR,
@ -74,6 +79,7 @@ pub enum MonsterType {
VolOptCore,
VolOptUnused,
VolOpt,
VolOptTrap,
DarkFalz,
DarkFalz1,
DarkFalz2,
@ -123,3 +129,41 @@ pub enum MonsterType {
SaintMillion,
Shambertin,
}
#[derive(serde::Deserialize, Debug)]
pub struct MonsterStats {
pub atp: u16,
pub mst: u16,
pub evp: u16,
pub hp: u16,
pub dfp: u16,
pub ata: u16,
pub lck: u16,
pub esp: u16,
pub exp: u32,
}
fn load_battle_param(filename: &str) -> HashMap<MonsterType, MonsterStats> {
let mut path = PathBuf::from("data/battle_param/");
path.push(filename);
let mut f = File::open(path).unwrap();
let mut s = String::new();
f.read_to_string(&mut s).unwrap();
toml::from_str::<HashMap<String, MonsterStats>>(s.as_str()).unwrap()
.into_iter()
.map(|(monster_name, stats)| {
(monster_name.parse().unwrap(), stats)
}).collect()
}
pub fn load_monster_stats_table(mode: &RoomMode) -> HashMap<MonsterType, MonsterStats> {
match mode {
RoomMode::Multi {episode: Episode::One, difficulty: Difficulty::Normal} => load_battle_param("ep1_multi_normal.toml"),
RoomMode::Multi {episode: Episode::One, difficulty: Difficulty::Hard} => load_battle_param("ep1_multi_hard.toml"),
RoomMode::Multi {episode: Episode::One, difficulty: Difficulty::VeryHard} => load_battle_param("ep1_multi_veryhard.toml"),
RoomMode::Multi {episode: Episode::One, difficulty: Difficulty::Ultimate} => load_battle_param("ep1_multi_ultimate.toml"),
_ => panic!(),
}
}

23
src/ship/packet/builder/message.rs

@ -1,4 +1,5 @@
use libpso::packet::messages::*;
use crate::common::leveltable::CharacterStats;
use crate::ship::ship::{ShipError};
use crate::ship::items::{FloorItem};
use crate::ship::location::AreaClient;
@ -63,3 +64,25 @@ pub fn drop_split_stack(area_client: AreaClient, item: &FloorItem) -> Result<Dro
unknown2: 0,
})
}
pub fn character_gained_exp(area_client: AreaClient, exp: u32) -> GiveCharacterExp {
GiveCharacterExp {
client: area_client.local_client.id(),
target: 0,
exp: exp,
}
}
pub fn character_leveled_up(area_client: AreaClient, level: u32, before_stats: CharacterStats, after_stats: CharacterStats) -> PlayerLevelUp {
PlayerLevelUp {
client: area_client.local_client.id(),
target: 0,
atp: after_stats.atp - before_stats.atp,
mst: after_stats.mst - before_stats.mst,
evp: after_stats.evp - before_stats.evp,
hp: after_stats. hp - before_stats. hp,
dfp: after_stats.dfp - before_stats.dfp,
ata: after_stats.ata - before_stats.ata,
lvl: level,
}
}

64
src/ship/packet/handler/message.rs

@ -1,28 +1,66 @@
use log::warn;
use libpso::packet::ship::*;
use libpso::packet::messages::*;
use crate::entity::gateway::EntityGateway;
use crate::common::serverstate::ClientId;
use crate::common::leveltable::CharacterLevelTable;
use crate::ship::ship::{SendShipPacket, ShipError, Rooms, Clients, ItemDropLocation};
use crate::ship::location::{ClientLocation, ClientLocationError, RoomLobby};
use crate::ship::location::{ClientLocation, ClientLocationError};
use crate::ship::map::{MapArea};
use crate::ship::items::{ItemManager, ClientItemId};
use crate::ship::packet::builder;
pub fn request_exp(id: ClientId,
pub async fn request_exp<EG: EntityGateway>(id: ClientId,
request_exp: &RequestExp,
entity_gateway: &mut EG,
client_location: &ClientLocation,
rooms: &Rooms)
-> Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send> {
match client_location.get_area(id).unwrap() {
RoomLobby::Room(room) => {
let r = rooms[room.0].as_ref().unwrap();
warn!("killed a {:?}", r.maps.enemy_by_id(request_exp.enemy_id as usize).unwrap().monster);
},
_ => {}
clients: &mut Clients,
rooms: &mut Rooms,
level_table: &CharacterLevelTable)
-> Result<Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send>, ShipError> {
let client = clients.get_mut(&id).ok_or(ShipError::ClientNotFound(id))?;
let area_client = client_location.get_local_client(id).map_err(|err| -> ClientLocationError { err.into() })?;
let room_id = client_location.get_room(id).map_err(|err| -> ClientLocationError { err.into() })?;
let room = rooms.get_mut(room_id.0)
.ok_or_else(|| ShipError::InvalidRoom(room_id.0 as u32))?
.as_mut()
.ok_or_else(|| ShipError::InvalidRoom(room_id.0 as u32))?;
let monster = room.maps.enemy_by_id(request_exp.enemy_id as usize)?;
let monster_stats = room.monster_stats.get(&monster.monster).unwrap();
let exp_gain = if request_exp.last_hitter == 1 {
monster_stats.exp
}
else {
((monster_stats.exp as f32) * 0.8) as u32
};
Box::new(None.into_iter())
let clients_in_area = client_location.get_clients_in_room(room_id).map_err(|err| -> ClientLocationError { err.into() })?;
let gain_exp_pkt = builder::message::character_gained_exp(area_client, exp_gain);
let mut exp_pkts: Box<dyn Iterator<Item = _> + Send> = Box::new(clients_in_area.clone().into_iter()
.map(move |c| {
(c.client, SendShipPacket::Message(Message::new(GameMessage::GiveCharacterExp(gain_exp_pkt.clone()))))
}));
let before_level = level_table.get_level_from_exp(client.character.char_class, client.character.exp);
let after_level = level_table.get_level_from_exp(client.character.char_class, client.character.exp + exp_gain);
let level_up = before_level != after_level;
if level_up {
let (_, before_stats) = level_table.get_stats_from_exp(client.character.char_class, client.character.exp);
let (after_level, after_stats) = level_table.get_stats_from_exp(client.character.char_class, client.character.exp + exp_gain);
let level_up_pkt = builder::message::character_leveled_up(area_client, after_level, before_stats, after_stats);
exp_pkts = Box::new(exp_pkts.chain(clients_in_area.into_iter()
.map(move |c| {
(c.client, SendShipPacket::Message(Message::new(GameMessage::PlayerLevelUp(level_up_pkt.clone()))))
})))
}
client.character.exp += exp_gain;
entity_gateway.save_character(&client.character).await;
Ok(exp_pkts)
}
pub async fn player_drop_item<EG>(id: ClientId,

4
src/ship/room.rs

@ -1,9 +1,11 @@
use std::collections::HashMap;
use std::convert::{From, Into, TryFrom, TryInto};
use rand::Rng;
use crate::ship::map::Maps;
use crate::ship::drops::DropTable;
use crate::entity::character::SectionID;
use crate::ship::monster::{load_monster_stats_table, MonsterType, MonsterStats};
#[derive(Debug)]
pub enum RoomCreationError {
@ -161,6 +163,7 @@ pub struct RoomState {
pub section_id: SectionID,
pub random_seed: u32,
pub bursting: bool,
pub monster_stats: Box<HashMap<MonsterType, MonsterStats>>,
// items on ground
// enemy info
}
@ -226,6 +229,7 @@ impl RoomState {
};
Ok(RoomState {
monster_stats: Box::new(load_monster_stats_table(&room_mode)),
mode: room_mode,
random_seed: rand::thread_rng().gen(),
name: String::from_utf16_lossy(&create_room.name).trim_matches(char::from(0)).into(),

4
src/ship/ship.rs

@ -242,7 +242,7 @@ pub struct ShipServerState<EG: EntityGateway> {
client_location: ClientLocation,
level_table: CharacterLevelTable,
name: String,
rooms: Rooms,
pub rooms: Rooms,
pub item_manager: items::ItemManager,
quests: quests::QuestList,
}
@ -264,7 +264,7 @@ impl<EG: EntityGateway> ShipServerState<EG> {
async fn message(&mut self, id: ClientId, msg: &Message) -> Result<Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send>, ShipError> {
match &msg.msg {
GameMessage::RequestExp(request_exp) => {
Ok(handler::message::request_exp(id, request_exp, &self.client_location, &self.rooms))
handler::message::request_exp(id, request_exp, &mut self.entity_gateway, &self.client_location, &mut self.clients, &mut self.rooms, &self.level_table).await
},
GameMessage::PlayerDropItem(player_drop_item) => {
handler::message::player_drop_item(id, player_drop_item, &mut self.entity_gateway, &mut self.client_location, &mut self.clients, &mut self.rooms, &mut self.item_manager).await

79
tests/common.rs

@ -0,0 +1,79 @@
use std::time::SystemTime;
use elseware::common::serverstate::{ClientId, ServerState};
use elseware::entity::gateway::EntityGateway;
use elseware::entity::account::{UserAccountEntity, NewUserAccountEntity, NewUserSettingsEntity};
use elseware::entity::character::{CharacterEntity, NewCharacterEntity};
use elseware::ship::ship::{ShipServerState, RecvShipPacket};
use libpso::packet::ship::*;
use libpso::packet::login::{Login, Session};
use libpso::{utf8_to_array, utf8_to_utf16_array};
pub async fn new_user_character<EG: EntityGateway>(entity_gateway: &mut EG, username: &str, password: &str) -> (UserAccountEntity, CharacterEntity) {
let new_user = NewUserAccountEntity {
username: username.into(),
password: bcrypt::hash(password, 5).unwrap(),
guildcard: 1,
team_id: None,
banned: false,
muted_until: SystemTime::now(),
created_at: SystemTime::now(),
flags: 0,
};
let user = entity_gateway.create_user(new_user).await.unwrap();
let new_settings = NewUserSettingsEntity::new(user.id);
let _settings = entity_gateway.create_user_settings(new_settings).await.unwrap();
let new_character = NewCharacterEntity::new(user.id);
let character = entity_gateway.create_character(new_character).await.unwrap();
(user, character)
}
pub async fn log_in_char<EG: EntityGateway>(ship: &mut ShipServerState<EG>, id: ClientId, username: &str, password: &str) {
let username = username.to_string();
let password = password.to_string();
ship.handle(id, &RecvShipPacket::Login(Login {
tag: 0,
guildcard: 0,
version: 0,
unknown1: [0; 6],
team: 0,
username: utf8_to_array!(username, 16),
unknown2: [0; 32],
password: utf8_to_array!(password, 16),
unknown3: [0; 40],
hwinfo: [0; 8],
session: Session::new(),
})).await.unwrap().for_each(drop);
}
pub async fn join_lobby<EG: EntityGateway>(ship: &mut ShipServerState<EG>, id: ClientId) {
ship.handle(id, &RecvShipPacket::CharData(CharData {
_unknown: [0; 0x828]
})).await.unwrap().for_each(drop);
}
pub async fn create_room<EG: EntityGateway>(ship: &mut ShipServerState<EG>, id: ClientId, name: &str, password: &str) {
ship.handle(id, &RecvShipPacket::CreateRoom(CreateRoom {
unknown: [0; 2],
name: utf8_to_utf16_array!(name, 16),
password: utf8_to_utf16_array!(password, 16),
difficulty: 0,
battle: 0,
challenge: 0,
episode: 1,
single_player: 0,
padding: [0; 3],
})).await.unwrap().for_each(drop);
ship.handle(id, &RecvShipPacket::DoneBursting(DoneBursting {})).await.unwrap().for_each(drop);
}
pub async fn join_room<EG: EntityGateway>(ship: &mut ShipServerState<EG>, id: ClientId, room_id: u32) {
ship.handle(id, &RecvShipPacket::MenuSelect(MenuSelect {
menu: ROOM_MENU_ID,
item: room_id,
})).await.unwrap().for_each(drop);
}

184
tests/test_exp_gain.rs

@ -0,0 +1,184 @@
use elseware::common::serverstate::{ClientId, ServerState};
use elseware::entity::gateway::{EntityGateway, InMemoryGateway};
use elseware::common::leveltable::CharacterLevelTable;
use elseware::ship::ship::{ShipServerState, SendShipPacket, RecvShipPacket};
use elseware::ship::monster::MonsterType;
use libpso::packet::ship::*;
use libpso::packet::messages::*;
#[path = "common.rs"]
mod common;
use common::*;
#[async_std::test]
async fn test_character_gains_exp() {
let mut entity_gateway = InMemoryGateway::new();
let (_user1, _char1) = new_user_character(&mut entity_gateway, "a1", "a").await;
let mut ship = ShipServerState::new(entity_gateway.clone());
log_in_char(&mut ship, ClientId(1), "a1", "a").await;
join_lobby(&mut ship, ClientId(1)).await;
create_room(&mut ship, ClientId(1), "room", "").await;
let (enemy_id, exp) = {
let room = ship.rooms[0].as_ref().unwrap();
let (enemy_id, map_enemy) = (0..).filter_map(|i| {
room.maps.enemy_by_id(i).map(|enemy| {
(i, enemy)
}).ok()
}).next().unwrap();
let map_enemy_stats = room.monster_stats.get(&map_enemy.monster).unwrap();
(enemy_id, map_enemy_stats.exp)
};
ship.handle(ClientId(1), &RecvShipPacket::Message(Message::new(GameMessage::RequestExp(RequestExp{
client: enemy_id as u8,
target: 16,
enemy_id: enemy_id as u16,
client_id: 0,
unused: 0,
last_hitter: 1,
})))).await.unwrap().for_each(drop);
let c1 = ship.clients.get(&ClientId(1)).unwrap();
assert!(exp == c1.character.exp);
}
#[async_std::test]
async fn test_character_levels_up() {
let mut entity_gateway = InMemoryGateway::new();
let (_user1, mut char1) = new_user_character(&mut entity_gateway, "a1", "a").await;
char1.exp = 49;
entity_gateway.save_character(&char1).await;
let mut ship = ShipServerState::new(entity_gateway.clone());
log_in_char(&mut ship, ClientId(1), "a1", "a").await;
join_lobby(&mut ship, ClientId(1)).await;
create_room(&mut ship, ClientId(1), "room", "").await;
let enemy_id = {
let room = ship.rooms[0].as_ref().unwrap();
(0..).filter_map(|i| {
room.maps.enemy_by_id(i).map(|_| {
i
}).ok()
}).next().unwrap()
};
let levelup_pkt = ship.handle(ClientId(1), &RecvShipPacket::Message(Message::new(GameMessage::RequestExp(RequestExp{
client: enemy_id as u8,
target: 16,
enemy_id: enemy_id as u16,
client_id: 0,
unused: 0,
last_hitter: 1,
})))).await.unwrap().collect::<Vec<_>>();
assert!(matches!(levelup_pkt[1].1, SendShipPacket::Message(Message {msg: GameMessage::PlayerLevelUp(PlayerLevelUp {lvl: 2, ..})})));
let leveltable = CharacterLevelTable::new();
let c1 = ship.clients.get(&ClientId(1)).unwrap();
assert!(leveltable.get_level_from_exp(c1.character.char_class, c1.character.exp) == 2);
}
#[async_std::test]
async fn test_character_levels_up_multiple_times() {
let mut entity_gateway = InMemoryGateway::new();
let (_user1, _char1) = new_user_character(&mut entity_gateway, "a1", "a").await;
let mut ship = ShipServerState::new(entity_gateway.clone());
log_in_char(&mut ship, ClientId(1), "a1", "a").await;
join_lobby(&mut ship, ClientId(1)).await;
create_room(&mut ship, ClientId(1), "room", "").await;
let (enemy_id, exp) = {
let room = ship.rooms[0].as_ref().unwrap();
let (enemy_id, map_enemy) = (0..).filter_map(|i| {
room.maps.enemy_by_id(i).ok().and_then(|enemy| {
if enemy.monster == MonsterType::DarkFalz2 {
Some((i, enemy))
}
else {
None
}
})
}).next().unwrap();
let map_enemy_stats = room.monster_stats.get(&map_enemy.monster).unwrap();
(enemy_id, map_enemy_stats.exp)
};
let levelup_pkt = ship.handle(ClientId(1), &RecvShipPacket::Message(Message::new(GameMessage::RequestExp(RequestExp{
client: enemy_id as u8,
target: 16,
enemy_id: enemy_id as u16,
client_id: 0,
unused: 0,
last_hitter: 1,
})))).await.unwrap().collect::<Vec<_>>();
assert!(matches!(levelup_pkt[1].1, SendShipPacket::Message(Message {msg: GameMessage::PlayerLevelUp(PlayerLevelUp {lvl: 8, ..})})));
let c1 = ship.clients.get(&ClientId(1)).unwrap();
assert!(exp == c1.character.exp);
}
#[async_std::test]
async fn test_one_character_gets_full_exp_and_other_attacker_gets_partial() {
let mut entity_gateway = InMemoryGateway::new();
let (_user1, _char1) = new_user_character(&mut entity_gateway, "a1", "a").await;
let (_user2, _char2) = new_user_character(&mut entity_gateway, "a2", "a").await;
let mut ship = ShipServerState::new(entity_gateway.clone());
log_in_char(&mut ship, ClientId(1), "a1", "a").await;
log_in_char(&mut ship, ClientId(2), "a2", "a").await;
join_lobby(&mut ship, ClientId(1)).await;
join_lobby(&mut ship, ClientId(2)).await;
create_room(&mut ship, ClientId(1), "room", "").await;
join_room(&mut ship, ClientId(2), 0).await;
let (enemy_id, exp) = {
let room = ship.rooms[0].as_ref().unwrap();
let (enemy_id, map_enemy) = (0..).filter_map(|i| {
room.maps.enemy_by_id(i).ok().and_then(|enemy| {
if enemy.monster == MonsterType::DarkFalz2 {
Some((i, enemy))
}
else {
None
}
})
}).next().unwrap();
let map_enemy_stats = room.monster_stats.get(&map_enemy.monster).unwrap();
(enemy_id, map_enemy_stats.exp)
};
ship.handle(ClientId(1), &RecvShipPacket::Message(Message::new(GameMessage::RequestExp(RequestExp{
client: enemy_id as u8,
target: 16,
enemy_id: enemy_id as u16,
client_id: 0,
unused: 0,
last_hitter: 1,
})))).await.unwrap().for_each(drop);
ship.handle(ClientId(2), &RecvShipPacket::Message(Message::new(GameMessage::RequestExp(RequestExp{
client: enemy_id as u8,
target: 16,
enemy_id: enemy_id as u16,
client_id: 0,
unused: 0,
last_hitter: 0,
})))).await.unwrap().for_each(drop);
let c1 = ship.clients.get(&ClientId(1)).unwrap();
let c2 = ship.clients.get(&ClientId(2)).unwrap();
assert!(c1.character.exp == exp);
assert!(c2.character.exp == (exp as f32 * 0.8) as u32);
}

78
tests/test_item_pickup.rs

@ -1,87 +1,15 @@
use std::time::SystemTime;
use elseware::common::serverstate::{ClientId, ServerState};
use elseware::entity::gateway::{EntityGateway, InMemoryGateway};
use elseware::entity::account::{UserAccountEntity, NewUserAccountEntity, NewUserSettingsEntity};
use elseware::entity::character::{CharacterEntity, NewCharacterEntity};
//use elseware::entity::item::{NewItemEntity, ItemDetail, ItemLocation};
use elseware::entity::item;
use elseware::ship::ship::{ShipServerState, RecvShipPacket};
use elseware::ship::items::{ClientItemId, ActiveItemEntityId, HeldItemType, FloorItemType};
use libpso::packet::ship::*;
use libpso::packet::messages::*;
use libpso::packet::login::{Login, Session};
use libpso::{utf8_to_array, utf8_to_utf16_array};
pub async fn new_user_character<EG: EntityGateway>(entity_gateway: &mut EG, username: &str, password: &str) -> (UserAccountEntity, CharacterEntity) {
let new_user = NewUserAccountEntity {
username: username.into(),
password: bcrypt::hash(password, 5).unwrap(),
guildcard: 1,
team_id: None,
banned: false,
muted_until: SystemTime::now(),
created_at: SystemTime::now(),
flags: 0,
};
let user = entity_gateway.create_user(new_user).await.unwrap();
let new_settings = NewUserSettingsEntity::new(user.id);
let _settings = entity_gateway.create_user_settings(new_settings).await.unwrap();
let new_character = NewCharacterEntity::new(user.id);
let character = entity_gateway.create_character(new_character).await.unwrap();
(user, character)
}
pub async fn log_in_char<EG: EntityGateway>(ship: &mut ShipServerState<EG>, id: ClientId, username: &str, password: &str) {
let username = username.to_string();
let password = password.to_string();
ship.handle(id, &RecvShipPacket::Login(Login {
tag: 0,
guildcard: 0,
version: 0,
unknown1: [0; 6],
team: 0,
username: utf8_to_array!(username, 16),
unknown2: [0; 32],
password: utf8_to_array!(password, 16),
unknown3: [0; 40],
hwinfo: [0; 8],
session: Session::new(),
})).await.unwrap().for_each(drop);
}
pub async fn join_lobby<EG: EntityGateway>(ship: &mut ShipServerState<EG>, id: ClientId) {
ship.handle(id, &RecvShipPacket::CharData(CharData {
_unknown: [0; 0x828]
})).await.unwrap().for_each(drop);
}
pub async fn create_room<EG: EntityGateway>(ship: &mut ShipServerState<EG>, id: ClientId, name: &str, password: &str) {
ship.handle(id, &RecvShipPacket::CreateRoom(CreateRoom {
unknown: [0; 2],
name: utf8_to_utf16_array!(name, 16),
password: utf8_to_utf16_array!(password, 16),
difficulty: 0,
battle: 0,
challenge: 0,
episode: 1,
single_player: 0,
padding: [0; 3],
})).await.unwrap().for_each(drop);
ship.handle(id, &RecvShipPacket::DoneBursting(DoneBursting {})).await.unwrap().for_each(drop);
}
pub async fn join_room<EG: EntityGateway>(ship: &mut ShipServerState<EG>, id: ClientId, room_id: u32) {
ship.handle(id, &RecvShipPacket::MenuSelect(MenuSelect {
menu: ROOM_MENU_ID,
item: room_id,
})).await.unwrap().for_each(drop);
}
#[path = "common.rs"]
mod common;
use common::*;
#[async_std::test]
async fn test_pick_up_item_stack_of_items_already_in_inventory() {

Loading…
Cancel
Save