Skip to content

Commit 465c6a3

Browse files
committed
refactor: mugenversion and ikemenversion type and syntax
Example: trigger1 = P2, IkemenVersion Major = 0 trigger1 = P2, IkemenVersion Minor >= 99 trigger1 = P2, IkemenVersion Patch >= 1
1 parent e519249 commit 465c6a3

9 files changed

Lines changed: 114 additions & 111 deletions

File tree

data/common1.cns.zss

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -718,7 +718,7 @@ if hitOver {
718718

719719
#-------------------------------------------------------------------------------
720720
[Function IkSys_HitGroundEffect(vely)]
721-
if mugenVersion < 1.0 {
721+
if mugenVersion major = 0 {
722722
gameMakeAnim{
723723
value: 60 + ($vely > 5) + ($vely > 14);
724724
pos: 0, 0;
@@ -740,7 +740,7 @@ playSnd{value: F7, ($vely > const240p(5)) + ($vely > const240p(14))}
740740
[StateDef 5100; type: L; movetype: H; physics: N;]
741741

742742
if time = 0 {
743-
if mugenVersion < 1.0 && getHitVar(fall.yVel) = 0 && vel x > 1 {
743+
if mugenVersion major = 0 && getHitVar(fall.yVel) = 0 && vel x > 1 {
744744
velSet{x: 1}
745745
}
746746
fallEnvShake{}
@@ -904,7 +904,7 @@ if time = 0 {
904904
}
905905
posSet{y: 0}
906906
palFx{time: 3; add: 128, 128, 128}
907-
if mugenVersion >= 1.0 {
907+
if mugenVersion major = 1 {
908908
explod{
909909
anim: F60;
910910
postype: none;
@@ -913,7 +913,7 @@ if time = 0 {
913913
sprpriority: -10
914914
}
915915
}
916-
} else if time = 1 && mugenVersion < 1.0 {
916+
} else if time = 1 && mugenVersion major = 0 {
917917
gameMakeAnim{value: 60; pos: 0, 0; under: 1}
918918
}
919919
notHitBy{value: SCA; time: 1}
@@ -930,7 +930,7 @@ if time = 0 {
930930
}
931931
notHitBy{value: SCA; time: 15}
932932
} else if time < 4 {
933-
if mugenVersion >= 1.0 {
933+
if mugenVersion major = 1 {
934934
posFreeze{}
935935
}
936936
} else {
@@ -943,7 +943,7 @@ if time = 0 {
943943
x: const(velocity.air.gethit.airrecover.add.x);
944944
y: const(velocity.air.gethit.airrecover.add.y);
945945
}
946-
if mugenVersion < 1.0 {
946+
if mugenVersion major = 0 {
947947
if vel y > 0 {
948948
velMul{y: .5}
949949
}

data/training.zss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ ignoreHitPause if gameMode = "training" {
111111
}
112112
if $rcv {
113113
# WinMugen characters assert inputs because asserting commands directly may trigger their AI activation codes
114-
if mugenVersion < 1.0 {
114+
if mugenVersion major = 0 {
115115
if gametime % 2 {
116116
assertInput{flag: x; flag2: y; flag3: z}
117117
} else {

src/bytecode.go

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -402,8 +402,11 @@ const (
402402
OC_const_displayname
403403
OC_const_stagevar_info_author
404404
OC_const_stagevar_info_displayname
405-
OC_const_stagevar_info_ikemenversion
406-
OC_const_stagevar_info_mugenversion
405+
OC_const_stagevar_info_ikemenversion_major
406+
OC_const_stagevar_info_ikemenversion_minor
407+
OC_const_stagevar_info_ikemenversion_patch
408+
OC_const_stagevar_info_mugenversion_major
409+
OC_const_stagevar_info_mugenversion_minor
407410
OC_const_stagevar_info_name
408411
OC_const_stagevar_camera_boundleft
409412
OC_const_stagevar_camera_boundright
@@ -675,7 +678,9 @@ const (
675678
OC_ex_movehitvar_spark_x
676679
OC_ex_movehitvar_spark_y
677680
OC_ex_movehitvar_uniqhit
678-
OC_ex_ikemenversion
681+
OC_ex_ikemenversion_major
682+
OC_ex_ikemenversion_minor
683+
OC_ex_ikemenversion_patch
679684
OC_ex_incustomanim
680685
OC_ex_incustomstate
681686
OC_ex_isassertedchar
@@ -697,7 +702,8 @@ const (
697702
OC_ex_lerp
698703
OC_ex_memberno
699704
OC_ex_movecountered
700-
OC_ex_mugenversion
705+
OC_ex_mugenversion_major
706+
OC_ex_mugenversion_minor
701707
OC_ex_pausetime
702708
OC_ex_physics
703709
OC_ex_playerno
@@ -2746,10 +2752,16 @@ func (be BytecodeExp) run_const(c *Char, i *int, oc *Char) {
27462752
case OC_const_stagevar_info_displayname:
27472753
nameStr := be.ReadPoolStringAt(i)
27482754
sys.bcStack.PushB(sys.stage.displaynameLow == nameStr)
2749-
case OC_const_stagevar_info_ikemenversion:
2750-
sys.bcStack.PushF(sys.stage.ikemenverF)
2751-
case OC_const_stagevar_info_mugenversion:
2752-
sys.bcStack.PushF(sys.stage.mugenverF)
2755+
case OC_const_stagevar_info_ikemenversion_major:
2756+
sys.bcStack.PushI(int32(sys.stage.ikemenver[0]))
2757+
case OC_const_stagevar_info_ikemenversion_minor:
2758+
sys.bcStack.PushI(int32(sys.stage.ikemenver[1]))
2759+
case OC_const_stagevar_info_ikemenversion_patch:
2760+
sys.bcStack.PushI(int32(sys.stage.ikemenver[2]))
2761+
case OC_const_stagevar_info_mugenversion_major:
2762+
sys.bcStack.PushI(int32(sys.stage.mugenver[0]))
2763+
case OC_const_stagevar_info_mugenversion_minor:
2764+
sys.bcStack.PushI(int32(sys.stage.mugenver[1]))
27532765
case OC_const_stagevar_info_name:
27542766
nameStr := be.ReadPoolStringAt(i)
27552767
sys.bcStack.PushB(sys.stage.nameLow == nameStr)
@@ -3320,8 +3332,12 @@ func (be BytecodeExp) run_ex(c *Char, i *int, oc *Char) {
33203332
*sys.bcStack.Top() = c.helperIndexExist(*sys.bcStack.Top())
33213333
case OC_ex_hitoverridden:
33223334
sys.bcStack.PushB(c.hoverIdx >= 0)
3323-
case OC_ex_ikemenversion:
3324-
sys.bcStack.PushF(c.gi().ikemenverF)
3335+
case OC_ex_ikemenversion_major:
3336+
sys.bcStack.PushI(int32(c.gi().ikemenver[0]))
3337+
case OC_ex_ikemenversion_minor:
3338+
sys.bcStack.PushI(int32(c.gi().ikemenver[1]))
3339+
case OC_ex_ikemenversion_patch:
3340+
sys.bcStack.PushI(int32(c.gi().ikemenver[2]))
33253341
case OC_ex_incustomanim:
33263342
sys.bcStack.PushB(c.animPN != c.playerNo)
33273343
case OC_ex_incustomstate:
@@ -3438,10 +3454,10 @@ func (be BytecodeExp) run_ex(c *Char, i *int, oc *Char) {
34383454
sys.bcStack.PushI(int32(c.memberNo) + 1)
34393455
case OC_ex_movecountered:
34403456
sys.bcStack.PushI(c.moveCountered())
3441-
case OC_ex_mugenversion:
3442-
sys.bcStack.PushF(c.gi().mugenverF)
3443-
// Here the version is always checked directly in the character instead of the working state
3444-
// This is because in a custom state this trigger will be used to know the enemy's version rather than our own
3457+
case OC_ex_mugenversion_major:
3458+
sys.bcStack.PushI(int32(c.gi().mugenver[0]))
3459+
case OC_ex_mugenversion_minor:
3460+
sys.bcStack.PushI(int32(c.gi().mugenver[1]))
34453461
case OC_ex_pausetime:
34463462
sys.bcStack.PushI(c.pauseTimeTrigger())
34473463
case OC_ex_physics:

src/char.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1963,7 +1963,7 @@ func (e *Explod) update() {
19631963
}
19641964
}
19651965

1966-
oldVer := root.gi().mugenverF < 1.1
1966+
oldVer := root.gi().mugenver[0] != 1 || root.gi().mugenver[1] != 1
19671967

19681968
// Bind explod to parent
19691969
// In Mugen this only happens if the explod is not paused, hence "act"
@@ -3070,9 +3070,7 @@ type CharGlobalInfo struct {
30703070
palInfo map[int]PalInfo
30713071
palno int32
30723072
ikemenver [3]uint16
3073-
ikemenverF float32
30743073
mugenver [2]uint16
3075-
mugenverF float32
30763074
data CharData
30773075
velocity CharVelocity
30783076
movement CharMovement

src/common.go

Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -821,8 +821,7 @@ func sliceMove[T any](array []T, srcIndex int, dstIndex int) []T {
821821
return append(array[:dstIndex], append([]T{value}, array[dstIndex:]...)...)
822822
}
823823

824-
// We save an array for precise checking, and a float for triggers
825-
func ParseIkemenVersion(versionStr string) ([3]uint16, float32) {
824+
func ParseIkemenVersion(versionStr string) [3]uint16 {
826825
var ver [3]uint16
827826
parts := SplitAndTrim(versionStr, ".")
828827
for i, s := range parts {
@@ -835,28 +834,11 @@ func ParseIkemenVersion(versionStr string) ([3]uint16, float32) {
835834
break
836835
}
837836
}
838-
839-
// Convert into a float for triggers
840-
re := regexp.MustCompile(`[^0-9.]`)
841-
cleanStr := re.ReplaceAllString(versionStr, "")
842-
// Keep only the first decimal point
843-
strParts := strings.Split(cleanStr, ".")
844-
if len(strParts) > 1 {
845-
cleanStr = strParts[0] + "." + strings.Join(strParts[1:], "")
846-
}
847-
var verF float32
848-
if result, err := strconv.ParseFloat(cleanStr, 32); err == nil {
849-
verF = float32(result)
850-
}
851-
852-
return ver, verF
837+
return ver
853838
}
854839

855-
func ParseMugenVersion(versionStr string) ([2]uint16, float32) {
840+
func ParseMugenVersion(versionStr string) [2]uint16 {
856841
var ver [2]uint16
857-
var verF float32
858-
859-
// Parse the string into the array
860842
parts := SplitAndTrim(versionStr, ".")
861843
for i, s := range parts {
862844
if i >= len(ver) {
@@ -865,21 +847,14 @@ func ParseMugenVersion(versionStr string) ([2]uint16, float32) {
865847
if v, err := strconv.ParseUint(s, 10, 16); err == nil {
866848
ver[i] = uint16(v)
867849
} else {
868-
ver = [2]uint16{}
869-
break
850+
return [2]uint16{0, 5}
870851
}
871852
}
872-
873-
// Turn the array into the versions we know
874-
if ver[0] == 1 && ver[1] == 1 {
875-
verF = 1.1
876-
} else if ver[0] == 1 && ver[1] == 0 {
877-
verF = 1.0
878-
} else if ver[0] != 0 {
879-
verF = 0.5 // Arbitrary value
853+
// Normalize everything except Mugen 1.0 and 1.1 to WinMugen.
854+
if ver == [2]uint16{1, 0} || ver == [2]uint16{1, 1} {
855+
return ver
880856
}
881-
882-
return ver, verF
857+
return [2]uint16{0, 5}
883858
}
884859

885860
type Error string

src/compiler.go

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2839,7 +2839,6 @@ func (c *CharCompiler) expValue(out *BytecodeExp, in *string,
28392839
return nil
28402840
}
28412841
if err := eqne(hda); err != nil {
2842-
//if sys.cgi[c.playerNo].ikemenverF > 0 || !sys.ignoreMostErrors {
28432842
if c.zssMode || !sys.ignoreMostErrors {
28442843
return bvNone(), err
28452844
}
@@ -3778,10 +3777,16 @@ func (c *CharCompiler) expValue(out *BytecodeExp, in *string,
37783777
case "info.displayname":
37793778
opc = OC_const_stagevar_info_displayname
37803779
isStr = true
3781-
case "info.ikemenversion":
3782-
opc = OC_const_stagevar_info_ikemenversion
3783-
case "info.mugenversion":
3784-
opc = OC_const_stagevar_info_mugenversion
3780+
case "info.ikemenversion.major":
3781+
opc = OC_const_stagevar_info_ikemenversion_major
3782+
case "info.ikemenversion.minor":
3783+
opc = OC_const_stagevar_info_ikemenversion_minor
3784+
case "info.ikemenversion.patch":
3785+
opc = OC_const_stagevar_info_ikemenversion_patch
3786+
case "info.mugenversion.major":
3787+
opc = OC_const_stagevar_info_mugenversion_major
3788+
case "info.mugenversion.minor":
3789+
opc = OC_const_stagevar_info_mugenversion_minor
37853790
case "info.name":
37863791
opc = OC_const_stagevar_info_name
37873792
isStr = true
@@ -4652,7 +4657,17 @@ func (c *CharCompiler) expValue(out *BytecodeExp, in *string,
46524657
case "hitoverridden":
46534658
out.append(OC_ex_, OC_ex_hitoverridden)
46544659
case "ikemenversion":
4655-
out.append(OC_ex_, OC_ex_ikemenversion)
4660+
c.token = c.tokenizer(in)
4661+
switch c.token {
4662+
case "major":
4663+
out.append(OC_ex_, OC_ex_ikemenversion_major)
4664+
case "minor":
4665+
out.append(OC_ex_, OC_ex_ikemenversion_minor)
4666+
case "patch":
4667+
out.append(OC_ex_, OC_ex_ikemenversion_patch)
4668+
default:
4669+
return bvNone(), Error("Invalid IkemenVersion argument: " + c.token)
4670+
}
46564671
case "incustomanim":
46574672
out.append(OC_ex_, OC_ex_incustomanim)
46584673
case "incustomstate":
@@ -5009,7 +5024,15 @@ func (c *CharCompiler) expValue(out *BytecodeExp, in *string,
50095024
return bvNone(), err
50105025
}
50115026
case "mugenversion":
5012-
out.append(OC_ex_, OC_ex_mugenversion)
5027+
c.token = c.tokenizer(in)
5028+
switch c.token {
5029+
case "major":
5030+
out.append(OC_ex_, OC_ex_mugenversion_major)
5031+
case "minor":
5032+
out.append(OC_ex_, OC_ex_mugenversion_minor)
5033+
default:
5034+
return bvNone(), Error("Invalid MugenVersion argument: " + c.token)
5035+
}
50135036
case "numplayer":
50145037
out.append(OC_ex_, OC_ex_numplayer)
50155038
case "pausetime":
@@ -6308,7 +6331,6 @@ func (c *CharCompiler) paramSpace(is IniSection, sc *StateControllerBase, id byt
63086331
case "screen":
63096332
spc = Space_screen
63106333
default:
6311-
//if sys.cgi[c.playerNo].ikemenverF > 0 && !sys.ignoreMostErrors {
63126334
if c.zssMode && !sys.ignoreMostErrors {
63136335
return Error("Invalid space type: " + data)
63146336
} else {
@@ -8113,25 +8135,12 @@ func (c *CharCompiler) Compile(pn int, def string, constants map[string]float32)
81138135
// Read info section for the Mugen/Ikemen version of the character
81148136
if info {
81158137
info = false
8116-
var ok bool
8117-
var str string
8118-
// Clear then read MugenVersion
8119-
sys.cgi[pn].mugenver = [2]uint16{}
8120-
sys.cgi[pn].mugenverF = 0
8121-
if str, ok = is["mugenversion"]; ok {
8122-
sys.cgi[pn].mugenver, sys.cgi[pn].mugenverF = ParseMugenVersion(str)
8123-
}
8124-
// Clear then read IkemenVersion
8125-
sys.cgi[pn].ikemenver = [3]uint16{}
8126-
sys.cgi[pn].ikemenverF = 0
8127-
if str, ok = is["ikemenversion"]; ok {
8128-
sys.cgi[pn].ikemenver, sys.cgi[pn].ikemenverF = ParseIkemenVersion(str)
8129-
}
8138+
// Read MugenVersion and IkemenVersion
8139+
sys.cgi[pn].mugenver = ParseMugenVersion(is["mugenversion"])
8140+
sys.cgi[pn].ikemenver = ParseIkemenVersion(is["ikemenversion"])
81308141
// Ikemen characters adopt Mugen 1.1 version as a safeguard
81318142
if sys.cgi[pn].ikemenver[0] != 0 || sys.cgi[pn].ikemenver[1] != 0 {
8132-
sys.cgi[pn].mugenver[0] = 1
8133-
sys.cgi[pn].mugenver[1] = 1
8134-
sys.cgi[pn].mugenverF = 1.1
8143+
sys.cgi[pn].mugenver = [2]uint16{1, 1}
81358144
}
81368145
}
81378146
case "files":

src/fightscreen.go

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4595,9 +4595,7 @@ type FightScreen struct {
45954595
authorLow string
45964596
localcoord [2]int32
45974597
ikemenver [3]uint16
4598-
ikemenverF float32
45994598
mugenver [2]uint16
4600-
mugenverF float32
46014599
offsetX float32
46024600
offsetY float32
46034601
scale float32
@@ -4750,14 +4748,8 @@ func loadFightScreen(def string) (*FightScreen, error) {
47504748
fs.nameLow = strings.ToLower(fs.name)
47514749
fs.author, _, _ = is.getText("author")
47524750
fs.authorLow = strings.ToLower(fs.author)
4753-
// Read MugenVersion
4754-
if str, ok := is["mugenversion"]; ok {
4755-
fs.mugenver, fs.mugenverF = ParseMugenVersion(str)
4756-
}
4757-
// Read IkemenVersion
4758-
if str, ok := is["ikemenversion"]; ok {
4759-
fs.ikemenver, fs.ikemenverF = ParseIkemenVersion(str)
4760-
}
4751+
fs.mugenver = ParseMugenVersion(is["mugenversion"])
4752+
fs.ikemenver = ParseIkemenVersion(is["ikemenversion"])
47614753
var b bool
47624754
is.ReadBool("doubleres", &b)
47634755
if b {

0 commit comments

Comments
 (0)